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

品读代码
关于这个主题可谓仁者见仁智者见智 , 每个人的方法经验都有不同 , 我只能尝试着归纳一下自己的习惯方法 。
首先关注宏观整体 , 暂时忽略代码细节 ,因为如果你上来就陷入代码细节很容易迷失方向 , 就好像一棵树 , 你上来就去数树叶 ,头不晕才怪呢!你先要看清楚树根 , 树干 ,树枝 ,树叶的颜色 ,形状 , 长势等等 , 真没有必要逐个分析每个树叶!
打开项目代码 ,首先分析根目录下每个子目录的功用 ,有多少个配置文件 ,每个配置文件的功用!特别是项目的编译构建配置文件更要着重分析 ,弄清楚此项目依赖了哪些第三方库和框架!能否跨平台等等 ,然后构建编译一下 , 跑起来看看 。
找到项目的启动入口代码 ,仔细阅读分析 ,都加载了那些功能模块 ,先后顺序!特别是日志模块 ,事件监听派发模块 ,消息队列模块 ,用了那些并发库、网络库、采用了那些互斥同步机制等等 。
弄清楚模块间、对象间如何交互 , 比如是函数调用、消息队列、RPC、共享内存、分布式缓存、zookeeper等等 , 去除或者忽略各种辅助代码 , 专攻核心模块! 根本目的在于弄明白每个模块和对象的分工和协作方法 ,注意画UML图 ,脑图和文字描述 ,如:结构图 , 时序图等等 。
弄明白其采用的失败重试容错机制!异常捕获处理机制!优雅退出机制!信号处理机制!如果是分布式系统 ,需要弄明白CAP 本系统侧重哪两点!数据一致性级别 ,比如:强一致性 , 还是最终一致性等等 ,采用什么共识算法 , 分布式锁机制 ,分布式缓存 , 有无状态、能否自动伸缩等等 。
让程序跑起来 ,调试器gdb valgrind , ldd等工具都可以用上 ,在关键代码逻辑点加上日志!分析一下日志输出结果 , 包括日志自动收集分析工具等 。
其次着重阅读分析此项目采用了哪些特色数据结构和算法!特别是项目核心算法代码!分析是否依赖特定领域知识 ,比如特定数学物理方面的定理公式等等!各个击破!遇到看不懂的代码 ,先掠过 ,先通体都读一读 ,整体明白了 , 局部很可能就不攻自破!
再次对于资源管理和回收 ,资源池、对象池、各种连接池、并发限流 , 排队、降级、避免数据库击穿等机制也要看一看 。
最后看一看发布部署机制 , 监控狗等运维机制等等 。
阅读代码必须要懂得做减法 , 去除细枝末节 , 留下核心!对于具体算法 , 首先知道它的功能就好 ,比如知道这是排序算法 , 更进一步搞明白此处为什么采用堆排序而非希尔排序就可以了!至于作者为什么把代码写成那个样子 , 可以暂时放一放!以后有时间抠这些细节!不要被一叶障目 , 只见树木不见森林!
古人云登高望远 ,目的在于首先看清大的轮廓 ,不至于过早地陷入细节之中!兵法云不谋全局者不足谋一域!不谋万世者不足谋一时!
【华为|如何读代码,梳理出架构流程?老码农个人愚见】听老于聊聊技术、人生、美景吧!希望大家关注、评论、点赞、转发!支持我走下去!谢谢啦!
推荐阅读
- 小龙虾|三农探析:池塘养殖小龙虾如何高产?高产养殖技术全解析
- 【夜读】豆腐飘香
- 菜籽饼|菜籽饼被誉为果园之宝,但用错了烧苗烧根,果农如何来使用?
- 水产养殖|生态水产养殖如何提高鱼病的预防工作?大疆渔业这样建议
- 瘦肉精|如何避开 315曝光的瘦肉精问题肉?
- 美国_军事|那个帮美国破解北斗卫星的清华才女高杏欣,13年过去了,近况如何
- 肝纤维化|肝纤维化诊断共识解读(二)
- 失能|一图读懂|失智 失能 失乐,谁来干预这些老难题?
- 花菜有人焯水,有人直接下锅炒,都错了,看饭店大厨是如何做的
- 如何晚上发面早上蒸?教你用冷藏发酵,一学就会,馒头包子特好吃
