mirror of
https://github.com/Snailclimb/JavaGuide
synced 2025-06-20 22:17:09 +08:00
Update java-learning-path-and-methods.md
This commit is contained in:
parent
0daf095d3e
commit
2dc34a5c76
@ -1,3 +1,6 @@
|
||||
|
||||
到目前为止,我觉得不管是在公众号后台、知乎还是微信上面我被问的做多的就是:“大佬,有没有 Java 学习路线和方法”。所以,这部分单独就自己的学习经历来说点自己的看法。
|
||||
|
||||
## 前言
|
||||
|
||||
大一的时候,我仅仅接触过 C 语言,对 C 语言的掌握程度仅仅是可以完成老师布置的课后习题。那时候我的主要的精力都放在了参加各种课外活动,跟着一个很不错的社团尝试了很多我之前从未尝试过的事情:露营、户外烧烤、公交车演讲、环跑古城墙、徒步旅行、异地求生、圣诞节卖苹果等等。
|
||||
@ -6,17 +9,17 @@
|
||||
|
||||
很多人在学完 Java 基础之后,不知道后面该如何进行下一步地进行学习,或者不知道如何去学习。如何系统地学习 Java 一直是困扰着很多新手或者期待在 Java 方向进阶的小伙伴的一个问题。我也在知乎上回答了好几个类似的问题,我觉得既然很多人都需要这方面的指导,那我就写一篇自己对于如何系统学习 Java 后端的看法。刚好关注公众号的很多朋友都是学 Java 不太久的,希望这篇文章对学习 Java 的朋友能有一点启示作用。
|
||||
|
||||
由于我个人能力有限,下面的学习路线以及方法推荐一定还有很多欠缺的地方。欢迎有想法的朋友在评论区说一下自己的看法。本文适合刚入门或者刚入门不久的朋友,比较基础。
|
||||
由于我个人能力有限,下面的学习路线以及方法推荐一定还有很多欠缺的地方。欢迎有想法的朋友在评论区说一下自己的看法。本文比较适合刚入门或者想打好 Java 基础的朋友,比较基础。
|
||||
|
||||
## 学习路线以及方法推荐
|
||||
|
||||
**下面的学习路线以及方法是笔主根据个人学习经历总结改进后得出,我相信照着这条学习路线来你的学习效率会非常高。**
|
||||
|
||||
学习某个知识点的过程中如果不知道看什么书的话,可以查看这篇文章 :[Java 学习必备书籍推荐终极版!](../data/java-recommended-books.md)。
|
||||
学习某个知识点的过程中如果不知道看什么书的话,可以查看这篇文章 :[Java 学习必备书籍推荐终极版!](../data/java-recommended-books.md "Java 学习必备书籍推荐终极版!")。
|
||||
|
||||
另外,很重要的一点:**建议使用 Intellij IDEA 进行编码,可以单独抽点时间学习 Intellij IDEA 的使用。**
|
||||
|
||||
**下面提到的一些视频,[公众号](#公众号)后台回复关键“1”即可获取!**
|
||||
**下面提到的一些视频,[公众号](#公众号 "公众号")后台回复关键“1”即可获取!**
|
||||
|
||||
### step 1:Java 基础
|
||||
|
||||
@ -28,9 +31,9 @@
|
||||
|
||||
学习完之后可以看一下下面这几篇文章,检查一下自己的学习情况:
|
||||
|
||||
* **[Java 基础知识回顾](../java/Java基础知识.md)**
|
||||
* **[Java 基础知识疑难点/易错点](../java/Java疑难点.md)**
|
||||
* **[一些重要的Java程序设计题](../java/Java程序设计题.md)**
|
||||
- **[Java 基础知识回顾](../java/Java基础知识.md "Java 基础知识回顾")**
|
||||
- **[Java 基础知识疑难点/易错点](../java/Java疑难点.md "Java 基础知识疑难点/易错点")**
|
||||
- **[一些重要的 Java 程序设计题](../java/Java程序设计题.md "一些重要的Java程序设计题")**
|
||||
|
||||
检测一下自己的掌握情况,这 34 个问题都时 Java 中比较重要的知识点,最重要的是在 Java 后端面试中的出场率非常高。
|
||||
|
||||
@ -55,21 +58,21 @@
|
||||
|
||||
**Java 多线程知识进阶:**
|
||||
|
||||
1. synchronized 关键字:①说一说自己对于 synchronized 关键字的了解;②说说自己是怎么使用 synchronized 关键字,在项目中用到了吗;③讲一下 synchronized 关键字的底层原理;④说说 JDK1.6 之后的 synchronized 关键字底层做了哪些优化,可以详细介绍一下这些优化吗;⑤谈谈 synchronized 和 ReentrantLock 的区别。
|
||||
2. volatile 关键字: ①讲一下 Java 内存模型;②说说 synchronized 关键字和 volatile 关键字的区别。
|
||||
3. ThreadLocal:①简介;② 原理;③ 内存泄露问题。
|
||||
4. 线程池:①为什么要用线程池?;②实现 Runnable 接口和 Callable 接口的区别;③ 执行 execute() 方法和 submit() 方法的区别是什么呢?;④ 如何创建线程池。
|
||||
5. Atomic 原子类: ①介绍一下 Atomic 原子类;② JUC 包中的原子类是哪 4 类?;③ 讲讲 AtomicInteger 的使用;④ 能不能给我简单介绍一下 AtomicInteger 类的原理。
|
||||
6. AQS :①简介;②原理;③ AQS 常用组件。
|
||||
1. synchronized 关键字:① 说一说自己对于 synchronized 关键字的了解;② 说说自己是怎么使用 synchronized 关键字,在项目中用到了吗;③ 讲一下 synchronized 关键字的底层原理;④ 说说 JDK1.6 之后的 synchronized 关键字底层做了哪些优化,可以详细介绍一下这些优化吗;⑤ 谈谈 synchronized 和 ReentrantLock 的区别。
|
||||
2. volatile 关键字: ① 讲一下 Java 内存模型;② 说说 synchronized 关键字和 volatile 关键字的区别。
|
||||
3. ThreadLocal:① 简介;② 原理;③ 内存泄露问题。
|
||||
4. 线程池:① 为什么要用线程池?;② 实现 Runnable 接口和 Callable 接口的区别;③ 执行 execute() 方法和 submit() 方法的区别是什么呢?;④ 如何创建线程池。
|
||||
5. Atomic 原子类: ① 介绍一下 Atomic 原子类;② JUC 包中的原子类是哪 4 类?;③ 讲讲 AtomicInteger 的使用;④ 能不能给我简单介绍一下 AtomicInteger 类的原理。
|
||||
6. AQS :① 简介;② 原理;③ AQS 常用组件。
|
||||
|
||||
另外,推荐看一下下面这几篇文章:
|
||||
|
||||
* **[Java 并发基础常见面试题总结](../java/Multithread/JavaConcurrencyBasicsCommonInterviewQuestionsSummary.md)**
|
||||
* **[Java 并发进阶常见面试题总结](../java/Multithread/JavaConcurrencyAdvancedCommonInterviewQuestions.md)**
|
||||
* [并发容器总结](../java/Multithread/并发容器总结.md)
|
||||
* [乐观锁与悲观锁](../essential-content-for-interview/面试必备之乐观锁与悲观锁.md)
|
||||
* [JUC 中的 Atomic 原子类总结](../java/Multithread/Atomic.md)
|
||||
* [AQS 原理以及 AQS 同步组件总结](../java/Multithread/AQS.md)
|
||||
- **[Java 并发基础常见面试题总结](../java/Multithread/JavaConcurrencyBasicsCommonInterviewQuestionsSummary.md "Java 并发基础常见面试题总结")**
|
||||
- **[Java 并发进阶常见面试题总结](../java/Multithread/JavaConcurrencyAdvancedCommonInterviewQuestions.md "Java 并发进阶常见面试题总结")**
|
||||
- [并发容器总结](../java/Multithread/并发容器总结.md "并发容器总结")
|
||||
- [乐观锁与悲观锁](../essential-content-for-interview/面试必备之乐观锁与悲观锁.md "乐观锁与悲观锁")
|
||||
- [JUC 中的 Atomic 原子类总结](../java/Multithread/Atomic.md "JUC 中的 Atomic 原子类总结")
|
||||
- [AQS 原理以及 AQS 同步组件总结](../java/Multithread/AQS.md "AQS 原理以及 AQS 同步组件总结")
|
||||
|
||||
### step 3(可选):操作系统与计算机网络
|
||||
|
||||
@ -77,23 +80,23 @@
|
||||
|
||||
关于操作系统的话,我没有什么操作系统方面的书籍可以推荐,因为我自己也没认真看过几本。因为操作系统比较枯燥的原因,我建议这部分看先看视频学可能会比较好一点。我推荐一个 Github 上开源的哈工大《操作系统》课程给大家吧!地址:https://github.com/hoverwinter/HIT-OSLab 。
|
||||
|
||||
另外,对于 Linux 我们要掌握基本的使用就需要对一些常用命令非常熟悉比如:目录切换命令、目录操作命令、文件的操作命令、压缩或者解压文件的命令等等。推荐一个 Github 上学习 Linux 的开源文档:[《Java 程序员眼中的 Linux》](https://github.com/judasn/Linux-Tutorial)
|
||||
另外,对于 Linux 我们要掌握基本的使用就需要对一些常用命令非常熟悉比如:目录切换命令、目录操作命令、文件的操作命令、压缩或者解压文件的命令等等。推荐一个 Github 上学习 Linux 的开源文档:[《Java 程序员眼中的 Linux》](https://github.com/judasn/Linux-Tutorial "《Java 程序员眼中的 Linux》")
|
||||
|
||||
计算机网络方面的学习,我觉得掌握基本的知识就行了,不需要太深究,一般面试对这方面要求也不高,毕竟不是专门做网络的。推荐 **《网络是怎样连接的》** 、**《图解 HTTP》** 这两本书来看,这两本书都属于比较有趣易懂的类型,也适合没有基础的人来看。
|
||||
|
||||
### step 4(可选):数据结构与算法
|
||||
|
||||
如果你想进入大厂的话,我推荐你在学习完 Java 基础或者多线程之后,就开始每天抽出一点时间来学习算法和数据结构。为了提高自己的编程能力,你也可以坚持刷 **[Leetcode](https://leetcode-cn.com)**。就目前国内外的大厂面试来说,刷 Leetcode 可以说已经成了不得不走的一条路。
|
||||
如果你想进入大厂的话,我推荐你在学习完 Java 基础或者多线程之后,就开始每天抽出一点时间来学习算法和数据结构。为了提高自己的编程能力,你也可以坚持刷 **[Leetcode](https://leetcode-cn.com "Leetcode")**。就目前国内外的大厂面试来说,刷 Leetcode 可以说已经成了不得不走的一条路。
|
||||
|
||||
对于想要入门算法和数据结构的朋友,建议看这两本书 **《算法图解》** 和 **《大话数据结构》**,这两本书虽然算不上很经典的书籍,但是比较有趣,对于刚入门算法和数据结构的朋友非常友好。**《算法导论》** 非常经典,但是对于刚入门的就不那么友好了。
|
||||
|
||||
另外,还有一本非常赞的算法书推荐给各位,这本书的名字就叫**《算法》**,书中的代码都是用 Java 语言编写。这本书的优点太多太多比如它的讲解基础而全面、对阅读者比较友好等等。我觉得这本书唯一的缺点就是太厚了 (小声 BB,可能和作者讲解某些知识点的时候优点啰嗦有关)。除了这本书之外,**《剑指 offer》** 、**《编程珠玑》** 、**《编程之美》** 这三本书都被很多大佬推荐过了,对于算法面试非常有帮助。**《算法之美》** 这本书也非常不错,非常适合闲暇的时候看。
|
||||
另外,还有一本非常赞的算法书推荐给各位,这本书的名字就叫 **《算法》**,书中的代码都是用 Java 语言编写。这本书的优点太多太多比如它的讲解基础而全面、对阅读者比较友好等等。我觉得这本书唯一的缺点就是太厚了 (小声 BB,可能和作者讲解某些知识点的时候有点啰嗦有关)。除了这本书之外,**《剑指 offer》** 、**《编程珠玑》** 、**《编程之美》** 这三本书都被很多大佬推荐过了,对于算法面试非常有帮助。**《算法之美》** 这本书也非常不错,非常适合闲暇的时候看。
|
||||
|
||||
### step 5:前端知识
|
||||
|
||||
这一步主要是学习前端基础 (HTML、CSS、JavaScript),当然 BootStrap、Layui等等比较简单的前端框架你也可以了解一下。网上有很多这方面资源,我只推荐一个大部分初学这些知识都会看的网站:http://www.w3school.com.cn/ ,这个网站用来回顾知识也很不错 。推荐先把 HTML、CSS、JS 的基础知识过一遍,然后通过一个实际的前端项目来巩固。
|
||||
这一步主要是学习前端基础 (HTML、CSS、JavaScript),当然 BootStrap、Layui 等等比较简单的前端框架你也可以了解一下。网上有很多这方面资源,我只推荐一个大部分初学这些知识都会看的网站:http://www.w3school.com.cn/ ,这个网站用来回顾知识也很不错 。推荐先把 HTML、CSS、JS 的基础知识过一遍,然后通过一个实际的前端项目来巩固。
|
||||
|
||||
现在都是前后端分离,就目前来看大部分项目都优先选择React、Angular、Vue这些厉害的框架来开发。如果你想往全栈方向发展的话(笔主目前的方向,我用 React 在公司做过两个小型项目),建议先把 JS 基础打好,然后再选择 React、Angular、Vue 其中的一个来认真学习一下。国内使用 Vue 比较多一点,国外一般用的是 React和Angular。
|
||||
现在都是前后端分离,就目前来看大部分项目都优先选择 React、Angular、Vue 这些厉害的框架来开发。如果你想往全栈方向发展的话(笔主目前的方向,我用 React 在公司做过两个小型项目),建议先把 JS 基础打好,然后再选择 React、Angular、Vue 其中的一个来认真学习一下。国内使用 Vue 比较多一点,国外一般用的是 React 和 Angular。
|
||||
|
||||
### step 5:MySQL
|
||||
|
||||
@ -101,29 +104,29 @@
|
||||
|
||||
下面这些 MySQL 相关的文章强烈推荐你看看:
|
||||
|
||||
* **[【推荐】MySQL/数据库 知识点总结](../database/MySQL.md)**
|
||||
* **[阿里巴巴开发手册数据库部分的一些最佳实践](../database/阿里巴巴开发手册数据库部分的一些最佳实践.md)**
|
||||
* **[一千行MySQL学习笔记](../database/一千行MySQL命令.md)**
|
||||
* [MySQL高性能优化规范建议](../database/MySQL高性能优化规范建议.md)
|
||||
* [数据库索引总结](../database/MySQL%20Index.md)
|
||||
* [事务隔离级别(图文详解)](../database/事务隔离级别(图文详解).md)
|
||||
* [一条SQL语句在MySQL中如何执行的](../database/一条sql语句在mysql中如何执行的.md)
|
||||
- **[【推荐】MySQL/数据库 知识点总结](../database/MySQL.md "【推荐】MySQL/数据库 知识点总结")**
|
||||
- **[阿里巴巴开发手册数据库部分的一些最佳实践](../database/阿里巴巴开发手册数据库部分的一些最佳实践.md "阿里巴巴开发手册数据库部分的一些最佳实践")**
|
||||
- **[一千行 MySQL 学习笔记](../database/一千行MySQL命令.md "一千行MySQL学习笔记")**
|
||||
- [MySQL 高性能优化规范建议](../database/MySQL高性能优化规范建议.md "MySQL高性能优化规范建议")
|
||||
- [数据库索引总结](../database/MySQL%20Index.md "数据库索引总结")
|
||||
- [事务隔离级别(图文详解)](../database/事务隔离级别(图文详解 "事务隔离级别(图文详解 "事务隔离级别(图文详解)")").md)
|
||||
- [一条 SQL 语句在 MySQL 中如何执行的](../database/一条sql语句在mysql中如何执行的.md "一条SQL语句在MySQL中如何执行的")
|
||||
|
||||
### step 6:常用工具
|
||||
|
||||
1. **Maven** :建议学习常用框架之前可以提前花半天时间学习一下**Maven**的使用。(到处找 Jar 包,下载 Jar 包是真的麻烦费事,使用 Maven 可以为你省很多事情)。
|
||||
2. **Git** :基本的 Git 技能也是必备的,试着在学习的过程中将自己的代码托管在 Github 上。([Git入门](../tools/Git.md))
|
||||
3. **Docker** :学着用 Docker 安装学习中需要用到的软件比如 MySQL ,这样方便很多,可以为你节省不少时间。([Docker 入门](../tools/Docker.md))
|
||||
2. **Git** :基本的 Git 技能也是必备的,试着在学习的过程中将自己的代码托管在 Github 上。([Git 入门](../tools/Git.md "Git入门"))
|
||||
3. **Docker** :学着用 Docker 安装学习中需要用到的软件比如 MySQL ,这样方便很多,可以为你节省不少时间。([Docker 入门](../tools/Docker.md "Docker 入门"))
|
||||
|
||||
### step 7:常用框架
|
||||
|
||||
学习 Struts2(可不用学)、**Spring**、**SpringMVC**、**Hibernate**、**Mybatis**、**shiro** 等框架的使用, (可选) 熟悉 **Spring 原理**(大厂面试必备),然后很有必要学习一下 **SpringBoot** ,**学好 SpringBoot 真的很重要**。很多公司对于应届生都是直接上手 **SpringBoot**,不过如果时间允许的话,我还是推荐你把 **Spring**、**SpringMVC** 提前学一下。
|
||||
|
||||
关于 SpringBoot ,推荐看一下笔主开源的 [Spring Boot 教程](https://github.com/Snailclimb/springboot-guide) (SpringBoot 核心知识点总结。 基于 Spring Boot 2.19+)。
|
||||
关于 SpringBoot ,推荐看一下笔主开源的 [Spring Boot 教程](https://github.com/Snailclimb/springboot-guide "Spring Boot 教程") (SpringBoot 核心知识点总结。 基于 Spring Boot 2.19+)。
|
||||
|
||||
**Spring 真的很重要!** 一定要搞懂 AOP 和 IOC 这两个概念。Spring 中 bean 的作用域与生命周期、SpringMVC 工作原理详解等等知识点都是非常重要的,一定要搞懂。
|
||||
|
||||
推荐看文档+视频结合的方式,中途配合实战来学习,学习期间可以多看看 JavaGuide 对于[常用框架的总结](https://github.com/Snailclimb/JavaGuide#%E5%B8%B8%E7%94%A8%E6%A1%86%E6%9E%B6)。
|
||||
推荐看文档+视频结合的方式,中途配合实战来学习,学习期间可以多看看 JavaGuide 对于[常用框架的总结](https://github.com/Snailclimb/JavaGuide#%E5%B8%B8%E7%94%A8%E6%A1%86%E6%9E%B6 "常用框架的总结")。
|
||||
|
||||
**另外,都 2019 年了,咱千万不要再学 JSP 了好不?**
|
||||
|
||||
@ -137,9 +140,9 @@
|
||||
|
||||
### step 9:其他
|
||||
|
||||
可以再回来看一下多线程方面的知识,还可以利用业余时间学习一下 **[NIO](https://github.com/Snailclimb/JavaGuide#io)** 和 **Netty** ,这样简历上也可以多点东西。如果想去大厂,**[JVM](https://github.com/Snailclimb/JavaGuide#jvm)** 的一些知识也是必学的(**Java 内存区域、虚拟机垃圾算法、虚拟垃圾收集器、JVM 内存管理**)推荐《深入理解 Java 虚拟机:JVM 高级特性与最佳实践(最新第二版》和《实战Java虚拟机》,如果嫌看书麻烦的话,你也可以看我整理的文档。
|
||||
可以再回来看一下多线程方面的知识,还可以利用业余时间学习一下 **[NIO](https://github.com/Snailclimb/JavaGuide#io "NIO")** 和 **Netty** ,这样简历上也可以多点东西。如果想去大厂,**[JVM](https://github.com/Snailclimb/JavaGuide#jvm "JVM")** 的一些知识也是必学的(**Java 内存区域、虚拟机垃圾算法、虚拟垃圾收集器、JVM 内存管理**)推荐《深入理解 Java 虚拟机:JVM 高级特性与最佳实践(最新第二版》和《实战 Java 虚拟机》,如果嫌看书麻烦的话,你也可以看我整理的文档。
|
||||
|
||||
另外,现在微服务特别火,很多公司在面试也明确要求需要微服务方面的知识。如果有精力的话可以去学一下SpringCloud 生态系统微服务方面的东西。
|
||||
另外,现在微服务特别火,很多公司在面试也明确要求需要微服务方面的知识。如果有精力的话可以去学一下 SpringCloud 生态系统微服务方面的东西。
|
||||
|
||||
## 总结
|
||||
|
||||
@ -156,7 +159,7 @@
|
||||
|
||||
首先百度/Google,通过搜索引擎解决不了的话就找身边的朋友或者认识的一些人。另外,一定要进行项目实战!很多人这时候就会问没有实际项目让我做怎么办?我觉得可以通过下面这几种方式:
|
||||
|
||||
1. 在网上找一个符合自己能力与找工作需求的实战项目视频或者博客跟着老师一起做。做的过程中,你要有自己的思考,不要浅尝辄止,对于很多知识点,别人的讲解可能只是满足项目就够了,你自己想多点知识的话,对于重要的知识点就要自己学会去往深出学。
|
||||
1. 在网上找一个符合自己能力与找工作需求的实战项目视频或者博客跟着老师一起做。做的过程中,你要有自己的思考,不要浅尝辄止,对于很多知识点,别人的讲解可能只是满足项目就够了,你自己想多点知识的话,对于重要的知识点就要自己学会去往深处学。
|
||||
2. Github 或者码云上面有很多实战类别项目,你可以选择一个来研究,为了让自己对这个项目更加理解,在理解原有代码的基础上,你可以对原有项目进行改进或者增加功能。
|
||||
3. 自己动手去做一个自己想完成的东西,遇到不会的东西就临时去学,现学现卖(这种方式比较难,初学不推荐用这种方式,因为你脑海中没有基本的概念,写出来的代码一般会很难或者根本就做不出来一个像样的东西)。
|
||||
4. ......
|
||||
@ -165,14 +168,14 @@
|
||||
|
||||
**一定要学会分配自己时间,要学的东西很多,真的很多,搞清楚哪些东西是重点,哪些东西仅仅了解就够了。一定不要把精力都花在了学各种框架上,算法和数据结构真的很重要!**
|
||||
|
||||
另外**,学习的过程中有一个可以参考的文档很重要,非常有助于自己的学习**。我当初弄 JavaGuide: https://github.com/Snailclimb/JavaGuide 的很大一部分目的就是因为这个。**客观来说,相比于博客,JavaGuide 里面的内容因为更多人的参与变得更加准确和完善。**
|
||||
另外,**学习的过程中有一个可以参考的文档很重要,非常有助于自己的学习**。我当初弄 JavaGuide: https://github.com/Snailclimb/JavaGuide 的很大一部分目的就是因为这个。**客观来说,相比于博客,JavaGuide 里面的内容因为更多人的参与变得更加准确和完善。**
|
||||
|
||||
### 公众号
|
||||
|
||||
如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号。
|
||||
|
||||
**《Java面试突击》:** 由本文档衍生的专为面试而生的《Java面试突击》V2.0 PDF 版本[公众号](#公众号)后台回复 **"Java面试突击"** 即可免费领取!
|
||||
**《Java 面试突击》:** 由本文档衍生的专为面试而生的《Java 面试突击》V2.0 PDF 版本[公众号](#公众号 "公众号")后台回复 **"Java 面试突击"** 即可免费领取!
|
||||
|
||||
**Java工程师必备学习资源:** 一些Java工程师常用学习资源公众号后台回复关键字 **“1”** 即可免费无套路获取。
|
||||
**Java 工程师必备学习资源:** 一些 Java 工程师常用学习资源公众号后台回复关键字 **“1”** 即可免费无套路获取。
|
||||
|
||||

|
Loading…
x
Reference in New Issue
Block a user