- mybaties中使用的设计模式
大丈夫在世当日食一鲲
设计模式
一、创建型模式工厂模式应用场景:SqlSessionFactory负责创建SqlSession(数据库会话),通过不同参数生成不同配置的实例。例如,DefaultSqlSessionFactory根据事务隔离级别、自动提交等参数构建会话对象。实现方式:通过抽象工厂接口定义创建逻辑,子类实现具体对象的实例化。单例模式应用场景:Configuration类作为全局配置中心,通过getInstance(
- Scala_Spark_RDD_parttwo
Gadaite
Spark基础scalasparkbigdata
只做记录不展示结果(部分结果放在了代码的注释中):packagespark_rddimportorg.apache.spark.sql.SparkSessionobjectrdd_fiveextendsApp{overridedefmain(args:Array[String]):Unit={/***key-valueRDD*pairRDD*2021-10-31*/valp="-----"*20v
- Scala 中生成一个RDD的方法
闯闯桑
scala开发语言大数据
在Scala中,生成RDD(弹性分布式数据集)的主要方法是通过SparkContext(或SparkSession)提供的API。以下是生成RDD的常见方法:1.从本地集合创建RDD使用parallelize方法将本地集合(如Seq、List、Array等)转换为RDD。valspark=SparkSession.builder.appName("RDDExample").getOrCreate(
- 第七课:Nodejs开发用户认证与JWT实践
deming_su
Nodejsnode.jsrestfulauthing
在现代Web开发中,用户认证是一个至关重要的环节。随着前后端分离架构的流行,传统的Session认证方式逐渐暴露出了一些局限性。而JWT(JSONWebToken)作为一种无状态的认证机制,凭借其简洁、安全和高效的特性,在现代Web应用中得到了广泛应用。本文将详细介绍Session与Token认证的对比、JWT的原理与生成/验证流程、使用bcrypt加密用户密码,并通过实战展示如何在Node.js
- linux 查 oracle进程,通过linux进程号(pid)查找Oracle的session中都执行那些sql
啟潍
linux查oracle进程
1、在以上图中使用系统进程PID查询对应的物理地址SELECTv.addr,v.*FROMv$processvWHEREv.SPID=‘’5256;2、通过该物理地址查找对应的SQL_IDSELECTt.SQL_ID,t.*FROMv$sessiontWHEREt.paddr=‘000000025C5EB9F8‘;3、通过SQL_ID来查找对应的SQL语句SELECTsql_textFROMv$s
- [场景题]如何实现购物车
八股文领域大手子
数据库oracle
1.基于Session的购物车(适合小型单体应用)核心思路:将购物车数据存储在用户会话(Session)中,适用于无需持久化的临时购物车。实现步骤:数据结构:使用Map或自定义CartItem对象(包含商品ID、数量、选中状态等)。操作逻辑:添加商品:检查Session中是否存在购物车,若不存在则初始化;存在则更新商品数量。删除商品:从Session的购物车Map中移除指定商品。合并购物车:用户登
- 慕慕手记项目日记 2025-3-7 项目基本环境搭建
Martinenbule
慕慕手记项目日志python开发语言
慕慕手记项目日记2025-3-7今日的日记主要是对SQLAIChemy框架应用的一些收尾,当然主要还是先学会使用。我的收藏文章功能开发@app.route("/")defmy_favorite():username=request.args.get("username")#先查询收藏表里的user_id再查询文章表,实现多表查询all_article=db_session.query(User,A
- 框架基本知识总结 Day16
小斌的Debug日记
框架学习日记springredis
登录注意点前台接受到loginUser对象,前台后续的操作都需要依靠这个对象后台可以存在redis数据库中,前台可以存在vuex和Sessionstorage中vuex在刷新页面后数据会消失,需要使用浏览器的Sessionstorage和Loacalstorage来配合存储,Sessionstorage不能持久化存储,关了页面就没了,Localstorage不手动清理会一直在拦截器注意点如果tok
- 登录校验会话技术
逆风局?
springboot
目录什么是会话?会话跟踪为什么要在同一次会话的多次请求共享数据?方式一:CookieHttpServletResponse方式二:Session什么是会话?在web开发中,会话指的是浏览器与服务器之间的一次连接,我们称为一次会话。会话跟踪服务器需要识别多次请求是否来自于同一浏览器,以便在同一次会话的多次请求间共享数据。为什么要在同一次会话的多次请求共享数据?登录的过程中有验证码,这个验证码是请求服
- 解决 Electron 中实现独立浏览器实例和隔离登录态的问题
AI天才研究院
计算架构师必知必会系列实用工具箱electronjavascript前端
要实现不同窗口的cookies互相独立,主要有以下几种方案:使用partition参数创建独立的session:letwin=newBrowserWindow({width:1600,height:1000,
- live555流媒体服务器解决客户端异常掉线后导致服务端通道阻塞的问题
EasyDarwin
live555live555流媒体服务器live555视频服务器live555多线程live555支持ipv6live555客户端
live555在Linux环境下会因为客户端异常掉线后,偶现导致部分通道不能再被访问的问题,我们描述一下这个问题修复的过程。本来是分析服务端CLOSE_WAIT的问题,在调试的过程中,却又发现了阻塞,认真分析了live555的事件调用流程后,发现只要从客户端收到数据,就会执行GenericMediaServer::ClientSession::noteLiveness(),在该函数中会删除上一次的
- k8s service type_RabbitMQ(k8s)-随手笔记
weixin_39873325
k8sservicetype
介绍基于Erlang开发消息队列(AMQP)在分布式系统中,有一些功能我们希望能够提高系统稳定性,比如说支付、订单功能,服务后移,长时间操作的功能,同步数据我们通过监听数据变化实现功能联动特点分布式各节点互相冗余元数据(erlang.cookie,队列、交换机、绑定元数据、vhost元数据)实现分布式集群(类似于session),通过转发达到集群任意节点进入都是集群主节点可以任意增加节点实现集群水
- RMAN备份bug-审计日志暴涨(select action from gv$session)
CodeBe@r
#Oracleoraclebug审计日志
问题概述/oracle文件系统使用率过大,经过检查是审计日志过大,/oracle目录197G审计日志占用70G,每6个小时产生大量审计日志,日志内容全是'selectactionfromgv$session',猜测可能跟备份有关,$>df-h/oracleFilesystemSizeUsedAvailUse%Mountedon/dev/mapper/fusioncube-oracle197G164
- python: DDD using postgeSQL and SQL Server
geovindu
Pythonpythonjava前端数据库postgresqlsqlservermssql
postgreSQL注意:#psycopg2驱动的连接字符串#engine=create_engine('postgresql://post:geovindu@localhost:5433/TechnologyGame')#Session=sessionmaker(bind=engine)#使用psycopg3驱动的连接字符串#engine=create_engine('postgresql+ps
- PHP之Cookie和Session
0白露
PHPphp开发语言
在你有别的编程语言的基础下,你想学习PHP,可能要了解的一些关于cookie和session的信息。Cookie参数信息setcookie(name,value,expire,path,domain);name:Cookie的名称。value:Cookie的值。expire:Cookie的过期时间,可以是一个Unix时间戳(例如:time0)+3600表示一小时后过期),或者是一个具体的日期时间字
- 浏览器发请求不携 cookie (加了跨域失败)
Wdc_12
状态模式javaspringboot
1.发送请求后端产生的唯一的sessionid,服务器会通过HTTP响应头中的Set-Cookie字段将SessionID发送到客户端。客户端(浏览器)收到响应后,会将SessionID存储为cookie。但由于跨域了不自动携带cookie2.加withCredentials所以在前端加上了:myAxios.defaults.withCredentials=true3.出现了跨域的错误,CORS请
- Win11安装VMware和Ubuntu并使用ssh访问部署模型
music&movie
工具osubuntusshlinux
VMware:https://zhuanlan.zhihu.com/p/14645133730CDSRepository-/var/www/public/stage/session-02/cds/vmw-desktop/wsUbuntu:Ubuntu22.04.5LTS(JammyJellyfish)ssh&sftp:DownloadPuTTY:latestrelease(0.83)ssh&sft
- Redis事务原理
超人在良家-阿启
redisredis数据库缓存
redis事务原理redis事务时基于SessionCallback实现的,因为要在一个连接里执行命令,那我们看看具体的实现,如下:redisTemplate.execute((RedisOperationsres)->{})对SessionCallback实现的是lambda表达式@ApiOperation(value="multi测试接口",notes="redis事务测试接口")@Reque
- 软件测试--bug的等级划分
坚挺吧
bug的等级划分
bug的严重级别:致命的软件缺陷(Blocker):(一级bug)1.造成系统或应用程序崩溃、死机、数据丢失、系统挂起。如代码错误,死循环,数据库发生死锁(一直锁在一个地方不解锁。)2.与数据库连接错误或数据通讯错误,未考虑异常操作,功能错误等。补充-----1.常规操作下因程序问题导致系统崩溃,迫使整个系统无法使用(其中非程序问题有:系统配置、数据结构变动、session超时、网络中断、人为变更
- Token设计指南:实现动态用户信息与权限管理
格子先生Lab
javatoken用户权限授权
在现代Web应用中,Token(令牌)是一种常见的身份验证和授权机制。与传统的Session机制相比,Token具有无状态、可扩展性强、适合分布式系统等优势。然而,如何设计一个既能保证安全性,又能随时获取最新用户信息和权限的Token系统,是一个值得深入探讨的问题。本文将详细介绍一种支持动态用户信息和权限管理的Token设计方案,并提供实现示例。目录Token简介Token设计目标Token设计方
- React进阶之前端业务Hooks库(三)
VillanelleS
react.js前端前端框架
前端业务Hooks库hooks方法localStorage和sessionStorager区别packages/hooks/src/useLocalStorageStatepackages/hooks/src/useSessionStorageStatepackages/hooks/src/createUseStorageState模块Hooks在不同场景下的应用Hooks陷阱前提例子useLat
- 阿里云k8s配置节点亲和性/Session会话保持
吾乃南华老仙
阿里云K8Sk8s阿里云session
1.路由页面:配置路由的注解;2.配置:注解名称描述可选值nginx.ingress.kubernetes.io/affinity关联的类型,将此设置为cookie以启用会话关联cookienginx.ingress.kubernetes.io/session-cookie-name
- wayland桌面录屏,屏幕录制,Linux屏幕录制
霍志杰
linux运维服务器
问题使用ffmpeg录屏后,录屏的内容是黑屏,查看后发现,自己用的是gnome桌面,但是是wayland,并不是传统的X11,这就导致了不兼容问题echo$XDG_CURRENT_DESKTOP可以通过上面这个命令查看桌面环境可以返回GNOMEecho$XDG_SESSION_TYPE可以通过上面这个命令查看类型看看是X11还是wayland解决方式一直接切换到X11编辑文件:/etc/gdm3/
- python token 访问控制_Python接口自动化之Token详解及应用
weixin_39858132
pythontoken访问控制
介绍了cookie、session原理及在自动化过程中如何利用cookie、session保持会话状态。以下介绍Token原理及在自动化中的应用。一、Token基本概念及原理1、Token作用为了验证用户登录情况以及减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。2、什么是TokenToken是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token
- vue使用本地缓存的深入探究
码上前端
vue.jsvue.js本地缓存前端框架javascript前端缓存
前言:家人们,大家好!今天分享一篇文章给大家!要是文章对你有帮助,激发了你的灵感,求个收藏+关注啦~后续还有超多惊喜,别错过!目录引言一、localStorage和sessionStorage基础(一)基本概念(二)基本使用方法(三)优缺点分析优点缺点二、使用vuex-persistedstate进行状态持久化(一)vuex-persistedstate简介(二)安装和配置(三)高级配置(四)优缺
- Postman接口测试的高频面试题
lucky rainbow2024
测试面试
接口测试面试题及参考答案,轻松拿捏面试官-CSDN博客客户端与服务器端交互原理(HTTP数据请求与HTTP响应)_客户端与服务端数据交互-CSDN博客Cookie和Session的区别(面试必备)_cookie和session的作用和区别-CSDN博客
- 小白基于postman测试百度翻译接口
恒旭123
postman
准备postman这个网上信息都有,请自行参考准备百度翻译接口参数百度翻译接口信息可以参考:https://zhuanlan.zhihu.com/p/81945858?utm_source=wechat_session&utm_id=0个人验证实例1)阅读API技术文档2)APPID的参数。要成为注册开发者,才能拥有。注册开发者,获取APPID(百度管理控制台中)参考:使用您的百度账号登录百度翻译
- linux ora-12570,ODP.net managed driver throws ORA-12570: Network Session: Unexpected packet read err...
不吃香菜的鱼
linuxora-12570
InoneofourproductsweretrievedatafromtheOracledatabaseusingstoredproceduresusingtheODP.netmanageddriver.Everynowandthen(roughlyevery1000queries)wegetthefollowingexception:(ORA-12570:NetworkSession:Unex
- 分布式session和本地session区别
搁浅里妥协
分布式
分布式会话(DistributedSession)和本地会话(LocalSession)是两种会话管理方式,它们在存储位置、可扩展性和数据共享方面存在区别。存储位置:本地会话:存储在服务器本地内存中。每个服务器都维护自己的会话信息。分布式会话:会话信息存储在共享的存储介质中,例如Redis、数据库等。多个服务器可以共享和访问同一份会话数据。可扩展性:本地会话:受限于单个服务器的内存大小和处理能力,
- 分布式Session
长勺
Java基础分布式
我用「餐厅点餐+代码实战」帮你彻底搞懂分布式Session,看完不仅能应对面试,还能直接应用到实际开发。先记住这个核心矛盾:多服务员如何记住同一顾客的喜好?一、从生活场景理解Session的本质传统单机场景(小餐馆)服务员:Tom(唯一服务员)工作流程:顾客首次点餐→Tom给纸质会员卡(SessionID)Tom把顾客口味记录在自己的笔记本(服务器内存)顾客下次出示会员卡→Tom查笔记本提供服务分
- 解读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