华为|如何读代码,梳理出架构流程?老码农个人愚见

华为|如何读代码,梳理出架构流程?老码农个人愚见


品读代码
关于这个主题可谓仁者见仁智者见智 , 每个人的方法经验都有不同 , 我只能尝试着归纳一下自己的习惯方法 。

首先关注宏观整体 , 暂时忽略代码细节 ,因为如果你上来就陷入代码细节很容易迷失方向 , 就好像一棵树 , 你上来就去数树叶 ,头不晕才怪呢!你先要看清楚树根 , 树干 ,树枝 ,树叶的颜色 ,形状 , 长势等等 , 真没有必要逐个分析每个树叶!

打开项目代码 ,首先分析根目录下每个子目录的功用 ,有多少个配置文件 ,每个配置文件的功用!特别是项目的编译构建配置文件更要着重分析 ,弄清楚此项目依赖了哪些第三方库和框架!能否跨平台等等 ,然后构建编译一下 , 跑起来看看 。

找到项目的启动入口代码 ,仔细阅读分析 ,都加载了那些功能模块 ,先后顺序!特别是日志模块 ,事件监听派发模块 ,消息队列模块 ,用了那些并发库、网络库、采用了那些互斥同步机制等等 。

弄清楚模块间、对象间如何交互 , 比如是函数调用、消息队列、RPC、共享内存、分布式缓存、zookeeper等等 , 去除或者忽略各种辅助代码 , 专攻核心模块! 根本目的在于弄明白每个模块和对象的分工和协作方法 ,注意画UML图 ,脑图和文字描述 ,如:结构图 , 时序图等等 。

弄明白其采用的失败重试容错机制!异常捕获处理机制!优雅退出机制!信号处理机制!如果是分布式系统 ,需要弄明白CAP 本系统侧重哪两点!数据一致性级别 ,比如:强一致性 , 还是最终一致性等等 ,采用什么共识算法 , 分布式锁机制 ,分布式缓存 , 有无状态、能否自动伸缩等等 。

让程序跑起来 ,调试器gdb valgrind , ldd等工具都可以用上 ,在关键代码逻辑点加上日志!分析一下日志输出结果 , 包括日志自动收集分析工具等 。

其次着重阅读分析此项目采用了哪些特色数据结构和算法!特别是项目核心算法代码!分析是否依赖特定领域知识 ,比如特定数学物理方面的定理公式等等!各个击破!遇到看不懂的代码 ,先掠过 ,先通体都读一读 ,整体明白了 , 局部很可能就不攻自破!

再次对于资源管理和回收 ,资源池、对象池、各种连接池、并发限流 , 排队、降级、避免数据库击穿等机制也要看一看 。

最后看一看发布部署机制 , 监控狗等运维机制等等 。

阅读代码必须要懂得做减法 , 去除细枝末节 , 留下核心!对于具体算法 , 首先知道它的功能就好 ,比如知道这是排序算法 , 更进一步搞明白此处为什么采用堆排序而非希尔排序就可以了!至于作者为什么把代码写成那个样子 , 可以暂时放一放!以后有时间抠这些细节!不要被一叶障目 , 只见树木不见森林!

古人云登高望远 ,目的在于首先看清大的轮廓 ,不至于过早地陷入细节之中!兵法云不谋全局者不足谋一域!不谋万世者不足谋一时!
【华为|如何读代码,梳理出架构流程?老码农个人愚见】听老于聊聊技术、人生、美景吧!希望大家关注、评论、点赞、转发!支持我走下去!谢谢啦!


    推荐阅读