一、背景

作为Java开发工程师,想进阶,阅读别人项目的源码,尤其是开源的优秀核心技术栈的源码必不可少的步骤。

那么有什么高效的阅读源码的方法呢?

常见的比如买一些 《xxx源码解析》图书,但是存在一个问题,刚开始看的时候非常吃力,跟不上,显得很枯燥,而且很可能看完可能还是毫无头绪。

又不如直接拉源码下来,又不知道如何入手。

今天和好友探讨过这个问题,把我们认为比较好的阅读和学习源码的技巧整理在这里。

二、好的方法

拉源码,通过单元测试,调试技巧,各种IDE的辅助功能和插件了解调用关系。

根据单元测试打断点,查看调用栈。

结合源码解读的图书和文章再去理解。

结合官方文档的功能文档和架构文档来读。

如dubbo的架构图

对从整体掌握源码和原理有极大的帮助,dubbo官方文档甚至还有配套的源码截图。

带着问题或者遇到问题后深入研究某一块,用博客等积累和分项。

三、具体方法

2.1 github拉取源码+看源码注释+单元测试

去github上拉取源码(建议直接拉clone原项目或者fork之后的项目源码)。

建议fork源码,这样本地可以对源码加入自己的注释。

或者快捷键进入源码后,IDEA右上角有“Download Source”在项目中拉源码,方便调试和学习。

因为源码带有注释,而多数的开源项目,尤其是外国的优秀开源项目的注释都非常详细,包括类、函数的作用以及参数的含义都非常清楚。

另外优秀的开源项目必然会有单元测试,几乎每个类都有单元测试。

想重点学习某个类,就运行某个单元测试,根据单元测试的角度了解函数的目的,用法等

2.2 断点调试看调用栈大法

断点调试可以通过单步调试,通过堆栈信息,通过watch来查看类的各种属性。

对理解程序流程和数据变化有极大的帮助。

调试

这里非常重要,因为常规的调试都是单步往下走,但是这里可以通过左下角的调用栈,查看已经入栈的栈帧,查看上层函数调用!!!

比如在spring生命周期的某个环节如构造方法中打了断点,在这里就可以追溯到bean的初始化初期的调用代码。

而且可以通过删除frame实现“回退”。

对分析源码有极大的帮助!!!!

2.3 查看类中主要函数

mac快捷键 cmd+f12

双击可以跳转到对应的函数源码。

2.4 查看继承关系大法

通过继承关系可以了解一个类“本质”是啥。

而且通过双击,可以跳转到继承关系的任何一个类的源码。

2.5 查看调用关系

通过“Call Hierarchy”查看调用的关系

通过右键“find usages”查看调用

双击都可以去到源码中。

2.6 查看源码时不跳转显示参数或某个子函数的源码

mac上快捷键是cmd+y

这在研究源码时帮助很大,不仅节省很多时间,而且效果更好。

可以用在参数上,也可以用在子函数上。

2.7 依赖关系(依赖矩阵、依赖UML等)

依赖矩阵

基本解释:

绿色使用了灰色的类,灰色类使用黄色类。

红色代表形成了循环依赖。

如图所示我们鼠标放在“BatchExecUtil”上,根据右上角的图示可知。

绿色部分 BatchExecUtilTest使用到了BatchExecUtil。

而BatchExecUtil又使用到了下面4个类。

可以切换到不同的类(行),查看关系,下图是切换到“SimpleRetryUtil”的视图:

三、利用IDEA的各种其他快捷键和功能辅助提高效率

学习和掌握idea常用的快捷键,这里就不一一介绍了。

比如点击左上角可以切换到包视图,此次修改变化的文件等等。

还可以多熟悉一下analyze菜单栏下的其他高级功能

如果觉得本文对你有帮助,欢迎点赞评论,欢迎关注我,我将努力创作更多更好的文章。

另外欢迎加入我的知识星球,知识星球ID:15165241 一起交流学习。

https://t.zsxq.com/Z3bAiea  申请时标注来自CSDN。

如何高效学习和阅读源码?相关推荐

  1. How Tomcat works — 一、怎样阅读源码

    在编程的道路上,通过阅读优秀的代码来提升自己是很好的办法.一直想阅读一些开源项目,可是没有合适的机会开始.最近做项目的时候用到了shiro,需要做集群的session共享,经过查找发现tomcat的s ...

  2. 如何在 GitHub 上高效阅读源码?

    原文链接: 如何在 GitHub 上高效阅读源码? 之前听说过一个故事,一个领导为了提高团队战斗力,把团队成员集中起来,搞封闭开发,重点还是在没有网的条件下. 结果就是一个月过去了,产出基本为零. 我 ...

  3. 丁威: 优秀程序员必备技能之如何高效阅读源码(二更)

    @[toc](丁威: 优秀程序员必备技能之如何高效阅读源码(二更)) 消息中间件 我能熟练使用这个框架/软件/技术就行了, 为什么要看源码?" "平时不用看源码, 看源码太费时间, ...

  4. 朋友问我学习高并发需不需要阅读源码,我是这样分析的!!

    来自:冰河技术 写在前面 最近正在写[高并发专题]的文章,其中,在[高并发专题]中,有不少是分析源码的文章,很多读者留言说阅读源码比较枯燥!问我程序员会使用框架了,会进行CRUD了,是否真的有必要阅读 ...

  5. 也谈如何高效阅读源码

    CSDN前辈经验借鉴. 原文地址:http://blog.csdn.net/oncoding/article/details/4434315 源码阅读,自然是计算机学习的捷径之一,其重要性在此就不再赘 ...

  6. 高效阅读源码的五步速读法

    阅读代码是程序员最重要的技能之一,我们每天都在读同事的代码或者第三方库的代码,那怎么高效的阅读代码呢?分享下我的源码阅读方法. 我的阅读源码的方法分为五步: 第一步,通过文档和测试用例了解代码的功能 ...

  7. 源码面前没有秘密,推荐 9 个带你阅读源码的开源项目

    在文章开始之前,请各位先回忆下在日常开发过程中,都使用或依赖了哪些开源项目?是不是发现,开源项目已经完全融入到日常开发! 如今大多数的程序员技术栈和工具箱里,或多或少都有开源项目的身影:大到操作系统. ...

  8. 【转】使用 vim + ctags + cscope + taglist 阅读源码

    原文网址:http://my.oschina.net/u/554995/blog/59927 最近,准备跟学长一起往 linux kernel 的门里瞧瞧里面的世界,虽然我们知道门就在那,但我们还得找 ...

  9. 帮助阅读源码的8个技巧

    大家好,我是Z哥. 之前写了一篇关于阅读源码到底有多少价值的文章<阅读源码的真正价值>,反响还不错. 在文中我向你阐明了阅读源码5个价值. 面试 在工作中更快地上手新项目 给自己创造用新技 ...

  10. 阿里开发者们的第16个感悟:让阅读源码成为习惯

    2015年12月20日,云栖社区上线.2018年12月20日,云栖社区3岁. 阿里巴巴常说"晴天修屋顶". 在我们看来,寒冬中,最值得投资的是学习,是增厚的知识储备. 所以社区特别 ...

最新文章

  1. 图表君聊docker-仓库
  2. mysql count 条件_我以为我对MySql很了解,直到我面试了字节跳动
  3. 《iOS 8案例开发大全》——实例006 实现复杂的查找和替代工作
  4. 基于区块链的健康链系统设计与实现(1)引言
  5. 神经网络模式识别matlab,基于matlab仿真的神经网络模式识别
  6. Ubuntu返回到Gnome经典桌面!
  7. hdu 4277 USACO ORZ
  8. Java正則表達式詳解
  9. fillrect不填充被覆盖的区域 mfc_quot;条带覆盖quot;猜想的中二证明:quot;球面条线覆盖或点覆盖quot;积分π...
  10. REVERSE-PRACTICE-BUUCTF-9
  11. Redis 处理客户端连接的一些内部实现机制
  12. 数据库开启了闪回和归档,关闭归档日志alter database noarchivelog的时候报错:ORA-38781: cannot disable media recovery
  13. python数据分析用什么框架_用python选择用于内存大的数据分析的框架
  14. java web个人博客开发(一需求获取和需求分析文档)
  15. cru使用教程_极客自习室 篇四:「教程向」给你显示器超个频呗!一键提升40%!省下好几百!...
  16. 机原自检——第7章 机械的运转及其速度波动的调节
  17. pandas算加权平均值_python – 为pandas中的不规则时间序列创建加权平均值
  18. 什么是Windows驱动程序?
  19. Oracle数据库服务重启方法
  20. 和席慕容《一颗开花的树》

热门文章

  1. Codeforces Round #622 (Div. 2) C2. Skyscrapers (hard version)(单调栈)
  2. MSM7225 600MHZ CPU和高通MSM 7201A 528MHz CPU的比较
  3. Brute-Force模式匹配算法
  4. JavaScript获取地理位置
  5. STM32 SPI获取磁性角度传感器AS5048A角度数据
  6. Vue学习笔记:获取文件唯一标识 md5值
  7. python语言程序设计教程赵璐 第三章 课后习题 程序流程控制
  8. python中oct函数_Python中的oct() 函数是什么?
  9. 计算机设置新网络,新买的电脑怎么设置网络连接
  10. 计算机组成原理图ei,(完整版)计算机组成原理试题库(含答案)-