美国上市公司,专注Java培训21年

Java学习路线和方法汇总


下面的学习路线以及方法是笔主根据个人学习经历总结改进后得出,我相信照着这条学习路线来你的学习效率会非常高。

另外,很重要的一点:建议使用 Intellij IDEA 进行编码,可以单独抽点时间学习 Intellij IDEA 的使用。

step 1:Java 基础

《Java 核心技术卷 1/2》 和 《Head First Java》 这两本书在我看来都是入门 Java 的很不错的书籍 (《Java 核心技术卷 1/2》 知识点更全,我更推荐这本书),我倒是觉得《Java 编程思想》有点属于新手劝退书的意思,慎看,建议有点基础后再看。你也可以边看视频边看书学习。对于 Java8 新特性的东西,我建议你基础学好之后可以看一下,暂时看不太明白也没关系,后面抽时间再回过头来看。

看完之后,你可以用自己学的东西实现一个简单的 Java 程序,也可以尝试用 Java 解决一些编程问题,以此来将自己学到的东西付诸于实践。

记得多总结!打好基础!把自己重要的东西都记录下来。API 文档放在自己可以看到的地方,以备自己可以随时查阅。为了能让自己写出更优秀的代码,《Effective Java》、《重构》 这两本书没事也可以看看。

step 2:多线程的简单使用

多线程这部分内容可能会比较难以理解和上手,前期可以先简单地了解一下基础,到了后面有精力和能力后再回来仔细看。推荐《Java 并发编程之美》 或者 《实战 Java 高并发程序设计》 这两本书。我目前也在重构一份我之前写的多线程学习指南,后面会更新在公众号里面。

学习完多线程之后可以通过下面这些问题检测自己是否掌握。

Java 多线程知识基础:

什么是线程和进程?

请简要描述线程与进程的关系,区别及优缺点?

说说并发与并行的区别?

为什么要使用多线程呢?

使用多线程可能带来什么问题?

说说线程的生命周期和状态?

什么是上下文切换?

什么是线程死锁?如何避免死锁?

说说 sleep() 方法和 wait() 方法区别和共同点?

为什么我们调用 start() 方法时会执行 run() 方法,为什么我们不能直接调用 run() 方法?

Java 多线程知识进阶:

synchronized 关键字:① 说一说自己对于 synchronized 关键字的了解;② 说说自己是怎么使用 synchronized 关键字,在项目中用到了吗;③ 讲一下 synchronized 关键字的底层原理;④ 说说 JDK1.6 之后的 synchronized 关键字底层做了哪些优化,可以详细介绍一下这些优化吗;⑤ 谈谈 synchronized 和 ReentrantLock 的区别。

volatile 关键字:① 讲一下 Java 内存模型;② 说说 synchronized 关键字和 volatile 关键字的区别。

ThreadLocal:① 简介;② 原理;③ 内存泄露问题。

线程池:① 为什么要用线程池?;② 实现 Runnable 接口和 Callable 接口的区别;③ 执行 execute() 方法和 submit() 方法的区别是什么呢?;④ 如何创建线程池。

Atomic 原子类: ① 介绍一下 Atomic 原子类;② JUC 包中的原子类是哪 4 类?;③ 讲讲 AtomicInteger 的使用;④ 能不能给我简单介绍一下 AtomicInteger 类的原理。

AQS :① 简介;② 原理;③ AQS 常用组件。

step 3(可选):操作系统与计算机网络

操作系统这方面我觉得掌握操作系统的基础知识和 Linux 的常用命令就行以及一些重要概念就行了。

关于操作系统的话,我没有什么操作系统方面的书籍可以推荐,因为我自己也没认真看过几本。因为操作系统比较枯燥的原因,我建议这部分看先看视频学可能会比较好一点。我推荐一个 Github 上开源的哈工大《操作系统》课程给大家吧!地址:https://github.com/hoverwinter/HIT-OSLab 。

另外,对于 Linux 我们要掌握基本的使用就需要对一些常用命令非常熟悉比如:目录切换命令、目录操作命令、文件的操作命令、压缩或者解压文件的命令等等。推荐一个 Github 上学习 Linux 的开源文档:《Java 程序员眼中的 Linux》[12]

计算机网络方面的学习,我觉得掌握基本的知识就行了,不需要太深究,一般面试对这方面要求也不高,毕竟不是专门做网络的。推荐 《网络是怎样连接的》 、《图解 HTTP》 这两本书来看,这两本书都属于比较有趣易懂的类型,也适合没有基础的人来看。

step 4(可选):数据结构与算法

如果你想进入大厂的话,我推荐你在学习完 Java 基础或者多线程之后,就开始每天抽出一点时间来学习算法和数据结构。为了提高自己的编程能力,你也可以坚持刷 Leetcode[13]。就目前国内外的大厂面试来说,刷 Leetcode 可以说已经成了不得不走的一条路。

对于想要入门算法和数据结构的朋友,建议看这两本书 《算法图解》 和 《大话数据结构》,这两本书虽然算不上很经典的书籍,但是比较有趣,对于刚入门算法和数据结构的朋友非常友好。《算法导论》 非常经典,但是对于刚入门的就不那么友好了。

另外,还有一本非常赞的算法书推荐给各位,这本书的名字就叫 《算法》,书中的代码都是用 Java 语言编写。这本书的优点太多太多比如它的讲解基础而全面、对阅读者比较友好等等。我觉得这本书唯一的缺点就是太厚了 (小声 BB,可能和作者讲解某些知识点的时候有点啰嗦有关)。除了这本书之外,《剑指 offer》 、《编程珠玑》 、《编程之美》 这三本书都被很多大佬推荐过了,对于算法面试非常有帮助。《算法之美》 这本书也非常不错,非常适合闲暇的时候看。

step 5:前端知识

这一步主要是学习前端基础 (HTML、CSS、JavaScript),当然 BootStrap、Layui 等等比较简单的前端框架你也可以了解一下。网上有很多这方面资源,推荐先把 HTML、CSS、JS 的基础知识过一遍,然后通过一个实际的前端项目来巩固。

现在都是前后端分离,就目前来看大部分项目都优先选择 React、Angular、Vue 这些厉害的框架来开发。如果你想往全栈方向发展的话(笔主目前的方向,我用 React 在公司做过两个小型项目),建议先把 JS 基础打好,然后再选择 React、Angular、Vue 其中的一个来认真学习一下。国内使用 Vue 比较多一点,国外一般用的是 React 和 Angular。

step 6:MySQL

学习 MySQL 的基本使用,基本的增删改查,SQL 命令,索引、存储过程这些都学一下吧!推荐书籍 《SQL 基础教程(第 2 版)》(入门级)、《高性能 MySQL : 第 3 版》(进阶)、《MySQL 必知必会》。

step 7:常用工具

Maven :建议学习常用框架之前可以提前花半天时间学习一下Maven的使用。(到处找 Jar 包,下载 Jar 包是真的麻烦费事,使用 Maven 可以为你省很多事情)。

Git :基本的 Git 技能也是必备的,试着在学习的过程中将自己的代码托管在 Github 上。(Git 入门[20])

Docker :学着用 Docker 安装学习中需要用到的软件比如 MySQL ,这样方便很多,可以为你节省不少时间。(Docker 入门[21])

step 8:常用框架

学习 Struts2(可不用学)、Spring、SpringMVC、Hibernate、Mybatis、shiro 等框架的使用, (可选) 熟悉 Spring 原理(大厂面试必备),然后很有必要学习一下 SpringBoot ,学好 SpringBoot 真的很重要。很多公司对于应届生都是直接上手 SpringBoot,不过如果时间允许的话,我还是推荐你把 Spring、SpringMVC 提前学一下。

关于 SpringBoot ,推荐看一下笔主开源的 Spring Boot 教程[22] (SpringBoot 核心知识点总结。基于 Spring Boot 2.19+)。

Spring 真的很重要!一定要搞懂 AOP 和 IOC 这两个概念。Spring 中 bean 的作用域与生命周期、SpringMVC 工作原理详解等等知识点都是非常重要的,一定要搞懂。

推荐看文档+视频结合的方式,中途配合实战来学习,学习期间可以多看看 JavaGuide 对于常用框架的总结[23]。

另外,都 9102年了,咱千万不要再学 JSP 了好不?

step 9:高性能网站架构

学习 Dubbo、Zookeeper、常见的消息队列(比如ActiveMq、RabbitMQ)、Redis 、Elasticsearch 的使用。

我当时学习这些东西的时候是通过黑马视频最后一个分布式项目来学的,我的这种方式也是很多人普遍采用和接受的方式。我觉得应该是掌握这些知识点比较好的一种方式了,另外,推荐边看视频边自己做,遇到不懂的知识点要及时查阅网上博客和相关书籍,这样学习效果更好。

一定要学会拓展知识,养成自主学习的意识。黑马项目对这些知识点的介绍都比较蜻蜓点水。

step 10:其他

可以再回来看一下多线程方面的知识,还可以利用业余时间学习一下 NIO[24] 和 Netty ,这样简历上也可以多点东西。如果想去大厂,JVM[25] 的一些知识也是必学的(Java 内存区域、虚拟机垃圾算法、虚拟垃圾收集器、JVM 内存管理)推荐《深入理解 Java 虚拟机:JVM 高级特性与最佳实践(最新第二版》和《实战 Java 虚拟机》,如果嫌看书麻烦的话,你也可以看我整理的文档。

另外,现在微服务特别火,很多公司在面试也明确要求需要微服务方面的知识。如果有精力的话可以去学一下 SpringCloud 生态系统微服务方面的东西。

总结

我上面主要概括一下每一步要学习的内容,对学习规划有一个建议。知道要学什么之后,如何去学呢?我觉得学习每个知识点可以考虑这样去入手:

官网(大概率是英文,不推荐初学者看)。

书籍(知识更加系统完全,推荐)。

视频(比较容易理解,推荐,特别是初学的时候。)。

网上博客(解决某一知识点的问题的时候可以看看)。

这里给各位一个建议,看视频的过程中最好跟着一起练,要做笔记!!!

最好可以边看视频边找一本书籍看,看视频没弄懂的知识点一定要尽快解决,如何解决?

首先百度/Google,通过搜索引擎解决不了的话就找身边的朋友或者认识的一些人。另外,一定要进行项目实战!很多人这时候就会问没有实际项目让我做怎么办?我觉得可以通过下面这几种方式:

在网上找一个符合自己能力与找工作需求的实战项目视频或者跟着老师一起做。做的过程中,你要有自己的思考,不要浅尝辄止,对于很多知识点,别人的讲解可能只是满足项目就够了,你自己想多点知识的话,对于重要的知识点就要自己学会去往深处学。

Github 或者码云上面有很多实战类别项目,你可以选择一个来研究,为了让自己对这个项目更加理解,在理解原有代码的基础上,你可以对原有项目进行改进或者增加功能。

自己动手去做一个自己想完成的东西,遇到不会的东西就临时去学,现学现卖(这种方式比较难,初学不推荐用这种方式,因为你脑海中没有基本的概念,写出来的代码一般会很难或者根本就做不出来一个像样的东西)。

做项目不光要做,还要改进,改善。另外,如果你的老师有相关 Java 后台项目的话,你也可以主动申请参与进来。

一定要学会分配自己时间,要学的东西很多,真的很多,搞清楚哪些东西是重点,哪些东西仅仅了解就够了。一定不要把精力都花在了学各种框架上,算法和数据结构真的很重要!

另外,学习的过程中有一个可以参考的文档很重要,非常有助于自己的学习。我当初弄 JavaGuide的很大一部分目的就是因为这个。客观来说,相比于博客,JavaGuide 里面的内容因为更多人的参与变得更加准确和完善。

Java课程大项目贯穿学习技术,让你在每一个阶段都有相应的企业级真实项目可以上手操作。直接在项目中学会技术的运用,同时积累了实战项目经验,懂得在每一个模块需要用到的技术和实战能力,让你成为企业更加需要的Java工程师。

免责声明:内容来源于网络若涉及侵权联系尽快删除!


【免责声明】本文部分系转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,如涉及作品内容、版权和其它问题,请在30日内与我们联系,我们会予以重改或删除相关文章,以保证您的权益!

Java开发高端课程免费试学

大咖讲师+项目实战全面提升你的职场竞争力

  • 海量实战教程
  • 1V1答疑解惑
  • 行业动态分析
  • 大神学习路径图

相关推荐

更多
  • Java编程工具用哪个最好
    Java编程工具用哪个最好
    Java编程工具用哪个最好?Java编程工具的选择取决于个人的偏好、项目需求和开发环境。以下是一些常用的Java编程工具: 详情>>

    2024-04-03

  • 好用的Java编写软件
    好用的Java编写软件
    Java是一种广泛使用的编程语言,因其跨平台、安全性和稳定性而受到许多开发者的喜爱。Java被用于开发各种类型的软件,从桌面应用程序到企业级服务器端应用程序。以下是一些常见的、用Java编写的软件示例: 详情>>

    2024-04-02

  • Java测试工具有哪些?
    Java测试工具有哪些?
    Java测试工具有哪些?Java测试工具有很多,可以用于不同的测试阶段和目的,包括单元测试、集成测试、性能测试等。以下是一些流行的Java测试工具: 详情>>

    2024-04-02

  • Java有哪些课程?
    Java有哪些课程?
    Java是一种功能丰富且易于学习的编程语言,适用于多种不同的应用领域。目前,许多机构和在线平台都提供了丰富的Java相关课程,课程内容涵盖了Java的基础知识、高级特性以及实际应用等方面。以下是一些Java课程的示例: 详情>>

    2024-03-14

  • Java开班时间

    收起