V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jiangxinlingdu
V2EX  ›  程序员

源码阅读技巧篇

  •  1
     
  •   jiangxinlingdu · 2018-02-11 10:32:05 +08:00 · 2437 次点击
    这是一个创建于 2483 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    说在前面

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

    主题

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

    为什么要源码

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

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

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

    读什么样的源码

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

    有什么技巧

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

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

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

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

    思考、交流

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

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

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

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

    坚持

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


    如果读完觉得有收获的话,欢迎点赞、关注、加公众号 [匠心零度] ,查阅更多精彩历史!!!

    coffeSlider
        1
    coffeSlider  
       2018-02-11 10:44:27 +08:00 via Android
    看到指纹识别就倒胃口
    douglas1997
        2
    douglas1997  
       2018-02-11 11:01:46 +08:00
    @coffeSlider 同感。
    huaxianyan
        3
    huaxianyan  
       2018-02-11 17:58:42 +08:00
    这种的看一个 block 一个
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3557 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 49ms · UTC 04:32 · PVG 12:32 · LAX 20:32 · JFK 23:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.