如何阅读源码

如何阅读源码,阅读源码的难点和方法分析 几次想阅读源码,但是每回都坚持不下去,毕竟读源码真的是一件很难得事情。随便一份源码,动辄几百个类,每个类几百行,没点毅力真的坚持不下来。当然,也有阅读方法的缘故。 直到我看到了一本书《通用源码阅读指导书》,感觉才找到了源码阅读的方法,也正是在这本书的指导下,我读完了第一份开源源码MyBatis。 1 意义与难点 这本书最开始讲了源码阅读的优点,作者总结了四点: 透彻地理解项目的实现原理 接触到成熟和先进的架构方案 学习到可靠与巧妙的实施技巧 发现自身知识盲点,提升自身知识储备 然后讲解了为什么阅读源码十分困 阅读详情

如何阅读源码

前言

关于阅读源码会有很多感悟,本篇仅是先行文章,后续将继续更新体验,亦有可能拆分多篇。

最近源码看得越来越多,遇到了一些编程的问题,也越来越喜欢直接去查看源码和官方文档,而不是随便上论坛搜答案。除非是一些总结性的或者讨论性的问题,亦或是为了迅速得到某一个答案而不关心具体问题,才会在论坛找答案。

这也是看源码的好处,当为了某一个问题去看源码的时候,其实不仅仅是解决了遇到的问题,对编码能力也会有显著帮助与提高。最直接不过的就是,可以学习优秀代码风格和编程规范,代码结构组织和设计模式。同时还可以看看别人在设计模块的时候,引用了一些什么自己尚且不知道的模块,这些模块往往也是作者设计的模块得以保证性能的原因之一,在未来自己的编码工作中,也可以适时引入。

很多时候,解决一个问题,靠空想或是完全创新性的得到一个解决方案是非常不容易的,能做到的当然最好。只不过,很多时候,解决问题才是关键,解决方案是什么不是最重要的。也许会一直打补丁,那说明,问题并没有真正解决,那就找新的解决方案。所以核心是问题。既然无法创造性的想出解决方案,很多时候就会陷入到死循环牛角尖之中。而如果能够模仿一些其他人的方案,无论是实际操作中的方式,或是思想上的指引,都会对自己为问题提出解决方案带来很大的益处。

举一反三是最高效的学习方式,看源码则是基础的一。

接下来谈谈自己在读源码中总结的经验。

使用IDE阅读

基本所有的源码是在git上存储的。以github为例,无论只是看某一模块,还是看整一个大项目,都应该把代码完整的clone下来。在IDE中阅读的一个好处是,方便的访问函数和类,既有助于从宏观上对整个项目的源码结构有一个基本的了解,又可以迅速的找到希望阅读的细节。

只看想看的模块

对于源码阅读,最忌讳的是,像读书一样,然后一篇一篇翻看源码。这种做法仅有一个好处,那就是看一下代码里面实际使用的某些特别的办法,犹如看文章的时候,看一下文中引用了哪些好词好句,在自己写文章的时候可以效仿引用。但这是所有读源码都可以有的收获,如果仅是抱着这种目的去阅读源码,那么阅读源码的价值会打很大的折扣。

阅读源码,应该带着某一个想要了解的功能细节,去深挖。举个例子,在阅读ali的oss python SDK的时候,我对于他如何设计基于分片上传的接续上传充分感兴趣。这其中包括了,本地文件解析,单文件拆多个类文件,文件多线程上传,对传输过程进行标记,对接oss API,完成上传并删除标记,重新传输时的文件完整性及一致性校验等。

由核心的过程标记,删除标记到多线程,再到文件解析与拆分,根据重点目标逐层阅读。而这个过程的开启,是源自掉用某一个方法时针对该方法的源码开始进行的。

插入调试

以python为例,将过程print出来,有利于理解他的调用,对于简单的调用,当然是非常显著,对于复杂的调用,使用debug会更加清晰。

阅读源码不是阅读英文书,一边读要一边使用,这样才有利于形成更深刻的理解。就像读五线谱,读每一个音符,是无法体会音乐的美妙的,要哼出声音,或者弹奏出来,才能赋予乐章灵魂与生命。

必要的注释与总结

注释,犹如读书笔记,对于将进行多次阅读的代码,插入注释有利于再次阅读时,提取已有的信息。

根据阅读体验,书写总结。可能是感悟,可能是技术使用技巧,也可能是对该源码的指导意见,均可以书写出来。当只有输入的时候,你会觉得只有一个人在战斗,当把习得的知识输出之后,你会发现不止你一个人在战斗。不要觉得自己写的东西大家都写过,没有人看。你现在看到的我写的这篇,很多人都写过了类似的文章,但你还是看到我的。唯一需要做的就是输出有质量的信息,避免浪费自己的时间,和别人的时间。

Show me your code

看各种各样的文档,是以人类比较好理解的语言去阅读;直接阅读源码,是以机器比较好理解的语言去阅读。本质是没有差别的。但是,尽可能多的阅读源码,对写代码的好处是非常大的。如同学习第二外语,多听说读写外语,比看各种关于该外语的历史结构描述等,要进步的快得多。

从头开始读

如果希望从头开始读整个包或者模块,那么一定要先看一下整个的架构。最忌讳的就是一行一行看,且不说不一定能够看懂在做什么,即使看懂了每一行的操作,到头来也很难清晰把握整个模块发挥的左右。从头开始看,一般最主要的目的是要看他如何设计一个架构的,自己学设计模式,要用起来很难,但是看别人已经完成的模块,就知道怎么应用了,依样画葫芦的应用也就有法可循。其次是代码里面有一些创新的设计点,不一定是架构上的,而是某一个方法让一些操作变得逻辑简单清晰,这是很值得挖掘的。最后是看代码风格本身有没有什么学习借鉴的地方,看多了会发现,很多所谓的代码风格比如一个函数方法内的实现不要超过多少行,或者对于魔术数黑魔法的各种拒绝,都可以在一些大牛的包里面看到,然后自己也意识到并不是一定不可以有一些不好的代码出现,关键还是代码本身发挥的作用,至于那些黑魔法只要保证维护成本在可控范围内,也并不是什么大不了的事情。

如何阅读android的framework层源码 如何阅读framework层源码 我们先提出4个问题来分解“如何阅读framework层源码”这个问题 源码从哪里可以看到? 阅读源码需要哪些基础? 阅读源码需要哪些工具? 如何有效地阅读源码? 一、源码从哪里可以看到? 阅读源码可以通过在线阅读和离线阅读两种方式 在线阅读 https://www.androidos.net.cn/ http://androidxref.com/ 离线阅读... 阅读详情

相关推荐

为什么要阅读linux内核源码以及如何阅读Linux内核源码

目的:为了更好地编写驱动程序,对自己写的程序有更深入的理解,并且自己的岗位定位在底层。 阅读linux内核,常用下面两种方法: 1.bochs+linux0.11+书(linux内核完全注释、linux内核完全剖析、linux内核设计的艺术) 2.sourcesinsight+linx2.X+书(linux内核情景分析) 阅读源码分为纵向阅读和横向阅读。纵向就是跟着内核的执行流程来读,横向就是按照...

qq_38769551的博客 4030

如何阅读源码汇总

译文:从源码中学习(阅读源码,初学者的有效成长方式) 目录前言为什么我们需要读源码站在巨人的肩膀上解决困难问题扩展你的边界应该读什么样的源码如何读源码预先准备流程与技巧结合上下文阅读代码把实例跑起来并与之交互了解数据结构间的关系了解模块间的依赖关系与边界使用测试用例点评一些好书译者的话 这是一篇译制博客文章,原博客为 Learn from Source Code (an Effective Way to Grow for Beginners) ,原作者为Nick Mose 。 我 向Nick申请获得了此文的

qq_41854911的博客 3989

交通银行金融科技后端开发实习生面试经验

笔试之路的第一个脚印。不足的地方:基本功不扎实,得补。先补sql(先整理出一篇sql语句做题的文章,争取下次笔试拿下这一块),编程题中的SQL写不出来感觉很丢人。然后补八股文,结合一些网上项目教程,来理解常用的一些八股文(比如各种锁)。

T__TSZ的博客 1722

如何阅读源码?

最近打算再看一遍UGUI源码。发现还是有些茫然无绪。 在突然面对大量 官方源码/他人代码 时,大多数人恐怕都是这样。 探究 “如何科学地阅读源码?” 是有意义的! 零、准备。 1、明确自己阅读源码的原因。能解决自己的问题即可。 2、戒急戒躁,做好长期阅读的准备。 3、黑盒体验,重度使用、熟读文档。明白系统需求、痛点、重点、难点。 4、做好笔记、总结。可以纳入版本管理,长期注解保存。 5、疑问点可以自己动手实例验证、调试。 一、从整体出发 1、看类设计 ①、 利用 VS的 类..

NRatel的博客 1297

【多模态融合】TransFusion学习笔记(1)

工作上主要还是以纯lidar的算法开发,部署以及系统架构设计为主。对于多模态融合(这里主要是只指Lidar和Camer的融合)这方面研究甚少。最近借助和朋友们讨论论文的契机接触了一下这方面的知识,起步是晚了一点,但好歹是开了个头。下面就借助TransFusion论文及其开源代码来串一串这方面的知识。这个很好理解,参考FPointNet网络图示。就是利用现有的2D检测器在图像上提取2D初始框,根据Camera成像原理,捕获2D框视锥内的点云,再利用点云分类模型(如:PointNet)做进一步分类。

4961

用AI+Playwright实现零代码UI自动化测试:以登录页面为例的实战指南

本文详细介绍了如何利用AI与Playwright结合实现零代码UI自动化测试,特别以登录页面为例进行实战演示。通过自然语言描述生成测试脚本,大幅降低技术门槛,提升测试效率,并支持跨浏览器验证。适合非技术人员快速上手专业级自动化测试。

weixin_28842269的博客 402

还不会如何阅读源码?一问教会你阅读源码的方式

正如标题描述的这样,我试图通过这篇文章,教会你如何阅读源码。事情大概是这样的,前段时间,我收到了一个读者发来的类似于这样的示例代码:他说在没有执行代码之前,他也知道前两个为什么一个不会回滚,一个会回滚。因为抛出的异常和 @Transactional 里面的注解呼应上了。但是第三个到底会不会回滚,没有执行之前,他不知道为什么会回滚。执行之后,回滚了,他也不知道为什么回滚了。我告诉他:源码之下无秘密。让他去看看这部分源码,理解它的原理,不然这个地方抛出一个其他的异常,又不知道会不会回滚了。

wdj_yyds的博客 1719

工业机器人关节拆装流程_一文读懂模块化直驱电机及机器人关节模组

私信“干货”二字,即可领取138G伺服与机器人专属及电控资料!如果说芯片是智能行业最为重要的核心元件,那么电机几乎可以说是支撑了整个自动化和大工业生产以及现代社会最为重要的部件,全世界90%的能源是由电机发出来的,而70%是由电机消耗调的,电机可以说是整个人类社会能源循环的占有绝对地位的产品。普通伺服电机伺服电机其实已经算是电动机中比较高端的类型,特别是永磁同步类型的伺服电机,由于其启动快速,惯量...

weixin_32159771的博客 2155

如何去阅读源码,我总结了18条心法

就比如说,当你已经知道了OpenFeign最终会对每一个FeignClient接口生成动态代理对象,之后注入的对象都是代理对象,代理对象中实现了RPC的请求之后,那么当你在学习dubbo的时候,是不是就可以去猜测注入的dubbo接口最终也是一个动态代理对象,并且这个代理对象也实现了RPC的请求?当你带着这些目的,你读源码就有很强的目的性,读完印象会很深刻。比如说,现在我想要阅读一下RocketMQ生产者是如何发送消息的,整个过程是什么样的,那么我首先至少得写个发送消息的demo,看看代码是如何写的。

xiaocai 2万+

Yolov2 训练时anchor是如何使用的?build_target

0.简略描述 1.将真值检测框变换到特征图尺度上 2.计算以特征图每个网格中心为中心点时所有锚框与真值检测框的交并比 3.取与真值检测框交并比最大的锚框的id,及真值检测框中心所在cell的id,有此,可将真值检测框与预测结果对应起来 4.计算位置回归损失,置信度损失,分类损失 1,网络的输出 图1 yolov2 网络对于检测框位置大小的输出是: 对于1个batch网络的输出的shape为[batch_size, H*W*num_anchors, 5+num_classes], 其中: num_

机器人视觉感知 2816

16、保障Azure应用安全:密钥管理与身份认证

本文深入探讨了保障Azure应用安全的关键措施,包括使用网络安全工具(如Application Gateway和Azure Front Door)防范攻击,解决传统密钥和机密存储方式的安全隐患,以及通过Azure Key Vault实现敏感信息的安全管理。同时,介绍了使用托管标识实现Azure资源间安全访问的方法,并结合实际操作步骤展示了如何配置Key Vault、设置访问策略、存储机密以及授予Web应用对SQL Server的访问权限。最后,对不同安全措施进行了比较,并提出了在开发、测试及生产环境中的综合

rock5的博客 72

读源码的七大步骤

掌握阅读源码的秘密武器,让牛b哄哄的项目在你面前无所遁形!

h295928126的博客 1316

作物生长模型Oryza V3实战2:下载、安装与使用

摘要:ORYZA 现在的应用范围已从单一水稻作物模拟扩展到多个水稻作物模拟。我在csdn站内也上传了“作物生长模型oryza v3大全(含所有参数模板和4个校准程序1个分析工具)”,可以说是全网最全的吧。网上搜索一般下载的v3只有一个a3主程序,不适合作全面与深入的研究,本版本从国外下载回来,一开始少了一个“SoilHydrau.exe”文件,说是有病毒被隔离了,后经历各种技术手段,并向国际水道研究所发送邮件,才得以补全所有的参数化及校准程序、分析工具,来之不易,有缘人得之。

502

如何阅读Java源码?

阅读Java源码的前提条件:1、技术基础在阅读源码之前,我们要有一定程度的技术基础的支持。假如你从来都没有学过Java,也没有其它编程语言的基础,上来就啃《Core Ja...

Java团长 2万+

2025华为od机试真题B卷【版本管理】JavaScript实现

在 软件版本管理中,版本号由点分割的数字组成,例如 1.2.3 和 2.8。现在,你需要编写一个函数,计算两个版本号之间的可用版本号个数。这里的可用版本号指的是所有满足 version1<x<version2的版本号x的个数。若 version1 >=version2 返回0.,

MISAYAONE的博客 254

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

学会阅读源码后,我觉得自己better了

我有一个大学同学,名叫石磊,我在之前的文章里提到过几次,我们俩合作过很多项目。只要有他在,我就特别放心,因为几乎所有难搞的问题,到他这,都能够巧妙地化解。他给我印象最深刻的一句话就是,“有啥解决不了的?只要你肯阅读源码。” 说起来源码,我是不太建议新手去阅读,容易劝退。不信,你让一个小学生去读一下《百年孤独》,我保证他会从此对阅读失去兴趣。去年,我忍着头皮读了这本书的前十页,然后就没有然后了——读不下去。我觉得自己还是嫩了点,生活阅历没到那个层次,感悟、内化、思考的能力也没到那个份上。 我建议程序员至少在

沉默王二 9716

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

关于源码阅读:源码资源、阅读工具、阅读方法

源码资源 源码资源一般分两类,一类是在线资源,一类是本地资源。 在线资源 这类资源一般是一个网站,提供在线源码阅读与检索功能。 比如 GitHub 就是一个大型的源码分享网站。我们可以在 GitHub 上面分享我们的源码,其他人可以在线阅读,也可以下载到本地,通过导入源码开发或者阅读工具进行阅读。 另外还有一些专业方向的在线阅读源码网站,以 Android 为例,AOSPXRef 网站是一个专门的...

尼古拉斯的AI笔记 1016

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

如何阅读Java源码 阅读java的真实体会

刚才在论坛不经意间,看到有关源码阅读的帖子。回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动。 源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心。 说到技术基础,我打个比方吧,如果你从来没有学过Java,或是任何一门编程语言如C++,一开始去啃《Core Java》,你是很难从中吸收到营养的,特别是《深入Java虚拟机》这类书,别人觉得好,未必适合现在的你。 虽

Welcome 2万+

Hive源码阅读之路

Hive源码阅读(1)阅读环境搭建前言:让学习成为一种习惯环境准备Hive源码下载Hive源码目录hive三个最重要的组件:其他组件hive辅助组件编译源码配置Hive本地调试配置IDEA-DEBUG(注意端口和Host)开始Debug,配置成功图片一张,入口类选择了CLi,想看一下具体的源码执行流程 前言:让学习成为一种习惯 **前言:**工作已经两年多了,各种各样的大数据框架也使用过,各种官网也翻了很多,但是对于框架的底层源码从未细细的了解过,有一位大佬对我说如果你遇到瓶颈就去看看源码,看看别人的代码怎

进阶的成长之路 4849

源码阅读的方法、误区以及三种境界

摘要:笔者出品12个免费的源码分析专栏,覆盖RocketMQ、Kafka、Dubbo、Sentinel 等JAVA主流中间件,并借此实现年薪翻倍等成绩,对源码阅读有着深刻的理解。

中间件兴趣圈 1万+

Spring源码解析——如何阅读源码

Spring源码解析——如何阅读源码 最近没什么实质性的工作,正好有点时间,就想学学别人的代码。也看过一点源码,算是有了点阅读的经验,于是下定决心看下spring这种大型的项目的源码,学学它的设计思想。 手码不易,转载请注明:xingoo 这篇博文你可以了解到: 1 Spring jar包以及源码使用 2 简单的spring运行示例 3 利用断点调试程序,如何快速的阅读程序【快捷键等的使用】 这次阅读的源码比较老了,是3.0.5版本的,由于正好手头有这个版本的源码,而且平时基本上也是用的这个版本Spri

m0_58477546的博客 1072

你也对阅读源码感兴趣,说说我是如何阅读Nacos源码的

前言 最近写了一些列的Nacos源码相关文章,很多朋友都感兴趣的在问:你最近在阅读什么源码,如何阅读源码?今天这篇文章就以Nacos源码阅读来展开聊聊。对阅读源码或技术感兴趣的朋友,也可以添加微信交流(微信号:zhuan2quan)。 在读这篇文章的时候呢,要看你想获得什么了。因为这篇文章亦是在写如何阅读Nacos源码,也是在写如何阅读源码。不要被技术栈所束缚,要提炼属于自己的方法。看你所欲,取你所需。 阅读源码的目的 不清楚大家为什么要阅读源码,就聊聊个人阅读源码的目的,或许可以拿来借鉴。 学习底层原理与

程序新视界 950

如何高效阅读源码

阅读源码是一项非常重要的技能,可以帮助我们更好地理解代码的工作原理和实现细节,在遇到问题时,阅读源码也是一个非常有效的解决方式。

做兴趣使然的Hero 1397
上一篇: Python使用装饰器注册函数和方法
下一篇: Go异常处理defer panic recover
浆糊串磕楠
博客等级 码龄10年 4粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值