丁威 中间件兴趣圈

读完需要

1

分钟

速读仅需 1 分钟

在技术职场中普遍存在如下几种现象:

  • 对待工作中所使用的技术不需要阅读源码,只需在开发过程中能够熟练运用就行

  • 看源码太费时间,而且容易忘记,如果从实际使用过程中出现的问题出发,针对性的阅读源码,其学习效率会更高效,所以平时无需看源码。

对此我有着不同的理解,容我慢慢道来。

本文将从如下4个角度进行剖析:

  1. 源码阅读的必要性

  2. 源码阅读技巧

  3. 源码阅读的三种境界

  4. 源码阅读的误区

1

源码阅读必要性

1.1

通用型基础技术应该深入源码研究

在 JAVA 领域中笔者认为通用型基础技术包含 JAVA 集合、Java并发(JUC)。这类技术是项目中使用的高频技术,在合适的场景中选用合适的数据结构、选用合适的线程并发模型、合理控制锁粒度等都能显著提高应用程序的可用性、健壮性。

通用型技术正因为其具有普遍性,横向对比更具代表性,职场面试时的可辨别性非常高,如何在高样本中突出自己就显得极为必要,通过阅读源码,深刻理解其内部原理成为我们的不二法宝。

当然通过阅读源码并不是知晓原理的唯一方法,但作为一个名程序员、直面代码,亲自感受代码的魅力或许来的更加直接。

1.2

重点领域应深入源码研究

为了提高辨识度作为职场的我们应该打造自己的专属标签,即“亮点”。通常情况我们应该选择在日常工作中使用的技术,在积累了丰富的使用经验、线上故障排查经验的前提下,应该深入研究其源码,成体系掌握该技术,从而对其更具掌控性,做到提前预判线上问题,规避大量线上故障,提升稳定性,助力业务降本增效。

例如笔者所在公司在微服务、消息中间件领域分别采用了 Dubbo、RocketMQ,并且笔者有幸参与到这项技术栈的运用与运维,积累了丰富的使用经验,为此笔者为了突出在这两个领域的优势,详细阅读其源码,并作成专栏发布在『中间件兴趣圈』公众号与CSDN等知识分享平台,由于是成体系剖析的原因被出版社相中,邀请出书,《RocketMQ技术内幕》一书就在这样的背景中应运而生,从而成为笔者职业技能中非常亮眼的标签,助力职场。

源码阅读确实很重要,但一定需要成体系研究,大部分人认为在处理问题时再根据具体问题去看源码,会更有针对性,觉得没必要成体系看。

不可否认这有其正确性的一面,从问题本身出发,看源码效率更快,“投入产出比”更高,随着遇到的问题越来越多,对该技术理解也会越来越深,这个其实就是我们通常讲的“经验”。我觉得大部分情况下是可取的,这个过程其实是一个被动的过程,并且如果生产环节由于并发不高等因素,可能一年、两年也不会出现一两次故障,这样就会造成经验的积累会非常慢,从而使得工作了4、5年的朋友其竞争力还不如工作2,3年的重要原因,所以我的观点是如果是想打造成自己的专属亮点的话,我们还是需要主动通过阅读其源码,成体系掌握其设计理念、实现原理,更好的打造自己的专属亮点。

2

如何阅读源码

既然阅读源码非常有必要,那如何阅读源码呢?笔者根据多年的源码阅读经验整理了如下方法论:

  1. 了解这款中间件的使用场景、以及架构设计中将承担的责任。

  2. 寻找官方文档,从整体上把握这款中间件的设计理念。

  3. 搭建自己的开发调试环境,运行官方提供Demo示例,为后续深入研究打下基础。

  4. 先主干流程再分支流程,注意切割,逐个击破。

  5. 阅读源码过程中带着思考与质疑思维。

理解了其使用场景后,结合官方文档,尝试理解该中间件需要解决的问题、并思考如何解决,思考过程中并不一定要求我们想出一个具体的答案,只是在真正步入源码阅读时能更快感悟其代码含义。

当然在阅读源码的过程中可能会到难题,遇到无法理解作者的实现意图,特别是遇到一些自己不太熟悉的编程方式(例如位运算),此时通常有两种解决方案:

  1. 通过DEBUG,结合运行时数据,方便对代码的理解。

  2. 从易到难,可以先尝试阅读一下JAVA集合框架的源码,提炼出一套自己的源码研究方法论。

源码阅读其实最难的不是代码本身,也不是无法理解其设计理念,最难的是坚持,故在这里借用笔者的座右铭与大家共勉:越努力越幸运,唯有坚持不懈。

3

源码阅读的三层境界

接下来我想再结合笔者4年源码阅读的历程,谈谈我对源码阅读的一些更深层次的理解,介绍一下笔者在各个阶段阅读源码所处的状态。

3.1

源码阅读的初级阶段

笔者的老粉丝们应该能感觉到笔者初期的源码阅读文章,基本上是记流水账,其最直观的表现现象是对源码一样一行加注释,只关注底层实现细节,但并未形成更高层次认知,对其设计理念并未提炼与深度领悟。

3.2

能提问、思考、并提炼

随着技术类文章的持续分享,笔者认识了很多大牛、发现与大牛交流的时候,一开始并不会说细节,而是讲设计理念,这就要求我们在阅读源码的时候多思考,并反问自己如果需要自己实现的话我们该如何着手,如何设计,带着疑问去研究源码,通过对比,思考,会对其背后的理念有了更深刻的理解。

3.3

思考、质疑、验证

其实无论是哪个开源框架都会存在BUG或者实现并不合理的地方,如果大家在阅读源码的时候能够思考并开始质疑其不合理性,并能通过验证证明自己的观点,然后与官方取得联系,交流,建Isuue,共同促进社区的发展,说明我们的能力、思考得到了极大的提升。

关于这一点,可以参考笔者对 Sentinel 对应熔断实现机制进行的质疑与思考过程,其链接如下:Sentinel Dubbo 适配器看限流与熔断(实战思考篇)

4

源码阅读误区

源码阅读是手段,但一定不是目的。

我在面试过程中发现好多候选者在谈到某一项技术时,首先不是介绍其原理,而是一下子具体到某个类啥的,这些类是如何如何工作等等,其实这是不太妥当的,源码阅读的目的是主要是深入理解其设计理念、工作机制,方便我们在实际使用过程中对其成体系的认识,加强对它的驾驭能力,做到提前规避风险。

其次源码阅读非常不建议一上来就直接DEBUG。如果一开始就使用DEBUG,很容易会迷失在代码的各个分支中,缺乏全局视角,从而变得没有头绪,极大的增加了源码理解的难度,很容易让我们半途而废。

最后学习一门技术并一定要深入源码,特别是非主流,非重点打造的领域。对于此类我们通常只需根据阅读官方文档,了解其使用场景、能解决什么问题,理解其设计理念、工作机制,灵活运用解决具体问题即可。

5

总结

源码阅读并不是目的,只是手段。对于通用型基础技术诸如 JAVA 集合、并发、需重点打造为亮点的领域建议大家阅读其源码,成体系深入细节掌握其工作机制,增强其驾驭能力,拥有提前规避风险的能力。


欢迎关注『中间件兴趣圈』,进专属微信交流群,与笔者交流中间件、架构设计、实战应用等技术课题,共同抱团发展。

- EOF -

想要加入中生代架构群的小伙伴,请添加群合伙人大白的微信

申请备注(姓名+公司+技术方向)才能通过哦!

阿里技术精彩文章推荐

往期推荐

深度:揭秘阿里巴巴的客群画像

多隆:从工程师到阿里巴巴合伙人

阿里技术专家楚衡:架构制图的工具与方法论

蚂蚁集团技术专家山丘:性能优化常见压测模型及优缺点

阿里文娱技术专家战獒: 领域驱动设计详解之What, Why, How?

阿里专家马飞翔:一文读懂架构整洁之道

阿里专家常昊:新人如何上手项目管理?

蚂蚁集团沈凋墨:Kubernetes-微内核的分布式操作系统

阿里合伙人范禹:常挂在阿里技术人嘴边的四句土话

阿里技术专家都铎:一文搞懂技术债

支付宝研究员兼OceanBase总架构师杨传辉:我在数据库梦之队的十年成长路

阿里技术专家麒烨:修炼测试基本功

阿里计算平台掌门人贾扬清:我对人工智能方向的一点浅见

蚂蚁资深算法专家周俊:从原理到落地,支付宝如何打造保护隐私的共享智能?

阿里高级技术专家箫逸:如何画好一张架构图?

阿里高级技术专家张建飞:应用架构分离业务逻辑和技术细节之道

蚂蚁科技 Service Mesh 落地实践与挑战 | GIAC 实录

阿里6年,我的技术蜕变之路!

蚂蚁集团涵畅:再启程,Service Mesh 前路虽长,尤可期许

阿里P9专家右军:大话软件质量稳定性

阿里合伙人程立:阿里15年,我撕掉了身上两个标签

阿里高工流生 | 云原生时代的 DevOps 之道

阿里高级技术专家邱小侠:微服务架构的理论基础 - 康威定律

阿里P9专家右军:以终为始的架构设计

阿里P8架构师:淘宝技术架构从1.0到4.0的架构变迁!12页PPT详解

阿里技术:如何画出一张合格的技术架构图?

蚂蚁资深技术专家王旭:开源项目是如何让这个世界更安全的?

阿里资深技术专家崮德:8 个影响我职业生涯的重要技能

儒枭:我看技术人的成长路径

阿里高级技术专家宋意:平凡人在阿里十年的成长之旅

阿里技术专家甘盘:浅谈双十一背后的支付宝LDC架构和其CAP分析

阿里技术专家光锥:亿级长连网关的云原生演进之路

阿里云原生张羽辰:服务发现技术选型那点事儿

蚂蚁研究员玉伯:做一个简单自由有爱的技术人

   END
#架构师必备#点分享点点赞点在看

大神手把手教源码阅读的方法、误区以及三种境界相关推荐

  1. gh-ost大表DDL工具源码阅读

    gh-ost大表DDL工具源码阅读 最终目的 开发环境与测试数据库准备 一个简单的ddl案例 debug分析程序执行过程 vscode debug配置 变量介绍 核心处理逻辑 分析我的需求 最终目的 ...

  2. NJ4X源码阅读分析笔记系列(三)—— nj4x-ts深入分析

    NJ4X源码阅读分析笔记系列(三)-- nj4x-ts深入分析 一.系统的工作流程图(模块级) 其工作流程如下(以行情获取为例): 应用端向Application Server发起连接 应用服务器调用 ...

  3. 我的世界服务器地图文件丢失,我的世界地图被毁了或找不到了 ? 大神手把手教你奇迹恢复...

    Hello everybody,我是沙盒帝,这次要讲的是技术性的问题. 很多玩家有时候会问我,地图被毁了或者存档找不到了,要么就是被熊孩子给熊了,很难过什么的.其实我对这方面的问题也是处于一个小白的水 ...

  4. 学习大神作品(vue源码三)

    Object.freeze()方法 冻结对象之后,该对象内部的属性只能读,不能改 在vue源码当中的冻结方法 //Obeject.freeze() js当中的冻结方法,参数是一个对象,冻结之后对象当中 ...

  5. java 数组 源码_Java数组转List的三种方式及对比

    来源:https://s.yam.com/6wu6n 前言: 本文介绍Java中数组转为List三种情况的优劣对比,以及应用场景的对比,以及程序员常犯的类型转换错误原因解析. 一.最常见方式(未必最佳 ...

  6. php 上传图片加密,图片加密平台源码_图片在线加密+包含三种模式上传图片+支付后看原图-html资源网...

    采用 php+mysql 的环境,php 版本是 php5.6. 源码是通过调用八图片平台的 API,进行设计开发的.用此源码搭建的网站,用户资金直接进入你自己的支付接口. 8tupian 图片加密平 ...

  7. 大神手把手教你设计秒杀架构模型

    中生代技术 链接技术大咖,分享技术干货 全文:4000字 作者:Yrion 原文首发:https://www.cnblogs.com/wyq178/p/11261711.html 前言:秒杀系统相信很 ...

  8. 写不出好的策划方案?大神手把手教你写策划

    每个企业都少不了要写策划方案和执行计划,但是策划人员又都是天天在办公室坐着的,怎样才能写出符合市场的策划方案呢?易创作为一个多年的老司机,现在就开始带你飞,让你感受一下大牛是如何写策划方案的. 那么关 ...

  9. 外国大神手把手教你如何设计软件架构

    介绍 软件系统的架构对其成功至关重要.它决定了不同部分如何组合在一起,并影响系统开发和维护的速度.良好的架构设计还可以帮助您避免在开发过程中出现代价高昂的错误,例如组件过多或无法创建健壮的逻辑.这篇文 ...

最新文章

  1. 云端卫士架构师讲DDoS攻击的智能防御之道
  2. c实现的trim函数
  3. 神策数据陈宁:前端国际化技术需求及模型实现
  4. 大脑比机器智能_机器大脑的第一步
  5. Python在信号与系统(1)——Hilbert兑换,Hilbert在国家统计局的包络检测应用,FIR_LPF滤波器设计,格鲁吉亚也迫使高FM(PM)调制...
  6. 测试驱动开发 测试前移_为什么测试驱动的开发有用?
  7. HDFS的读写限流方案
  8. 我为什么不无偿加班,你也不应该
  9. Requst Servervariables
  10. Web API-DOM-滚动事件、加载事件和元素大小和位置
  11. 数据库(基础SQL)
  12. logistic映射图像加密matlab,基于Logistic映射与排序变换的图像加密算法
  13. 英语16种时态表和人称表
  14. 安卓怎么打开html游戏,安卓手机如何打开.xapk文件
  15. 内网创建https网站的SSL证书、代码签名证书
  16. json对象、json字符串的区别和相互转换
  17. 计算机上DEL和INS怎么转换,HGVS命名之【缺失插入】Deletion-insertion (delins/indel)
  18. 电子警察位置【收藏】
  19. oracle trace进程,ORACLE SQL_TRACE的使用
  20. AndroidStudio更改SDK路径以及AVD模拟器路径

热门文章

  1. 2021年中国重卡市场现状分析,市场遇冷,新能源重卡销量大幅度上升「图」
  2. word2007计算机应用能力试题,计算机应用基础试题「附答案」
  3. Python进行office操作 - 用Python读写Word文档入门
  4. Axure教程:中继器如何加载显示图片
  5. C语言:文件操作:顺序读写、随机读写
  6. 厉害了!GitHub中文开源项目榜单出炉,揭露了程序员的硬性需求
  7. 树莓派+UVC摄像头+网络监控
  8. android view硬件加速,Android TextureView和硬件加速
  9. 《演说之禅》I amp; II 读书笔记
  10. PT927G光猫获取超管+删除tr069教程