一位读者催更了很长时间的文章,想看robomaster SDK的源码解读,有点感动,就我的水平居然还有人想看。 读源码要使用一个好的阅读工具 SI调整好的样子 Understand的界面 VSCode 要说熟悉我肯定是VSCode最熟悉了,但是也想用别的。 打印功能是把一段代码打印出来,因为可能需要细细阅读 或者是为了携带方便吧,反正就是这样的 打印的结果 有的地方是乱码,字符编码的毛病 点这个地方,配置 在配置前你可以看到项目的概览 以及这个项目包含的所有语言类型 代码阅读工具 (Scientific Toolworks Understand) v5.1,我以前也写过。 这里进行搜索 搜索功能在此 F5是全局搜索 实体类的查找 一些生成图的样子,帮助阅读 在这里生成 最近忙航测,这个先放一下。
do_something() //3-这段逻辑不会被信号所打扰 sigprocmask(SIG_SETMASK,&prevMask,NULL); //4-解除阻塞 pause(); //5- 假设某一个信号,在上面的4之后,5之前到来,也就是解除阻塞之后,等待信号调用之前到来,信号会被信号处理器所处理,并且pause调用会一直陷入阻塞,除非有第二个信号的到来。这和我们的预期是不符的。 这种方式,不如共享内存使用的广泛,目前主要被使用在master进程广播消息到子进程,这里面的消息包括下面5种: #define NGX_CMD_OPEN_CHANNEL 1 //新建或者发布一个通信管道 这样在fork N个子进程之后,实际上会建立N个socket channel,如图5所示。 但是还不是它的全部,nginx源码中还提供了通过socket channel进行子进程之间互相通信的机制。不过目前来看,没有实际的使用。
系统内核在收发事件、消息时使用的消息传递函数。可以理解为多进程之间的一种通讯调用机制。
看nutch的源码仿佛就是一场谍战片,而构成这精彩绝伦的谍战剧情的就是nutch的每一个从inject->generate->fetch->parse->update的环节,首先我党下派任务给优秀的地下工作者
所以今天来和大家一起从源码出发了解下Nodejs的事件循环机制。 ---- 官网描述 我们先看下nodejs的官网对事件循环的描述。 那么我们就带着困惑去看一看源码 先看结论 为了照顾一些对源码不感兴趣的同学,这里先上源码阅读的结论 ? 阶段总是会执行,不会跳过 ---- 参考文档: The Node.js Event Loop, Timers, and process.nextTick() - Node.js ---- 本文会经常更新,请阅读原文 : https://xinyuehtx.github.io/post/Nodejs%E6%BA%90%E7%A0%81%E9%98%85%E8%AF%BB-%E4%BA%8B%E4%BB%B6%E5%BE %AA%E7%8E%AF.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。
之后,要判断初始化状态是否完成,如果采用异步初始化,可能DestoryTask线程已经启动,但是连接池还没有初始化完成。
如果当前有事务,则抛出异常 int PROPAGATION_NEVER = 5; //如果当前有事务,则在嵌套事务中执行。 为源码讲解做准备。 本文,就来讲讲事务的源码。 注意,源码的讲解,需要你知道循环依赖源码和AOP源码,前面的博文我们详细讲解了,本文会直接定位到AOP源码处,不再讲解前置知识,详细参见《spring循环依赖源码讲解》和《AOP源码讲解》。 所以,研究spring事务源码,就是研究事务是怎么通过AOP实现的,没问题吧? 3. 源码分析 先写到这,读者先去自行分析。没阅读过循环依赖和AOP源码的,赶紧回去看,不然你听不懂。
一、简介 使用Mybatis有一段时间了,但是一直没有专门去阅读MyBatis框架的源码,Mybatis是一个非常值得我们去阅读的框架,源码里面运用了很多常见的设计模式,如构建者模式、代理模式、模板方法模式等等 下面我们就以搭建一个源码阅读环境开始,一起来看看Mybatis的源码。 MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。 下面我们搭建一个简单的Mybatis 源码Debug环境。 获取Mapper接口 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); //5、 通过上面的示例,我们总结一下Mybatis使用的大体流程,如下图所示: 可以看到,主要分为了如上图的几个步骤,这几个步骤也是Mybatis的核心了,所以我们阅读源码也是从这几个部分切入,逐步逐步去了解里面的实现细节
BeanDefinition的类继承关系 5. IOC的引出 6. BeanFactory工厂的引出 7. spring源码太庞大了,精通spring源码确实不容易,讲懂更难。学习spring源码是件浩大的工程。 、硬盘的作用,然后你才知道如何讲他们组装到一起,从头阅读源码就跟你让一个学金融专业的学生组装电脑一样,效果可想而知。 初学,我们也不可能将继承体系中的每个类都搞懂,把这个继承图下载下来存到桌面,在以后的源码阅读中这个继承关系会被你一一攻破,学完你也就掌握了,而且不会忘,更能提高你的编程水平,读完spring你会发现的编程风格潜移默化的被 这也是很多读者阅读spring源码时读着读着就蒙圈的原因。
gin 源码阅读系列文章列表: gin 源码阅读(1) - gin 与 net/http 的关系 gin 源码阅读(2) - http请求是如何流入gin的? gin 源码阅读(3) - gin 路由的实现剖析 gin 源码阅读(4) - 友好的请求参数处理 hi,大家好,我是 haohongfan。 仍然以原生的 net/http 简单的例子开始我们的源码分析。 源码分析 1. gin 提供的功能就这么多,第一篇源码分析文章我提到 gin 是个 httprouter 基本就是这个原因。
redux源码解析 什么是redux Redux 是 JavaScript 状态容器,提供可预测化的状态管理。 源码解析 注意: 如果没有使用过redux,建议先去看看redux文档 api方法 export { createStore, combineReducers, bindActionCreators
每个线程独有一个 Map,Map里的存储结构为 Entry <ThreadLocal,Object> 数组
SparkContext是spark的入口,通过它来连接集群、创建RDD、广播变量等等。
查看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 示例代码仓库地址 源码阅读仓库地址
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. 5.get到这里就很简单了,get方法只需要两步即可。计算得到key的存放位置。遍历指定位置查找相同key的value值。 3.put直接过一遍put源码。 4.getget流程比较简单,直接过一遍源码。
glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients 已挂载进容器 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/
List-1中,根据类型来调用不同的处理,我们以insert为例子分析,调用的就是如下的List-2,首先将传入Mapper方法上的参数转换为SQL参数,之后调用SqlSession的insert方法,注意这个SqlSession是SqlSessionTemplate,我们来看SqlSessionTemplate的insert方法,如List-3: