你好,我是crazyhzm,是一名Java从业者,同样是一名开源爱好者,也正在努力成为一名终身学习者。
本专栏是我在接触Dubbo、gRPC、Thrift以及ZeroC后总结出来的内容,再开始专栏的学习之前,首先我想先请你对自己做一个评估:
我分了A 、B、C三个需求级别:
- A:该级别适合阅读本专栏的所有章节;
- B:该级别可先查看专栏大纲,如有感兴趣的章节,再有选择性地去阅读;
- C:该级别本专栏无能为力。
在开篇词就让阅读者去做一个这样一个简易的评估,是为了让阅读者明确自己在寻找什么东西,并且在明确自己的目的后,再来评估本专栏是否能够帮你解决你的困扰。比方说你想要参与RPC开源项目,阅读源码是前提,本专栏可以帮到你,因为你必须知晓RPC框架的原理才能快速阅读源码,再或者你知道RPC原理,但是你对其中的动态代理技术有点模棱两可,本专栏也可以帮到你。但是如果你作为一个后端从业者,你并没有兴趣知晓RPC是什么或者你本身不是从事后端方向工作,那么我觉得本专栏并无法发挥它的作用,因为一个专栏并不会适合所有人。
开发人员运用技术的场景分别是在工作中、社区中、自主学习中以及面试中:
-
工作中:作为一个后端从业者来说,在实际开发过程中使用RPC框架是不可避免的,无论是公司自研的RPC框架还是开源的第三方RPC框架,总会有一些缺陷,而当Debug自己的代码无果后,必然要进入框架内部查看实现原理来走查问题,这个时候对框架源码的掌握程度无疑会影响走查的效率。
-
社区中:参与他人的开源即研读项目源码,比如我在对Dubbo社区进行贡献,从最初提交的只是拼写错误修正到修复普通bug再到提交新功能,无疑遇到了很多坑。因为一个新的RPC框架内容非常多,会让你觉得想要研读它,却无从下手,而如果能够知晓RPC框架的原理,在研读源码时会事半功倍,因为你掌握了整个框架的主脉络。
-
自主学习中:许多人会和我一样每天都进行一些自主性学习。站在巨人的肩膀上学习,会让我们事半功倍。现在越来越多的技术框架都陆续开源,这些框架都是由精英团队精心打造,研读源码,从中学习他们的设计理念,学习他们优秀的实现方案以及解决痛点的思路,能更快速的提升自己的境界。本专栏将会带领你去找寻这个站在巨人肩膀上学习的思维方法。
-
面试中:面试中面试官会问RPC是什么,Dubbo框架的服务引用、服务暴露过程是怎么样的,动态代理技术实现有哪些,区别是什么,如果让你自己手动来书写一个RPC框架,你应该实现哪些东西?这些面试题都在RPC框架范围内。而本专栏中就有这些问题的答案。
针对上述四个场景,本专栏的目标也慢慢开始明确,我从两个方面来讲述阅读者可以从专栏中学到什么。
- RPC框架肢解的思维:本专栏会介绍RPC框架不可或缺的几个组件,当我们去面对一个RPC框架的项目时,可以直接去RPC框架中找对应组件的实现,先把主要组件吃透,那么整个RPC框架的调用原理就非常清晰,然后再去肢解边边角角的内容,这样的思维会让你非常快速而且正确的读懂一个RPC框架,从而解决问题或者学习经验。
- RPC框架各类组件的实现方案:RPC框架的组件都有很多实现方案,比如动态代理技术就有CGLIB、Javassist等实现方案。我会在每个组件中举较为常用的实现方案来进行讲解。并且会介绍它作为实现方案的利弊以及该实现方案的原理。
那么该如何学习该专栏?首先RPC的介绍必须先学习。针对有基础的阅读者,因为各个组件的讲解比较独立,所以可以选择跳跃式的看各个组件对应的章节,对于基础比较低的阅读者,可以选择一章一章去攻克,而在阅读的过程中,最好动手写一写文章中的案例,把程序跑起来,如果debug进去看一看到底是怎么实现的。在本专栏在最后两章分别介绍了如何去实现一个简易的RPC框架以及如何去读懂Dubbo,让读者既有编码实战,又有思想实战,从而达到本专栏传达核心内容的目的。最后我也希望更多的开发者在研读各类优秀项目后参与到开源社区中去,因为一个优秀的开源项目往往离不开一个活跃的社区。