Java 后端
4月份内完成
Java 核心基础
✅基础语法:面向对象三大特性、异常处理、泛型、反射、注解
集合框架:ArrayList/LinkedList/HashMap/ConcurrentHashMap 底层实现、优缺点、线程安全问题
并发编程:线程创建方式、线程池 7 大参数与工作流程、synchronized 与 ReentrantLock 区别、volatile 关键字作用、ThreadLocal 原理
JVM 基础:内存模型(堆 / 栈 / 方法区)、双亲委派机制、常见 GC 算法(标记清除 / 复制 / 标记整理)、G1/ZGC 基本了解
2026 年重点:JDK17 成为大厂基线,必须了解虚拟线程(JDK21+)的基本概念和优势
Spring Boot 3.x
- ✅能独立搭建 Spring Boot 项目,完成 CRUD 接口开发
- 理解 IoC 和 AOP 核心思想
- ✅掌握 @Controller/@Service/@Repository/@Autowired 等核心注解
- ✅会使用 application.yml/properties 配置文件
- 了解自动配置原理和 Bean 生命周期
MySQL 数据库
✅ 熟练编写增删改查、连接查询、子查询
✅ 理解事务 ACID 特性和 4 种隔离级别
事务(Transaction)就是一组数据库操作,要么全部成功,要么全部失败回滚。
比如转账:A 账户减 100、B 账户加 100。这两个操作必须放在一个事务里。
如果只执行了“减 100”,还没来得及“加 100”就出错了,就会出现钱丢失,所以必须保证一致性。
事务的四大特性(ACID):
原子性(Atomicity):事务是不可分割的最小单元,要么全部成功,要么全部失败
- 实现方式:数据库一般通过 undo log 来实现回滚。
一致性(Consistency):事务执行前后,数据库都要处于合法状态,满足业务规则和约束
- ACID 里的“一致性”不是单独某个机制直接保证的,而是由:原子性、隔离性、持久性、数据库约束、应用逻辑共同保证的结果。
隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行
- 多个事务并发执行时,彼此之间互不干扰,就像每个事务“独占”数据库一样
持久性(Durability):事务一旦提交,结果就必须永久保存
- 数据库通常通过:redo log、WAL(Write Ahead Logging)来保证崩溃恢复后数据不丢。
为什么需要隔离级别:多个事务同时执行时,可能出现互相干扰的问题。
为了管理这种并发干扰,SQL 标准定义了 4 种隔离级别。隔离级别越高,越“安全”,但并发性能通常越差。隔离级别越低,性能更好,但容易出错。隔离级别越高,能解决的问题越多,但并发越低。
并发时常见的 3 种问题:
- 脏读(Dirty Read):一个事务读到了另一个事务还没提交的数据。
- 例子:
- T1 把余额从 100 改成 50,但还没提交
- T2 读到余额是 50
- 结果 T1 回滚了,余额还是 100
- 那 T2 读到的 50 就是“脏数据”
- 例子:
- 不可重复读(Non-repeatable Read):同一个事务内,两次读取同一条数据,结果不一样。
- 例子:
- T1 第一次读到余额是 100
- T2 修改并提交,把余额改成 50
- T1 第二次再读,发现变成 50
- 例子:
- 幻读(Phantom Read):同一个事务内,两次执行相同条件的查询,返回的行数变了,像“凭空多出来或少了几行”。
- 例子:
- T1 查询“工资大于 10000 的员工”,查到 3 条
- T2 插入一条工资 12000 的员工并提交
- T1 再查一次,变成 4 条
- 例子:
4 种隔离级别,从低到高依次是:
- Read Uncommitted
- Read Committed
- Repeatable Read
- Serializable
越往下,隔离越强,问题越少,性能越差。
Read Uncommitted(读未提交):
- 特点:一个事务可以读到另一个事务未提交的数据。
- 会出现的问题:脏读、不可重复读、幻读
- “读未提交”连别人没提交的数据都能看到,所以最不安全。
Read Committed(读已提交):
- 特点:只能读到已经提交的数据,避免脏读。
- 会出现的问题:不可重复读、幻读
- 它保证你读到的每次数据都是别人提交后的“有效数据”,但两次读之间别人仍然可以修改。
Repeatable Read(可重复读):
- 特点:同一个事务内,多次读取同一条记录,结果保持一致。
- 会出现的问题:幻读
- 它保证“同一行数据重复读,结果不变”。
Serializable(可序列化)
- 特点:最高隔离级别,事务之间几乎按顺序执行。
- 不会出现问题
- 它最安全,但并发能力最差,因为很多操作会被阻塞。
| 隔离级别 | 脏读 | 不可重复读 | 幻读 |
|---|---|---|---|
| Read Uncommitted | ✅ | ✅ | ✅ |
| Read Committed | ❎ | ✅ | ✅ |
| Repeatable Read | ❎ | ❎ | ✅ |
| Serializable | ❎ | ❎ | ❎ |
- 读未提交:太危险,基本不用
- 读已提交:常见,减少脏读
- 可重复读:兼顾一致性和并发,常用于大多数业务
- 可序列化:最安全,但性能差,少用
掌握索引原理(B + 树)、索引失效的常见情况
索引的本质是一种用于加速查询的数据结构。
在 MySQL 里底层实现:B+ 树(B+ Tree)
为什么不用数组 / 链表 / 哈希:
- 数组:有序数组查找快,插入慢(要移动大量数据)
- 链表:插入快,查询慢
- 哈希:查询快,不支持范围查询(BETWEEN、>、<),不支持排序(ORDER BY)
为什么选择 B+ 树:同时兼顾查询效率 + 范围查询 + 磁盘 IO 优化
B+ 树结构特点:
- 所有数据都在叶子节点
- 非叶子节点只存索引(key)
- 叶子节点之间有链表连接(非常关键!)
为什么适合数据库:因为数据库数据在磁盘上
- 减少磁盘 IO:一个节点 = 一页、一个节点可以存很多 key、树的高度很低(通常 2~4 层)
- 范围查询超强:叶子节点是有序 + 链表连接
MySQL 索引类型:在 InnoDB 中:
- 聚簇索引(Clustered Index):主键索引
- 数据和索引在一起
- 叶子节点存的是整行数据
- 一张表只能有一个
- 二级索引(普通索引)
- 叶子节点存的是:主键值
- 查数据需要回表
什么是回表:
SELECT name FROM user WHERE age = 20;- 用 age 索引查 → 得到主键 id
- 再用 id 查主键索引 → 拿到数据
- 这一步叫:回表
索引失效的常见情景:
- 使用函数:
WHERE YEAR(create_time) = 2024 - 字段类型不匹配:
WHERE id = '123' - 模糊查询:
LIKE '%abc'(前缀不确定) - OR 连接:
WHERE a = 1 OR b = 2
索引的代价:
- 写性能下降:INSERT / UPDATE / DELETE 要维护索引
- 占用空间:索引也是数据结构
适合加索引的情况:
- 经常作为查询条件(WHERE)
- 数据区分度高(不是全是 0/1)
- 用于排序(ORDER BY)或分组(GROUP BY)
不适合的:
- 字段取值很少(性别、状态)
- 更新非常频繁(写入成本高)
会使用 explain 分析慢查询
了解 MVCC 基本概念
工程工具与协作
- ✅Git 基本操作:clone/add/commit/push/pull/ 分支管理 / 解决冲突
- ✅会使用 IDEA/Eclipse 进行开发、调试、断点排查
- 了解 Maven/Gradle 依赖管理
- ✅会写简单的单元测试(JUnit)
计算机基础
- ✅数据结构:数组、链表、栈、队列、树、哈希表
- 计算机网络:TCP 三次握手四次挥手、HTTP/HTTPS 区别、RESTful API 设计原则
- 操作系统:进程与线程区别、内存管理基本概念
算法能力
- 刷完 LeetCode 热题 100 道,重点掌握:
- 链表操作(反转、合并、环形链表)
- 数组与字符串(两数之和、最长无重复子串)
- 栈与队列(有效括号)
- 二叉树遍历
- 简单动态规划
持久层框架
- MyBatis/MyBatis-Plus:熟练使用注解和 XML 方式编写 SQL,掌握分页插件、条件构造器
- 了解 JPA/Hibernate 的基本使用
Redis 缓存
- 掌握 5 种基本数据类型(String/List/Set/Hash/ZSet)及常用命令
- 理解缓存穿透 / 击穿 / 雪崩问题及解决方案
- 了解 Redis 持久化(RDB/AOF)和分布式锁的基本实现
Linux 基本操作
- 常用命令:ls/cd/pwd/rm/mkdir/vi/cat/grep/ps/kill
- ✅会在 Linux 上部署简单的 Java 项目
- 会查看日志文件排查问题
完整项目经验
- 至少有 1 个能跑起来的 Spring Boot 项目(如校园二手交易平台、博客系统、图书管理系统)
- 项目中必须包含:用户登录注册、权限控制、分页查询、文件上传等常见功能
- 能清晰讲解:业务场景、自己负责的模块、遇到的问题及解决方案、性能优化点
2026 年建议:在项目中加入 Redis 缓存热点数据、统一异常处理、接口文档(Swagger/OpenAPI)等亮点
微服务基础
- 了解 Spring Cloud Alibaba 核心组件:Nacos(服务注册发现)、Sentinel(熔断限流)
- 理解微服务架构的基本思想和优缺点
消息队列
- 了解 RocketMQ/Kafka 的基本概念和使用场景
- 知道消息丢失、重复消费、消息堆积的解决方案
云原生入门
- Docker 基本操作:镜像构建、容器运行、Dockerfile 编写
- 了解 Kubernetes 的基本概念
AI 工程化基础
- Spring AI:能使用 Spring AI 对接大模型 API,实现简单的 AI 功能
- 了解向量数据库和 RAG 的基本概念
其他
- 了解 Elasticsearch 全文检索
- 会使用 Postman/Apifox 进行接口测试
- 有开源项目贡献或技术博客
基础深度比广度更重要:面试官更看重你对 HashMap、线程池、MySQL 索引等核心知识点的理解深度,而不是你会多少技术
项目经验是核心:一个有亮点的项目胜过十门课程成绩,不要只写 "熟悉 Spring Boot",要写 "基于 Spring Boot+MyBatis-Plus 开发了 XX 系统,通过 Redis 缓存热点商品,QPS 提升 3 倍"
AI 工具使用能力:会使用 AI 辅助开发(如代码生成、问题排查)是加分项,但不能依赖 AI,必须理解代码背后的原理
日常实习要求低于暑期实习:日常实习更看重学习能力和上手速度,只要基础扎实,有一个完整的项目,就有很大机会