Java工程师学习指南程序员
中级篇面试
最近有不少小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好。本来我觉得以前的几篇文章已经能够解决你们的问题了,其实否则,由于我写的文章都是站在Java后端的全局上进行思考和总结的,忽略了不少小白们的感觉,而不少朋友都须要更加基础,更加详细的学习路线。算法
因此,今天咱们从新开一个新的专题,分别按照四个部分讲述Java的学习路线,笔者也打算趁此机会,回忆一下本身的Java学习历程。今天咱们要讲的是第三部分,Java工程师学习指南(中级篇)。编程
先声明一点,文章里面不会详细到每一步怎么操做,只会提供大体的思路和方向,给你们以启发,若是真的要一步一步指导操做的话,那至少须要一本书的厚度啦。后端
固然,本文提到的大部份内容都能在个人博客中找到对应的一些文章。因此也欢迎你们去我博客找到大家须要的资源。设计模式
本文中的方法不必定适合全部人,若有错误还请谅解。api
在上一篇文章中,咱们主要讨论的是如何作一个Java Web项目,以及前期须要哪些方面的基础。最后,我还推荐了几个比较不错的视频课程,以便给你们参考。安全
固然,跟着视频课程作完一个项目,你只是照葫芦画瓢又练习了一遍,可能其中有不少东西你并不太理解,好比你可能不知道为何代码要分层,为何要用maven进行线上编译,为何Tomcat启动时会输出那么多的日志。微信
有疑问很正常,由于一个Java Web项目涉及的技术仍是不少的,若是要理解这些技术的原理,光靠一个项目课程是远远不够的。因此,在你体验了Java Web项目的开发流程之后,你应该花些时间去了解相关技术原理了,今天咱们要讲的也是这部份内容。网络
对于即将参加校招的同窗来讲,最重要的也是这部份内容,你须要了解JVM虚拟机原理,Java并发原理,而且熟悉JDK的部分源码,了解这些API的底层实现。除此以外,还有不少,下面咱们分别来谈一谈。
PS:文中屡次提到个人博客,是由于个人博客里整理了多个技术专栏,基本上包含了下面所说的内容。关注公众号后,在公众号后台回复“练级”便可得到个人技术博客地址,以及其余相关的资源。
01
计算机基础知识
若是你不是计算机专业的同窗,那你可能要注意一下了。在学习下面这些内容以前,你最好要学习一下计算机基础课程。
这里咱们说的计算机课程是:数据结构,操做系统,计算机网络。
数据结构:这门课应该算是三门课程比较简单的一门了,推荐《数据结构与算法(Java语言描述)》,看书结合代码实践,把基本的数据结构算法写一写就能够了。
操做系统:关于操做系统我看了不少本书,可是没有感受特别好的,因此若是有时间的话能够先看另一本书《深刻理解计算机系统》,这本书讲了不少计算机的基本概念,不局限于操做系统。
而后能够看一看汤小丹写的《操做系统》,或者大家学校的教材。
计算机网络:网络方面的书也很是多,推荐看一下《计算机网络:自顶向下方法》,另外还有一本《TCP/IP 详解:卷一》也是备受推崇的书。
除此以外,我还要推荐一下刘欣老师的书《码农翻身》,书中用一些有趣的故事来说解操做系统和计算网络的一些复杂概念,有助于你们理解这部份内容。
02
JVM虚拟机
为何把JVM放在第一位,由于它是最基础也最重要的一块内容。全部的Java代码都运行在JVM上,事实上,JVM在操做系统中只是一个进程。为了了解Java代码的运行方式,底层引擎的执行原理,以及内存的分配状况,咱们必需要学习JVM虚拟机。
推荐资源:《深刻理解JVM虚拟机》
很高兴地告诉大家,学习JVM你只须要把这本书吃透便可,固然,看一遍可不够,笔者先后至少看了三遍,有条件的话最好把书中的实例都跑一跑。
另外,JVM也是面试必考的内容,因此,相应地去准备一些面试题也是颇有必要的,若是你基本掌握了这本书的内容,相信你不会害怕任何JVM面试题。
03
设计模式与源码阅读
为何在这里提到设计模式呢,由于设计模式是Java编程规范的经典总结,而且在JDK源码中常用,因为咱们后面会讲到JDK源码方面的学习,因此对于设计模式,建议你们先学习一下,最好的学习方式就是看书结合实践,把一些经常使用的设计模式本身实现一下。
推荐资源:《head first 设计模式》
JDK源码(主要指集合类源码)
接下来下场的选手是:JDK源码。不过对于大部分人来讲,只要可以掌握集合类,字符串这些源码就能够了,其余部分的源码主要集中在JUC并发包里,而这些内容咱们会放在Java并发技术里来说。
为何咱们须要掌握集合类源码呢,其一是由于面试喜欢考,其二是由于集合类的源码实现都比较经典,难度也不算太大,而且运用了不少优化方法,因此了解它对于学习Java的同窗来讲大有裨益。
推荐资源
市面上并无哪本书专门来说JDK源码的,因此这部份内容的学习资源主要是两个部分,一是JDK源码自己,而是一些技术博客。
1 对于JDK源码,直接看可能比较有难度,不推荐新手这么作。 2 讲解源码的文章质量良莠不齐,因此我只推荐几个我本身比较熟悉的,一个是importnew。一个是个人博客。另外,我以前分享的一篇文章《你不可错过的Java学习资源》中也推荐了不少大牛和博客,你们也能够去看看。
说实话,Spring源码的复杂度远高于集合类的源码,这也是由于Spring运用了不少的设计模式,而且有着很是繁杂的类关系。因此,我不建议你们直接去读Spring源码,由于即便是看Spring源码解析的书籍,你也会感到很吃力。
因此,我推荐的方式是,看书+看一些比较好的源码解析文章。另外要告诉你们的是,Spring的源码不少,并非全部内容都须要你掌握的,你们都知道Spring最经常使用的特性就是IOC和AOP,因此看源码解析时,最重要的也是这两个部分了。
另外,看完Spring的源码解析之后,别忘了看SpringMVC的源码解析,学习方法也是同样的,找重点内容看便可。
推荐资源:《Spring源码深度》,个人博客专栏
04
Java并发技术
相信你为了搞定集合类源码和Spring源码花了很多功夫了,接下来轮到Java并发技术出场了。咱们在入门篇其实已经谈到了多线程,可是也仅仅停留在使用Thread或者Runnable实现简单的多线程demo。
实际上,为了理解Java并发技术的底层实现,咱们还须要知道JMM模型,了解synchronized和volatile的底层实现,同时还要明白Java中的多线程和操做系统的多线程和什么联系和区别。除此以外,咱们常常谈到的线程安全,有哪些实现方法,也是这部份内容的要点。
学习并发技术,我建议分为三个步骤
1 首先熟悉Java的多线程基础知识,好比Thread的使用,线程的状态转换,以及一些api的使用方式。2 了解一些理论基础,好比JMM,操做系统的多线程实现。这部份内容推荐经过看书和看博客来学习。
3 了解并使用JUC的一些API,而后开始看JUC的一些源代码。这个阶段是最重要也是最困难的。
推荐资源:书籍:《Java并发编程艺术》,《Java并发编程实战》网站:个人博客专栏,并发编程网,importnew,《你不可错过的Java学习资源》
05
Java网络编程
在搞懂Java并发编程技术以后,相信这部份内容也难不倒你。固然,前提是你对计算机网络有必定了解,由于网络编程涉及到TCP和HTTP相关的知识点。
在学习这部份内容的时候,你首先要了解socket的使用以及原理,而后再去了解NIO的相关API,多写一些客户端和服务端通信的demo,以便熟悉这些内容。为了更好地理解网络编程,你还要去了解UNIX网络编程模型。
除此以外,若是你想要更好地理解Java网络编程,你还须要去了解Tomcat的实现原理。同时,Netty也是值得你去学习的一部份内容,最好有机会去用一用这一网络编程框架,学有余力的同窗还能够考虑看看它的源码(笔者没有看)。
推荐资源:个人技术博客,《Java网络编程》,《你不可错过的Java学习资源》
05
Java8
Java的版本一直在更新,但目前在用的主要仍是Java8和Java7,等再过几年可能这部分的内容就过期了。可是目前看来,对Java8的学习和了解仍是很重要的,毕竟面试也喜欢考。
对这部份内容学习的最好方式就是:看文章+代码实践
推荐资源:《Java8实战》
06
总结
今天的内容貌似有点多,你们会不会感受有点吃不消呢。不要紧,由于这部份内容确实须要花不少时间去学习。对于一个在校的Java学习者来讲,可能没有机会接触到多么高大上的项目,因此对内功的修炼显得格外重要。
看书,写demo,读源码,看似简单的事情实际上须要花费大量时间和精力,这个过程是须要你静下心来,慢慢沉淀的,在学习的过程当中你也能够和笔者同样,写一些总结和博客,以便更好地回顾本身的学习历程。
总结如下今天所讲的内容吧:
1 计算机基础课程:数据结构,网络和操做系统 2 JVM基本原理 3 设计模式,JDK源码,Spring源码 4 Java并发技术,JUC源码 5 Java网络编程 6 Java8 微信公众号【程序员江湖】
做者黄小斜,斜杠青年,某985硕士,阿里研发工程师,于2018 年秋招拿到 BAT 头条、网易、滴滴等 8 个大厂 offer
我的擅长领域 :自学编程、技术校园招聘、软件工程考研(关注公众号后回复”资料“便可领取 3T 免费技术学习资源)