- js 获取指定月份的天数
&活在当下&
javascript
在JavaScript中,你可以使用Date对象来获取一个月有多少天。以下是一个示例函数,它接受年份和月份作为参数,并返回该月份的天数:functiongetDaysInMonth(year,month){returnnewDate(year,month,0).getDate();}//示例用法:constyear=2023;constmonth=9;//获取9月份的天数console.log(g
- 【C#】字符串字节转16进制字节数组
加号3
c#
publicstaticbyte[]ConvertStringToBytes(Stringstr){ListlistBytes=newList();string[]hexValuesSplit=str.Trim().Split('');foreach(stringhexinhexValuesSplit){listBytes.Add(Convert.ToByte(hex,16));}returnli
- Java类初始化过程
自由与自然
java开发语言
packageorg.example;importjava.util.ArrayList;importjava.util.Scanner;/***Helloworld!*/publicclassApp{publicstaticvoidmain(String[]args)throwsInterruptedException{newChild();}}classParent{Stringname=in
- 12_JavaScript_实现日期
东东__net
javascript开发语言
目录newDate()常用方法getFullYear获取年getMonth获取月getDate获取日期getDay获取周几getHours获取小时getMinutes获取分钟getSeconds获取秒getTime获取到某个时间的毫秒数/时间戳每个获取的方法都有一个对应的设置方法获取时间差定时器作业js提供的内置的构造函数,专门用来获取时间的newDate()//在不传参数的情况下,默认返回当前时
- java堆栈区别和垃圾回收机制总结
super_sjh
面试题java数据结构与算法操作系统
1Java中堆和栈的区别、堆和栈都是内存中的一部分;2、栈的空间比较小,用来存放对象的引用3、堆的空间比较大,一般新建的对象都存放在堆里4、栈是一个先进后出的数据结构,通常保存方法中的参数和局部变量5、在java中所有的基本变量和引用变量都存储在栈中,栈中数据的生命周期是“{。。。}”之间6、堆是一个可动态申请分配内存空间(其记录空间的记录由操作系统控制)Java中所有new的对象都存在于堆中;7
- Qt内存管理机制,信号与槽,元对象系统---------华清远见
m0_63189507
qt开发语言
1.内存管理是指程序对计算机内存资源的分配和使用内存管理的目的是高效、快速分配内存资源并在适当的时候释放和回收内存资源。 常见的内存管理机制:垃圾回收机制(.Net/Java),手动(C/C++),对象树(QT) 简而言之: 所有继承自QOBJECT类的类,如果在new的时候指定了父亲,那么它的清理时在父亲被delete的时候delete,所以如果一个程序中,所有的QOBJECT类都指定了父
- HashSet底层原理
FAQEW
哈希算法算法
以下是HashSet的底层原理的详细解析,结合数据结构、哈希冲突处理、扩容机制及线程安全性等核心要点:一、底层实现:基于HashMap的包装类HashSet的底层通过HashMap实现,所有元素均存储为HashMap的键(Key),而值(Value)统一使用一个静态常量PRESENT(privatestaticfinalObjectPRESENT=newObject())占位。这种设计使得Hash
- Qt的内存管理机制
fengbingchun
QtQt
在Qt中,显式使用new创建的对象通常不需要显式调用delete来释放内存,这是因为Qt提供了一种基于对象树(ObjectTree)和父子关系(Parent-ChildRelationship)的内存管理机制。这种机制可以自动管理对象的生命周期,确保在适当的时候释放内存:在Qt中,每个QObject或其派生类(如QWidget、QPushButton)都可以有一个父对象(Parent)。当创建一个
- 红宝书第九讲:JavaScript对象创建与属性描述符详解
前端javascript
红宝书第九讲:JavaScript对象创建与属性描述符详解资料取自《JavaScript高级程序设计(第5版)》。查看总目录:红宝书学习大纲一、对象创建的三种方式JavaScript中创建对象主要有以下方式:1.对象字面量(直接创建)直接在代码中写键值对:letperson={name:"Alice",age:25};2.构造函数(new关键字)1通过构造函数创建对象实例:functionPers
- python嗅探dhcp服务,使用python scapy发送DHCP Discover
weixin_39987985
python嗅探dhcp服务
Iamnewtopythonandlearningsomenetworkprogramming,IwishtosendanDHCPPacketthroughmytapinterfacetomyDHCPserverandexpectingsomeresponsefromit.Itriedwithseveralpacketbuildingtechniquessuchastructsandctypesa
- Java云原生性能核爆指南:量子级穿透技术捅破天花板,让GC跪着回收!
墨夶
Java学习资料2java云原生开发语言
1.云原生GC优化:像“量子扫描仪”穿透JVM黑箱核心原理:JVM代际GC与云原生适配:G1GC/ZGC:云原生推荐使用低延迟GC算法堆内存分代策略:通过-XX:NewRatio调整新生代/老年代比例代码示例:JVM参数调优与GC监控//JVM启动参数(Dockerfile中设置)-Xms4G-Xmx4G\//固定堆大小避免OOMKiller-XX:+UseG1GC\//云原生推荐G1GC-XX:
- 使用DS18B20实现多点温度测量系统设计
老光私享
本文还有配套的精品资源,点击获取简介:DS18B20数字温度传感器采用单总线接口与微控制器通信,适用于多点温度测量。通过C语言和特定库(如OneWire和DallasTemperature)与DS18B20交互,实现温度读取和传感器管理。项目还包括1602LCD显示模块的控制,以显示实时温度数据,并利用Proteus软件进行电路设计验证和软件调试。整体项目涵盖了DS18B20应用、LCD显示操作、
- 【C++】通讯录管理系统+少量数据结构
XYN5114
C++c++学习方法数据结构笔记开发语言
#include#includeusingnamespacestd;#definemax1000structnewp{stringname;intsex;intage;stringnumber;stringadd;};structbooks{structnewpa[max];intsize;};staticvoidshowMenu(){coutsize==max){cout>name;abs->a
- 二叉树的遍历(代码实现+详细注释)
嘤国大力士
数据结构
文章目录层级遍历代码实现的每一步解释初始化循环遍历后序遍历代码实现的每一步解释初始化循环遍历后序遍历(递归实现)递归后序遍历的执行步骤代码实现的每一步解释递归过程示例递归的关键点层级遍历代码实现的每一步解释publicListlevelOrder(){Listlist=newLinkedListqueue1=newMyArrayQueuepostOrder(){Listlist=newLinked
- C++11&QT复习(二)
嘤国大力士
QT_C++c++qt数据库
文章目录Day4-4New与delete表达式(2025.03.20)1.`new`表达式的三个步骤2.`delete`表达式的两个步骤3.`new[]`与`delete[]`Day5类的定义和关键字再探(2025.03.24)1.C++关键字`const`、`static`、`extern`2.类的定义:Circle和Rect3.完整代码Day5-1运算符重载(2025.03.24)1.复数类`
- Linux系统增加用户用于深度学习
不要绝望总会慢慢变强
视觉大作战linux运维服务器深度学习人工智能
首先是为自己创建一个新用户名sudouseradd-mnewuser#增加一个newuser用户sudopasswdnewuser#为newuser用户设置密码sunewuser#切换到newuser用户如何切换用户界面的Bashsudochsh-s/bin/zshluoshiyong#配置zshsudochsh-s/bin/bashluoshiyong#配置bash如何使用Anaconda环境创
- JSON数据
liubo525
Java基础json
JSONjson数据格式:[{键:值}]–[]数组;{}键值对json是一种特殊形式的map;map中键值对中间用等号分开,json中键值对中间用冒号分开。MapstrMap=newJSONObject();JSON框架:json-lib,Jackson,FastJson,Gson等1.json-libjson-lib最开始的也是应用最广泛的json解析工具,json-lib不好的地方确实是依赖于
- c语言万年历查询程序代码,C语言实现万年历程序的代码分享
虾仁芝麻卷
c语言万年历查询程序代码
C语言实现万年历程序的代码分享发布时间:2020-04-2709:55:52来源:亿速云阅读:795作者:小新今天小编给大家分享的是C语言实现万年历程序的代码,相信很多人都不太了解,为了让大家更加了解C语言实现万年历程序的代码,所以给大家总结了以下内容,一起往下看吧。一定会有所收获的哦。c语言万年历程序代码C语言实现万年历程序的代码如下:#includeintyear(inty){if((y%4=
- Java面试黄金宝典7
ylfhpy
Java面试黄金宝典javapython开发语言面试面经职场和发展
1.多线程如何避免死锁定义死锁指的是两个或多个线程在执行期间,因争夺资源而出现互相等待的状况,致使这些线程无法继续执行。为避免死锁,可从以下方面着手:按顺序加锁:多个线程对多个锁加锁时,要保证加锁顺序一致。例如线程A和线程B都需获取锁L1和L2,那么都要按先获取L1再获取L2的顺序操作。示例代码如下:java//定义两个锁Objectlock1=newObject();Objectlock2=ne
- 红宝书第十四讲:详解JavaScript集合类型:Map、Set、WeakMap
前端javascript
红宝书第十四讲:详解JavaScript集合类型:Map、Set、WeakMap资料取自《JavaScript高级程序设计(第5版)》。查看总目录:红宝书学习大纲一、Map:钥匙任选的“保险箱”Map的键可以是任意数据类型(如对象、函数),不像普通Object只能用字符串/符号作为键。适合需要复杂键的场景1。示例:员工信息管理//创建Map(支持链式操作)constemployeeMap=newM
- C++类与对象——下
江烽渔火
c++开发语言1024程序员节
目录十六、构造函数(二)16.1构造函数体赋值16.2初始化列表16.3explicit关键字16.4匿名对象十七、static成员17.1概念17.2特性十八、友元18.1友元函数18.2友元类十九、内部类十六、构造函数(二)16.1构造函数体赋值例:classDate{public:Date(intyear,intmonth,intday){_year=year;_month=month;_d
- Spring框架的依赖注入(Dependency Injection, DI)
suren5111
java开发语言springservletspringcloudmybatisspringboot
依赖注入(DI)是Spring框架的核心特性之一,它通过将对象的依赖关系交由容器管理,从而实现模块之间的解耦。这种方式使得代码更加灵活、可测试和易于维护。什么是依赖注入?在传统的编程中,对象通常自己负责创建和管理它的依赖项。例如:publicclassUserService{privateUserRepositoryuserRepository=newJdbcUserRepository();//
- android跨应用启动Activity
Ashurol
工作小记androidjava
Android给我提供了在一个应用启动另外一个应用里的任意一个Activity的能力这里有多种方法,在学习的过程中考虑到后面很多没有系统学习,按照学习进度,先介绍目前最熟悉的两种方式。方法一:直接上代码,最直接的学习方式就是看代码,代码能看懂可以省略看解释注释的废话,看不懂再结合我后面的注释,相信能掌握,最后自己敲一遍跑一下,深刻印象美滋滋,废话有点多了!Intentintent=newInten
- 蓝桥杯第 十一天 国赛 2020 第 2题 扩散
光州好市民
蓝桥杯java算法
借鉴了大佬做法,之前以为是有半个边界的(就是横纵坐标不能小于0)后来才发现是完全无界publicstaticvoidmain(String[]args){Scannerscan=newScanner(System.in);intres=0;for(inti=2980;i<=9040;i++){for(intj=2980;j<=9040;j++){if((Math.abs(i-5000)+Math.
- JAVA泛型相关面试题
空说
javawindows开发语言
Java泛型的作用是什么?什么是泛型擦除?泛型允许开发者编写类型参数化的代码,我觉得它最直接的作用:能够将运行时异常转为编译时异常引入泛型之前,集合类通常都是Object类型,从集合中获取元素时,必须手动将Object显式转换为具体类型。//没有使用泛型的情况Listlist=newArrayList();list.add("Hello");list.add(123);//添加了一个Integer
- JAVA关于集合
Darling02zjh
Java学习java开发语言eclipse
引入集合为什么要有集合?对于数组,我们如果定义了它的长度,但是添加的元素已经最大了,可是还想添加的话,不是不能添加了吗?这个时候就要引入集合了,集合可以自动扩容,也就是向集合添加元素的时候,它的长度会自动扩容,这个也是集合的优势。特点:数组能存基本数据类型也能存引用数据类型。int[]arr1=newint[3];Useru1=newUser("小红",23);Useru2=newUser("小明
- 智能指针和常规指针在内存管理上有何不同?
指针
智能指针和常规指针在内存管理上有本质的不同,主要体现在资源的分配、释放以及所有权管理等方面。以下是它们在内存管理上的详细对比:一、资源分配常规指针手动分配:使用new或malloc手动分配内存。示例:cpp复制int*ptr=newint(10);//分配内存智能指针自动分配:智能指针通常通过工厂函数(如std::make_unique或std::make_shared)自动分配内存。示例:cpp
- 史上最全EffectiveJava总结(一)
后端java
创建和销毁对象1、静态工厂方法代替构造器优点静态工厂方法有名称,能确切地描述正被返回的对象。不必每次调用都创建一个新的对象。可以返回原返回类型的任何子类对象。创建参数化类型实例时更加简洁,比如调用构造HashMap时,使用Mapm=HashMap.newInstance(),与Mapm>=newHashMap>();缺点没有公共或受保护构造方法的类不能被子类化不像构造方法一样容易被找到2、遇到多个
- VUE2导出el-table数据为excel并且按字段分多个sheet
paradoxaaa_
笔记excelvue.jsjavascript
首先在根目录下建一个文件夹export用来存储export.jsimport*asXLSXfrom'xlsx'functionautoWidthFunc(ws,data){//设置每列的最大宽度constcolWidth=data.map(row=>row.map(val=>{varreg=newRegExp('[\\u4E00-\\u9FFF]+','g')//检测字符串是否包含汉字if(val
- java从键盘输入数组、字符串、字符串数组,获取二维数组的行列数
HH~LL
java学习记录
1、从键盘输入一维数组Scannerscanner=newScanner(System.in);intn=scanner.nextInt();//数量System.out.println("请输入"+n+"个孩子的饥饿度:");Scannersc=newScanner(System.in);int[]b=newint[n];for(inti=0;i
- 解读Servlet原理篇二---GenericServlet与HttpServlet
周凡杨
javaHttpServlet源理GenericService源码
在上一篇《解读Servlet原理篇一》中提到,要实现javax.servlet.Servlet接口(即写自己的Servlet应用),你可以写一个继承自javax.servlet.GenericServletr的generic Servlet ,也可以写一个继承自java.servlet.http.HttpServlet的HTTP Servlet(这就是为什么我们自定义的Servlet通常是exte
- MySQL性能优化
bijian1013
数据库mysql
性能优化是通过某些有效的方法来提高MySQL的运行速度,减少占用的磁盘空间。性能优化包含很多方面,例如优化查询速度,优化更新速度和优化MySQL服务器等。本文介绍方法的主要有:
a.优化查询
b.优化数据库结构
- ThreadPool定时重试
dai_lm
javaThreadPoolthreadtimertimertask
项目需要当某事件触发时,执行http请求任务,失败时需要有重试机制,并根据失败次数的增加,重试间隔也相应增加,任务可能并发。
由于是耗时任务,首先考虑的就是用线程来实现,并且为了节约资源,因而选择线程池。
为了解决不定间隔的重试,选择Timer和TimerTask来完成
package threadpool;
public class ThreadPoolTest {
- Oracle 查看数据库的连接情况
周凡杨
sqloracle 连接
首先要说的是,不同版本数据库提供的系统表会有不同,你可以根据数据字典查看该版本数据库所提供的表。
select * from dict where table_name like '%SESSION%';
就可以查出一些表,然后根据这些表就可以获得会话信息
select sid,serial#,status,username,schemaname,osuser,terminal,ma
- 类的继承
朱辉辉33
java
类的继承可以提高代码的重用行,减少冗余代码;还能提高代码的扩展性。Java继承的关键字是extends
格式:public class 类名(子类)extends 类名(父类){ }
子类可以继承到父类所有的属性和普通方法,但不能继承构造方法。且子类可以直接使用父类的public和
protected属性,但要使用private属性仍需通过调用。
子类的方法可以重写,但必须和父类的返回值类
- android 悬浮窗特效
肆无忌惮_
android
最近在开发项目的时候需要做一个悬浮层的动画,类似于支付宝掉钱动画。但是区别在于,需求是浮出一个窗口,之后边缩放边位移至屏幕右下角标签处。效果图如下:
一开始考虑用自定义View来做。后来发现开线程让其移动很卡,ListView+动画也没法精确定位到目标点。
后来想利用Dialog的dismiss动画来完成。
自定义一个Dialog后,在styl
- hadoop伪分布式搭建
林鹤霄
hadoop
要修改4个文件 1: vim hadoop-env.sh 第九行 2: vim core-site.xml <configuration> &n
- gdb调试命令
aigo
gdb
原文:http://blog.csdn.net/hanchaoman/article/details/5517362
一、GDB常用命令简介
r run 运行.程序还没有运行前使用 c cuntinue
- Socket编程的HelloWorld实例
alleni123
socket
public class Client
{
public static void main(String[] args)
{
Client c=new Client();
c.receiveMessage();
}
public void receiveMessage(){
Socket s=null;
BufferedRea
- 线程同步和异步
百合不是茶
线程同步异步
多线程和同步 : 如进程、线程同步,可理解为进程或线程A和B一块配合,A执行到一定程度时要依靠B的某个结果,于是停下来,示意B运行;B依言执行,再将结果给A;A再继续操作。 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回,同时其它线程也不能调用这个方法
多线程和异步:多线程可以做不同的事情,涉及到线程通知
&
- JSP中文乱码分析
bijian1013
javajsp中文乱码
在JSP的开发过程中,经常出现中文乱码的问题。
首先了解一下Java中文问题的由来:
Java的内核和class文件是基于unicode的,这使Java程序具有良好的跨平台性,但也带来了一些中文乱码问题的麻烦。原因主要有两方面,
- js实现页面跳转重定向的几种方式
bijian1013
JavaScript重定向
js实现页面跳转重定向有如下几种方式:
一.window.location.href
<script language="javascript"type="text/javascript">
window.location.href="http://www.baidu.c
- 【Struts2三】Struts2 Action转发类型
bit1129
struts2
在【Struts2一】 Struts Hello World http://bit1129.iteye.com/blog/2109365中配置了一个简单的Action,配置如下
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configurat
- 【HBase十一】Java API操作HBase
bit1129
hbase
Admin类的主要方法注释:
1. 创建表
/**
* Creates a new table. Synchronous operation.
*
* @param desc table descriptor for table
* @throws IllegalArgumentException if the table name is res
- nginx gzip
ronin47
nginx gzip
Nginx GZip 压缩
Nginx GZip 模块文档详见:http://wiki.nginx.org/HttpGzipModule
常用配置片段如下:
gzip on; gzip_comp_level 2; # 压缩比例,比例越大,压缩时间越长。默认是1 gzip_types text/css text/javascript; # 哪些文件可以被压缩 gzip_disable &q
- java-7.微软亚院之编程判断俩个链表是否相交 给出俩个单向链表的头指针,比如 h1 , h2 ,判断这俩个链表是否相交
bylijinnan
java
public class LinkListTest {
/**
* we deal with two main missions:
*
* A.
* 1.we create two joined-List(both have no loop)
* 2.whether list1 and list2 join
* 3.print the join
- Spring源码学习-JdbcTemplate batchUpdate批量操作
bylijinnan
javaspring
Spring JdbcTemplate的batch操作最后还是利用了JDBC提供的方法,Spring只是做了一下改造和封装
JDBC的batch操作:
String sql = "INSERT INTO CUSTOMER " +
"(CUST_ID, NAME, AGE) VALUES (?, ?, ?)";
- [JWFD开源工作流]大规模拓扑矩阵存储结构最新进展
comsci
工作流
生成和创建类已经完成,构造一个100万个元素的矩阵模型,存储空间只有11M大,请大家参考我在博客园上面的文档"构造下一代工作流存储结构的尝试",更加相信的设计和代码将陆续推出.........
竞争对手的能力也很强.......,我相信..你们一定能够先于我们推出大规模拓扑扫描和分析系统的....
- base64编码和url编码
cuityang
base64url
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.UnsupportedEncodingException;
- web应用集群Session保持
dalan_123
session
关于使用 memcached 或redis 存储 session ,以及使用 terracotta 服务器共享。建议使用 redis,不仅仅因为它可以将缓存的内容持久化,还因为它支持的单个对象比较大,而且数据类型丰富,不只是缓存 session,还可以做其他用途,一举几得啊。1、使用 filter 方法存储这种方法比较推荐,因为它的服务器使用范围比较多,不仅限于tomcat ,而且实现的原理比较简
- Yii 框架里数据库操作详解-[增加、查询、更新、删除的方法 'AR模式']
dcj3sjt126com
数据库
public function getMinLimit () { $sql = "..."; $result = yii::app()->db->createCo
- solr StatsComponent(聚合统计)
eksliang
solr聚合查询solr stats
StatsComponent
转载请出自出处:http://eksliang.iteye.com/blog/2169134
http://eksliang.iteye.com/ 一、概述
Solr可以利用StatsComponent 实现数据库的聚合统计查询,也就是min、max、avg、count、sum的功能
二、参数
- 百度一道面试题
greemranqq
位运算百度面试寻找奇数算法bitmap 算法
那天看朋友提了一个百度面试的题目:怎么找出{1,1,2,3,3,4,4,4,5,5,5,5} 找出出现次数为奇数的数字.
我这里复制的是原话,当然顺序是不一定的,很多拿到题目第一反应就是用map,当然可以解决,但是效率不高。
还有人觉得应该用算法xxx,我是没想到用啥算法好...!
还有觉得应该先排序...
还有觉
- Spring之在开发中使用SpringJDBC
ihuning
spring
在实际开发中使用SpringJDBC有两种方式:
1. 在Dao中添加属性JdbcTemplate并用Spring注入;
JdbcTemplate类被设计成为线程安全的,所以可以在IOC 容器中声明它的单个实例,并将这个实例注入到所有的 DAO 实例中。JdbcTemplate也利用了Java 1.5 的特定(自动装箱,泛型,可变长度
- JSON API 1.0 核心开发者自述 | 你所不知道的那些技术细节
justjavac
json
2013年5月,Yehuda Katz 完成了JSON API(英文,中文) 技术规范的初稿。事情就发生在 RailsConf 之后,在那次会议上他和 Steve Klabnik 就 JSON 雏形的技术细节相聊甚欢。在沟通单一 Rails 服务器库—— ActiveModel::Serializers 和单一 JavaScript 客户端库——&
- 网站项目建设流程概述
macroli
工作
一.概念
网站项目管理就是根据特定的规范、在预算范围内、按时完成的网站开发任务。
二.需求分析
项目立项
我们接到客户的业务咨询,经过双方不断的接洽和了解,并通过基本的可行性讨论够,初步达成制作协议,这时就需要将项目立项。较好的做法是成立一个专门的项目小组,小组成员包括:项目经理,网页设计,程序员,测试员,编辑/文档等必须人员。项目实行项目经理制。
客户的需求说明书
第一步是需
- AngularJs 三目运算 表达式判断
qiaolevip
每天进步一点点学习永无止境众观千象AngularJS
事件回顾:由于需要修改同一个模板,里面包含2个不同的内容,第一个里面使用的时间差和第二个里面名称不一样,其他过滤器,内容都大同小异。希望杜绝If这样比较傻的来判断if-show or not,继续追究其源码。
var b = "{{",
a = "}}";
this.startSymbol = function(a) {
- Spark算子:统计RDD分区中的元素及数量
superlxw1234
sparkspark算子Spark RDD分区元素
关键字:Spark算子、Spark RDD分区、Spark RDD分区元素数量
Spark RDD是被分区的,在生成RDD时候,一般可以指定分区的数量,如果不指定分区数量,当RDD从集合创建时候,则默认为该程序所分配到的资源的CPU核数,如果是从HDFS文件创建,默认为文件的Block数。
可以利用RDD的mapPartitionsWithInd
- Spring 3.2.x将于2016年12月31日停止支持
wiselyman
Spring 3
Spring 团队公布在2016年12月31日停止对Spring Framework 3.2.x(包含tomcat 6.x)的支持。在此之前spring团队将持续发布3.2.x的维护版本。
请大家及时准备及时升级到Spring
- fis纯前端解决方案fis-pure
zccst
JavaScript
作者:zccst
FIS通过插件扩展可以完美的支持模块化的前端开发方案,我们通过FIS的二次封装能力,封装了一个功能完备的纯前端模块化方案pure。
1,fis-pure的安装
$ fis install -g fis-pure
$ pure -v
0.1.4
2,下载demo到本地
git clone https://github.com/hefangshi/f