Java开发进阶之路

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java开发进阶之路相关的知识,希望对你有一定的参考价值。

背景一

我接触Java开发已经一年多了了。

从刚开始生涩地接触语法,惹得编译器报各种语法错误;到接触OOD的思想,封装、继承、多态,懵懵懂懂地听说着它们;再到学习Web开发,想着这些也许并不重要,实际用的无非是Dao、Service、Controller罢了;最后幡然醒悟:就这样,一年已逝。

 

人总是要有些奋斗的目标的,暂且以此篇作为我而后一年的开端,思索一下接下去的学习之路。

技术分享

背景二

我一直在想到底怎么样才能把Java学好,到底要学些什么,从哪里开始学,又要学多深?

我曾想的是,先广而后深。于是,除了培训出来的SSM/SSH,还把Spring Boot、Zookeeper、Dubbo、RocketMQ、ActiveMQ、Kafka、WebSocket、Git、Redis、Linux、FastDFS、nginx、多线程、JVM、BIO、NIO、AIO、Netty、Docker、SpringCloud、Storm以及常用设计模式给学了个遍。

不过想想就能知道,一个区区一年经验的Java开发,哪来的那么多时间精力把这么多东西学得透彻。到头来无非是都只知皮毛,稍能使用而已。

而且这么多的东西,想必大部分人在的公司都用不到。便如我现在的这家公司,项目也无非就是SSM+Redis,在用Maven分个模块罢了。

我之前逛知乎的时候,看到过一些言论:大部分Java开发程序员所在的公司都不过寻常的小公司,接触的也尽是这些寻常不过的项目,连分布式什么的都接触不到;又谈什么学习技术、升职加薪。

刚开始看到这些,顿觉一股凉意升腾,他并没有说错。可又心有不甘。既然选择了这条路,怎么轻言放弃。机会总是有的。所谓的一命二运三风水,四积阴德五读书,要是真信了,怕真就一语成谶,一为命二为运了。

伊始

如何学习我到现在也只有个大致的思路,写出来,做个分享,也为自己接下去一年的学习设个目标。

上面说的这些技术,虽说我自己学得也不精;但大体都有所了解。虽然感觉略懂无用,但有一点是很重要的,那就是对整个系统的架构能有所了解。能知道所谓分布式系统的大致实现思路,不至于别人说用个Dubbo、Zookeeper,自己却一无所知,不知道这两货是干啥的。

还有最重要的一点,那就是,学这些技术,大多数人的第一步都是先百度。这我也曾做过,结果看了一万篇技术文章,仍旧云里雾里。所以说,千里执行,始于敲打。打一遍,自然就明白了。

其次,Linux真的是很重要。我大学时候倒是学过一些,不过忘光了。但是,到如今,我只能说,JavaWeb开发的,所有东西,都是部署在Linux上的。不学它,你甚至连那些MQ的环境都搭建不起来,谈何学习。

如果想要学习它,其实也不难(每个人对自己会的东西都会这么说。。。),弄个Vmware虚拟机软件,开个三台左右的虚拟机,再弄个xshell,然后就开始照着网上的教程把想学的东西的环境一个一个自己搭建出来,便OK了。当然,最好还是从搭建JDK和Tomcat开始。

正文

大致的学习顺序

  1. 设计模式:熟悉23种设计模式。虽说对于大部分项目来说使用设计模式稍显冗余,不过在某些情况下,这些前人所总结的经验确实能让人大受裨益。当然,先学习它的原因还在于,JDK源码以及其他各类框架,大多数都使用了很多设计模式。倘若对它不熟悉,那么日后看源码的时候自然是不能一蹴而就。
  2. 数据结构和算法:这个东西就显得有些庞大了。对于我而言,我既然选择的是JavaWeb开发,就很显而易见的,我对这些全然无知。但是,推荐把《数据结构和算法》这本书粗看一遍——这个粗是很粗,我是只把有哪些数据结构、排序算法以及数据结构的curd的效率记了下,便作罢了。之所以要了解这个,主要是Java中的一些集合是采用这些结构的,所以至少要知道这些数据结构的大致结构,以及增删改查的效率。
  3. JDK常用包的源码:这个我也正在进行,是从io包开始看的。不过进行到一半便辗转学设计模式去了。阅读JDK源码的好处很多,显而易见的就是,在使用各个类的时候能够大致清楚哪些类有哪些方法能够干什么,以及这些类的大致实现过程。当然,这个也无需看得很细——太细的其实也看不懂。另外,常备一个JDK文档是很重要的。
  4. JVM1:这块以我现在的了解程度,只能说它学无止境。不过至少基本的概念要明白的,就是JVM内存模型,新生代、老生代、GC算法这些。这些东西如果只是粗看的话其实就是硬背而已。此外,很多东西其实都是息息相通的。例如之前学多线程的时候学过一个volatile关键字,刚开始只知道它是保证变量的可见性,每次获取被该关键字注解的变量时,直接从堆栈中获取,不从线程的缓冲区中获取。而后了解了JVM,就知道了所谓的缓冲区就是TLAB,是堆中划分给每个线程的单独的缓冲区。
  5. JVM2:此外,还要明白类的加载方式。这块我暂且还没学习。不过类加载器、包括反射这些其实都是很重要的。明白了这些,才能更透彻地理解我们所写的代码的运行——不说这些虚的,就一点,如果要自己写个好的框架,大多是要用到这些的。我之前看到一本教用GO语言写JVM的书,打算是照着这本书敲一遍的。
  6. JVM3:还有的就是JVM的优化。我目前所知的也就是设置一些参数来减少GC次数。想要了解更多,应该还是要用专门的工具获取JVM的运行状况的——我现在还不了解。
  7. common、guava等各类工具jar:这些我想的是了解就好,能够知道什么功能可以直接使用。而不是一碰到不知道的功能,就跑去自己造轮子,结果写得一团糟。当然,如果日后有闲工夫,也可以仔细地看下这些jar的具体实现。但就我目前来说,感觉还是会用就好。
  8. 各类框架的源码:Spring、SpringMVC、MyBatis等。这些源码肯定都是要好好读一读的。不过我目前都没有读过。具体的不是很清楚
  9. mysql:数据库的重要性是不言而喻的。之所以不是Oracle的原因是——Oracle太难了。只是作为一个Java开发的话,在自己的本职技术还没有掌握完全的情况下,还是不要好高骛远了。对MySQL的优化以及分库分表、分布式事务等一些相关的技术有所了解就好。至少面试的时候问你关于数据库的优化能说出一二来。
  10. 其他:最后,推荐阅读《Java编程思想》、《effective java》等书——当然除了这些玄——之所以说悬,是因为这些其实是内功——书,一些专门介绍如何使用某类技术的书也是必不可少的。这就如武林高手对决,任凭内功盖世,总得有一技傍身,才能有用武之地。

结尾

最后,关于去哪找这些学习资料。我只想说,作为一个程序员,连这都找不到的话,那就是真的有些过分了。善用搜索引擎,95%的问题,都已经有前人铺路了。

 

以上是关于Java开发进阶之路的主要内容,如果未能解决你的问题,请参考以下文章

Java培训那里好!java进阶之路

java进阶之路-java中的ThreadPoolExecutor

JAVA进阶之路-java中的位操作

python开发进阶之路

Java进阶之路

JAVA进阶之路-CountDownLatch源码走读