- 博客(73)
- 收藏
- 关注
原创 Python3异步编程:yield与yield from
yieldyield把函数变为generatorgenerator中如果执行return语句也会向常规函数一样终止yield会执行完下一条语句后,挂起这个方法,保存该语句结果直到外部调用next或者send才继续方法的执行外部调用的第一次send的参数必须是None,代表启动函数,可以得到yield语句保存的返回值但是不会继续往下第二次send开始,会唤醒当前yield语句,send传递的参数,会作为当前yield语句的返回值(不再执行一次yield语句),继续往yield后面执行然后在下一
2021-09-30 00:36:40
412
原创 Redis_ZSet
Redis_ZSetZSet简介快表节点创建快表插入节点删除节点查询节点ZSet简介ZSet是redis的有序集合实现,包括一个为了字典(按照key直接取值)和一个跳表(按照排名取)typedef struct zset { dict *dict; zskiplist *zsl;} zset;typedef struct zskiplist { struct zskiplistNode *header, *tail; unsigned long length;
2021-09-26 23:32:02
142
原创 Redis源码阅读笔记
Redis源码阅读笔记zipmapziplistadlistdictscan算法zipmapredis旧版小hash使用的数据结构,紧密数组存储结构用1字节存储总节点数(如果1字节满了,代表需要遍历到底才知道有多少节点)每个节点存储自己占用的内存空间,修改删除后,标记为闲置空间,闲置空间不压缩不回收,留用节点扩展或者插入节点这也代表插入没有足够闲置是要O(n)移动后续内存数据也是占用zipmap内存,所以查找是O(n)(利用len做快表跳跃)<zmlen><len>"f
2021-09-15 22:50:04
172
原创 Linux常用文本处理指令
grep最常用正则查找指令,比如结合tailtail 文件名 | grep -E "正则表达式" > "结果输出文件名"sedsed适合用于对大文件进行正则替换输出其处理是实时显示(从文件读取一行匹配一行,结果输出)不会修改原文件(添加g标记为全部替换,不添加为每行替换首个匹配项)sed 's/正则表达式/替换文本/g'如果需要保持输出可以sed 's/正则表达式/替换文本/g' > "输出文件名"findfind指令用于通过正则表达式检索某个文件名所在的完整路径#
2021-02-18 22:21:24
139
原创 MVCC与MySQL各大引擎介绍
MVCC与MySQL各大引擎介绍MVCCmyisam引擎Innodbarchive引擎csv引擎memory引擎NDB引擎MVCC多版本并发控制是mysql的innodb采用的并发控制方案,在可重复读下默认使用该并发控制方案原理:MySQL全局维护一个递增版本号表结构有两个隐藏的列,分别代表 初始化时版本 和 过期时版本新增一条记录时——物理写入一条新数据,设置初始化版本为当前Mysql版本号,过期时版本为空更新一条记录时——将旧的物理数据行的过期时版本设置为当前Mysql版本号,不改动旧物
2020-12-06 19:39:19
272
原创 Go开源游戏服务器框架——Pitaya
简介Pitaya是一款易于使用,快速且轻量级的开源分布式游戏服务器框架,使用golang编写。源码分析PlayerConnAcceptorAcceptorwrapperAgentHandleService
2020-09-23 23:54:47
11659
2
原创 fabric2.2链码部署
ubuntu环境安装CURLsudo apt install curl安装Gosudo apt install golang-go=13.4安装Dockercurl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun如果是WSL的ubuntu无法安装docker,根据电脑是win10专业版还是家庭版,安装docker for windows或者docker toolbox...
2020-08-25 00:33:08
1721
原创 Fabric基础知识
windows开启linux控制面板->程序->启用或关闭windows服务->开启运行Linux的windows子系统微软商店安装ubuntu(centos也有,但是收费)
2020-08-16 19:01:54
987
原创 windows运行Linux子系统
windows运行Linux子系统引言windows开启linux子系统访问电脑目录下载镜像源修改为国内引言自从windows10软件商店提供linux子系统,再不需要像虚拟机一样繁琐的配置网络和内存等了。特别适合用来做本地linux环境学习和测试。windows开启linux控制面板->程序->启用或关闭windows服务->开启运行Linux的windows子系统微软商店安装ubuntu(centos也有,但是收费)安装好打开应用就启动一个linux黑窗口子系统访问电
2020-08-16 18:53:01
388
原创 Django学习笔记
安装 pip install Django==3.1或者git clone https://github.com/django/django.git或者https://codeload.github.com/django/django/tar.gz/master初始化Django项目
2020-08-12 23:23:44
170
原创 Httprouter源码学习
简介官方——https://github.com/julienschmidt/httprouterHttpRouter is a lightweight high performance HTTP request router (alsocalled multiplexer or just mux for short) for Go.In contrast to the default mux of Go’s net/http package, this routersupports varia
2020-08-12 23:21:17
548
1
原创 protoBuf-python学习笔记
protoBuf-python学习笔记protoBuf官方简介下载protoBuf编译器编译proto到python代码proto包名syntax声明导入包定义message定义字段定义服务结合grpc生成py的rpc代码protoBuf官方简介protocol buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法它可用于(数据)通信协议、数据存储等。Protocol Buffers 是一种灵活,高效,自动化机制的结构数据序列化方法可类比 XML,但是比 XML 更小(3 ~
2020-08-09 12:04:01
1137
原创 Python多进程
Python多进程fork子进程创建独立子进程使用进程池进程间通信Python的线程因为解释器锁的设计,所以不能充分利用CPU,只能通过进程来实现多核利用性能考虑的话,底层还是不要用Py,进程切换效率太低,Py多做为脚本层的胶水语言fork子进程如果是linux上,可以使用linux的fork函数创建子进程在python里通过os模块调用linux的fork,可以直接生成一个与当前进程执行完fork语句后的状态一致的拷贝子进程import ospid = os.fork()if pid==0
2020-07-21 22:58:24
164
原创 Python学习笔记(二)
Python学习笔记(二)赋值、不可变类型与可变类型正则表达式super经典类与新式类赋值、不可变类型与可变类型Python中一切皆对象,每一次赋值都是对象引用的传递,而部分类型是不可变引用,所以赋值时实际是创建了新对象,引用新对象。不可变对象数字、字符串、元组等的变量在赋值时,都是引用新对象可变类型List、Set、Dictonary等的变量在赋值时,都是创建新引用,引用旧对象正则表达式通过引入Python模块re使用re.match(正则表达式字符串,原字符串)返回从字符串开始的匹
2020-07-12 23:52:39
199
原创 从majority voting解读Raft
从majority voting解读RaftRaft状态机复制方法分布式问题majority votingleader租约投票实现故障恢复RaftRaft是一个分布式一致性协调算法,采用状态机复制方法和majority voting选举算法。状态机复制方法分布式计算的目的之一是容灾备份,也就是当某一台机器故障,其他机器可以接管其工作,而保证系统的持续稳定运行。在这种需求下,为了使得每一个机器都可以作为一个完整备份,接管整个系统的工作,我们会共享整个系统的完整数据或者完整状态到不同机器上。对于共享
2020-07-05 18:24:53
1084
原创 Python学习笔记(一)
Python学习笔记编码智能补齐注释与字符串变量定义布尔值特殊运算符条件语句循环语句函数定义可变参数pass语句异常、捕获与finallydel变量定义模块与导入集合垃圾回收面向对象泛型函数多线程锁函数注解反射编码Python默认编码为ASCII在文件开头使用下面语句修改编码为UTF8# coding=utf-8智能补齐Python中不需要主动在行末添加分号,会智能补齐注释与字符串单行注释,通过在行的头部加上#,如#这是注释多行注释使用三个单引号或者三个双引号作为起止符,如'''
2020-06-25 13:01:41
348
原创 Dart学习笔记
变量定义Dart中,不像其他语言存在基本类型与类类型,Dart中所有类型(包括int等)都是继承自Object的类型字符串字符为UTF16编码,小数都为double类型,函数类型为Function,布尔类型为booltype variable = val在定义时指定固定类型type,则该变量类型固定,且只能接收特定类型赋值比较特殊的,如果type是Object或者dynamic,则该变量可以接收任意类型数值赋值,比如int age = 22dynamic magic = 1;magic =
2020-06-09 21:58:30
299
原创 ActiveMQBytesMessage内容修改
ActiveMQBytesMessage内容修改读写分离分析获得旧内容写入新内容结束输入读写分离分析ActiveMQBytesMessage是activeMQ进行字节传输使用的消息类型,内部维护一个DataInputStream和一个ByteArrayInputStream,使用一个ByteSequence对象保存数据,保存时关闭写操作,根据参数进行压缩,涉及到读写分离,因此编写本篇博客记录。1.新创建或者调用clearBody方法后的对象,处于只写模式2.处于只写模式下的对象无法读取数据,必须关闭
2020-05-27 23:56:29
977
原创 golang的http源码与twirp源码笔记
golang的http源码跟踪笔记http启动httpHandleServer循环accept请求处理connectiontwirpTwirpServerproto文件Twirp的ServeHttp实现serve请求http启动httpHandle使用http包的ListenAndServe方法,需要提供一个Handler对象func ListenAndServe(addr string, handler Handler) error { server := &Server{Addr: a
2020-05-23 16:29:52
247
原创 go使用twirp开发rpc
go使用twirp开发rpctwirp简介安装开发实现rpctwirp简介twirp是谷歌开源的rpc框架,默认支持golang并提供其他语言的实现版本,使用proto进行rpc定义开发。安装安装proto插件和twirp插件go get github.com/twitchtv/twirp/protoc-gen-twirpgo get github.com/golang/protobuf/protoc-gen-go开发编写proto文件//文件名test.protosyntax = "
2020-05-13 19:17:44
444
原创 protoBuf-go学习笔记
protoc-go学习笔记下载protoBuf编译器安装go专属plugin编译proto到go代码proto包名syntax声明定义message下载protoBuf编译器根据不同系统下载不同protoc编译器,在windows下下载windows后缀的protoc-3.12.0-rc-1-winxxx.zip解压后得到的目录中,bin目录中的protoc.exe就是编译protoc代码命令Mode LastWriteTime Length Nam
2020-05-13 00:01:18
4468
1
原创 使用GORM操作数据库
依赖github.com/jinzhu/gorm定义实体类可以通过定义嵌套gorm.Model这个结构体的类型来定义实体类,gorm.Model中定义了数据库表的一些常用基本字段type Model struct { ID uint `gorm:"primary_key"` CreatedAt time.Time UpdatedAt time.Time DeletedAt *time.Time}比如我们定义User实体type User struct{ gorm.Mo
2020-05-10 14:30:51
3540
原创 golang学习笔记(三)
文件IOio包pipe 该方法返回一个PipeReader和一个PipeWriter指针type pipe struct { wrMu sync.Mutex // 写时锁 wrCh chan []byte // 数据存储单元 rdCh chan int // 数据存储长度 ...}type PipeWriter struct { p *pipe // 共...
2020-05-08 12:02:44
466
原创 golang学习笔记(二)
Go异常处理errorgo预先定义了一个error接口,包含一个字符串返回类型的函数,用于返回错误信息type error interface { Error() string}可以同个errors包的new方法,传递一个字符串创建一个error对象err := errors.New("new Error")panicpanic语句用于抛出一个 error对象,其接收一个in...
2020-05-07 20:44:27
284
原创 使用gqlgen搭建graphql的go服务端
添加依赖require ( github.com/99designs/gqlgen v0.11.3 github.com/vektah/gqlparser/v2 v2.0.1)编写schema在项目根目录创建文件夹,graph,在graph文件夹中新建schema.graphqls文件,在其中编写schema定义,比如type Query { hello: String}...
2020-05-05 16:34:19
1384
3
原创 go依赖管理——module
dep简介为了方便管理依赖,go官方推出dep安装depgo get -u github.com/golang/dep/cmd/dep使用dep新建一个文件夹作为项目目录,执行dep init此时如果报错 ...is not within a known GOPATH/src是因为go必须把项目代码放到GOPATH的src目录下,通过go env命令可以查看gopath路径...
2020-05-04 17:11:34
217
原创 golang学习笔记(一)
golang学习笔记go的基本数据类型包管理类型别名变量定义函数定义匿名变量struct指针类型结构体函数函数变量const与iota接口嵌入类型与方法重写go的基本数据类型布尔型bool 布尔型的值只可以是常量 true 或者 false,默认值为 false。字符串类型string 编码统一为 UTF-8 编码标识 Unicode 文本,默认值为空字符串。整型(默认值为 0)u...
2020-05-03 01:39:53
439
原创 使用urql实现GraphQL客户端
urql简介urql是一个快速,轻巧且可自定义的GraphQL客户端。是一个js的库。安装urql# npmnpm i --save urql graphql# or yarnyarn add urql graphql使用urql从服务器 GraphQL Endpoint 来生成客户端import { createClient, Provider } from 'urql'...
2020-04-28 22:21:14
968
原创 react学习笔记
JSX简介JSX,是一个 JavaScript 的语法扩展,也是react推荐的渲染语法。jsx有点类似一个模板语法,只是前后不需要通过双引号或者单引号来包含表达其为模板字符串,而是一个单个根标签对象的字符串,字符串中使用{}包括起来的内容会作为表达式在渲染时进行解析,比如如下element1和element2都是jsx对象,虽然这不是必须的,但是一般会在一个完整jsx表达式外部使用()包括起来...
2020-04-28 02:22:18
224
原创 TypeScript学习笔记
typescript与javascripttypescript是一个js的超集,个人理解为包装了面向对象编程逻辑的语法糖,所以一般使用typescript的语言来编写代码,然后再使用typescript编译为原生js,这样就可以作为普通js脚本运行了。typescript语法很多地方于java类似,作为java程序员学起来不会很吃力。安装typescriptnpm install -g ty...
2020-04-27 01:19:13
717
原创 使用yarn进行node.js项目依赖管理
yarn就如java的maven,专门用于对node.js项目的依赖管理,对比npm的好处是,npm吧每个项目的依赖安装在项目目录,导致由很多重复依赖下载。而yarn和maven一样,在本地建立一个仓库作为缓存,只有打包时,才复杂一份依赖打包进去安装yarn从官网下载安装包——安装yarn输入yarn --version显示出版本号即安装成功了使用yarnyarn init初始化一...
2020-04-26 11:37:42
2609
1
原创 使用nvm管理node.js版本
安装nvm在nvm的github下载setup安装包设定nvm安装路径设定node安装路径安装node命令行输入nvm查看命令提示nvm ls 和 nvm ls available分别查看本地已安装node版本和远程可下载版本nvm install 版本号 安装对应版本的nodenvm current 查看当前使用node版本号nvm use 版本号 切换node到...
2020-04-26 00:40:51
237
原创 GraphQL学习笔记
GraphQL主要是一套针对图状数据查询语言,推荐先读读知乎——什么是 GraphQL?基本类型先看看提供的基本类型(标量类型)GraphQL 自带一组默认标量类型:Int:有符号 32 位整数。Float:有符号双精度浮点值。String:UTF‐8 字符序列。Boolean:true 或者 false。ID:ID 标量类型表示一个唯一标识符,通常用以重新获取对象或者作为缓存中...
2020-04-24 22:00:40
906
原创 uniapp中定时任务异步开启时如何防止泄露
setTimeout与setInterval选择项目里要用到实时刷新,在一个tarbar的页面,几秒一次请求后台数据。这里比较常见做法是setInterval,setInterval会每次定时时间到立即执行一次,不管上一次是否已经执行结束。但是考虑到几个方面:后台接口的限流,ip连接数的限制,网络延迟,担心使用setInterval在极端情况下有大量冗余请求(上一次请求未结束未失败就发起新请求,...
2020-04-18 11:40:05
2420
原创 springBoot2.x集成kafka
最近在做一个物联网paas项目,实时设备预警结合kafka流式实时计算的特定,采用springBoot结合kafka来完成kafka环境搭建——kafka基本命令及环境搭建依赖 <!-- kafka --> <dependency> <groupId>org.springframework.kafka</groupId&...
2020-04-13 10:37:17
798
原创 zgc垃圾收集器原理
着色zgc只支持64位系统,然后最大支持4T的堆内存,64位指针只需要使用42位就可以寻址4TB的空间,这意味着有多余的22位可以利用。zgc利用了4位,分别用来表示:是否已经finalize,重映射(remap),mark0,mark1。mark0与mark1表示是否被标记,在gc周期性更换,这样可以不要重复去复原(就像以前survivor的复制回收算法,也就是这次用mark0表示,下次就用...
2020-04-09 01:44:23
1318
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人