前言
这是一份java学习路线,可以给java后端方向的学生进行学习参考,希望能和大家一同进步!
一、计算机基础
1、数据结构与算法
数据结构
- 线性结构
- 链表:单链表、双链表、循环链表的实现与操作(插入、删除、遍历)
- 栈与队列:基于数组或链表的实现,应用场景(如括号匹配、任务调度)
- 非线性结构
- 树:二叉树、二叉搜索树、平衡树(AVL)、红黑树的特性与实现
- 堆:最大堆/最小堆的实现,堆排序的应用
- 图:邻接矩阵/邻接表表示,图的遍历(DFS/BFS)
算法
- 排序算法
- 冒泡排序、快速排序、归并排序、堆排序的时间复杂度与稳定性分析
- 桶排序、基数排序的适用场景
- 查找算法
- 二分查找的边界条件处理
- 哈希查找与布隆过滤器的应用
学习建议
- 掌握LeetCode中等难度题目的解题思路(如链表反转、二叉树遍历、动态规划基础题)。
- 理解时间复杂度与空间复杂度的计算方式。
2、计算机网络
TCP/IP
- 四层模型:应用层(HTTP)、传输层(TCP/UDP)、网络层(IP)、链路层(MAC地址)
- TCP三次握手与四次挥手:状态转换与异常场景(如TIME_WAIT)
- UDP与TCP的区别:可靠性、连接性、性能对比
HTTP
- 版本区别:HTTP 1.0/1.1/2.0/3.0的核心改进(如长连接、多路复用、QUIC协议)
- 请求方法:GET/POST/PUT/DELETE/HEAD的语义与使用场景
- 状态码:2xx(成功)、3xx(重定向)、4xx(客户端错误)、5xx(服务器错误)
HTTPS
- 加密过程:非对称加密(RSA)、对称加密(AES)、数字证书的作用
- 中间人攻击防御:证书验证流程(CA签名链)
学习建议
- 使用Wireshark抓包分析HTTP/TCP交互过程。
- 实践HTTPS证书配置(如通过Nginx部署)。
3、操作系统(Linux)
基础命令
- 进程管理:
ps
、top
、kill
、nohup
- 文件操作:
cd
、ls
、grep
、find
、chmod
- 日志查看:
tail -f
、journalctl
、dmesg
Shell脚本
- 变量定义、条件判断(
if
)、循环(for/while
)、函数定义 - 自动化部署脚本示例(如备份日志、重启服务)
学习建议
- 配置Linux开发环境(如安装JDK、MySQL、Redis)。
- 学习
systemd
服务管理与日志分析(logrotate
)。
4、设计模式
核心模式
- 单例模式:懒汉式、饿汉式的线程安全实现
- 工厂模式:简单工厂、抽象工厂的应用场景
- 策略模式:动态替换算法(如支付方式选择)
- 观察者模式:事件驱动模型(如Spring的
ApplicationEvent
)
学习建议
- 通过代码示例理解模式的实现与解耦优势。
- 结合Spring框架分析设计模式的实际应用(如AOP与代理模式)。
二、Java相关
1、Java基础
面向对象
- 封装、继承、多态的实现原理(如动态绑定)
equals
与hashCode
的契约关系
集合框架
- ArrayList vs LinkedList:底层结构与性能差异
- HashMap:哈希冲突解决(链表/红黑树)、扩容机制
- ConcurrentHashMap:分段锁与CAS机制
泛型
- 类型擦除与编译期检查
- 通配符(
?
)与上下界(extends
/super
)
异常处理
try-with-resources
的自动资源管理- 异常链(
Throwable.initCause()
)
学习建议
- 实践集合类的源码分析(如
HashMap
的put
方法)。 - 使用
assert
进行单元测试。
2、JVM
JVM原理
- 跨平台性:通过字节码(
.class
文件)与JVM解释执行 - 内存模型:
- 方法区(元空间)、堆(新生代/老年代)、栈(局部变量表)、程序计数器
- 类加载过程:
- 加载(读取字节码)、链接(验证、准备、解析)、初始化(执行
<clinit>
)
- 加载(读取字节码)、链接(验证、准备、解析)、初始化(执行
垃圾回收
- 算法:标记-清除、标记-复制、标记-整理
- 回收器:Serial、Parallel Scavenge、CMS、G1的适用场景
- 调优工具:
jstat
、jmap
、jconsole
学习建议
- 使用
jvisualvm
分析内存泄漏与GC性能。 - 理解JVM参数(如
-Xms
、-Xmx
、-XX:+PrintGCDetails
)。
3、Java多线程
线程管理
- 线程状态:新建、就绪、运行、阻塞、终止
- 线程池:
ThreadPoolExecutor
的参数配置与拒绝策略
锁机制
- Synchronized:对象锁与类锁的实现原理
- ReentrantLock:可重入性、公平锁与非公平锁
并发工具类
- Atomic类:CAS原理与ABA问题
- ConcurrentHashMap:分段锁与CAS优化
- CountDownLatch/CyclicBarrier/Semaphore:协作线程的控制
学习建议
- 实践生产者-消费者模型(
BlockingQueue
)。 - 使用
volatile
与CAS
解决可见性与原子性问题。
三、相关开发工具
Git
- 核心命令:
add
、commit
、stash
、push
、pull
、merge
、rebase
- 分支管理:
feature
/develop
/main
分支策略
Postman
- 接口调试:GET/POST请求构造、Header设置、响应断言
IntelliJ IDEA
- 快捷键:
Ctrl+Shift+O
(导入包)、Ctrl+Alt+O
(优化导入) - 插件:Lombok、Alibaba Java Coding Guidelines
Maven
- 依赖管理:
pom.xml
配置、依赖作用域(compile
、provided
等) - 生命周期:
clean
、compile
、package
、install
学习建议
- 使用
mvn dependency:tree
分析依赖冲突。 - 配置私有仓库(如Nexus)。
四、基础框架组件
Spring Boot
- 核心特性:自动配置(
@SpringBootApplication
)、Starter依赖 - 注解:
@Component
、@Service
、@Repository
、@Controller
@RestController
、@RequestMapping
、@PathVariable
- AOP:切面定义(
@Aspect
)、通知类型(@Before
、@After
) - Web服务:通过
@RestController
实现REST API(CRUD示例)
学习建议
- 实践Spring Boot Actuator的健康检查与监控。
- 配置多环境(
application.yml
的spring.profiles.active
)。
MyBatis
- 核心功能:XML映射文件、动态SQL(
<if>
、<foreach>
) - 缓存:一级缓存(Session级别)、二级缓存(Mapper级别)
学习建议
- 使用
@Mapper
简化接口绑定。 - 配置分页插件(如PageHelper)。
五、数据库
MySQL
- 索引:
- B+树的存储结构、联合索引的最左匹配原则
- 覆盖索引与索引下推
- 事务:
- 隔离级别(读未提交、读已提交、可重复读、串行化)
- MVCC(多版本并发控制)的实现
- 优化:
EXPLAIN
分析执行计划、慢查询日志(slow_query_log
)
学习建议
- 实践索引优化(避免全表扫描)。
- 使用
pt-online-schema-change
进行大表DDL变更。
Redis
- 数据结构:
- String(计数器)、Hash(对象存储)、ZSet(排行榜)
- 持久化:RDB快照与AOF日志的优缺点
- 分布式锁:
SET key value NX PX
命令实现
学习建议
- 解决缓存穿透(布隆过滤器)、击穿(互斥锁)、雪崩(随机过期时间)。
- 使用Redisson实现分布式锁。
六、加分的框架组件
消息队列
- Kafka:分区、副本、消费者组、Exactly-Once语义
- RabbitMQ:交换机类型(Direct/Fanout/Topic)、死信队列
性能调优
- Arthas:在线诊断(
thread
查看线程、trace
跟踪方法)
容器化
- Docker:镜像构建(
Dockerfile
)、容器编排(docker-compose
) - Kubernetes:Pod、Deployment、Service、Ingress
监控
- Prometheus + Grafana:指标采集(
/actuator/metrics
)、可视化面板
学习建议
- 使用Docker部署微服务应用。
- 配置Prometheus监控Spring Boot服务。
七、其他扩展知识(加分项)
鉴权与安全
- OAuth2.0:授权码模式、客户端模式
- JWT:签名验证、Token刷新机制
- 常见漏洞:
- XSS(XSS过滤)、CSRF(Token验证)、SQL注入(预编译语句)
- DoS/DDoS(限流、防火墙)
分布式
- 分布式锁:Redis + Zookeeper对比
- 限流算法:令牌桶、漏桶算法
- 布隆过滤器:位数组与哈希函数的原理
性能优化
- Bitmap:内存压缩与快速集合操作(如去重统计)
学习建议
- 实践JWT Token的签发与验证(如使用Spring Security)。
- 使用Guava RateLimiter实现限流。
不建议深入的部分
JSP/Tomcat
- JSP:已被Thymeleaf/FreeMarker替代
- Tomcat原理:容器架构(如Connector、Engine)需结合源码分析
Spring源码
- Spring事务:事务传播行为与源码实现
- Spring MVC:请求处理流程(
DispatcherServlet
)
Jetty
- 与Tomcat的对比(轻量级嵌入式服务器)
学习建议
- 仅在需要自定义容器时深入研究,否则优先使用Spring Boot内置Tomcat。
学习路线总结
阶段 | 目标 |
---|---|
基础阶段 | 掌握Java语法、数据结构与算法、计算机网络、Linux命令 |
进阶阶段 | 深入JVM、多线程、数据库优化、Spring Boot框架 |
实战阶段 | 完成微服务项目(整合Redis、Kafka、Docker、监控组件) |
扩展阶段 | 学习分布式锁、安全防护、性能调优等高阶技术 |
学习方法建议
虽然说是java学习路线,但是建议大家一定要把计算机基础学好,这是通用的,形成计算思维后,学习任何编程语言都特别地快。学习新语言时,一定要多动手,编程语言学的时候可能觉得不是很难,但是如果一段时间没接触,没动手,就会遗忘。所以,持续学习,多动手尤其关键,而且最好不要多线并行,一个一个硬骨头啃下来,打好基础。学习时,如果可以,多记笔记,形成自己的知识库,后续也可以发布到平台上,就像我这篇文章一样。
最后还是附上学习计算机的“圣经”(翁凯老师的原话):
“学习计算机一定要有一个非常强大的心理状态,计算机都是人做出来的,别人能想出来的,我也一定能想得出来,在计算机里头没有任何黑魔法,所有的东西只不过是我现在不知道而已,总有一天我会把所有的细节,所有的内部的东西全部搞明白了。”