美文网首页
阅读源码之我见

阅读源码之我见

作者: 长特高 | 来源:发表于2018-09-07 15:06 被阅读59次

过年后从胜任工作的喜悦中缓过劲来,发现自己在Java之路上只是刚刚入门,于是开始了恶补。最先主要是看书补习基础知识,后来一步步逐渐阅读源码。相对于读书看视频这些直观的知识输出,阅读源码的门槛稍微高了一点,我也浪费了很多时间在阅读源码的门口徘徊,始终不得法而入。在不断地尝试后终于也总结了一些经验,分享出来希望帮助有需要的人。

阅读源码的好处

许多人的学习路线应该与我一致,在学习完java的基础知识之后,迫不及待地扎进源码的海洋之中想要一睹大师们的风采。为什么我们要阅读源码呢?我认为有以下两点好处。1、阅读代码可以帮助我们深入了解内部的实现,看到大牛们如何封装继承多态,如何合理地运用设计模式,如何在开销最小的情况下保证线程安全等等。我们应该感谢开源,大牛们的代码就是一本本活生生的教科书。另一方面,阅读源码可以帮我们解决很多工作中遇到的问题,许多bug都是因为我们对程序细节实现的不了解导致的。如果不知道线程池在核心线程满了之后是先入队还是继续创建线程直到最大线程数,可能就会造成性能上的问题;如果不了解IOC、AOP,可能就无法解决AOP和自己实现BeanPostProcessor做的代理之间可能出现的冲突等等。

阅读源码的方式

我认为源码阅读分为三步,这里以Netty的源码举例。第一步,首先了解一下源码如何使用。可以试着先写一个简单的客户端服务端的demo将Netty跑起来,了解一下基本的功能,常用的API等等。这时可以辅助阅读官方的文档或者买一本快速入门的书籍。会用从来都是阅读源码的基础,如果用都没用过上来就读,一方面很难读懂浪费时间,另一方面有些为了读源码而读源码的舍本逐末。
第二步则是了解源码的背景以及整体架构。我们都知道Netty总体上是对NIO的一个封装,那么NIO是什么?为什么要封装它,解决了什么问题?OIO是什么?NIO相对于OIO又改进了什么?这一连串的问题都需要我们事先进行了解,才会在阅读源码之旅中有所得。除此之外,我们应该从官方的文档或者网上的博客上大体了解Netty的架构,整体组成是怎样以及每个模块负责什么功能,这样会使得我们在阅读源码之时不会一叶障目,陷入细节。
最后就可以开始阅读源码了。阅读源码的好方法有很多,个人比较喜欢一边看博客一边跟着debug,效率很高。还有一点需要注意的是,我们如果想了解Netty,一方面要阅读Netty的源码了解细节实现,另一方面要阅读用Netty进行工业级实现的代码(Dubbo、RocketMQ等)了解Netty正确的打开方式。
说是阅读源码的心得,却主要讲的是阅读源码的铺垫。个人认为这些铺垫一定程度上比阅读源码更重要。

相关文章

  • 阅读代码之我见

    阅读代码之我见 学习编程离不开读源码阶段,阅读源码,你会发现很多新的架构包括库,积累技术要点,优化自己的书写代码模...

  • 阅读源码之我见

    过年后从胜任工作的喜悦中缓过劲来,发现自己在Java之路上只是刚刚入门,于是开始了恶补。最先主要是看书补习基础知识...

  • Mybatis源码阅读之我见

    今天写写mybatis,天气挺好 先放个简单版的流程图: 在MapperRegistry 中调用的是 public...

  • 【行行】培植一颗阅读的种子(一篇旧文)

    培植一颗阅读的种子 ——教师阅读之我见 读书是在是一件很苦、...

  • LinkedList 源码之我见

    接下来要开始手撕LinkedList public class LinkedListextends Abst...

  • 阅读之我见

    中国有句古话“读万卷书不如行万里路”,现在对这句有了新的理解------不读万卷书,行万里路可能仅是邮差,...

  • 阅读之我见

    今年暑期,有幸在互加计划的学习平台上,参与暑期学习,我感到非常荣幸。作为一名小学语文老师,在日常教学中,带着孩子们...

  • 阅读之我见

    做绘本馆三年,我最大的收获便是阅读要趁早,如果生下来第二天读书,你就少了一天。很多家长都说孩子太小,听不懂...

  • iOS 系统源码及第三方源码总结

    1.系统源码总结 RunTime源码阅读(一)之weakRunTime源码阅读(二)关联对象RunTime源码阅读...

  • 【源码阅读】Glide源码阅读之with方法(一)

    前言:本篇基于4.8.0版本【源码阅读】Glide源码阅读之with方法(一)【源码阅读】Glide源码阅读之lo...

网友评论

      本文标题:阅读源码之我见

      本文链接:https://www.haomeiwen.com/subject/kltcgftx.html