![c3c16532027113a6e68074a81b178756.png](https://i-blog.csdnimg.cn/blog_migrate/d3b7272ceefae581e94b7cde9f61ba59.jpeg)
前言
在简单学习Golang
和C++
基础语法后,我需要阅读系统源码,为了更好理解系统架构、系统内部模块交互和不同业务场景下的数据流,绘制一些简单流程图、时序图和系统架构图是有必要的。
主要工具
- process on
- ppt
系统架构图
最原始的系统架构图,简单分层展示不同层次的模块,加上基础服务、公共服务和监控服务:
![e9eac8efd8593f39a4eabc112d9b0ed3.png](https://i-blog.csdnimg.cn/blog_migrate/269fd81104cf1059f2b06521bd6906b1.jpeg)
加上数据流的系统架构图:
![d0567324ae615f1acd9bb4322a862024.png](https://i-blog.csdnimg.cn/blog_migrate/d999073d9dd7a2ebfc6cf83fbcf5ad01.jpeg)
流程图
简单业务流程图:
![6da61cd619337d5460d386471f58bf5f.png](https://i-blog.csdnimg.cn/blog_migrate/66d9d59f349de3ba46f7ca72a7c6a51f.jpeg)
加上接口的流程交互图:
![6b42d31bc01c359bed0a5ac30d48431e.png](https://i-blog.csdnimg.cn/blog_migrate/116f36bad8bcb10cc0898ee1684a6c65.jpeg)
接口交互图
简单的多个接口交互逻辑图:
![28791e278e06b2d4784b64cb52862367.png](https://i-blog.csdnimg.cn/blog_migrate/0ea0ae8d15eb5fd2fc393686c0901aec.jpeg)
模块提供的内外部接口和外部依赖:
![4e8198910ad4f9a0f51572e3081dd483.png](https://i-blog.csdnimg.cn/blog_migrate/5fb54fce3b44e6d2d05341b79348d98f.jpeg)
时序图
![cde82b951f5d6e850e6ee66ce0501a4f.png](https://i-blog.csdnimg.cn/blog_migrate/537a7b3a803485ccca26707a3ec311f0.jpeg)
程序流程图
梳理并发程序或复杂逻辑程序时可以会用到:
![ec2faba629736ac523ebd0f38e89f07b.png](https://i-blog.csdnimg.cn/blog_migrate/fa12f5d41e9a9f8de84c80f2fee1340e.jpeg)
算法图
这部分是用ppt做的,帮助直观理解算法原理,ppt画图的自由度更高
- boosting
![c83a99b28650798c75c84cc8cbdb980b.png](https://i-blog.csdnimg.cn/blog_migrate/5d2dbb0abad8d9249df3f8d6c639c142.jpeg)
- k折交叉验证
![96ce3f9abcaf0924264125096710f248.png](https://i-blog.csdnimg.cn/blog_migrate/c9e0694822ba05b0155cefb5f2487132.jpeg)
- 随机森林
![80248c9019f7e401d040b39437e61943.png](https://i-blog.csdnimg.cn/blog_migrate/7f254590a32ab48feeaea576167f2ab1.jpeg)
总结
作为一个研发菜鸟,在阅读大型系统的源码时碰上了很多问题,很多时候并不是语法层面的问题,反而是因为快速迭代开发和系统的庞大性给我梳理系统架构和模块功能带来较大的挑战。
通过简单绘制系统的架构图、各模块之间的接口交互和时序图等,我可以更加直观地理解整个系统的运作模式,大概就是所谓的磨刀不误砍柴工。