自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 go string 实现

go string 实现

2021-12-17 20:20:18 617

原创 go 源码分析 slice 实现

源码角度分析 go slice 实现

2021-12-15 15:06:23 518

原创 go 垃圾回收 设计与实现 图解

从源码角度分析gc的不同阶段的实现

2021-12-08 16:03:06 555

原创 go 内存管理 设计与实现 图解

span, arena, heap 是什么, 关系是什么, 申请内存时如何分配? 内存分配器如何设计, 指针如何标记?

2021-12-07 16:44:30 824

原创 解决mac登录APPLE ID无限重复弹窗提示登录

输对了用户密码, 加载完成后再次弹出用户密码页面提示登录, 无限循环, 一直不知道怎么解决今天误打误撞碰到另一个解决的时候竟然把无限循环的问题也解决了cd ~/Library/Keychainsls# 这里会有一串uuid, 比如 8676f7b2-7396-466b-acf4-ec7ff94c48bb, 每台机器不同的# 把 uuid 删除rm -rf 8676f7b2-7396-466b-acf4-ec7ff94c48bb然后重启电脑, 再登录就可以一次登录成功了......

2021-09-18 10:18:30 10985 8

原创 gunicorn workers 区别(sync/eventlet/gevent/thread/tornado)

gunicorn workers 区别以后都在 github 更新,请戳 gunicorn workers 区别我们在 第一篇 里已经了解过 gunicorn 的 SyncWorker 原理, 现在我们来看下其他的 workers 是如何工作的目录eventletgeventthreadtornado更多资料Eventlet如果你打开 eventlet 的官网Eventlet 是一个 Python 网络库, 支持并发访问, 使用这个库可以在不改变代码写法的情况下更改代码的运行方

2021-08-04 23:51:39 5363

原创 django 和 gunicorn

django gunicorn gevent greenlet daphne 他们是什么?以后都在 github 更新,请戳 第一篇 django 和 gunicorn第一篇 django 和 gunicorn如果你进行过基于 Python 的 web 应用开发, 你会发现网络上能搜到许多不同的框架和组件如果你接手过其他团队成员的项目, 你会发现虽然都是 Python 代码, 但是同样有各种各样的组件和 W(A)SGI 库”喔这是 django 应用, 我用下面这行命令就可以启动了 python

2021-06-28 23:56:34 982 2

原创 python3 pickle 源码分析/实现

pickle 实现以后都在 github 更新,请戳 python3 pickle 实现目录相关位置文件简介实现Noneboolintfloatbytesstrtuplelisttypeobject相关位置文件Lib/pickle.pyModules/_pickle.cModules/clinic/_pickle.c.h简介我们用 pickle 来对 python 中的对象进行序列化和反序列化, pickle 总共有好几个版本, 当前的版本号是 4p

2021-05-16 15:10:29 615 5

原创 go 源码分析 goroutine 概览与调度

goroutine以后都在 github 更新,请戳 Goroutine–概览与调度目录相关位置文件概览调度为什么更多资料相关位置文件src/runtime/runtime2.gosrc/runtime/proc.gosrc/plugin/plugin_dlopen.go概览如果你对 MPG 在Go协程调度中代表什么并且是如何工作的 感到疑惑, 请先参考 更多资料 中的 scheduling-in-go-part1 到 scheduling-in-go-part3根据上述文章

2020-11-01 19:28:17 378 1

原创 go 源码分析 channel 实现原理

chan以后都在 github 更新,请戳 go channel 实现原理目录相关位置文件内存构造创建sendrecvselect示例sendq 和 recvqsendx 和 recvx相关位置文件src/runtime/chan.go内存构造qcount 表示当前队列中存储了多少个元素(当前数量)dataqsiz 表示环形队列的的大小(最大数量)buf 指向环形队列所在内存的起始位置elemsize 是每个元素占用的大小(单位为字节)closed 表示当前的

2020-10-23 00:11:22 258

原创 sanic 全局单例化及单元测试

我们基于 sanic 框架开发 web 服务, 以事件循环的方式驱动, 由于业务的复杂性, 框架内需要集成 http 连接池, redis 连接池, 数据库连接池等, 即使不是连接池, 也需要进行单例化而 python 中的事件驱动方式使得这些...

2020-08-14 23:27:39 817

原创 Python 编译阶段 -- 从 AST 到 字节码

AST 到 字节码以后都在 github 更新,请戳 AST 到 字节码目录related fileoptimizesymtableCodeObjectread more相关位置文件Python/compile.cPython/pythonrun.cPython/symtable.cInclude/symtable.hPython/ast_opt.c我们来尝试从之前的 语法树 中生成对应的字节码前面提到过的 pythonrun 的调用栈如下这次

2020-07-23 18:20:03 678

原创 Python 编译阶段 -- 从 CST 到 AST

CST TO AST以后都在 github 更新,请戳 CST 到 AST目录相关位置文件pythonrunCST 到 AST更多资料相关位置文件Python/ast.cPython/pythonrun.cInclude/Python-ast.hPython/Python-ast.cPython/asdl.cInclude/asdl.h下面的命令会从 Parser/Python.asdl 中生成 Include/Python-ast.h 和 Python/Python-a

2020-07-23 00:21:00 910

原创 Python 编译阶段 -- 从语法/元语法到DFA

compile以后都在 github 更新,请戳 从语法/元语法到DFA目录相关位置文件pgenthe dfa of ExampleGrammarparsemake dfa更多资料相关位置文件Python/pythonrun.cParser/tokenizer.cParser/tokenizer.hParser/parsetok.cInclude/grammar.hParser/metagrammar.cInclude/metagrammar.hPar

2020-07-21 09:50:57 537

原创 go 源码分析 map 实现原理

map以后都在 github 更新,请戳 go map 实现原理用目录相关位置文件内存构造介绍桶tophash键和值插入resizehashGrowgrowWorkoverflow bucket删除操作并发更多资料相关位置文件src/runtime/map.gosrc/runtime/map_fast32.gosrc/runtime/map_fast64.gosrc/runtime/map_faststr.gosrc/runtime/type.go内

2020-07-15 20:47:01 547

原创 go 源码分析 调试安装

setup以后都在 github 更新,请戳 go 编译安装额外版本/runtime包中增加print函数调用目录为什么怎么做从源代码编译安装另一个版本的 go在 runtime/map.go 中调用 print 函数更多资料为什么我们需要能对 go 的源码进行调试, 修改并重建, 第一步是在任意一个内建的运行时包里增加一个 print 调用, 重新编译, 之后用编译好的编译器去运行一个 helloworld 脚本观察输出还有另一个工具 delve 可配套作为 go 的 debug

2020-07-07 14:36:35 427

原创 redis geohash 底层实现

geohash以后都在 github 更新,请戳 redis geohash 底层实现目录相关位置文件内存构造encodedecodegeoaddgeohash更多资料相关位置文件redis/src/geohash.credis/src/geohash.hredis/src/geo.credis/src/geohash_helper.c内存构造我们以一个坐...

2020-04-25 16:45:14 991 1

原创 es painless 聚合查询 脚本查询 聚合结果求和

统计一个公司下各个部门的人数分布, 并需要统计各个部门的1月份在职人数, 入职, 离职人数, 以及公司总共的在职, 入职, 离职人数

2020-02-21 23:03:01 2880

原创 redis 集群 failover 源码分析

failover以后都在 github 更新,请戳 redis 集群->failovercontents需要提前了解的知识PFAILFAILELECT需要提前了解的知识cluster->reshardcluster->gossipprerequisites->cluster 中展示了示例集群的配置如果我们增加一个新的节点 127.0.0.1:7...

2020-01-22 11:10:39 468

原创 redis 集群 gossip 源码分析

gossip以后都在 github 更新,请戳 redis 集群->gossip目录cluster bus什么时候会发送消息pingpongcluster bus来自 cluster-tutorial每一个 Redis 集群节点需要两条 TCP 连接, 通用的 TCP 端口用来和客户端进行交互, 比如 6379. 还有一个从通用端口加上一万以后的端口, 比如 1637...

2020-01-19 17:43:06 379

原创 redis 集群 reshard 源码分析

cluster以后都在 github 更新,请戳 redis 集群->reshard目录相关位置文件集群槽reshardgossipfailover更多资料相关位置文件redis/src/cluster.credis/src/cluster.h集群如果我们启动一个集群mkdir cluster-testcd cluster-testmkdir 700...

2020-01-19 17:33:33 694

原创 redis 发布订阅 源码分析

pubsub目录以后都在 github 更新,请戳 redis 发布订阅相关位置文件subpsubpublish相关位置文件redis/src/pubsub.credis/src/util.csub在 redis 客户端中, 如果你输入如下命令127.0.0.1:6379> SUBSCRIBE c100Reading messages... (press C...

2020-01-06 01:11:01 263

原创 redis 持久化 源码分析

persistence以后都在 github 更新,请戳 redis 持久化目录相关位置文件AOF重写aof什么时候会被触发策略everysecalwaysnoRDBrdb什么时候会被触发策略更多资料相关位置文件redis/src/aof.credis/src/rdb.credis/src/rdb.hredis/src/adlist.h...

2020-01-02 20:13:03 239

原创 redis streams 源码分析

streams以后都在 github 更新,请戳 图解 redis streams目录需要提前了解的知识相关位置文件概览内部实现xaddxdelxrangexreadconsumer groups更多资料需要提前了解的知识rax(redis 实现的前缀树)redis listpack 实现相关位置文件redis/src/stream.hredis...

2019-12-21 12:19:07 954

原创 redis streams 源码分析之 listpack

listpack以后都在 github 更新,请戳 redis listpack目录相关位置文件ll2string内存构造内部实现概览back lengthintegerstring更多资料相关位置文件redis/src/listpack.credis/src/listpack.hredis/src/util.credis/src/util.hll2...

2019-12-15 16:59:44 1262 3

原创 es painless 脚本增加时区筛选/按一月中的某天筛选

比如我的查询时间是 UTC+8, 但是 ES 里面默认存储的时间是UTC+0的标准时间两个方案查询的时间减8小时查询条件带上时区下面是方案2的查询示例 "query": { "bool": { "must": [ { "script": { "script": { "sour...

2019-12-13 16:05:50 942

原创 redis 前缀树 基数树 底层实现(rax)

rax以后都在 github 更新,请戳 rax(redis 实现的前缀树)目录相关位置文件内存构造内部实现更多资料相关位置文件redis/src/rax.hredis/src/rax.c内存构造rax 是 redis 自己实现的基数树, 它是一种基于存储空间优化的前缀树数据结构, 在 redis 的许多地方都有使用到, 比如 streams 这个类型里面的 cons...

2019-12-07 10:33:50 2739

原创 redis 集合对象 底层实现(intset/ht)

set以后都在 github 更新,请戳 redis 集合对象实现(intset/ht)目录需要提前了解的知识相关位置文件encodingOBJ_ENCODING_INTSETINTSET_ENC_INT16INTSET_ENC_INT32INTSET_ENC_INT64OBJ_ENCODING_HTsdiff算法 1算法 2需要提前了解的知识...

2019-08-21 09:51:55 425

原创 redis 列表结构 底层实现(quicklist)

list以后都在 github 更新,请戳 redis 列表结构实现(quicklist)目录需要提前了解的知识相关位置文件内存构造encodingOBJ_ENCODING_QUICKLISTquicklistquicklistNode示例list max ziplist sizelist compress depth插入删除更多资料需要提前了...

2019-08-21 09:47:36 1260 2

原创 redis 哈希表结构 底层实现(ziplist/ht)

hash以后都在 github 更新,请戳 redis 哈希结构实现(ziplist/ht)目录相关位置文件encodingOBJ_ENCODING_ZIPLISTentryprevlenencodingentry data增删改查创建读取修改删除升级OBJ_ENCODING_HT哈希碰撞resizeactiverehashing...

2019-08-21 09:45:24 724

原创 Redis 字符串对象 底层实现(sds)

sds以后都在 github 更新,请戳 redis 字符串实现(sds)目录相关位置文件内存构造encodingOBJ_ENCODING_RAW为什么 44 bytesOBJ_ENCODING_EMBSTRREDIS_ENCODING_INTstring headersdshdr5sdshdr8sdshdr16sdshdr32sdshdr64更...

2019-08-21 09:40:23 443

原创 python 性能分析和 C 扩展

python 性能分析和 C 扩展以后都在 github 更新,请戳 python 性能分析和 C 扩展目录概览示例性能分析C 模块python2python3更多资料概览最近我在做一个关于优化之前其他人写好的 API 业务接口的任务, 这个接口是在 Django 服务中编写的, 这个 API 会启动一个异步任务, 这个异步任务有时需要好几分钟才能结束, 在这...

2019-07-29 15:50:40 178

原创 python __slots__

slot以后都在 github 更新,请戳 python __slots__目录相关位置文件slot示例实例属性访问访问实例属性wing设置了值之前设置了值之后访问实例属性x类属性访问访问类属性wing访问类属性x不同有slots在创建 class A 时属性是如何初始化的 ?在创建 instance a 时属性是如何初始化的 ?MRO中...

2019-07-19 18:16:05 203

原创 django启动流程

目录调用栈调用栈命令行输入以下命令时 python3 manage.py runserver

2019-05-17 16:03:46 1510

原创 python 字符串对象 底层实现 源码分析 str/unicode

str以后都在 github 更新,请戳 cpython str/unicode 底层实现解析目录相关位置文件内存构造字符串转换internedkindunicodecompact相关位置文件cpython/Objects/unicodeobject.ccpython/Include/unicodeobject.hcpython/Include/cpython...

2019-04-20 22:46:41 1187

原创 字符串搜索算法

最近看到 mysql 文档说他字符串搜索用不用索引的问题"select * where id like abc%"如果是开头不为通配符并且查询这一段有索引的则大部分情况下会走索引进行查询,找出在 abc < x < abd 区间的内容"select * where id like %abc%"如果是 开头为通配符的则会用Boyer-Moore 算法去进行搜索...

2019-04-10 15:41:26 1279

原创 二进制位统计算法(swar)

最近在看 <<redis 设计与实现>> 里面讲到了几种二进制位统计算法,在此做个记录1. 遍历二进制位def count_bit(num): count = 0 while num: count += num & 1 num >>= 1 return count遍历统计需要 ...

2019-04-08 15:31:30 4467

原创 python bytes对象 底层实现 源码分析 PyBytesObject(bytes)

PyBytesObject本文参考的是3.8.0a0 版本的代码,详见cpython 源码分析 基本篇以后都在 github 更新,请参考图解python bytes我们都知道在 python 中有以下两个对象可以表示 字节(bytes)a = bytes(b"\x1cccc")print(a) # b'\x1cccc'b = bytearray(b"\x1c...

2019-03-18 17:45:20 1440

原创 python bytearray 对象 底层实现 源码分析 PyByteArrayObject(bytearray/buffer protocol)

PyByteArrayObject本文参考的是3.8.0a0 版本的代码,详见cpython 源码分析 基本篇以后都在 github 更新,请参考图解python bytearray我们都知道在 python3 中,bytes和 unicode 两种不同的对象被严格的区分开来,byte就是表示字节数组,并且是不可变的字节数组,你不能改变bytes 和 unicode...

2019-03-15 18:17:47 1210

原创 python 整型对象 底层实现 源码分析 PyLongObject(int)

PyLongObject本文参考的是3.8.0a0 版本的代码,详见cpython 源码分析 基本篇以后都在 github 更新,请参考图解python int在当前的版本中,cpython只有 long 和 float 两个类型来保存数字,一个保存整数,一个保存浮点数,而用来保存整数的这里叫做PyLongObject,他是一个容器对象,我们来看下他的 memory l...

2019-03-14 18:19:20 745

空空如也

空空如也

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

TA关注的人

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