如何高效学习和阅读源码?

article/2025/9/24 4:00:11

 作者:明明如月学长, CSDN 博客专家,蚂蚁集团高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《EffectiveJava》独家解析》专栏作者。

热门文章推荐
(1)《人工智能时代,软件工程师们将会被取代?》
(2)《超全人工智能 AI工具导航网站合集》
(3)《如何写出高质量的文章:从战略到战术》
(4)《什么? 你还没用过 Cursor? 智能 AI 代码生成工具 Cursor 安装和使用介绍》
(5)《我的性能方法论》
(6)《无需魔法打开即用的 AI 工具集锦》

一、背景

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

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

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

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

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

二、好的方法

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

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

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

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

如dubbo的架构图

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

(5)带着问题或者遇到问题后深入研究某一块,可以查看 pull request 或者  issues。

(6)使用 chatgpt 或 cursor 等人工智能工具学习源码。

三、具体方法

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

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

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

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

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

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

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

3.2 断点调试看调用栈大法

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

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

调试

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

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

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

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

3.3 结合 pull request 学源码

可以查看想学习的源码的 pull requests ,选择其中自己感兴趣的提交,查看解决什么问题,通过什么方法解决的,其他审查人员给了什么建议等。

3.4 使用 AI 学习源码

可以使用 chatgpt、new bing、cursor 等对某个源码段落进行提问,让它给出解释,让它们给出相关代码示例等,帮助自己理解某段代码。

《什么? 你还没用过 Cursor? 智能 AI 代码生成工具 Cursor 安装和使用介绍》

《人工智能时代,软件工程师们将会被取代?》

3.5 查看类中主要函数

mac快捷键 cmd+f12

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

3.6 查看继承关系大法

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

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

3.7 查看调用关系

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

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

双击都可以去到源码中。

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

mac上快捷键是cmd+y

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

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

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

依赖矩阵

基本解释:

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

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

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

绿色部分 BatchExecUtilTest使用到了BatchExecUtil。

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

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

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

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

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


http://chatgpt.dhexx.cn/article/5YvKjIFv.shtml

相关文章

架构学习——ER图

一、什么是ER图? E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。 二、为什么要画ER图? 它是描述现实世界关系概念模型的有效方法。是表示概念关系模型…

Thingworx入门学习

Thingworx入门学习 前言thingworx入门总结 前言 Thingworx是啥??? 基于物联网强大必入软件学习 thingworx的优点太多说些主要的 1.强大数据接入 2.数据分析 3.组态化模块化,二次开发节省成本快速开发 thingworx入门 提几点主线…

读后感:【许岑—如何成为有效学习的高手】

本博客的原创文章都是本人平时学习所做的笔记 。不要借鉴,不要参考 , 谢谢合作 本书关键词:适合自己、学习方法、短时间、注意力、解决难题、设定目标、名师

联邦学习(Federated Learning)

联邦学习简介 联邦学习(Federated Learning)是一种新兴的人工智能基础技术,其设计目标是在保障大数据交换时的信息安全、保护终端数据和个人数据隐私、保证合法合规的前提下,在多参与方或多计算结点之间开展高效率的机器学习。其…

机器学习类型概述

从不同的视角来看待诸多机器学习算法,有不同的划分。 1、语料视角 根据训练语料对人工参与类别划分或标签标识的需求程度,可将机器学习划分为四种类型: 监督学习、无监督学习、半监督学习、强化学习。 1.1、监督学习 Supervised Learning 在监督学习算…

对偶学习

考虑一个对偶翻译游戏,里面有两个玩家小明和爱丽丝,如下图所示。小明只能讲中文,爱丽丝只会讲英文,他们两个人一起希望能够提高英文到中文的翻译模型f和中文到英文的翻译模型g。给定一个英文的句子x,爱丽丝首先通过f把…

迁移学习简介及用途

迁移学习简介及用途 https://mp.weixin.qq.com/s/5_EYEJUycTtpfbxM_uGwHw --------------------- 本文来自 mishidemudong 的CSDN 博客 深度神经网络,相比于之前的传统机器学习方法,可以看成是一个全新的物种,这背后的原因,最…

十大机器学习算法

初学者应该知道的十大机器学习算法 来源:https://builtin.com/data-science/tour-top-10-algorithms-machine-learning-newbies 机器学习算法被描述为学习一个目标函数 (f),它最好地将输入变量 (X) 映射到输出变量 (Y):Y f(X) 最常见的机器…

贝叶斯学习

目录 贝叶斯学习 ​贝叶斯学习的特点: 朴素贝叶斯方法: 贝叶斯学习 贝叶斯学习就是基于贝叶斯理论(Bayesian Theory)的机器学习方法。 贝叶斯法则 也称为贝叶斯理论(Bayesian Theorem,或Bayesian Rule&a…

深度强化学习

前言 深度强化学习(DRL)已成为人工智能研究的热点之一。它已被广泛应用于端到端控制、机器人控制、推荐系统、自然语言对话系统等各个领域。本文对深度RL算法及其应用进行了分类,并将现有的DRL算法分为基于模型的方法、无模型的方法和先进RL方法进行介绍。 一、无模…

有效学习的6个方法学习方法

今天看了得到 有效学习的6个方法(上) 的一些感想。 1.价值感 这个就是做这件事情的动力,没有动力的话,是不愿意去做这件事的,效果当然也不会很好。做一件事把这做这件事的意义定的越大,越有动力&#xff0…

如何成为有效学习的高手(许岑)——思维导图

总结自许岑精品课《如何成为有效学习的高手》,图片看不清的可以看下面。 最后有彩蛋! 最后有彩蛋! 最后有彩蛋! 定义 高效学习的定义:找到最适合自己的学习手法,在相对短的时间内集中注意力,以…

如何有效的学习

大一时的我,完全就是个彻头彻尾的学渣,挂科、成绩被同学吊打,每天在宿舍浑噩度日。后来靠这个方法,我能做到最长连续学习10个小时,持续了三个月,也不会觉得很累。 如果你跟之前的我一样,学5分钟…

聊一聊我们应该如何有效学习

我之前写过 关于前端学习路线的一些建议(内含自测题)和 聊一聊加班严重时要如何自我提升 两篇文章。文章内容涉及的是学习路线和时间利用,今天我们就聊聊如何做到有效学习。 这里分享一些关于有效学习的经验,希望能对你有些许帮助…

计算机组成原理-单位转换

字节、字、位、比特之间的关系: 1位1比特;1字2字节;1字节8位;1字16位。 在16位的系统中:1字 2字节(byte) 16(bit) 在32位的系统中:1字 4字节(byte)32&…

【计算机组成原理】computer data reputation数值数据表示

Overview: 1.数据表示的目的(略) 2.数值数据的表示 3.非数值数据的表示 4.数值信息的校验(重点) 1.数据表示的目的: 组织数据,方便计算机硬件使用(汇编语言也具有数据类型&…

计算机组成原理:3.7虚拟存储器

3.7虚拟存储器 思维导图 虚拟存储器的基本概念 虚拟存储器将主存或辅存的地址空间统一编址,形成一个庞大的地址空间,用户可以在里面进行自由编址,而不需要在乎实际的主存容量和程序存放的位置 虚拟地址比实际地址大 过程 CPU使用虚地址时…

计算机原理概述

目录 计算机的发展史(稍作了解即可) 从硬件方面来了解计算机 程序的存储 广义数据在内存的存储问题 CPU的基本工作原理 让我们来从以下两个方面来了解计算机: 1.从硬件角度学习计算机的基本原理————CPU的基本工作原理 2.从操作系统…

《计算机组原理》存储器(一)

4.1概述4.1.1存储器的分类4.1.2 存储器的层次结构 4.2主存储器4.2.2半导体存储芯片简介4.2.3 随机存取存储器4.2.4只读存储器4.2.5存储器与CPU的连接4.2.6 存储器的校验4.2.7提高访存速度的措施 4.1概述 4.1.1存储器的分类 4.1.2 存储器的层次结构 一般来说,高速越…

计算机原理(硬件角度—CPU)

​ 一、概述 1、关于计算机原理: (1)从硬件角度学习计算机的基本工作原理——CPU的基本工作原理。 (2)从操作系统软件角度,学习我们的程序是如何工作起来的——进程管理。 2、程序指令数据 程序算法&…