Java工程师学习指南 中级篇
Java工程师学习指南
中级篇
最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好。原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我写的文章都是站在Java后端的全局上进行思考和总结的,忽略了很多小白们的感受,而很多朋友都需要更加基础,更加详细的学习路线。
所以,今天我们重新开一个新的专题,分别按照四个部分讲述Java的学习路线,笔者也打算趁此机会,回忆一下自己的Java学习历程。今天我们要讲的是第三部分,Java工程师学习指南(中级篇)。
先声明一点,文章里面不会详细到每一步怎么操作,只会提供大致的思路和方向,给大家以启发,如果真的要一步一步指导操作的话,那至少需要一本书的厚度啦。
当然,本文提到的大部分内容都能在我的博客中找到对应的一些文章。所以也欢迎大家去我博客找到你们需要的资源。
本文中的方法不一定适合所有人,如有错误还请谅解。
上期回顾
在上一篇文章中,我们主要讨论的是如何做一个Java Web项目,以及前期需要哪些方面的基础。最后,我还推荐了几个比较不错的视频课程,以便给大家参考。
当然,跟着视频课程做完一个项目,你只是照葫芦画瓢又练习了一遍,可能其中有很多东西你并不太理解,比如你可能不知道为什么代码要分层,为什么要用maven进行线上编译,为什么Tomcat启动时会输出那么多的日志。
有疑问很正常,因为一个Java Web项目涉及的技术还是很多的,如果要理解这些技术的原理,光靠一个项目课程是远远不够的。所以,在你体验了Java Web项目的开发流程以后,你应该花些时间去了解相关技术原理了,今天我们要讲的也是这部分内容。
对于即将参加校招的同学来说,最重要的也是这部分内容,你需要了解JVM虚拟机原理,Java并发原理,并且熟悉JDK的部分源码,了解这些API的底层实现。除此之外,还有很多,下面我们分别来谈一谈。
PS:文中多次提到我的博客,是因为我的博客里整理了多个技术专栏,基本上包含了下面所说的内容。关注公众号后,在公众号后台回复“练级”即可获得我的技术博客地址,以及其他相关的资源。
01
计算机基础知识
计算机基础课程(非科班)
如果你不是计算机专业的同学,那你可能要注意一下了。在学习下面这些内容之前,你最好要学习一下计算机基础课程。
这里我们说的计算机课程是:数据结构,操作系统,计算机网络。
数据结构:这门课应该算是三门课程比较简单的一门了,推荐《数据结构与算法(Java语言描述)》,看书结合代码实践,把基本的数据结构算法写一写就可以了。
操作系统:关于操作系统我看了很多本书,但是没有感觉特别好的,所以如果有时间的话可以先看另外一本书《深入理解计算机系统》,这本书讲了很多计算机的基本概念,不局限于操作系统。
然后可以看一看汤小丹写的《操作系统》,或者你们学校的教材。
计算机网络:网络方面的书也非常多,推荐看一下《计算机网络:自顶向下方法》,另外还有一本《TCP/IP 详解:卷一》也是备受推崇的书。
除此之外,我还要推荐一下刘欣老师的书《码农翻身》,书中用一些有趣的故事来讲解操作系统和计算网络的一些复杂概念,有助于大家理解这部分内容。
02
JVM虚拟机
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的源码很多,并不是所有内容都需要你掌握的,大家都知道Spring最常用的特性就是IOC和AOP,所以看源码解析时,最重要的也是这两个部分了。
另外,看完Spring的源码解析以后,别忘了看SpringMVC的源码解析,学习方法也是一样的,找重点内容看即可。
推荐资源:《Spring源码深度》,我的博客专栏
04
Java并发技术
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网络编程
在搞懂Java并发编程技术之后,相信这部分内容也难不倒你。当然,前提是你对计算机网络有一定了解,因为网络编程涉及到TCP和HTTP相关的知识点。
在学习这部分内容的时候,你首先要了解socket的使用以及原理,然后再去了解NIO的相关API,多写一些客户端和服务端通讯的demo,以便熟悉这些内容。为了更好地理解网络编程,你还要去了解UNIX网络编程模型。
除此之外,如果你想要更好地理解Java网络编程,你还需要去了解Tomcat的实现原理。同时,Netty也是值得你去学习的一部分内容,最好有机会去用一用这一网络编程框架,学有余力的同学还可以考虑看看它的源码(笔者没有看)。
推荐资源:我的技术博客,《Java网络编程》,《你不可错过的Java学习资源》
05
Java8
Java8
Java的版本一直在更新,但目前在用的主要还是Java8和Java7,等再过几年可能这部分的内容就过时了。但是目前看来,对Java8的学习和了解还是很重要的,毕竟面试也喜欢考。
对这部分内容学习的最好方式就是:看文章+代码实践
推荐资源:《Java8实战》
06
总结
今天的内容貌似有点多,大家会不会感觉有点吃不消呢。没关系,因为这部分内容确实需要花很多时间去学习。对于一个在校的Java学习者来说,可能没有机会接触到多么高大上的项目,所以对内功的修炼显得格外重要。
看书,写demo,读源码,看似简单的事情实际上需要花费大量时间和精力,这个过程是需要你静下心来,慢慢沉淀的,在学习的过程中你也可以和笔者一样,写一些总结和博客,以便更好地回顾自己的学习历程。
总结以下今天所讲的内容吧:
1 计算机基础课程:数据结构,网络和操作系统 2 JVM基本原理 3 设计模式,JDK源码,Spring源码 4 Java并发技术,JUC源码 5 Java网络编程 6 Java8
如果你对上述内容仍有疑问或者有一些建议,也可以和我交流。关注公众号后在后台回复“少侠”可以获得我的联系方式。欢迎来撩。
— END —
▼更多精彩内容
想了解Java后端学习路线?你只需要这一张图!
Java工程师修炼之路(校招总结)
你不可错过的Java学习资源清单
Java工程师学习指南(入门篇)
Java工程师学习指南(初级篇)
笔者在今年秋招中成功拿到BAT头条网易等大厂的研发offer,期间总结了很多经验和技巧,我把它们写成文字,做成专题,发表在公众号上,希望让更多有需要的朋友看到。
关注公众号后,可以在后台回复“Java”即可领取精品Java学习资源(不断更新中),学习资源包括基础,实战以及求职等内容。
1、后台回复“少侠”,可以获取我的微信,有什么问题都能聊。
2、如果你想要加入微信交流群,那么可以在后台回复“江湖”。
3、如果你想要到我的技术博客看更多的Java后端技术文章,请回复“练级”。
↙点击下方“阅读原文”查看更多内容
Java工程师学习指南 中级篇的更多相关文章
- Java工程师学习指南 完结篇
Java工程师学习指南 完结篇 先声明一点,文章里面不会详细到每一步怎么操作,只会提供大致的思路和方向,给大家以启发,如果真的要一步一步指导操作的话,那至少需要一本书的厚度啦. 因为笔者还只是一名在校 ...
- Java工程师学习指南 初级篇
Java工程师学习指南 初级篇 最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好.原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都 ...
- Java工程师学习指南 入门篇
Java工程师学习指南 入门篇 最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好.原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都 ...
- Java工程师学习指南(中级篇)
Java工程师学习指南 中级篇 最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好.原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我写的文章都是站 ...
- Java工程师学习指南(入门篇)
Java工程师学习指南 入门篇 最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好.原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都 ...
- Java工程师学习指南(初级篇)
Java工程师学习指南 初级篇 最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好.原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都 ...
- Java工程师学习指南(完结篇)
Java工程师学习指南 完结篇 先声明一点,文章里面不会详细到每一步怎么操作,只会提供大致的思路和方向,给大家以启发,如果真的要一步一步指导操作的话,那至少需要一本书的厚度啦. 因为笔者还只是一名在校 ...
- Java工程师学习指南第1部分:夯实Java基础系列
点击关注上方"Java技术江湖",设为"置顶或星标",第一时间送达技术干货. 本文整理了微信公众号[Java技术江湖]发表和转载过的Java优质文章,想看到更多 ...
- Java工程师学习指南第8部分:分布式系统理论与实践
本文整理了微信公众号[Java技术江湖]发表和转载过的分布式相关优质文章,想看到更多Java技术文章,就赶紧关注本公众号吧. 细聊分布式ID生成方法 近期面试Java后端的一些感悟 本专栏介绍分布式的 ...
随机推荐
- 650. 2 Keys Keyboard复制粘贴的次数
[抄题]: Initially on a notepad only one character 'A' is present. You can perform two operations on th ...
- React-router4 第九篇 Ambiguous Matches 模糊匹配
https://reacttraining.com/react-router/web/example/ambiguous-matches 看了官方的例子,我准备把阮一峰老师的代码再粘贴一次..!!
- 分布式锁三种实现方式(DB,redis,zookeeper)比较
先贴出看到的一篇博客,后续补充自己总结分析的. https://blog.csdn.net/u010963948/article/details/79006572
- leveldb 学习记录(四) skiplist补与变长数字
在leveldb 学习记录(一) skiplist 已经将skiplist的插入 查找等操作流程用图示说明 这里在介绍 下skiplist的代码 里面有几个模块 template<typenam ...
- python爬虫笔记
1.抓取网页并保存到txt中.解决控制台乱码问题 #_*_coding:utf-8_*_ import urllib2 response = urllib2.urlopen('http://hws.m ...
- JSP请求重定向与请求转发的区别
请求重定向 客户端行为,response.sendRedirect(),从本质上讲等同于两次请求,前一次请求对象不会保存,地址栏URL会改变: 请求转发 服务器行为,request.getReques ...
- #10072. 「一本通 3.2 例 1」Sightseeing Trip(floyd求最小环+路径)
https://loj.ac/problem/10072 针对无向图 因为Floyd是按照结点的顺序更新最短路的,所以我们在更新最短路之前先找到一个连接点k,当前的点k肯定不存在于已存在的最短路f[i ...
- MYSQL性能查看(多指标)
网上有很多的文章教怎么配置MySQL服务器,但考虑到服务器硬件配置的不同,具体应用的差别,那些文章的做法只能作为初步设置参考,我们需要根据自己的情况进行配置优化,好的做法是MySQL服务器稳定运行了一 ...
- Selenium webdriver操作日历控件
一般的日期控件都是input标签下弹出来的,如果使用webdriver 去设置日期, 1. 定位到该input 2. 使用sendKeys 方法 比如:使用定位: driver.findElement ...
- qhfl-1 跨域
CORS跨域请求 CORS即Cross Origin Resource Sharing 跨域资源共享,那么跨域请求还分为两种,一种叫简单请求,一种是复杂请求 简单请求 HTTP方法是下列方法之一 HE ...