实习
根据搜索结果中的高频考点和面试经验,以下是针对Java后端技术岗的一周速通八股文复习计划,涵盖核心知识点和复习重点,按优先级排序并整合多篇资料内容:
✅⚠️❌
一、复习策略
- 优先级原则:聚焦高频核心知识点(85%以上的面试题集中在此),忽略冷门细节。
- 理解为主,背诵为辅:重点理解底层原理(如JVM、并发机制),适当记忆固定答案(如集合类区别)。
- 结合项目:每个知识点准备1-2个实际项目中的应用案例(如Redis缓存优化、线程池配置)。
二、核心八股文与复习重点
1. Java基础(必考,占30%)
- 面向对象
- String
- 集合类
- 异常处理
- 反射与代理
2. 并发编程(必考,占25%)
- 线程基础
- 锁机制
- 线程池
- JUC工具类
可重入锁ReentrantLock, 严格串行化执行
import java.util.concurrent.locks.ReentrantLock;
public class LockInventory {
private int stock = 1000;
private final ReentrantLock lock = new ReentrantLock();
public void deduct() {
lock.lock(); // 加锁
try {
if (stock > 0) {
Thread.sleep(10); // 模拟业务逻辑耗时
stock--;
System.out.println(Thread.currentThread().getName() + " 扣减成功,剩余库存: " + stock);
} else {
System.out.println("库存不足!");
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock(); // 释放锁
}
}
public static void main(String[] args) throws InterruptedException {
LockInventory inventory = new LockInventory();
for (int i = 0; i < 1200; i++) {
new Thread(inventory::deduct).start();
}
Thread.sleep(2000);
System.out.println("最终库存: " + inventory.stock); // 正确结果为 0 或 无负数
}
}
并发容器 AtomicInteger, CAS 原子
import java.util.concurrent.atomic.AtomicInteger;
public class AtomicInventory {
private final AtomicInteger stock = new AtomicInteger(1000);
public void deduct() {
while (true) {
int current = stock.get();
if (current <= 0) {
System.out.println("库存不足!");
return;
}
int next = current - 1;
// CAS 原子更新:只有当前值与内存值一致时才更新
if (stock.compareAndSet(current, next)) {
try {
Thread.sleep(10); // 模拟业务逻辑耗时
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " 扣减成功,剩余库存: " + next);
return;
}
}
}
public static void main(String[] args) throws InterruptedException {
AtomicInventory inventory = new AtomicInventory();
for (int i = 0; i < 1200; i++) {
new Thread(inventory::deduct).start();
}
Thread.sleep(2000);
System.out.println("最终库存: " + inventory.stock.get()); // 正确结果为 0
}
}
信号量机制
3. JVM(必考,占20%)
- 内存模型
- 垃圾回收
- 类加载机制
SPl(Service Provider Interface),是JDK内置的一种服务提供发现机制,可以用来启用框架扩展和替换组件,主要是被框架的开发人员使用,比如java.sql.Driver接口,其他不同厂商可以针对同一接口做出不同的实现,MySOL和PostareSOL都有不同的实现提供给用户,而Java的SPI机制可以为某个接口寻找服务实现。Java中SPI机制主要思想是将装配的控制权移到程序之外,在模块化设计中这个机制尤其重要,其核心思想就是解耦,
SPI 场景中的矛盾
-
以 JDBC 的 DriverManager 加载 MySQL 驱动为例:
-
核心接口:java.sql.Driver 由 Bootstrap ClassLoader 加载 (属于核心库)。
-
实现类:com.mysql.cj.jdbc.Driver 位于应用 ClassPath,应由 AppClassLoader 加载。
问题:Bootstrap ClassLoader(父)无法直接访问 AppClassLoader(子)加载的类。
按照双亲委派规则,Bootstrap 无法加载 AppClassLoader 的类,导致核心库无法发现第三方实现。
Bootstrap ClassLoader(加载核心库)
↑ 委托?
│
ExtClassLoader(加载扩展库)
↑ 委托?
│
AppClassLoader(加载 ClassPath)
↑
线程上下文类加载器TCCL 直接使用 ← DriverManager(由 Bootstrap 加载)
4. 数据库与缓存(必考,占15%)
- MySQL
- Redis
5. 框架与中间件(高频,占10%)
- Spring
- Spring Boot
-
- @ComponentScan
作用:启用组件扫描,自动发现并注册 Spring 组件(如 @Component, @Service, @Controller 等)。 - @EnableAutoConfiguration
通过 @Import(AutoConfigurationImportSelector.class) 导入自动配置逻辑。关键代码:AutoConfigurationImportSelector 会读取 META-INF/spring.factories 文件,找到所有配置的 EnableAutoConfiguration 类。
- @ComponentScan
-
- 消息队列
- 分布式
三、复习计划
- Day 1-2:Java基础 + 集合类 + 异常处理(重点:HashMap、多态、String)。
- Day 3:并发编程(线程池、锁机制、JUC工具类)。
- Day 4:JVM(内存模型、GC算法、类加载)。
- Day 5:MySQL索引与事务 + Redis核心机制。
- Day 6:Spring框架原理 + 分布式基础。
- Day 7:模拟面试 + 查漏补缺(重点刷高频题,如中的题目)。
四、注意事项
- 模拟面试:使用牛客网或面经题库自测,重点关注回答的逻辑性。
以上内容整合自多个高价值面经和八股文资料,完整版可参考CSDN博客或牛客网面经。建议结合个人项目经验调整复习重点,优先攻克高频考点!

浙公网安备 33010602011771号