自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(67)
  • 收藏
  • 关注

原创 用go实现简单的redis客户端

文章目录功能RESP协议连接层tcp连接封装读写操作协议层应用层SET方法GET方法写单测进行测试功能redis客户端的职责非常简单,就是将命令按照RESP协议序列化后发给redis-server,再将返回数据按照RESP协议解析RESP协议主要规定就以下五条For Simple Strings the first byte of the reply is “+”For Errors the first byte of the reply is “-”For Integers the fir

2020-09-11 14:47:07 393

原创 go time包使用总结

文章目录初始化Time对象当前时间固定时间从字符串解析Time对象的方法转字符串日期比较日期加减转时间戳获取日期信息时区转换初始化Time对象当前时间func Now() Time//返回当前时间固定时间func Date(year int, month Month, day, hour, min, sec, nsec int, loc *Location) Time//用年、月、日、时、分、秒、纳秒、地区构造时间对象从字符串解析func Parse(layout, value str

2020-09-08 15:55:33 290

原创 golang反射还原结构体中的字段

假设有这样一个结构体type S struct { a int64 B []string c float64}a := S{1, []string{"abc", "cba"}, 3.14}用反射可以轻松拿到每个字段的值reflect.ValueOf(a).FieldByName("a")reflect.ValueOf(a).FieldByName("B")reflect.ValueOf(a).FieldByName("c")但这样返回的类型是reflect.Value如果想还原自

2020-07-30 18:17:24 418

原创 golang log包学习笔记

文章目录Logger设置Logger参数SetOutputSetPrefixSetFlags打印日志打印日志内容打印日志内容后退出程序(严重错误)打印日志内容后宕机Logger  打印日志等操作的接收者是 *Loggertype Logger struct { mu sync.Mutex // ensures atomic writes; protects the following fields prefix string // prefix on each line t

2020-07-23 17:23:49 304

原创 用Python读hdfs集群parquet格式文件

使用模块Python2.7subprocessio.BytesIOparquet-python 1.3.1其中parquet包不是python内置,需要用pip 安装整体流程使用subprocess读hdfs中的parquet文件将字节流写入io.BytesIO对象中(要做这一步是因为parquet包目前只支持文件对象解析)使用parquet包的接口解析上一步得到的io对象代码import parquetimport subprocessfrom

2020-07-12 17:14:50 682

原创 利用sarama包使用kafka

代码仓库官方文档sarama提供了纯Go编写的kafka客户端,最新发行版本支持Go和Kafka的最新两个版本生产者sarama提供异步生产者和同步生产者异步生产者用管道接受信息,并且在背后异步地生产消息。异步生产者会尽可能的提高效率,是sarama推荐的选择同步生产者提供一个阻塞的方法,直到消息被确认成功生产。显然效率上肯定不如异步生产者,且在某些配置中,确认的消息仍会丢失type AsyncProducertype AsyncProducer interface { // 关闭

2020-07-01 20:31:47 1829

原创 用curve_fit拟合幂函数与excel拟合误差问题

  使用curve_fit可以对自定义的函数进行拟合  拟合幂函数时,具体代码为from scipy.optimize import curve_fitdef pow_func(_x, _a, _b): return _a * pow(_x, _b)x_axis = [...]y_axis = [...]popt, _ = curve_fit(linear_func, x_axis, y_axis)a, b = popt  但是同样的数据,使用excel中的幂函数拟合后,两边的

2020-06-07 19:57:08 1533 1

原创 用flask搭建Restful后端,与前端完成通信

文章目录环境依赖准备工作编写API拿数据请求头中的数据url中的变量url中的参数post表单数据post json数据与前端通信环境依赖pythonflaskflask_restplusrestful风格插件flask_cors进行跨域回复准备工作app = Flask(__name__)# 24位随机数加密,用于cookies,可以用os.urandom(24)生成app.config['SECRET_KEY'] = b'\xb4\xc58\xcb\xed\xa

2020-05-24 00:00:23 842

原创 IDL学习笔记

文章目录基本类型容器类型自定义类型常量字段函数include和命名空间举例  IDL(Interface Definition Language)——接口描述语言,是thrift用来定义通用接口的语言,定义好接口后,利用不同语言的工具转换为各自语言的定义,达到跨语言、平台的功能  IDL只用来定义接口,所以语法只与各种类型、错误相关,不含流程控制等内容  IDL的文法类似C语言  最新版本语法在http://thrift.apache.org/docs/idl基本类型BaseType ::=

2020-05-19 14:03:56 469

原创 Go语言学习笔记——反射

文章目录获取类型信息获取种类定义获取指针指向对象类型获取获得结构体的字段信息获取值利用类型信息创建实例反射调用函数  反射是指在程序运行期间对程序本身进行访问和修改的能力  举例来说,一个函数接收了interface{}类型的变量,传入函数之前,这个变量肯定是在程序某处定义过的,虽然我们看这个函数无法得知传进来的具体是什么,但是程序自身在运行时,肯定知道这个变量的具体信息,而反射就是获取这些信息的操作  Go使用reflect包访问程序的反射信息获取类型信息func foo(x interface

2020-05-16 00:58:47 211

原创 Go语言学习笔记——包

文章目录包访问权限导入包使用自定义包名导入匿名包包内的init()方法  Go语言的源码复用建立在包基础之上  Go程序入口函数main()必须在main包中包访问权限  Go中没有public、private之类的关键字  在包内定义的类型、函数、接口等,如果首字母大写,就是公共的,在其他包中可以访问;反正就只能在当前包中访问导入包import "fmt"import "reflect"或者import ( "fmt" "reflect")  导入包实际导入的是路径

2020-05-15 20:59:23 169

原创 Go语言学习笔记——并发

文章目录使用goroutine使用channel创建channel使用channel使用select监听多个通道同步竞态检测原子访问互斥锁读写互斥锁等待组  并发是操作系统的主要特点之一,通过调度任务来获取CPU时间片实现并发  Go在语言层面实现了并发,有一个任务调度器用于调度任务,goroutine就是其中用来调度的任务  在Go中使用go关键字来启动一个goroutine,goroutine间用channel通信使用goroutine  在调用方法/函数前,加上go关键字,即可启动一个gor

2020-05-15 20:53:42 184

原创 Go语言学习笔记——函数

文章目录普通函数声明带变量名的返回值函数变量匿名函数定义时调用将匿名函数赋值给函数变量作为回调函数可变参数函数defer语句方法  Go支持普通函数、匿名函数和闭包 &ems;Go中的函数是一等公民,可以像其他类型一样使用,赋值、传递参数、接收方法等普通函数声明func 函数名(参数列表) (返回参数列表){ 函数体}  一个包内,函数名称不能重名func foo(a, b string) (string, bool) { return a + b, true}  同

2020-05-15 11:51:53 236

原创 Go语言学习笔记——接口

文章目录声明接口实现接口接口嵌套接口和类型转换接口断言空接口类型interface{}空接口与其他类型转换空接口比较类型分支参考资料  接口是一种提供给调用方和实现方遵守的协议约定,大家都按照统一的命名、参数表、返回值定义/使用实现了该接口的方法  Go的接口设计是非侵入式的,接口编写者无须知道接口被哪些类型实现;接口实现者只需知道实现的接口是什么样子,无须指明实现了哪一个接口。这种隐式的实现,解除了实现类与接口间的强耦合关系声明接口type Invoke interface { Call(i

2020-05-15 11:49:46 245

原创 Go语言学习笔记——函数闭包

定义在计算机科学中,闭包(英语:Closure),又称词法闭包(Lexical Closure)或函数闭包(function closures),是在支持头等函数的编程语言中实现词法绑定的一种技术。闭包在实现上是一个结构体,它存储了一个函数(通常是其入口地址)和一个关联的环境(相当于一个符号查找表)。环境里是若干对符号和值的对应关系,它既要包括约束变量(该函数内部绑定的符号),也要包括自由变量(在函数外部定义但在函数内被引用),有些函数也可能没有自由变量。闭包跟函数最大的不同在于,当捕捉闭包的时候,它的

2020-05-14 16:18:12 201

原创 Go语言学习笔记——流程控制

文章目录分支if语句特殊写法switch语句循环for循环for range循环遍历切片、数组、字符串遍历map遍历通道跳转break labelcontinue labelgoto label参考资料分支if语句  一般用法与C语言类似,但是判断表达式不用加括号var a intif a < 4 { a++} else if a == 4 { a--} else { a *= 2}特殊写法  在判断条件表达式前,可以加额外的语句if b := a * 2;

2020-05-14 12:02:41 256

原创 Go语言学习笔记——容器

文章目录数组声明数组初始化数组遍历数组切片对已有数组切片声明切片复制切片添加和删除元素添加元素删除元素映射使用映射遍历映射删除映射表中的键值对清空映射线程安全的映射使用sync.Map读写删除操作遍历sync.Map列表初始化列表在列表中插入元素,删除元素遍历列表参考资料数组  长度固定的连续内存区域声明数组var <标识符> [size]T  其中,size必须是一个在编译期能确定的值,不能在运行期间才能计算确定,如果为空则是一个切片var a [2]intvar b [4]fl

2020-05-14 09:27:33 244

原创 Go语言学习笔记——字符串

文章目录声明字符串计算字符串长度遍历字符串遍历字符串每个字节遍历每个Unicode字符字符串子串的操作搜索子串获取子串修改字符串连接字符串格式化参考资料声明字符串  字符串是Go中的基本类型,声明时与其他基本类型一致var s1 string = "hello"var s2 = "world"s3 := "abc"计算字符串长度  使用Go内置函数len()计算长度,返回值为存储字符串所用的字节数var s1 string = "hello"var s2 = "world"s3 :=

2020-05-14 09:26:17 169

原创 Go语言学习笔记——变量

文章目录变量声明变量标准格式一次声明多个变量初始化变量默认值声明时初始化标准格式省略类型短变量声明多个变量赋值匿名变量常量常量声明枚举类型别名与类型定义类型别名类型定义为非本地类型定义方法在结构体中使用别名参考资料变量声明变量标准格式  var 变量名 变量类型//整型变量var a int//64位浮点数组变量var b []float64//参数为空,返回值是bool的函数变量var c func() bool//结构体变量var e struct { x int}一

2020-05-14 09:25:05 214

原创 Flask单元测试Session数据修改

  在测试某些模块时,需要session数据,而测试时启动的客户端与用浏览器访问不同,不会保存Cookies,需要其他方法去模拟session访问Session  利用 with 语句创建一个上下文环境访问session@patch('model.User.getPassWord')def test_UserLogin200(self, mock_getpwd): mock_get...

2020-04-27 11:31:38 379

原创 Flask单元测试Mock简单使用

  在单元测试中,需要测试一个单独模块的功能运行情况,这使得我们不希望它被其它模块的功能所影响  举例来说,想测试一个get请求返回的数据是否正确,但是在处理get请求的方法中,数据来源于其他模块函数。在测试中,我们希望测试get请求时,只测试处理该请求的方法,而不关心获取数据的方法,这时就需要用mock来模拟获得数据的方法  这里只介绍最简单的一种模拟,即模拟一个方法要测试的函数  具体...

2020-04-27 11:06:45 503

原创 Flask单元测试post请求发送数据

  在用unittest库对flaks app进行单元测试时,有时需要模拟post请求发送数据  使用post请求发送的数据,一般有两种格式,一种是表单数据,一种是json数据,两种数据在flask的后端获取的操作也不同,对应的在测试时,模拟方式也不同表单数据  后端拿数据request.form[key]request.form.get(key)  测试时构造class Rest...

2020-04-26 22:24:42 1403

原创 常用排序算法总结

文章目录冒泡排序选择排序插入排序快速排序归并排序堆排序参考资料冒泡排序  原理:扫描整个数组,每次比较相邻的两个数,逆序交换,第iii次扫描就可以找到第iii大的数,n−1n-1n−1次扫描后,就可以完成排序时间复杂度:O(n2n^2n2)空间复杂度:O(1)稳定性:稳定void bubble(vector<int> &vi){ for(int i = v...

2020-04-13 21:55:45 115

原创 Java多线程——生产者消费者模型

文章目录生产者消费者产品测试代码测试结果​ 多线程同步的经典模型,当初上操作系统时,老师拿这个模型讲解信号量同步机制,可惜C的信号量太难,实验课也是拿助教不知道哪里找的代码跑了跑,一直没有自己实现生产者消费者模型​ 如今正在学习java的多线程,准备用经典的生产者消费者实践一下生产者package example;import java.util.Random;public c...

2020-04-07 01:59:59 215

原创 java学习笔记——多线程基础

创建新线程继承Thread类重写run方法package example;public class Work extends Thread { @Override public void run() { super.run(); System.out.println("new thread start"); }}  也可以直接...

2020-04-06 19:42:55 159

原创 二分查找

文章目录查找大于等于 val 的第一个元素索引查找大于 val 的第一个元素索引总结查找大于等于 val 的第一个元素索引查找大于 val 的第一个元素索引  在序列中使用二分查找,可以在O(logn) 的时间内查找到需要的元素索引,二分查找的原理很容易理解,但是在代码中有很多细节需要注意,在决定认真思考总结下二分查找之前,我一直随缘判断,直到返回正确结果一般分为两种情况查找大于等于 va...

2020-04-05 22:55:39 155

原创 java学习笔记——动态代理

理解  为什么要用动态代理?动态代理有什么用?  考虑这样一个问题,有一个接口,有多个类实现了这个接口的方法,此时想要在这个接口的某一方法执行前后,额外执行一些操作,如何更改代码?  从静态的代码角度考虑,自然是去修改每个类的方法,加入这些额外的操作。但是问题也显而易见,那就是每次修改都要深入到每个类,非常麻烦。  动态代理就是为了解决这个问题。从字面上理解,动态:即执行方法的对象是在代码...

2020-04-04 19:03:28 170

原创 java学习笔记——反射

文章目录动态加载机制获取 `Class` 类的实例通过类的class静态变量获取通过类的实例获取从完整类名获取访问、修改字段内容public Field getField(String name) (Class.java: 1991)(jdk13)public Field[] getFields()(Class.java: 1810)(jdk13)public Field getDeclaredF...

2020-04-04 12:36:05 213 1

原创 AOP和spring下的两种简单用法

概念解释  AOP (Aspect Orentied Programming , 面向方面编程)  面向方面的编程需要把程序逻辑分解成不同的部分称为所谓的关注点。跨一个应用程序的多个点的功能被称为横切关注点,这些横切关注点在概念上独立于应用程序的业务逻辑  程序在运行时,动态的将代码切入到类的指定方法或者说指定位置上  举例来说,我有个程序,里面有三个应用,访问前都需要登陆,借助于AOP,...

2020-03-26 12:20:24 123

原创 IoC和Spring的三种注入方式

文章目录名词解释依赖倒置原则(DIP):一种软件软件架构设计原则控制反转(IoC):一种反转流、依赖和接口的方式(DIP的具体实现方式)依赖注入(DI):IoC的一种实现方式,用来反转依赖(IoC的具体实现方式)**IoC容器:**依赖注入的**框架**,用来映射依赖,管理对象创建和生存周期(DI框架)具体实现构造函数注入Media接口和实现类MediaPlayer接口和实现类User接口和实现类...

2020-03-24 23:13:17 187

原创 Python学习——正则表达式

式文章目录正则语法re模块常用函数和方法compile(pattern, flags=0)match(pattern, string, flags=0)fullmatch(pattern, string, flags=0)search(pattern, string, flags=0)findall(pattern, string[, flags])finditer(*pattern*, *st...

2020-03-13 22:05:04 113

原创 codeforces 1312 D (组合数学)

题意  有 1 m1~ m1 m 个数,组成一个含有nnn个元素的列表,其中 n−1n-1n−1个数必须互不相同,剩下一个数出现两次,最大的数必须在列表中间,在它前面的部分严格升序排列,在它后面的部分严格降序排列,求一共有多少个不同的满足要求的列表思路  将几个条件分开来考虑在 m 个数中选择 n−1n-1n−1个数,一共有 Cm n−1C_m^{\,n-1}Cmn−...

2020-03-13 16:20:57 303

原创 HDU 3085 Nightmare Ⅱ(双向BFS)

题意  A、B在迷宫中,A每回合能走3步,B每回合能走1步,迷宫中还有2个鬼,每回合最先活动,会向两步内的格子分裂,A、B不能碰鬼,求他们最快见面的回合数思路​ 题目中描述A能走3步,实际上意思是A每回合能移动[0,3]步,B也同理,所以只要考虑A、B尽可能最远到达的区域,在当前回合这些区域内都是可达的  将整个题目可以考虑为一个像染色的模型,A、B、鬼分别以每回合3、1、2的速度染色,...

2020-03-08 17:26:56 245

原创 HDU 1560 DNA Secence(IDA*)

题意  输入一些只包含A、C、G、T的字符串,找出一条最短的字符串,使得输入都是该字符串的子序列(不用连续),输出找到的字符串的长度思路  考虑类似trie树这样的结构,从根开始,所有字符串沿着一条路下来能按顺序匹配上自身所有字符,该条路就是最终要找的字符串  所以从跟开始向下搜索,没个节点处也要保存到该节点时各个字符串的状态。  一开始尝试直接用BFS,但是随着层数增多,队列内的节点也...

2020-03-07 22:04:15 216

原创 HDU 3533 Escape(BFS)

题意​ ​ A从棋盘(0,0)前往(m,n)每回合消耗一点能量,地图上有一些碉堡,碉堡周期性发射子弹,子弹沿直线运动,每回合在棋盘上一点,碉堡可以拦住子弹的运动,子弹互相不影响,A在移动过程中不能和碉堡子弹处于同一点,输出最短到终点时间,无法到达输出“Bad luck!”思路​ ​ 棋盘上最短路,考虑用BFS或者A*,这题BFS足够​ ​ 难点在于每走一到一点,要计算在当前时刻该点有无子弹...

2020-02-13 18:57:09 264

原创 HDU 2181 哈密顿绕行世界问题(DFS)

题意  由20个顶点的图,输入每个点联通的点,输入出发点后,按字典序输出所有通过所有点回到出发点的路线思路  将每个顶点联通的点从小到大存储后DFS找出所有路线代码/* HDU 2181 dfs*/#include<iostream>#include<vector>#include<algorithm>#include<cstrin...

2020-02-09 17:05:42 179

原创 HDU 3567 Eight II(BFS打表)

题目大意  还是八数码问题,输入起始结束状态,输出最小字典序的操作顺序思路  还是用BFS打表,为了使操作最短,处理出X在不同位置不断操作能达到的各种状态,至于为什么根据X的不同处理,除了X外,其他数字可以随意替换,如:1 2 3      3 4 54 5 6   =>  7 8 X7 8 X      6 2 1可以替换成a b c      c d ed e f   ...

2020-02-08 19:37:56 218 1

原创 HDU 1043 Eight(康托展开+BFS)

题目大意​ 八数码问题,输入9个字符代表一个3*3的棋盘,对于能还原的输入,输出一段包含 u、d、l、r 操作的操作序列,不能还原的输入输出“unsolvable”思路​ 输入有多组,所以考虑先预处理出所有情况的操作序列,再根据输入进行输出​ 因为要遍历所有情况,所以选择 BFS 即可,从结果出发,每操作一次,储存一次该种情况对应的操作序列​ 另外对于棋盘的所有情况,与全排列类似...

2020-02-05 15:03:27 156

原创 康托展开和逆康托展开

定义​ 康托展开是一个全排列到一个自然数的双射,常用于构建哈希表时的空间压缩。 康托展开的实质是计算当前排列在所有由小到大全排列中的顺序,因此是可逆的。算法​ 其中 ai 表示原数的第 i 位数字后面比自身小的数字的个数例如​ 51423 = 4 * 4! + 0 * 3! + 2 * 2! + 0 * 1! + 0 * 0! = 100​ 每个 ai 的得出依据是:5...

2020-02-04 21:54:27 220

原创 Python学习——lambda表达式

  lambda表达式,用来创建匿名函数lambda <参数> : <返回值>lambda expression1 : expression2# 等价于def func(expression1): return expression2  还可以用来创建嵌套函数def func(x): return lambda a:a+xf = func(5)# ...

2020-01-30 19:28:06 728

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除