论源码阅读的必要性
自己曾经学过很多技术框架,学着学着,有些时候就会困惑。①为什么要学这些技术框架?
在大学这几年,我一直坚持每天学习,学着学着感觉市面上的框架基本上都学完了,至少在技术方面上已经不再是一个问题了。
随着自己技术水平的不断增加,越发的觉得技术底层的原理重要性。
很多时候我也有疑惑,同样敲代码,凭什么人家能拿高薪,凭什么人家叫高级java开发工程师?
自己与其他人的差别到底在哪里,框架用的六不六?
。
细想一下,框架使用的灵活不灵活并不能说明一个人的能力。
学习框架的时候你是否也有疑问②框架应该学到什么程度才算掌握?
相信这个问题其实在面试的过程中就会被反复的体现。很多同学在面试的过程中都会被问到一些框架底层,如果准备的不充分,很可能就答不上来。
个人对框架的认知
根据自己对于框架的理解,个人认为框架应当分层次来体现自己的掌握程度:
- 第一层、helloworld的基础案例
- 第二层、思考框架的底层运行原理
- 第三层、主动看源码,验证一下自己对于原理的推论,看下人家是如何实现的
- 第四层、自己开始造轮子,自己写框架
其中第3层是最重要的环节,也是最耗时的过程。第4层需要第3层的基本功。
笔者认为 看源代码是最能学习的一个过程。
③为什么要看源代码?看源代码有什么好处?你是怎么看源代码的?
是不是有这些疑惑?
应该怎么学习呢?看源代码有什么方法?
笔者认为,看源码是有方法的。我来讲一讲这些问题的答案。
之所以看源代码是因为自己对于学习的一种追求,知其然知其所以然。
看源代码的好处有很多,不仅仅是为了掌握框架的运行机制,更多的是一种学习,看人家是如何实现这个功能的,看下人家的代码是怎么写的。用到了那些设计模式(设计技巧 更好理解)帮助我们去实现这样一个功能,实际上很多时候作者没有想过要用什么设计模式,作者认为这样做更好实现,当然也有遇到一些作者之前遇见过这种场景,认为这样做能更好的实现,因此就这样设计(实际上这种状态就是一种融汇贯通的状态。将设计模式轻而易举的用到了项目代码中
)。
初期学者应当多积累一些经验,主动的去学习一些设计模式,去理解,随着积累到一定层度,自然就会体现出个人能力的提升。实际上这个过程是比较漫长的。
当你看了一定量的源代码,会发现是一种愉悦的感觉,因为学习他人优秀代码能够让你变的比其他人更优秀。侧面的体现就是成为别人眼中的大佬,拿着高薪快乐的活着。
说实在的自己并没有看过很多开源框架源代码,对于很多框架的理解都只在第二层、思考框架的底层运行原理
。一方面是自己确实没有那么多时间研究(年轻)。
在学习源码的选择中 我疑惑我应该学习那些框架源代码呀?难不难啊?自己能不能搞定?
作者忠实的建议,也是我个人的理解
以自己为例,我自己一直想学习大名鼎鼎的spring、mybatis、mybatisPlus、netty
。我猜测你和我一样也想拿高薪。
确实掌握这些技术能让你涨工资,确实可以和工资等价。懂得越多,越说明你技术水平越高,自然薪酬也越高。
但我不准备从这些框架入手,因为我认为很多人学习都舍本逐末,基本功都没打扎实,就想着快速得拿高薪。
高楼大厦怎么能没有扎实的地基呢?
我认为很多人学习java并没有将java学透,都只是把java当做一种工具,从来没有好好的认识java,也没有好好的学习java。
自己问下自己,java 你学好了吗,已经掌握它了吗?
怎么学好java?
笔者认为,不说别的,至少对于jdk本身写好的那些常用 java 类库一定要熟悉。juc、IO、常用的类
,在开发过程中用的比较多的就是java.util
包下的子包及其子类。java.lang
包下有反射、常用的包装类源码。
java中主要的知识点为并发、io、集合框架、函数式接口(java8)、响应式流
以及后续的一些新特性。这些新特性能帮助你提高开发效率,可读性,性能等多方面的提升,所以java整体要有一个感知,不能一直停留在java8。
自己曾经花过一段时间研究过jdk源码,看过juc常用类源码基本上都是逐行解读,去推测作者下一步的设计,去推测运行原理。
JDK14SourceCodeInterpretation
这个项目是我经过了一段时间专门研究过的一些内容,后面展示部分研究内容。想要完整的可以去github下面去clone项目,以及观看我左侧的博客专栏。
项目地址:https://github.com/1015770492/JDK14SourceCodeInterpretation
部分源码展示:
1、AbstractQueuedSynchronizer源码
配套博客AQS解读:以ReentrantLock的非公平锁为例深入解读AbstractQueuedSynchronizer源码
2、LockSupport源码
配套博客LockSupport解读:LockSupport
更多信息,下载项目源码即可,以及观看我的 JUC专栏