源码阅读技巧篇

主题

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

为什么要读源码

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

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

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

读什么样的源码

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

有什么技巧

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

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

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

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

思考、交流

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

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

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

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

坚持

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

原文发布于微信公众号 - 程序猿DD(didispace)

原文发表时间:2017-12-31

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏PPV课数据科学社区

案例 | 看斗鱼TV如何玩转大数据

自我介绍 我是吴瑞诚,现在负责斗鱼数据平台部,今天给大家分享一下斗鱼大数据这块的玩法。我先做个自我介绍,我是11年初华科通信硕士毕业就进入淘宝,主要做HBase...

4996
来自专栏专栏之我的

Linus Torvalds告诉内核开发人员修复Linux系统的细节

Linus Torvalds在Linux 4.18发现一些贡献使内核开发过程复杂化之后,给Linux内核开发社区带来了一些改进。

1332
来自专栏用户2442861的专栏

教你阅读Python开源项目代码

作者:董伟明 链接:https://zhuanlan.zhihu.com/p/22275595 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,...

4021
来自专栏爬虫技术

python3网络爬虫-破解天眼查-分布式爬虫系统-源码深度解析

Python爬虫-2018年-我破解天眼查和启信宝企业数据爬虫--破解反爬技术那些事情

2K2
来自专栏开源项目

码云周刊 | 面试之前,或许该高效率地学点干货!

一周热门资讯回顾 1、程序员多大年纪算高龄,届时该何去何从? ? 随着年龄的增长,程序员会相对难以保持技能更新。许多人宁愿留在自己的舒适区,不冒任何风险。即使...

2976
来自专栏Modeng的专栏

JavaScript 简史

「 JavaScript 」 诞生于 1995年,当时主要是用于处理由服务器负责的一些输入验证操作。

1383
来自专栏游戏杂谈

游戏版本更新小记

先大概介绍一下项目,卡牌游戏,主要面向女性用户。前期是走IOS市场,后来又移值到Android平台上,在几家大一点的Android渠道上进行运营。Android...

1181
来自专栏Android 开发者

现已推出 Android 8.1 和 Android Oreo Go 版本 —— 为所有人打造由 AI 驱动的全覆盖移动平台

2574
来自专栏牛客网

运维工程师养成实录:从确立目标到收获offer

作为一名渣硕,找工作陆陆续续从今年的三月份开始断断续续的刷一些题,看基础到八月份的猛攻阶段,到此,算是得到了一个不错的收获,也拿到了几个offer,算是对自己的...

92113
来自专栏大魏分享(微信公众号:david-share)

硬功夫来了 | Ansible Tower批量实现Linux系统标准化

本视频对应构建运维自动化架构中->基础架构管理层->运维自动化平台。 ? 视频一:Ansible Tower管理Windows演示 Ansible Tower管...

3634

扫码关注云+社区

领取腾讯云代金券