源码阅读技巧篇

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 说到读源码,让我想起来了读书,古语有云:“读破万卷书,下笔如有神”。

转载请注明原创出处,谢谢!

说在前面

本人水平有限,下面的一些都是本人的思考与理解,如果有那里不对,希望各位大佬积极指出,欢迎在留言区进行评论交流、探讨。

主题

  • 为什么要读源码
  • 读什么样的源码
  • 有什么技巧
  • 思考、交流
  • 坚持

为什么要源码

说到读源码,让我想起来了读书,古语有云:“读破万卷书,下笔如有神”。

  • 多读读大师的想法技巧
  • 通过大量阅读进行积累
  • 把一些零碎的知识点整合起来

就拿RocketMQ来说,它是如何实现高性能、高可用。之前写过高可用的一些思考和理解里面的特性他应该都满足,RocketMQ就是把这些很多零散的知识点整合运用之后写出的非常牛逼的项目。

读什么样的源码

依旧拿读书来说,我们应该读什么书呢? 读名著,读大师的书。那么读源码在我看来是一样的,尽量进行选择,如果不选择有时候还会浪费时间等。只要是优秀的从那个开始无所谓。

有什么技巧

个人常用的有如下,欢迎留言区补充。

  • 先让项目可以跑起来(很重要的一点
  • debug
  • 打印日志以及修改log4j日志级别
  • 查看调用栈
  • 全文搜索
  • 大胆猜测再验证

在多线程以及网络方面阅读调试应该是最难的(关于多线程我的史上最难的一道Java面试题 (分析篇)这篇文章最后也提到了一些小技巧),通常断点有时候不好使,所以通过打印日志,搜索等比较方便,有些由于为了代码的灵活性,高度抽象很不好找,通过日志里面的一些关键词搜索,在加猜测,对不对可以加注释(可能就不执行了那么表示是对的),可以加日志等进行验证。

备注:欢迎关注我的公众号【匠心零度】,后续源码类分析的时候会运用上述技巧进行说明等。

思考、交流

  • 多思考是很有必要的,这样理解大师的代码也好理解,并且我们不仅仅是看,可能以后在自己的项目中就会用这种思想这种技巧,所以需要多思考。
  • 多与一些大佬交流,我学习jvm就是遇到问题大佬们帮助我解决、交流学习的,所以交流也是重要途径。

看阿里RocketMQ的时候,发现开源的不支持消息轨迹查询,也是由于之前看过了解过,经过自己的思考,感觉如果需要加上应该不难(前提是需要把RocketMQ源码整体看懂,可以在指定地方加埋点),其实apm产品已经很多了,比如鹰眼、CAT、pinpoint等,其实他们都是基于Google Dapper思想。

RocketMQ的MessageID就是一个特别好的东西,用于将调用链的各个调用重新关联起来。之后在结合Hbase的rowkey特性直接一拉整个调用链就都出来了,如果在好点,可以根据消息内容、时间各各条件通过es或者solr查询得到MessageID,之后在通过Hbase把整个拉出来即可。

所以看出来了吧,如果RocketMQ源码读的差不多,想加进来很容易啊,所以重要吧!!!

坚持

上面的都是次要的,这条是最重要的:坚持,滴水穿石、持之以恒,可能在短期看不出来效果,因为需要一个量变到质变以及破茧成蝶的过程。

如果读完觉得有收获的话,欢迎点赞加关注。


个人公众号,欢迎关注,查阅更多精彩历史!!!
匠心零度公众号

相关实践学习
快速体验阿里云云消息队列RocketMQ版
本实验将带您快速体验使用云消息队列RocketMQ版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
人工智能 安全 程序员
计算机专业必看的几部电影
这些电影涉及网络安全、互联网创业、编程挑战、社会工程学、科技巨头的创业故事和复杂系统逻辑,可以激发对计算机科学的兴趣并提供对未来科技发展的见解。
292 1
|
3月前
|
Ubuntu Linux 数据安全/隐私保护
一步步学习:Ubuntu系统安装教程
准备完毕,点击“现在安装”,系统开始安装。安装过程中,Ubuntu会显示一些新特性和提示信息。安装完毕后,点击“现在重启”,然后按照提示操作,拔出U盘或DVD盘,再次按下回车,电脑将会再次启动,这次进入的就是全新的Ubuntu操作系统了。 尽管初次安装Ubuntu可能有所困难,但只要跟着步骤走,掌握了规律,就能轻松过关。Ubuntu是个友好且强大的系统,我相信你在探索它的过程中会收获满满。
|
6月前
|
机器学习/深度学习 人工智能 监控
业余AI与专业AI的区别,就在这些评估指标上
如何知道你训练的AI模型是天才还是学渣?本文用轻松幽默的方式带你了解机器学习的各类评估指标,让你不仅能说出模型的好坏,还能找到改进的方向,避免在实际应用中翻车。
|
缓存 移动开发 JSON
【网络安全 | 网络协议应用层】结合Wireshark讲解HTTP协议
【网络安全 | 网络协议应用层】结合Wireshark讲解HTTP协议
505 0
|
Linux Shell 开发工具
|
安全 Linux 测试技术
惊世骇俗!国产 OpenEuler 向 CentOS 发起挑战:这场替代之战结局如何?
【8月更文挑战第13天】曾为服务器首选的 CentOS 因策略变动促使业界寻求新替代。国产 OpenEuler 操作系统应运而生,它是一款开源 Linux 发行版,具备出色的性能与安全性,并提供及时的安全更新。OpenEuler 采用类似 CentOS 的包管理工具,便于用户过渡。例如,可在 OpenEuler 上轻松安装与配置 Web 服务器。尽管其生态系统仍在发展中,但对于注重安全及国产技术的用户而言,OpenEuler 已展现出替代 CentOS 的强大潜力。不过,在具体应用时仍需综合考量业务需求。
477 4
|
Kubernetes 安全 Linux
在k8S中,Calico网络组件实现原理是什么?
在k8S中,Calico网络组件实现原理是什么?
|
数据可视化 开发工具 计算机视觉
LabVIEW视觉采集软件(VAS)、视觉生成器(VB)和视觉开发模块(VDM)之间有什么不同
LabVIEW视觉采集软件(VAS)、视觉生成器(VB)和视觉开发模块(VDM)之间有什么不同
264 1
|
SQL 存储 容灾
从中间件到分布式数据库,PolarDB-X的透明之路
PolarDB-X前身是淘宝内部使用的分库分表中间件TDDL(2007年,Java库的形态),早期以DRDS(2012年开始研发,2014年上线,分库分表中间件+MySQL Proxy的形态)的品牌在阿里云上提供服务,后来(2019年)正式转型为分布式数据库PolarDB-X(正式成为了PolarDB品牌的一员)。从中间件到分布式数据库,我们在以MySQL为存储构建分布式数据库这条路上走了10余年,这中间积累了大量的技术,也走了一些弯路,未来我们也会坚定的走下去。
|
算法 前端开发 小程序
智能排班系统 【管理系统功能、操作说明——下篇】
智能排班系统 【管理系统功能、操作说明——下篇】
1218 1