首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >源码阅读的正确姿势:教你如何入手读源码

源码阅读的正确姿势:教你如何入手读源码

作者头像
用户2781897
发布2019-07-10 15:47:52
1.6K0
发布2019-07-10 15:47:52
举报
文章被收录于专栏:服务端思维服务端思维

阿杜 | 作者

「javaadu」公众号

在软件开发中遇到问题的时候,我倾向于在不需要阅读源码的情况下解决问题,我会优先去查官方文档、FAQ、google或stackoverflow等网站,去看下有没有前人已经遇到过同类问题。阅读源码来解决问题,算是终极大招。当然,还有另一种需求,就是希望通过阅读源码了解软件的设计细节,来达到学习的目的,例如,通过阅读Dubbo的源码,我可以了解一个RPC框架的设计细节。

准备工作

阅读源码之前要做一些准备工作。

首先,确保自己掌握了相关的基础知识,例如,如果你要阅读Linux内核源码,要掌握C语言的语法、操作系统的基本概念和原理,如果你要阅读Spring的源码,要掌握Java语言基础、Maven的使用、一些设计模式等等;

第二,要学会使用这个软件或框架,了解这个软件或框架的使用场景,有什么功能,同类竞品有哪些,在学习使用软件或框架的过程中,最重要的参考资料是官方文档,一款优质的软件或框架,官方文档一般包括三块:快速开始,即一些demo;参考文档,最详细的文档,包括概念、特性的解读;FAQ:对于使用者来说常见的问题的解答;

第三,初步了解代码的整体组织结构,每个文件夹是做什么用的。

调试环境

调试环境非常重要,有了调试环境,就可以根据需要进行断点,对阅读源码非常有帮助。至于说如何搭建调试环境,不同的情况有不同的处理办法,例如MAT的源码,我是先将它的核心逻辑剥离出来,然后自己用单元测试进行调试;对于Dubbo源码,我则是写了一个Dubbo服务提供者、一个Dubbo服务消费者,以及安装了ZK之后才搭建起来的;对于Spring最简单了,利用Spring Boot启动一个hello word的demo就可以。

梳理业务流程

在做完上述准备工作后,我会按照功能或场景来阅读源码。

在阅读MAT(内存分析工具)的源码的时候,我是按照以下几个步骤来阅读:文件解析、索引创建、类直方图查询、支配树查询、线程视图查询等等;

在阅读Spring源码的时候,我会按照Spring容器的启动、IoC的工作过程、AOP的工作过程、静态属性的引入等功能来阅读;

在阅读Dubbo源码的时候,我会按照服务发布、服务订阅、服务调用三个主要场景进行源码阅读。按照功能或场景阅读,可以让我们从整体上对代码有所理解。

在掌握好源码的主干流程后,就可以根据自己的需要,进入自己关注的一些细节了,例如:在MAT中,索引文件是如何创建的,在Dubbo中,请求的超时机制和心跳机制是如何实现的。

注意点

阅读源码的过程中,我总结出了一些需要注意的点:

  1. 自顶向下阅读,先把握整体的、大的流程,然后再根据需要切入到对应的分支
  2. 忽略一些细节,例如参数的检查、错误的处理、数据形式的转换和存储
  3. 尽量准备好调试环境
  4. 要关注核心的业务逻辑或算法
  5. 最好能在阅读的过程中输出一些笔记或文档,例如模块划分图、函数的流程图、针对某个业务场景,在几个模块之间的时序图等等,这些文档可以先手写,然后再形成电子版存档。

如果读完觉得有收获的话,欢迎关注《高可用可伸缩微服务架构》一书(我们刚出版的那本)联合作者杜琪的公众号「javaadu」。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 服务端思维 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档