先看用例源码: #include <stdio.h> #include <stdlib.h> #include <uv.h> int main() { uv_loop_t *loop = malloc
Nginx作为一款开源的、高性能的HTTP服务器和反向代理服务器而闻名,本文基于nginx-1.15.0,将为读者简要介绍其HTTP处理流程。
4. nginx中channel指令 我们发现,ngx_channel_handler中共有6个指令类型,分别是NGX_CMD_QUIT、NGX_CMD_TERMINATE、NGX_CMD_REOPEN
livePort == dispatchPort) { //通过线程的私有方法里添加gcdMain _CFSetTSD(__CFTSDKeyIsInGCDMainQ, (void *)6,
在阅读DruidDataSource源码的过程中,发现DruidConnectionHolder有个特别的属性PreparedStatementPool statementPool。 final DruidAbstractDataSource dataSource; } LRUCache的结构: LRUCache本质上是一个LinkedHashMap,学习过LinkedHashMap源码就会知道 可以参考LinkedHashMap源码分析. public class LRUCache extends LinkedHashMap<PreparedStatementKey, PreparedStatementHolder 通过源码可以发现,作者特别喜欢通过Holder来对java sql包提供的对象进行扩展。当然这也与druid连接池的定位是分不开的,druid最大的有点就是其监控功能非常完善。 6.总结 关于PreparedStatementCache的使用,在Druid中实际上cache是Connection级的。每个连接一个Cache。 一般在mysql中不建议使用这个Cache。
一、简介 使用Mybatis有一段时间了,但是一直没有专门去阅读MyBatis框架的源码,Mybatis是一个非常值得我们去阅读的框架,源码里面运用了很多常见的设计模式,如构建者模式、代理模式、模板方法模式等等 下面我们就以搭建一个源码阅读环境开始,一起来看看Mybatis的源码。 MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。 下面我们搭建一个简单的Mybatis 源码Debug环境。 } catch (IOException e) { e.printStackTrace(); } finally { //6、 通过上面的示例,我们总结一下Mybatis使用的大体流程,如下图所示: 可以看到,主要分为了如上图的几个步骤,这几个步骤也是Mybatis的核心了,所以我们阅读源码也是从这几个部分切入,逐步逐步去了解里面的实现细节
SparkContext是spark的入口,通过它来连接集群、创建RDD、广播变量等等。
redux源码解析 什么是redux Redux 是 JavaScript 状态容器,提供可预测化的状态管理。 源码解析 注意: 如果没有使用过redux,建议先去看看redux文档 api方法 export { createStore, combineReducers, bindActionCreators
查看InheritableThreadLocal源码 重写了getMap和createMap方法。
ThreadLocal源码比较简单,整体了解起来比较容易。
koa源码阅读[0] Node.js也是写了两三年的时间了,刚开始学习Node的时候,hello world就是创建一个HttpServer,后来在工作中也是经历过Express、Koa1.x、Koa2 用的比较多的还是Koa版本,也是对它的洋葱模型比较感兴趣,所以最近抽出时间来阅读其源码,正好近期可能会对一个Express项目进行重构,将其重构为koa2.x版本的,所以,阅读其源码对于重构也是一种有效的帮助 image.png 小记 最近抽时间将Koa相关的源码翻看一波,看得挺激动的,想要将它们记录下来。 应该会拆分为几段来,不一篇全写了,上次写了个装饰器的,太长,看得自己都困了。 koa与koa-compose 热门中间件 koa-router与koa-views 杂七杂八的轮子 koa-bodyparser/multer/better-body/static 示例代码仓库地址 源码阅读仓库地址
每个线程独有一个 Map,Map里的存储结构为 Entry <ThreadLocal,Object> 数组
ioredis源码阅读[1] 上次针对 redis 的源码阅读涉及普通的 client,这次针对 cluster 模式下的 client 源码进行分析。 具体的源码路径就是在 lib/cluster 目录下了。 127.0.0.1", }, { port: 6381, host: "127.0.0.1", }, ]) cluster.get('someKey').then() 从源码上来看
ConcurrentHashMap源码阅读1.ConcurrentHashMap1.71.存储结构Java7中ConcurrentHashMap由很多个Segment组合,而每一个Segment是一个类似于 3.put接着上面的初始化参数继续查看put方法源码。展开代码语言:JavaAI代码解释/***Mapsthespecifiedkeytothespecifiedvalueinthistable. ss,u))==null){//使用CAS赋值,只会成功一次if(UNSAFE.compareAndSwapObject(ss,u,null,seg=s))break;}}}returnseg;}上面的源码分析了 3.put直接过一遍put源码。 4.getget流程比较简单,直接过一遍源码。
已挂载进容器 docker-compose exec centos bash php-fpm nginx # 查看 worker 进程号 ps aux | grep fpm gdb --pid=xxx 阅读工具 推荐使用Understand 尝试过CLion和Visual Studio 很多代码都不能进行跳转 需自行下载一个与Dockerfile中PHP版本相同的源码用于阅读 增加扩展(可选) 依赖 下载已经安装的 PHP按本的PHP源码 进入扩展源码目录比如curl cd ~/php71/ext/curl 执行phpize(编译PHP扩展的工具,主要是根据系统信息生成对应的configure文件) /var/ │ │ │ │ │ │ │ │ │ │ │ │ │ ───────┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴─────────► -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 │ │ │ │
List-1中,根据类型来调用不同的处理,我们以insert为例子分析,调用的就是如下的List-2,首先将传入Mapper方法上的参数转换为SQL参数,之后调用SqlSession的insert方法,注意这个SqlSession是SqlSessionTemplate,我们来看SqlSessionTemplate的insert方法,如List-3:
public void onFailure(Call<ResponseBody> call, Throwable t) { } }); 2.源码解析
1、项目结构 2、api模块 3、sessions 4、models 5、adapters 模块 6、小技巧 6.1 json缩进输出 6.2 structures 6.3 status_codes 我们一起阅读一下其源码,学习它是如何实现的。 整篇文档分下面几个部分: 项目结构 api 模块 sessions 模块 models 模块 adapters 模块 小技巧 1、项目结构 本次阅读代码版本是 2.24.0, 从github上clone , True) return request('get', url, params=params, **kwargs) 这种get-request的api的封装方式,和我们之前读过的redis源码类似 api中封装易用的API Session中进行流程的处理 Request和PreparedRequest对请求进行预处理 Response对响应进行封装,提供更易用的方法(json)和数据(ok) 6、
golang源码的工具链中提供了可选参数coverprofile参数,可以生成覆盖率文件,方便我们快速查看,哪行代码被覆盖了,哪行代码还需要验证,但是只支持单测环境。 于是https://github.com/qiniu/goc就诞生了,它借鉴了golang官方覆盖率统计方案和部分代码,核心原理是在编译打包的时候创建一个临时目录,将源码插桩后放到临时目录,然后编译成带覆盖率的包 下面开始研究下源码: 入口文件是goc.go,它只是注册了各种命令行参数,使用了spf13包,具体源码参考往期博客,这里不再详述。 string Singleton bool } 核心代码分为下面三步:1,根据参数列出需要处理的包 2,调用AddCounters进行源码打桩 ,将计数代码的赋值逻辑按照源码的作用域进行打桩 3,将打桩依赖的变量声明放到一个单独的包里,让各个桩代码引用。
ioredis源码阅读[0] 最近因为工作需要,要去搞一个 Node.js 端的 Redis Client 组件出来,暂时选择通过 ioredis 来作为 fork 对象。 因为之前有遇到过 Redis 在使用 twemproxy 时会一直出现无法连接服务器的问题,详情见 issues:https://github.com/luin/ioredis/issues/573 所以会修改源码修改这一问题 ,不过在修改完成之后跑单元测试发现,事情没有那么简单,并不只是 info -> ping 这样,所以只好去熟悉源码,然后针对性地调整一下逻辑。 ioredis 项目结构 从项目中看,源码都在 lib 文件夹下,是一个纯粹的 TS 项目。