今年我读了四个开源项目的源码,来分享下心得(下)

简介: 今年我读了四个开源项目的源码,来分享下心得(下)

然后这一模块就收工了!搞定!

然后各种分支发散出去,大致的流程就都清晰了,源码也就读的差不多了。

读源码的时候也会遇到一些不能理解的,先略过,主流程先搞懂。

搞懂整体核心流程之后可以抠一些细节了,比如我之前看 Dubbo 的时候就抠了一个从一段 Dubbo 源码到 CPU 分支预测的一次探险之旅


image.png


再比如之前看 Kafka 的索引设计涉及到二分查找,但是源码中是改版的二分查找。把索引项分为热区和冷区,深究下去是为了避免缺页中断。


image.png


这时候又涉及到 mlock、madvise 。


image.png


这些就是细节,而细节往往就是我们需要学习的地方,所以在理清整体流程之后不要错过细节。

往往你觉得很奇怪的地方可能就是一些“骚操作”,学的就是“骚操作”。

这一趴读源码是为了让自己得到晋升、学习学习优秀开源框架是如何设计而读的源码。


为了找问题而读源码


这个目的性很强,有时候是项目出错,一般而言有日志,所以通过日志搜就行。

如果你本身对这个框架很熟悉那当然最好,如果不熟悉通过日志搜索结合上下文其实也能找到一些缘由。

不过有时候还是得整个链路分析下来才能排查问题,这个看功力了。

有时候是因为看到一些文章的说法冲突了,一篇说 A 另一篇说 B ,如果你找不到权威的信息你只能自己去看源码,通过关键字搜。


比如我这篇写的


image.png


这就是源码之下无秘密。

这种目的性很强的读源码就得结合当时上下文和靠个人功力了。


最后


不知不觉说了这么多。

我只能告诉你不要被源码劝退,你其实一直在看源码。

然后要自顶向下的看源码,不要一头就钻进细节,先从官网等渠道对开源框架有个全面的了解,然后看源码理清主流程。

再配合流程图、时序图、脑图等记录、归类。

然后再看细节,学学优秀开源框架的“骚操作”。

模仿它,学会它,从中能延展出很多额外的底层知识,比如上面提到的预防缺页中断,预热锁页,分支预测等等。

当然也可以先去网上搜一搜别人的源码分析文章,比如我之前的一些,然后自己再上手,这样会比较舒服和顺利。

或者一些相关的付费专栏,我个人觉得不要排斥知识付费,就这么点钱,比你买个皮肤划算。

人家汇总整理知识,你花点小钱,节省你自己研究的时间,我觉得不亏。

反正我自己买了很多,我自己从中有收获,所以我说的一点都不心虚。

最后,源码是块硬骨头这毋庸置疑,我只能告诉你看源码的准备工作和一些小心得。

道阻且长,行则将至。

冲!


相关文章
|
SQL 存储 关系型数据库
MySQL 中将使用逗号分隔的字段转换为多行数据
在开发中,遇到逗号分隔字段的处理是常见问题。本文通过一个实际场景展示了如何改造数据存储:从单一字段存储多个页面(如`page1,page2,page3`)到使用新表`bus_pages`存储每个页面的详细配置。使用`SUBSTRING_INDEX`函数配合`help_topic`表(具有连续ID)拆分`bus_mark_info`表中的`pages`字段,按`help_topic_id`截取页面名称并插入新表。当`pages`字段超过701个页面时,需寻找其他辅助表。最终,数据成功迁移到新结构中,便于单独配置每个页面。
352 1
|
7月前
域名优惠包使用帮助文档
本文详细介绍域名优惠包的使用步骤,让您在优惠包使用过程中操作更便捷。
330 2
域名优惠包使用帮助文档
|
存储 监控 安全
Zabbix SNMP监控安装、配置与服务器实例(学习笔记六)
SNMP可以监控路由器、打印机、UPS、摄像头、服务器等。 1、安装、配置snmp  yum install net-snmp* -y # vim /etc/snmp/snmpd.
3203 0
|
安全 物联网 数据安全/隐私保护
车联网
对于车联网的操作,我们可以按照以下步骤进行,这些步骤涵盖了从初始设置到日常使用的大部分关键流程。请注意,具体步骤可能会因车型、汽车制造商以及所选的服务提供商而有所不同。
|
12月前
|
存储 索引
数组的特点
数组是一种线性数据结构,用于存储固定大小的顺序集合。每个元素在数组中都有一个唯一的索引,可以快速访问和修改。数组支持随机访问,但插入和删除操作较慢,因为需要移动后续元素。适用于需要频繁读取数据的场景。
|
JavaScript
Nest.js 实战 (七):如何生成 SVG 图形验证码
这篇文章介绍了使用NestJS实现Session验证的图形验证码功能的具体步骤。首先,通过powershell代码安装依赖pnpmaddsvg-captcha。然后,在控制器中使用TypeScript代码引入相关依赖,创建一个图形验证码的接口,当请求该接口时,返回一张随机图片验证码。最后,进行了效果演示。
256 0
Nest.js 实战 (七):如何生成 SVG 图形验证码
|
安全 算法 API
如何在DocuSign中设置PKCE(Proof Key for Code Exchange)
在使用DocuSign进行电子签名时,安全性至关重要。PKCE提供了一个额外的安全层,特别是在移动设备或基于浏览器的应用中,有效防止授权码泄露或被未授权的第三方使用。
333 0
如何在DocuSign中设置PKCE(Proof Key for Code Exchange)
|
SQL 缓存 JavaScript
PageHelper 使用中的一些坑
PageHelper 使用中的一些坑
PageHelper 使用中的一些坑
|
存储 人工智能 程序员
溢出、截断、类型提升:从易错代码入手分析整型数据存储与类型转换
这篇文章介绍了关于数据在内存中的存储以及可能出现的溢出问题,包括整型数据的存储方式、取值范围以及溢出的现象和原因。文章通过例子和罗盘图解释了整型数据溢出时的计算过程,并指出在进行运算时要注意数据类型的转换和可能的溢出情况。此外,文章还给出了几个练习题,帮助读者理解和应用这些知识。
495 0
|
机器学习/深度学习 算法 数据挖掘
【C 言专栏】C 语言与机器学习的应用
【5月更文挑战第6天】C语言在机器学习中扮演关键角色,以其高效性、灵活性和可移植性实现底层算法、嵌入式系统和高性能计算。在神经网络、决策树和聚类算法等领域的实现中不可或缺。C语言被用于TensorFlow和OpenCV等知名库的底层,常与C++、Python结合使用。尽管面临开发难度和适应新算法的挑战,但C语言在机器学习领域的价值和潜力将持续展现,为科技进步贡献力量。
313 0
【C 言专栏】C 语言与机器学习的应用