
简介一份面向Java初学者与进阶开发者的系统学习路线PDF围绕后端开发岗位所需知识栈梳理从入门到进阶的路径。内容覆盖Java基础语法、面向对象、集合容器、异常处理、泛型、反射与注解并延伸至JVM类加载、内存模型、垃圾回收与性能调优以及并发编程、线程池、锁和JUC并发工具同时纳入数据结构与算法、计算机网络、数据库与SQL优化、Web开发、Spring全家桶、缓存与消息队列、微服务治理、前端基础、Linux、设计模式、任务调度、链路追踪、ELK日志和Docker/Kubernetes容器化等模块形成较完整的知识地图。资源包共1个PDF文件大小约92KB采用知识点串联方式呈现便于在电脑或移动端随时查阅也可作为阶段性自查清单。已有492人学习适合希望摆脱零散学习、按模块建立后端知识体系并查漏补缺的开发者参考。1. Java 学习路线图到底是张什么图「我想学 Java可我是零基础第一本书该看哪本」这个问题我听过太多遍。问的人其实不缺书单缺的是一张能看清全貌的图。这份 Java 学习路线 PDF 就是干这个的它把 Java 后端从语言基础、JVM、并发编程、数据结构与算法、计算机网络、数据库一路排到 Spring 家族、中间件、微服务、容器化画成一张有层次的脑图每一格还列出了该学哪些具体东西。它不教你敲代码它回答的是「先学哪块、后学哪块、学到什么程度算过关」。两类人最适合看完全没碰过编程、想走 Java 后端方向的新手学过一点但每回都在半路迷路、不知道下一步该干什么的人。2. 为什么零基础更需要一张路线图2.1 自学 Java 的人通常卡在三个地方第一个卡点是不知道先学什么。打开任何一个技术社区Java 相关的内容能刷出几千条有人说先学数据结构有人说先做项目还有人说直接上框架。新手没有判断力看三条建议就能把自己看晕最后干脆关掉页面去干别的。第二个卡点是学了不知道往哪放。今天看两小时语法明天背几个面试题碎片越攒越多但脑子里没有承重的框架过一周全散掉。就像往一个没有隔板的抽屉里塞东西塞得再多用的时候还是找不到。第三个卡点更隐蔽不知道学到什么程度算够。语法看到「注解」就开始心慌觉得自己什么都没学会于是回头重看第一章。来回三次热情就耗没了。这三个卡点的共同点是缺一张地图。地图不解决走路的问题但它能告诉你现在在第几站、下一站叫什么、还有多远。2.2 这张图把 Java 后端拆成了几层拿到图第一件事是看懂它的分层。从上往下看它大体是这么叠起来的。最底下是编程地基Java 语言本身基础语法、面向对象、接口、容器、异常、泛型、反射、注解、JVM、并发与多线程、数据结构与算法、计算机网络、数据库与 SQL、操作系统、设计模式。这些是后面所有东西的前提学不好也不会立刻出事但会一直在后面绊你。往上一层是研发工具集成开发环境Eclipse、IntelliJ IDEA、VS Code、Linux 常用命令和 Shell 脚本、代码管理Git、SVN、构建工具Maven、Gradle。这一层的特征是「不学也能写代码学了效率翻倍」。再往上是应用框架以 Spring 家族为核心IoC、AOP、Spring MVC、Spring Boot外加权限的 Shiro 和 Spring Security还有各种中间件的整合。这一层是 Java 后端吃饭的家伙。再往上是服务器软件与中间件Nginx、Tomcat 这类 Web 和应用服务器Redis、Memcached 这类缓存RocketMQ、RabbitMQ、Kafka 这类消息队列Dubbo、gRPC、Thrift、Netty 这类 RPC 和网络框架再加上 MyBatis、Hibernate 这些 ORM 和连接池。最上面是分布式与微服务、运维与容器化还有一块独立的前端基础HTML、JavaScript、CSS 三大件加上 jQuery、Ajax、模板框架和 Vue、React 这类组件化框架。打个比方这像盖一栋楼地基是语言和计算机基础脚手架是工具链主体结构是框架水电管线是中间件最后才是装修和智能化。新手最容易犯的错是地基没打完就想装智能家居。2.3 一份路线图怎么读才不白读图存下来不等于学完了。我见过的有效读法只有三步。第一步在图上标出你现在的位置。诚实一点别把「听说过 Spring Boot」标成「会 Spring Boot」。位置标错后面的计划全歪。第二步主动划掉暂时不看的区域。前端三大件、容器化、微服务这几块在你能独立写出一个带数据库的增删改查之前全部可以先用笔盖住。图上东西多是好事但一次只盯一层。第三步把当前这一层拆成一周能做完的任务。别说「这个月学完 Java 基础」要说「这周把面向对象里的封装和继承写成一段能跑的代码」。任务粗到一周就一定会拖。下面这张表是我建议的拆法你可以直接照着改成自己的版本。时间图上哪一格这周要交出的东西第 1 周环境 基础语法装好 JDK能独立写出并运行 5 个小程序第 23 周面向对象、接口自己写 3 个类用继承和接口串起来第 4 周容器、异常用集合存 20 条数据并做筛选异常能自己捕获第 5 周Git Maven把上面的代码提交到本地仓库用 Maven 跑起来提示这张表不要照抄时间照抄的是「每周必须有可交付的东西」这个原则。产出物骗不了人看了多少视频骗得了自己。3. 第一步怎么迈把第一个 Java 程序跑起来3.1 装 JDK新手只要记住三件事学 Java 的第一件事不是看书是让屏幕上出现一行你自己打出来的字。这一步过了心里的那道坎就塌了一半。第一件事装 JDK不装 JRE。JDK 里带了编译器JRE 只是运行环境。新手常犯的错是装了运行环境然后发现javac命令根本不存在。至于装哪个版本别在网上翻十篇对比文章选一个长期支持版本就行入门阶段版本差异对你没有影响。第二件事配环境变量。Windows 上要设JAVA_HOME指向安装目录再把%JAVA_HOME%\bin加进PATHmacOS 和 Linux 一般在装完之后确认一下 shell 配置里有没有把 bin 目录加进去。这一步出问题的概率最高所以别靠感觉靠命令验证。第三件事用两条命令确认环境通了。# 两条都能打印出版本号说明 JDK 装好了且编译器和运行环境是同一套 java -version javac -version这两条命令的区别值得说清楚java是运行已经编译好的程序javac是把源码编译成字节码。两个版本号最好一致不一致说明你机器上装了两套 JDK后面会莫名其妙报错。我第一次配环境时就踩过这个坑java能跑javac报找不到折腾了一晚上才发现 PATH 里排在前面的是一套旧环境。3.2 第一个例子五行代码打印一句话环境通了建一个空目录在里面新建一个文件文件名必须是Hello.java内容如下。// 文件名必须叫 Hello.java因为下面的 public class 名字是 Hello两者必须一模一样 public class Hello { // main 方法是程序的入口JVM 从这里开始执行 public static void main(String[] args) { // 向控制台打印一行文字 System.out.println(Hello, Java 学习路线第一站); } }然后在同一个目录下打开终端依次执行两条命令。javac Hello.java # 编译把 Hello.java 翻译成 JVM 能读的 Hello.class 字节码 java Hello # 运行JVM 加载 Hello.class找到 main 方法并执行第一条命令执行完目录里会多出一个Hello.class文件。这个文件你打开看是一堆乱码正常它是给 JVM 看的不是给人看的。第二条命令执行完屏幕上出现那行字第一个程序就跑通了。几个细节值得新手多看一眼。public表示这个类是公开的class是定义类的关键字static表示这个方法不需要创建对象就能调用void表示不返回任何值String[] args是命令行参数的数组现在用不到但它是规定写法少一个字符都跑不起来。每一行结尾的分号也不能省Java 对这点很严格中文分号同样会报错这个坑几乎人人踩一次。跑不通的时候别慌看报错信息的第一行。最常见的是「找不到文件」八成是文件名和类名不一致或者终端所在目录不对其次是「找不到 main 方法」检查方法签名有没有写错字母。3.3 用这段代码对上路线图的第一个格子这五行代码其实已经把路线图上「Java 语言基础」那一格里的好几个概念都碰到了class是面向对象里的类public是访问修饰符static和void是方法相关String[]是数组。路线图上写的是名词你手里有的是能跑起来的实物两者对上号的那一刻图就不再是画了。这也是我一直建议新手先跑例子再看概念的原因先看见实物再去理解它叫什么比反过来容易得多。同样的道理你也顺便摸到了路线图上 JVM 那一格的一角javac编译出来的.class文件就是 JVM 要读取的字节码。JVM 是什么你可以把它想成一个翻译官兼管家先把字节码翻译成机器能懂的指令再顺手管着内存的分配和回收。3.4 第一个月的时间怎么分新手最容易在第一个月用力过猛每天学六小时第二周就断了。我的建议是每天保证一到两小时的有效投入其中至少一半时间在敲键盘而不是在看。前两周的目标只有一个能不查资料写出十几个小程序涵盖变量、条件、循环、方法、数组。第三周开始碰面向对象把「类」「对象」「封装」「继承」「多态」一个个写成小例子哪怕例子蠢到只是「猫和狗都会叫」。第四周补上集合和异常用List存一批数据用try-catch把可能出错的地方包起来同时把 Git 和 Maven 顺手用上。这个节奏慢但一个月后你会有一个能自己写小工具的底子。这个底子比「看完三本书」值钱得多。4. 按图走的前四站基础、JVM、并发、数据结构算法4.1 Java 语言基础把语法和面向对象吃透路线图里「Java 语言基础」这一格列得很细基础语法、面向对象、接口、容器、异常、泛型、反射、注解。前四项是必学后四项可以边用边理解。基础语法只是入场券真正拉开差距的是面向对象。我的建议是学到「容器」的时候就把集合当成练习场边写边理解面向对象。看下面这段代码。import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class BasicsDemo { public static void main(String[] args) { // List有序、可重复像排队谁先来谁站前面 ListString queue new ArrayList(); queue.add(第一站Java 基础); queue.add(第二站JVM); // Map键值对像字典按 key 直接翻到对应的值 MapString, Integer weeks new HashMap(); weeks.put(Java 基础, 4); weeks.put(数据结构与算法, 6); System.out.println(queue); // 整个列表按顺序打印出来 System.out.println(Java 基础建议投入周数 weeks.get(Java 基础)); } }这里出现了三个新东西。List是有序列表元素可以重复ArrayList是它最常用的实现Map是键值对集合HashMap是它最常用的实现尖括号里的String和Integer是泛型意思是「这个容器只装这一种类型的东西」好处是取出来不用强转也不会混进不该有的类型。路线图把泛型单列一格就是因为它在后面写框架代码时到处都会出现。接口这个概念新手容易停在「知道怎么写」的层面。我建议你找个下午干一件事写一个接口叫「会飞」让「鸟」和「飞机」两个类各自实现它然后在主方法里把它们都当「会飞的东西」来用。写完之后多态这个概念就不需要背了。4.2 JVM新手知道到什么程度算够很多新手一看路线图上 JVM 那一格里面有类加载机制、字节码执行机制、内存模型、GC、性能监控、调优当场就想绕道。我的建议是入门阶段只理解前三个词后面的先放着。类加载机制可以理解成「JVM 怎么把.class文件请进屋」。你在 3.2 里执行java Hello的那一刻JVM 就在干这件事找到文件、检查格式、准备好、再初始化。字节码执行机制就是前面说的翻译官部分解释器和即时编译器配合工作把字节码变成机器指令。内存模型是把 JVM 管理的内存划分成几个区域你写的对象大多在堆里方法调用在栈里。知道「对象在堆、调用在栈」这两个位置入门阶段就够用了。GC 垃圾回收说人话就是「JVM 自动清理不再使用的对象」你不用像 C 语言那样手动释放内存。至于 GC 算法、垃圾收集器的选型、调优工具等你真的遇到内存问题再学那时候学起来才不抽象。过早深挖 JVM 还有个副作用它会让新手误以为「懂原理才算入门」而实际情况是能不能把需求实现出来才决定你能不能继续往下走。4.3 并发编程从线程创建到线程池路线图把并发单独列一格是因为它是面试的重灾区也是实际工作中最容易出问题的地方。新手学这块顺序建议是先理解线程是什么再理解为什么多个线程同时改数据会出错然后学synchronized和锁最后才去看线程池和 JUC 那些工具类。下面这段代码能让你亲眼看见并发问题。public class CounterDemo { private int count 0; // synchronized 保证同一时刻只有一个线程能进这个方法避免两个线程把同一个数改乱 public synchronized void add() { count; } public int get() { return count; } public static void main(String[] args) throws InterruptedException { CounterDemo demo new CounterDemo(); // 两个线程各加一万次 Thread t1 new Thread(() - { for (int i 0; i 10000; i) demo.add(); }); Thread t2 new Thread(() - { for (int i 0; i 10000; i) demo.add(); }); t1.start(); t2.start(); t1.join(); // 等 t1 执行结束 t2.join(); // 等 t2 执行结束 System.out.println(期望 20000实际是 demo.get()); } }把synchronized去掉再跑几次你会看到结果有时候不是 20000可能少几十几百。原因是count并不是一步完成的它包含读、加、写三个动作两个线程可能同时读到同一个旧值各加一次最后只生效一次。这个现象叫竞态条件你亲手复现一次比看十篇讲解都管用。线程池是后面的事先记住它的价值线程创建和销毁都有成本池子就是提前养一批线程反复用ExecutorService和ThreadPoolExecutor是路线图上对应的两个词。并发容器、原子类、CountDownLatch、Semaphore这些等你能写出多线程程序之后再逐个碰。4.4 数据结构与算法按图上的顺序练别乱刷路线图上这一格列得挺全字符串、数组、链表、二叉树、堆栈队列、哈希、查找排序、贪心、分治、动态规划、回溯。新手的典型错误是打开题库从头刷刷到第三题就卡住然后怀疑自己不适合干这行。正确的顺序是跟着图上的排列走先把数组、字符串、链表练熟再练栈和队列然后二叉树再哈希和排序查找最后才是贪心、分治、动态规划、回溯这些。前四项其实是「写代码的熟练度」后四项才是「算法思维」。入门阶段重点是前四项因为它们在日常开发里出现频率最高。练法上我建议每个结构都手写一遍基础操作不用追求最优解。链表就写增删改查和反转二叉树就写三种遍历和求深度排序就写冒泡、插入、快速、归并。写完能讲清楚每一步在干什么就算过关。4.5 数据库与 SQL路线图上最容易被低估的一格很多新手把数据库当成「存数据的地方」随便学学就跳过去了结果工作后天天在 SQL 上栽跟头。路线图上这一格写得很实在SQL 语句书写、SQL 语句优化、事务以及隔离级别、索引、锁。入门阶段先做到两件事。第一能独立写出建表、插入、查询、更新、删除包括多表连接和子查询。第二能说清楚索引是干什么的、事务的四个隔离级别分别解决了什么问题。后者听着玄其实就是「两个人同时改同一批数据时谁先看见谁的改动」这个问题的几种约定。下面这段 SQL 可以在本地数据库里直接跑用来练手。-- 建一张最简的学习记录表对应路线图上「SQL 语句书写」这一格 CREATE TABLE study_record ( id INT PRIMARY KEY AUTO_INCREMENT, topic VARCHAR(50) NOT NULL, hours INT DEFAULT 0 ); -- 插入三条记录 INSERT INTO study_record (topic, hours) VALUES (Java 基础, 20), (集合, 8), (异常, 4); -- 查询按投入时间从多到少排 SELECT topic, hours FROM study_record ORDER BY hours DESC;PRIMARY KEY是主键保证每行唯一AUTO_INCREMENT让 id 自动递增NOT NULL表示这一列不能空ORDER BY ... DESC是降序排列。这些是最基础的关键字先把它们用熟再去看索引和执行计划。5. 新手避坑清单5 个最常见的翻车现场5.1 收藏了路线图就以为自己学完了现象图存进收藏夹笔记软件里也建了个目录然后就没有然后了。半年后翻出来发现自己还停在第一格。原因把「规划」当成了「进度」。收集资料这个动作本身会带来一种虚假的充实感大脑误以为已经完成了一部分工作于是动力被提前消耗掉了。解决给「看图」设一个硬性上限比如只看十分钟然后必须动手写一行代码。把话题从「我要学什么」改成「我今天要交什么」。还有一个更狠的办法把图打印出来贴在桌子前每完成一格就用笔划掉划掉的快感会推着你往前走。这是血泪经验我当年收藏了不下二十份学习路线真正翻完的只有贴在墙上的那张。5.2 一上手就装框架跳过基础语法现象学了两天语法觉得写命令行程序太无聊直接去搜「Spring Boot 入门」照着教程复制粘贴跑起来一个网页感觉自己会了。过一周想看自己写的代码发现一行都看不懂。原因框架是建立在语言基础和设计模式之上的封装跳过底下几层直接看顶层只能记住操作步骤理解不了为什么这么写。就像不会算术就去按计算器屏幕坏了就彻底没办法。解决给自己定一条线——能不看教程、独立写出一个带集合和异常的完整小程序之前不碰框架。判定标准很具体给你一个需求比如「读一批数据按某个字段分组并统计数量」你能从零写出来才算过了基础关。过了这条线再去学框架速度会快好几倍因为你终于知道框架在帮你省掉哪部分重复劳动。5.3 程序跑不起来就换环境、重装软件现象javac报错第一反应是卸载重装 JDK装完还是报错再换版本一下午过去了代码一个字没写。原因绝大多数编译和运行失败都不是环境问题而是文件名、类名、目录、大小写、中英文符号这类细节问题。新手对报错信息不熟本能地想通过重装来「重启一切」。解决养成先读报错第一行的习惯。找不到文件就检查文件名和类名是否一致、终端当前目录是不是文件所在目录找不到 main 方法就检查方法签名有没有写错版本不匹配就用java -version和javac -version各看一遍确认是同一套 JDK。真的怀疑环境就先跑一个最简单的 Hello 程序能跑通说明环境没问题问题在你的代码里。这个排查顺序能省掉大量时间。5.4 死磕 JVM 调优和框架源码进度卡死现象基础语法刚过就买了本讲 JVM 的大部头看了三遍还是记不住于是从头再看一遍。三个月过去一个完整的增删改查项目都没做出来。原因把「深度」当成了「入门门槛」。JVM 调优、框架源码这些东西是需要具体问题来驱动的知识没有场景硬啃只能记住名词。而且它们对入门阶段的帮助极小性价比极低。解决给每一格设一个「够用线」。JVM 的够用线是能说清楚类加载、内存分区、GC 是干什么的框架的够用线是能搭起来、能改配置、能定位常见报错。到了够用线就往下走把深挖留到遇到真实问题的那天。这不是偷懒是把有限的精力放在能立刻用上的地方。5.5 只看不写跟着视频会关掉就不会现象视频里老师敲一行你敲一行全程顺畅感觉完全懂了。第二天自己开个空文件连类名都想不起来。原因看和写调用的是完全不同的大脑回路。跟着敲的时候你的大脑在做「识别」不是在「生成」识别比生成容易太多所以会产生虚假的掌握感。解决看完一小节关掉视频从空白文件开始默写一遍写不出来再看。这个动作很痛苦但它是唯一有效的。我自己的习惯是每学完一个知识点就用它写一个跟教程无关的小东西比如学完集合就写个记账小工具学完异常就给自己之前的代码补上错误处理。写出来的东西丑不要紧能跑起来就说明知识真的落到你手里了。6. 走完基础之后下一步学什么基础四站走完你手上应该有一批能跑的小程序、一个用 Git 管起来的仓库还有一份被笔划掉好几格的学习路线图。接下来怎么走图上其实已经写好了顺序我把它压缩成一张表照着往后推就行。顺序图上位置学到什么程度可以先往下走1Web 基础HTTP、Cookie/Session、Tomcat能说清一次请求从浏览器到服务器的完整路径2Spring 家族IoC、AOP、Spring MVC、Spring Boot能独立搭一个带数据库的增删改查接口3ORM 与连接池MyBatis 或 JPA、Druid能写出带条件查询和分页的持久层4缓存与消息队列Redis、RabbitMQ 或 Kafka能在项目里用 Redis 缓存一次查询结果5服务化Spring Cloud、注册中心、网关、熔断能搭起两个互相调用的服务并跑通6运维与容器Linux 命令、Nginx、Jenkins、Docker能把自己写的服务用容器跑在一台机器上这张表的用法是「一次只往下挪一格」。每一格都别求深先把最小的东西跑通再考虑深入。比如学到 Redis第一步只要做到「把一次查询结果存进去下次先查缓存」别一上来就研究持久化和集群。等你把整条链路都摸过一遍回过头再补细节理解速度完全不一样。还有一个具体的技巧每学完一格回到路线图上做两件事——划掉它然后在旁边写一句你自己的话说明这格到底解决了什么问题。这句话不能抄图上的名词必须用自己的表述。写不出来说明这格你只是「见过」还没「拿下」。我第一次带一个完全零基础的朋友走这条路时犯过一个错他基础刚过我就急着给他讲微服务讲了两个小时他记住的只有几个听不懂的英文名。后来我们退回 Spring Boot用一个下午把「一个接口读数据库再返回 JSON」跑通他当场就懂了什么叫分层、什么叫依赖注入。从那以后我每次带人看一张新路线图都强制先让对方挑一格用最小可运行的例子跑一遍再谈后面的规划。不用急着成为高手先把第一格划掉。希望帮到你。本文还有配套的精品资源点击获取