54 总结:重新启程——我的Java学习之路
Diego38 15 1

1. 背景

作为一个老程序员,今年已经工作近10年了,在这多年的工作历程中,积累了不少学习的经验,在此分享给大家。

2. 打好基础,循序渐进

在我毕业那时,是SSH框架最流行的时代,市面这类书籍铺天盖地,好像这年头不会SSH框架都不好意思和人打招呼。在找工作那会,同宿舍的舍友拿了好几本SSH书籍在啃,而我一本也没有买,我只是在学习Java编程思想,最终因为过硬的基础拿到了满意的offer,而舍友却与心仪offer失之交臂。技术更新换代很快,当年流行的Struts和Hibernate很多大厂已经不再使用,转而被SpringMVC和Mybatis替代。

基础之所以如此重要是因为,基础是学习其他框架、中间件、架构的前提,没有基础好比沙漠中建大楼,风一吹就倒了。举个例子,像很多客户端比如Netty客户端、Redis客户端、HttpClient客户端中有很多并发组件的运用以及网络编程的应用,如果不懂并发,不懂网络,出现了内存泄露、连接泄露,很难去排查。

Java学习路径中要夯实的基础技术并不多,以我的经验分为以下几个领域

  • Java语言基础
  • JVM虚拟机
  • Java并发编程
  • Java网络编程 以上几个领域需要借助书籍、教程进行系统学习,并形成总结沉淀。学习是循序渐进的,工作的前三年要努力打好基础,在打好基础的前提下就可以进一步深入研究框架、中间件、分布式架构了。

3. 深入总结,强化记忆

不管是学习哪项技术,我们经常会遇到学完就忘的困境,因为我们在工作中可能只会用到所学的20%,另外80%只能在接触更多项目后才会用上,面试中往往遇到这样的困惑–这块之前研究的很深入,面试官一问就懵了,无法有条理的表达出来。

当深入研究一项技术后,最后做总结,总结分为很多形式,比如学习笔记、技术博客、知识脑图,本人更倾向于做知识脑图,知识脑图的优势一是非常方便检索和查阅,知识点快速定位,二是非常便于知识的回顾温习,当几年的积累都在几张脑图中,只需要一个晚上就能将之前所学统统回忆起来,在面试准备时十分高效,欢迎大家效仿。

在我的工作的第三年,开始深入研究各种框架的源码和原理,Spring、Mybatis、Jetty、Dubbo、Zookeeper、Netty、Kafka、Sharding-Sphere、SpringBoot、SpringCloud、Lucene、ES等,剖析源码的初衷是因为工作中在使用这些技术时遇到了很多问题,想从底层去分析解决,抑或是遇到技术改造,做技术选型,要深入了解各项技术的优缺点,兴趣是最好的老师,当你使用一门技术经常碰到问题,或者性能瓶颈时,你就会对它好奇心越来越强,产生的疑问也越来越多,最终就会有动力剖析源码一看究竟。

研究源码有几个好处

  • 对一项技术达到完全掌握的程度,源码超越一切文档
  • 吸收优秀是设计思想,学以致用
  • 技术领域更加深入,比如在我研究完Zookeeper和Kafka后,让我分布式领域的更深入的认识
  • 代码能力的提升,开源项目的代码质量是很高的,我总是遇到写的比较好的记录下来,以便在我写基础组件时使用

庆幸在研究过程中,我注重总结,将源码画成流程图,对于一些设计技巧形成文字,每当我遇到困惑时我都要看下流程图,而且经常温习,形成了我的永久记忆。

源码研究的唯一缺点是比较耗时,比如Dubbo源码我坚持了2个月,每天回到家要抽出2小时的时间,周末至少抽出一天的时间,在对分布式一片空白的时候,这些努力是值得的,当研究完之后,会觉得自己的技术又上升了一个阶段,那种感觉仿佛脱胎换骨一般。

最近这几年,我已经不太去完整剖析源码了,而是抓大放小,去抓核心流程源码来分析。因为在工作中根本没有太多时间完整的系统学习,这就要求基于经验快速的找到核心流程来分析。

4. 知识迁移,举一反三

抓住技术的核心思想是关键,举个例子,Java的分布式服务框架已经很多了,但是几乎所有的框架都大同小异,都离不开序列化、服务注册、路由规则、版本控制、服务提供者、服务消费者,人的精力是有限的,只需要学习一门此类框架即可。这样从一家公司跳到另外一家公司,即使使用的分布式服务框架不一样,也能够快速上手和熟悉。

我在一家小型公司供职时,使用的是Dubbo框架,但原生Dubbo缺少链路追踪能力,当时我研究了Google的Dapper论文,和网上淘宝鹰眼的介绍,最终发现京东的Hydra写的不错,打算自己写一个植入到Dubbo框架中。不巧的是此时公司业绩下滑,这个想法没能实现。之后去了一家中型巨头公司,技术沉淀并不完善,我完成了Thrift RPC框架以及在此框架上的链路追踪功能。而链路追踪功能借鉴了京东Hydra的设计思想。

由此得出结论,当你去写中间件的时候,最好找一个开源项目进行照猫画虎的借鉴,慢慢的也形成自己的风格;另外所学的知识都是有用的,当研究完Dubbo,再遇到Thrift,就很容易基于Thrift编写出一套简易的分布式服务框架来。

5. 总结

回顾我的Java学习经历,支撑我的学历历程一方面是环境,另一方面是兴趣,一直在互联网从事Java技术,工作中又对新技术产生了浓厚的兴趣。希望大家也一样,保持好奇心,从夯实基础到发现问题提出问题,然后研究解决问题,最终到举一反三,在这个路径持续下去,终将会成为技术大牛。

预览图
评论区

索引目录