断断续续写了一个多月,终于把 2025 最新版的 Java 后端学习路线给整完了!这篇文章可能是你看过最用心、最全面的 Java 后端学习路线。
先贴一张Java技术栈
对于编程初学者,我不太建议上来通过做项目学习。实践确实很重要,如果你没有编程基础的话,直接上手实战,很容易最后学个四不像。
这里吐血整理了一些实践中踩坑总结的经验,希望大家少走弯路。
- 一定要理论结合实践,不要只看书,一定要多动手看代码、写代码。
- 不要一开始就抱着大块头的书去啃,也不要从头到尾啃,要抓重点。一开始掌握最基本的知识就可以,然后就可以开始实践了。
- 学习建议看书+视频结合的方式,视频会更生动,不会那么枯燥。
建议你在学习编程的初期尽量多看一些优质视频。跟着视频一步一步走,可以让你少踩很多坑,学习编程的信心也会增加。
看下整体概况:
现在面试很卷,想要找到一个好工作的话,就需要你去多学一点,多练习一点。虽然目前学的很多知识,在你工作之后可能用不到,但是,面试的筛选就需要你会这些。毕竟,很多岗位是很多人一起竞争,为了达到筛选效果,面试难度通常都会比较大的。这也就是所谓的:“面试造火箭,入职拧螺丝”。
计算机基础
基础很重要,计算机基础主要包含操作系统,计算机网络、数据结构、算法、设计模式,操作系统、编译原理,这些可以了解一下,不用太深入,本人是站在Java工程师的角度来说。(但我并不是Java程序员)
- 操作系统的组成
- 进程、线程
- 进程 / 线程间通讯方式
- 进程调度算法
- 进程 / 线程同步方式
- 进程 / 线程状态
- 死锁
- 内存管理
- 局部性原理
- 网络分层模型
- 网络传输过程
- IP、端口
- HTTP / HTTPS 协议
- UDP / TCP 协议
- ARP 地址解析协议
- 网络安全
- DNS 域名解析
计算机网络在面试中经常被问到,比如:
- TCP 为什么三次握手?四次挥手?
- TCP 为什么要有 TIME_WAIT 状态?
- TCP 为什么是可靠传输协议,而 UDP 不是?
- 键入网址到网页显示,期间发生了什么?
- HTTPS 握手过程是怎样的?
书籍
- 《现代操作系统》(难度较大,不推荐新手看)
- 《深入理解计算机系统》(难度较大,不推荐新手看)
- 《 自己动手写操作系统》
- 《图解 HTTP》
- 《网络是怎样连接的》
- 《图解 TCP / IP》
学习建议
操作系统对于还在校园就跟着学校的进度学习就成,自学的话可以看下小破站《操作系统原理》视频,有实力的小伙伴,可以学习以下,但如果看不懂也别担心,这并不影响你后续知识的学习。
对于从事后端开发的同学,说重要并不是很重要,只要理解一些理论即可:
- 计算机网络各层有哪些协议?
- TCP 和 UDP 协议的区别?
- TCP 为什么需要三次握手和四次挥手?
- HTTP 和 HTTPS 协议的区别?
当然了,学习基础能帮助自己今后发展更稳定,且更容易接受新知识,所以请不要相信基础无用论。
设计模式
软件开发中有一个概念叫做“软件复用”。简单来说,软件复用就是我们在构建一个新的软件的时候,不需要从零开始,通过复用已有的一些轮子(框架、第三方库等)、设计模式、设计原则等等现成的物料,我们可以更快地构建出一个满足要求的软件。
软件复用需要设计模式的帮助。因为,在软件开发中,设计模式可以通过封装变化来提高代码的可扩展性和可维护性!
设计模式是一套被反复使用、多数人知晓、经过分类的、代码设计经验的总结。
使用设计模式能够增加系统的健壮性,易修改性和可扩展性,当你进行开发的软件规模比较大的时候,良好的设计模式会给编程带来便利,让系统更加稳定,这些在自己编写小程序的时候是体现不出来的。
书籍
- 《图解设计模式》(推荐)
- 《Head First 设计模式》
- 《大话设计模式》
- 《重学 Java 设计模式》
学习建议
对于设计模式:先理解概念,了解每个设计模式的特点和应用场景,再多加练习,运用到实际项目。
设计模式不光需要我们在学习,最重要的还是要不断去实践体会。但是!设计模式不是银弹,不要为了用设计模式而用设计模式。
数据结构与算法
- 数据结构
- 数组
- 字符串
- 队列
- 栈
- 链表
- 集合
- 哈希表
- 树
- 二叉树
- 多叉树
- 字典树
- 算法
- 排序
- 双指针
- 查找
- 分治
- 动态规划
- 递归
- 回溯
- 贪心
- 位运算
- DFS
- BFS图
书籍
- 《算法的乐趣》
- 《剑指 Offer》
- 《程序员代码面试指南》
视频推荐:
https://www.bilibili.com/video/BV1JQLgzpEf6/
文章
爱上算法,迷人的两度搜索,深度优先(DFS)和广度优先(BFS)
完全透析数据结构与算法
时间空间复杂度分析:如何分析、统计算法的执行效率和资源消耗
如何教会女友递归算法?
【数据结构01】浅谈数组
【数据结构02】栈与队列
【数据结构03】浅谈链表
【算法04】树与二叉树(递归思想遍历)
算法动图+原理代码轻松透析八大经典算法
学习建议
学算法一定要多思考、多练习!!!
在复习 Java、巩固基础的过程中,每天可以坚持用 Java 做 2 - 3 道算法题目。
不用担心看不懂,直接进入 LeetCode 学习板块 LeetBook,提供了免费的教程,文字、图解、动画讲算法、在线练习应有尽有,从 0 开始,跟着学习基础知识、跟着教程刷一些同类题目,培养算法思路。
Java SE 基础
主要包括以下内容:
- Java 基础语法
- 数据类型
- 流程控制
- 数组
- 面向对象
- 类和对象
- 方法
- 重载
- 封装
- 继承
- 多态
- 抽象类
- 接口
- 枚举
- 常用类
- String
- 日期时间
- 集合类
- 泛型
- 注解
- 异常处理
- 多线程
- IO 流
- 反射
- 计算机网络:TCP、UDP、网络编程
- 常用类:String、时间类
- 函数式编程
- Stream API
- Lambda 表达式
《Head First Java》 这本书在是入门 Java 的很不错的书籍 。
《Java 核心技术卷 1+卷 2》 这两本书也非常不错。不过,这两本书的内容很多,全看的话比较费时间。
Java 8 算是一个里程碑式的版本,现在一般企业还是用 Java 8 比较多。掌握 Java 8 的一些新特性比如 Lambda、Strean API 还是挺有必要的。这块的话,我推荐 《Java 8 实战》 这本书。
博主深怕各位同学学的不够深不够好,所以博主准备了一打书籍给你。包括Java实战、Java并发开发、Java核心技术、Java面试等等。慢慢啃吧…
有需要的查看下方名片!即可免费领取
学习建议
初学一门语言时,一定要持续学习,不能中断!
想要学好编程,一定要多敲代码!建议先跟着书上的例子敲一遍代码,然后试着自主编写代码,并完成课后练习。
不理解代码也没关系,可以学习 Debug 后,一行一行地打断点执行,查看程序的执行过程。千万不要觉得麻烦,养成习惯后真的能节省很多重复学习的时间。
Java SE 很重要,尤其是面向对象的思想!
对零基础学习者的建议
看视频学习,不要看书学习。知乎上很多人都说看视频慢,建议直接看优秀的书籍,所以我就买了C语言的一些书和Java的一些书(都是初学入门的),但都看不懂,看不下去。反而是后期跟着视频学习一段时间后,再翻开书本(其实几乎没看过书),慢慢能知道书里在讲什么了。大家千万不要觉得看视频会显得自己学习能力不够强。实际上,大学选择计算机专业的同学,又有多少比例是不靠老师上课,自己躲图书馆把编程学会的呢?从这个角度来说,看视频相当于大学课堂听课。并没什么不妥。
不懂的知识点视频多看几遍,如果视频有配套笔记,第二天起来复习一遍,加深印象。自己也可用word做笔记,写学习日志。JavaSE有不懂的,可以百度或谷歌,看看别人的技术博客。再回过头看视频可能就突然明白了。因为我也这么试过,对我帮助很大,希望你也能试试。
根据视频内容画思维导图!
画思维导图的好处在我看来至少有两个:
- 理清讲解思路,让自己有全局观。初学Java,每一天的视频刚听完就基本忘得差不多了。很多知识点脑海中也只剩下一个名词,具体讲了什么已经记不得!做笔记长远来看是最省时间的。因为笔记内容都是自己消化过的,后期不用再去看视频复习(太麻烦了),直接看自己的笔记效率更高!反而蜻蜓点水,不做笔记一味求快的人,学到后面跟不上。因为这些知识点你只是听懂了,而不是理解,也没有实际编码操作过,印象是不深的!!
- 方便日后复习,以及遗忘时的检索回忆。
思维导图要自己做,自己看,效果最好。印象深刻。
个人建议:
- 面向对象是基石,JavaSE中最重要的一是集合,二是IO,希望大家学习这两个知识点时认真对待,多敲代码,多思考。
- 常用API里,String及其相关类StringBuilder, StringBuffer等必须熟悉,后面会不断用到。不学好的话,后面怎么死都不知道!
- 泛型一般只出现在集合中,个人觉得如果一时无法掌握,那么暂时会在集合中使用泛型就行了。
- 反射对于初学者来说是非常抽象的!!但它又无比重要。它虽然不是JavaSE的重点,但是它是JavaWeb很多难点的底层支撑。
Java web
Java web,也叫 Java EE。
JavaWeb是一系列技术的综合,也是大多数Java学习者日后的技术方向。及早的了解JavaWeb也有利于更深层面理解,Java在完整的应用中,是如何与各个模块交互并发挥作用的。
- servlet
- 过滤器
- 监听器
- 拦截器
- session
- cookie
- http协议
- tomcat
- jdbc
- html
- css
- JavaScript
学习建议
前端知识,比如HTML、css、JavaScript会一点就好,jsp不用学,现在基本没有用的了。重点要理解Servlet的原理以及生命周期。在完成这一部分的学习后,可以简单的做个小网站,包括注册登陆,增删改查等功能。
- tomcat一定要跟着视频配置一遍。光看视频是记不住的!!
- Http协议和Servlet超级重要,多看几遍,看一遍你会晕,东西太多了。建议做一下思维导图,理清知识点。
- request和response很重要,也很难。request域超级重要。多看几遍,不要心急。
- cookie、session很重要。多看几遍,不要心急。
框架
框架目前主流就是spring 全家桶,包括spring、spring mvc、spring boot 、spring cloud,还有ORM框架,常用的是mybatis。
spring模块组成
Spring Core:Spring核心模块,包含控制反转(IOC)和依赖注入(DI)。 spring-beans 模块:提供了BeanFactory工厂模式的一个经典实现(Spring将管理对象称为Bean) Spring Context:访问定义和配置对象的媒介。 Spring AOP:面向切面编程AOP实现,以动态代理技术为基础,允许定义各种拦截器,方便解耦。 Spring JDBC:提供了JDBC的抽象层,消除了JDBC编码的繁琐工作和不同数据库厂商的处理逻辑,简化JDBC。 Spring JMS:JAVA消息发送和接收服务。 Spring ORM:ORM框架支持,集成了hibernate、jpa和jdo用于资源管理、dao的实现和事务。 Spring Web:为创建Web应用程序提供支持。 Spring Test:提供了对 JUnit 和 TestNG 测试的支持、 Spring Aspects:该模块为与AspectJ的集成提供支持。 Spring Web:Spring框架支持与Struts集成,为基于web的应用程序提供了上下文。
Spring 是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。它可以装载 Bean(也就是 Java 中的类,包括 Service、Dao 里面的),有了控制反转这个机制,我们就不用在每次使用类的时候先初始化,用 new 关键字声明。另外,Spring 的 AOP、事务管理等等都是我们经常用到的。
spring的核心:控制反转(IOC)和面向切面编程(AOP)。
spring的优点:
- 解耦,简化开发。开发者可以将所有对象创建和依赖关系维护,交给spring管理。
- AOP编程的支持。可以方便的实现对程序进行权限拦截、监控等功能。
- 非常方便集成各种优秀框架。如mybatis、hibernate。
- 降低javaee api的使用难度,进行了比较好的封装。
SpringMVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。
Spring Boot 是由 Pivotal 团队提供的一个全新框架,其设计目的是用来简化 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。说句人话就是,Spring Boot 不是什么新的框架,它默认配置了很多框架的使用方式,就像 Maven 整合了所有的 Jar 包,Spring Boot 整合了所有的框架。使用 Spring Boot有什么好处其实就是简单、快速、方便!
Spring Boot 和 Spring Cloud 已成为 Spring 生态中不可或缺的一环。想成为一名合格的 Java 后端工程师,Spring Framework、Spring Boot、Spring Cloud 这三者必须牢牢掌握。
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。
MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
首先来学 SSM(Spring+SpringMVC+MyBatis,企业级应用的必须品)的整合教程,哪怕是已经有了 Spring Boot,SSM 仍然是必学的,能打下更坚实的基础。
书籍
- 《Spring cloud 入门到实战》
- 《Spring 微服务架构设计》
- 《Spring Boot 进阶、原理、实战、面试题分析》
以上图片所展现出来的书使用的 Spring Boot 2.0+的版本,还算比较新。整本书采用“知识点+实例”的形式编写,有点书籍的最后两章还有综合性的企业实战项目:
- 开发企业级通用的后台系统
- 实现一个类似“京东”的电子商务商城
学习建议
学这些技术的时候,千万不能懒 !一定要多记笔记,并且跟着老师写代码。原理部分不要太过纠结,先以能跟着敲出代码、写出可运行的项目为主,有些东西做出来也能帮助你更好地理解理论。初学者不用关注源码,先会使用。
Struts2和Hibernate基本不用了。建议直接学习SSM框架(Spring+SpringMVC+MyBatis)。建议学习顺序:先学习MyBatis,再学习Spring,最后学习SpringMVC。
学习顺序挺重要的,建议按我推荐的顺序学,不要一上手就学 Spring Boot。先学习spring,会用了后再学习spring boot,然后再去学习spring cloud。
一定要搞懂 AOP 和 IOC 这两个概念。Spring 中 bean 的作用域与生命周期、SpringMVC 工作原理详解等等知识点都是非常重要的,一定要搞懂。
Maven / Gradle 工具用就好,面试基本不问,跟着框架教程去用就行了。目前用maven的比较多。
数据库
目前MySQL数据库应用的比较多,这里主要列举MySQL的知识点。
主要是这几部分内容:
- SQL 语句编写
- 事务
- 锁
- 索引
- SQL优化
- 分库分表
书籍
- 入门篇-《MySQL必知必会》
非常薄,只有200来页,花几天时间就能刷完,SQL 语法入门好书,推荐!
- 这本书的特点是注重实用性,紧贴实战需要,基本没有什么理论的堆砌,完完全全就是一本实践指南。读懂后基本mysql的用没问题了。进阶篇-《性能优化和高可用架构》
本书深度讲解了mysql引擎架构、索引设计、SQL查询优化的实战技巧、复制、分片等原理,还有运维技能。
书很厚,内容非常全面,适合精读,弄清整本书,也就能精通数据库了。
- 高级篇-《MySQL的复制技术与生产实践》
主要涵盖了MySQL复制技术原理,复制架构设计,生产环境实践。以及实际案例,为了让学习MySQL的人更进一步
DBA:学习如何维护稳定的复制环境。
开发人员:理解复制对业务一致性的影响。
架构师:设计高可用、可扩展的数据库架构。
学习建议
SQL 语句编写 和 设计数据库表 这两个能力一定要有!高级篇是对勇攀高峰的程序员奖励
JVM
了解虚拟机、掌握虚拟机性能调优方法,有助于你写出更高性能、资源占用更小的优质程序。
- JVM 内存结构
- JVM 生命周期
- 主流虚拟机
- Java 代码执行流程
- 类加载
- 类加载器
- 类加载过程
- 双亲委派机制
- 垃圾回收
- 垃圾回收器
- 垃圾回收策略
- 垃圾回收算法
- StopTheWorld
- 字节码
- 内存分配和回收
- JVM 性能调优
- 性能分析方法
- 常用工具
- 参数设置
- 线上故障分析
书籍
- 《深入理解 Java 虚拟机》
不论是你面试还是你想要在 Java 领域学习的更深,你都离不开这本书籍。这本书不光要看,你还要多看几遍,里面都是干货。这本书里面还有一些需要自己实践的东西,我建议你也跟着实践一下。
《深入理解 Java 虚拟机》
学习建议
JVM 的知识略显枯燥,建议先看视频,有实操的地方一定要实操!自己多去分析。
第一遍不理解没有关系,可以再看书来巩固,想要真正学好,《深入理解 Java 虚拟机(第三版)》一定要读。
初学者者部分可以先不用学习。
并发编程
生产环境中,我们的代码通常要应对巨大的流量,因此我们必须处理后并发问题。并发问题处理不好,会造成不可预料的损失,严重会造成巨大资损。典型的场景有库存扣减、抢优惠券等。
Java并发编程包括多线程、JUC包中并发工具、线程池、锁、阻塞队列等。
- 线程和进程
- 线程状态
- 并行和并发
- 同步和异步
- Synchronized
- Volatile 关键字
- Lock 锁
- 死锁
- 可重入锁
- 线程安全
- 线程池
- JUC 的使用
- AQS
- Fork Join
- CAS
书籍
- 《Java并发编程实战》
- 《Java 并发编程艺术》
- 《深入浅出 Java 多线程》
《深入浅出 Java 多线程》这本书阅读了大量的 Java 多线程方面的书籍和博客,然后再加上他们的经验总结、Demo 实例、源码解析,最终才形成了这本书。
这本书的质量也是非常过硬!给作者们点个赞!这本书有统一的排版规则和语言风格、清晰的表达方式和逻辑。
有需要的查看下方名片!即可免费领取
常见面试题
- 什么是线程和进程? 线程与进程的关系,区别及优缺点?
- 说说并发与并行的区别?
- 为什么要使用多线程呢?
- 使用多线程可能带来什么问题?(内存泄漏、死锁、线程不安全等等)
- 创建线程有哪几种方式?(a.继承 Thread 类;b.实现 Runnable 接口;c. 使用 Executor 框架;d.使用 FutureTask)
- 说说线程的生命周期和状态?
- 什么是上下文切换?
- 什么是线程死锁?如何避免死锁?
- 说说 sleep() 方法和 wait() 方法区别和共同点?
- Java 内存模型(JMM)、重排序与 happens-before 原则了解吗?
- synchronized 关键字、volatile 关键字
- ThreadLocal 有啥用(解决了什么问题)?怎么用?原理了解吗?内存泄露问题了解吗?
- 为什么要用线程池?ThreadPoolExecutor 类的重要参数了解吗?ThreadPoolExecutor 饱和策略了解吗?线程池原理了解吗?几种常见的线程池了解吗?为什么不推荐使用FixedThreadPool?如何设置线程池的大小?
- AQS 了解么?原理?AQS 常用组件:Semaphore (信号量)、CountDownLatch (倒计时器) CyclicBarrier(循环栅栏)
- ReentrantLock 、 ReentrantReadWriteLock 、StampedLock(JDK8)
- CAS 了解么?原理?
- Atomic 原子类
- 并发容器:ConcurrentHashMap 、 CopyOnWriteArrayList 、 ConcurrentLinkedQueue``BlockingQueue 、ConcurrentSkipListMap
- Future 和 CompletableFuture
学习建议
学习并发编程最好是先看视频,了解其中的原理, 先学会使用 基础的 Java 并发包, 再通过大量地实践和测试。
容器
将应用和环境进行封装,相互隔离、独立部署、便于移植,提高安全性、提高开发和维护效率。
- Docker
- 容器概念
- 镜像
- 部署服务
- Dockerfile
- Docker Compose
- Docker Machine
- Docker Swarm
- 多阶段构建
- K8S(Kubernetes)
- K8S 架构
- 工作负载
- 资源类型
- Pod
- Pod 生命周期
- Pod 安全策略
- K8S 组件
- K8S 对象
- 部署应用
- 服务
- Ingress
- Kubectl 命令行
- 集群管理
书籍
《docker容器实战:原理、架构与应用》
学习建议
对于开发同学来说,会用 Docker / K8S 部署项目和服务就行。实际工作中,企业一般都有现成的平台直接用,不用花太多时间。
面试
- JAVA核心知识点整理
总结
最好的学习方式就是参阅官方文档。
官方文档其次就是书籍,国内的好书自成体系,帮助我们掌握的知识点不至于太散。
这是一份非常详细的学习路线,把上面的内容学完之后,找到一份比较好的工作已经比较容易。
另外,我在上面也说了,如果你觉得内容比较多自己学不完或者如果你只想找到一份小厂的开发工作的话,建议你把重心放在 Java基础、数据库、常用框架、常用工具上。
像 JVM、微服务这些知识点,掌握了基础部分再来学习。
以上也是我零零散散从各处搜集到的资料合集所编写,只求给想进程序员这个行一个从头开始的规划与资料分析,很多链接都无法直接跳转
有需要资料与规划的兄弟们查看下方名片!即可免费领取