
阅读源码意义面试
在我看来,阅读源码的意义在于学习优秀的「套路」。算法
这里的「套路」所指范围很广,大到架构设计,小到可取的命名风格,还有设计模式、实现某类功能使用到的数据结构和算法等等。所谓高手,其实就是能比大部分人更早更快地掌握套路并熟练运用之人。spring
埋头在本身的天地里耕芸当然也能逐渐进步和成长,但总会有时候会遇到一些场景,你苦思良久也没法作出良好的设计,总会有一些时候,纠结如何为一个变量命名让你停下飞速敲击的手指。这些令你为难的场景,先贤们也许早就遇到过,而且给出了优雅的解决方案。看优秀的源码的时候,将这样的场景与对应的方案收入囊中,或者仅仅在脑中留下一个印象也好,以便在须要的时候,你的武器库里总能掏出一把称手的家伙来。数据库
一些方法
不该该这样编程
不该该漫无目的地随手拿起一分源码,试图去通读。这一方面会过目即忘无所收获,另外一方面会枯燥得让你迅速从着手到放弃。学习的方式有不少种,阅读源码并不必定是最适合你当前的状况的。设计模式
应该这样数据结构
- 精心挑选要阅读的源码项目。
- 这最好是与你的编程语言、你的工做内容、你的兴趣所在相关的,这样才能更切实地感觉到阅读源码给你带来的益处,更有动力继续。
- 若是你想学习的知识点有官方文档,先看文档再看源码。
- 直接从源码着手,搞清楚原理当然是好,可是源码有多是难啃的,先熟悉官方提供给全部人看的文档,能较为平滑地对这方面的知识先有个大概的了解,而后再结合源码去深刻。
- 提出具体的问题,而后带着问题到源码中找答案。
- 好比在使用 Toast 的过程当中,你可能会想到一些问题:Toast.makeText(...).show() 时发生了什么?Toast 能不能在非 UI 线程调用?能不能自定义 Toast 布局?诸如此类。在源码中探寻完你想要的答案,你的目的也就达到了。
- 从一些共性层面入手。
- 大部分的程序里都会使用到的东西,好比线程模型、UI 组织结构、任务调度方式等等。针对某一个方面去了解,比漫无目的要有效率得多。
- 最好可以编译运行起来。
- 若是一份代码你只能看不能跑,那可能读到一些地方你只能猜这个地方的数据值和跳转结构是怎么样的,而颇有可能你猜的是错的。但若是你能编译运行,那在须要的时候你能够修改,加日志等等来更好地观察和验证你的想法,获得正确的理解。
- 作一些笔记。
- 一方面是将你的学习成果保留下来,方便随时查阅,毕竟只凭脑子记忆是不靠谱的;另外一方面在学习的过程当中,也能帮助理解。
总结架构
没有人一开始就能够看得懂那些源码,咱们都是从0开始的,并且没有什么捷径可寻,无非就是看咱们谁愿意花时间去研究,谁的求知欲更强烈,谁更有耐心。阅读源码的过程当中咱们的能力确定会提高,能够从中学到不少东西。在咱们作项目的时候就会体现出来了,的确会比之前顺手不少。框架
分享一个源码分析专题脑图:数据结构和算法

源码分析知识点:
spring源码分析:
- Spring框架的前世此生及系统概述
- 用300行代码手写提炼Spring的核心原理
- Spring源码版本命名及源码下载构建技巧
- 一步一步手绘SpringIOC容器初始化时序图
- 用30个类高仿真提炼纯手写Spring框架V2.0
- Spring事务传播原理及数据库事务操做原理
- 基于Spring JDBC手写定制本身的ORM框架
- Spring5新特性简述及BATJ经典面试题分析
MyBatis源码分析:
- MyBatis应用分析与最佳实践
- MyBatis体系结构与工做原理
- MyBatis源码分析
- 手写MyBatis 1.0
- 手写MyBatis 2.0
给你们分享源码分析的PDF 欢迎你们领取!
