2025年金九银十Java后端面试题攻略【附场景题+八股文】
HashMap vs ConcurrentHashMap:非线程安全,JDK1.8后采用数组+链表/红黑树,扩容可能死循环(JDK1.7)。:JDK1.8改用CAS + synchronized优化锁粒度,分段锁淘汰。synchronized vs ReentrantLock:JVM内置锁,非公平锁,不可中断。:支持公平锁、可中断、条件队列。volatile的作用与局限性保证可见性(强制主存读取)
一、Java核心八股文
1. Java基础
-
HashMap vs ConcurrentHashMap
-
HashMap
:非线程安全,JDK1.8后采用数组+链表/红黑树,扩容可能死循环(JDK1.7)。 -
ConcurrentHashMap
:JDK1.8改用CAS + synchronized优化锁粒度,分段锁淘汰。
-
-
synchronized vs ReentrantLock
-
synchronized
:JVM内置锁,非公平锁,不可中断。 -
ReentrantLock
:支持公平锁、可中断、Condition
条件队列。
-
-
volatile的作用与局限性
-
保证可见性(强制主存读取)和有序性(禁止指令重排序),但不保证原子性(如
i++
需AtomicInteger
)。
-
-
JVM内存模型
-
线程私有:虚拟机栈、本地方法栈、程序计数器。
-
线程共享:堆、方法区(JDK1.8后为元空间)。
-
2. JVM篇
-
G1垃圾回收器特点
-
Region
分区、可预测停顿、适合大内存应用。
-
-
OOM排查方法
-
jmap -dump
导出堆内存 →MAT
分析内存泄漏 →jstack
查死锁。
-
-
类加载机制
-
双亲委派模型(
BootStrap → Extension → Application
),打破方式(如Tomcat
的WebAppClassLoader
)。
-
3. 并发编程
-
线程池参数设置
-
corePoolSize
(核心线程数)、maxPoolSize
(最大线程数)、workQueue
(任务队列)、拒绝策略。 -
IO密集型:
CPU核心数 * 2
;CPU密集型:CPU核心数 + 1
。
-
-
AQS(AbstractQueuedSynchronizer)原理
-
核心:
state
(资源状态)+CLH队列
(线程排队),实现类如ReentrantLock
、CountDownLatch
。
-
-
分布式锁方案
-
Redis
(SETNX + RedLock
)、ZooKeeper
(临时节点 +Watch
机制)。
-
二、高并发与分布式系统(高频场景题)
1. 秒杀系统设计
-
核心问题:超卖、库存一致性、高并发请求。
-
解决方案:
-
分层削峰:
Nginx
限流 →Redis
预减库存(Lua
脚本保证原子性)→ 消息队列(Kafka
/RocketMQ
)异步处理。 -
热点隔离:独立
Redis
集群处理秒杀商品。 -
风控防刷:IP限流、验证码、用户行为分析。
-
2. 分布式事务
-
TCC模式(
Try-Confirm-Cancel
):适用于金融支付系统。 -
SAGA长事务:适用于补偿机制较强的业务。
-
本地消息表:最终一致性方案,适用于订单系统。
3. 缓存一致性
-
延迟双删:先删缓存 → 更新DB → 再删缓存。
-
订阅Binlog(
Canal
监听MySQL
变更)。
4. 十亿级数据分页优化
-
ES
search_after
(深度分页)。 -
覆盖索引 + 禁止跳页(
LIMIT 10000, 10
优化)。
三、数据库与缓存优化
1. MySQL高频考点
-
索引失效场景
-
LIKE '%xx'
、函数计算、OR
条件、隐式类型转换。
-
-
MVCC实现原理
-
ReadView
+Undo Log
版本链,解决不可重复读 & 幻读。
-
2. Redis实战
-
缓存雪崩预防
-
随机过期时间 + 多级缓存(本地→
Redis
→DB
)+ 熔断降级(Sentinel
)。
-
-
热点Key探测
-
redis-cli --hotkeys --pattern "user:*"
。
-
四、微服务与系统设计
1. Spring Boot自动配置原理
-
@EnableAutoConfiguration
+META-INF/spring.factories
+ 条件注解(@Conditional
)。
2. 服务熔断策略
-
Sentinel
动态调整阈值(基于慢调用比例触发降级)。
3. 全链路灰度发布
-
流量标记(
Header
传递)+Service Mesh
(Istio
动态路由)。
更多推荐
所有评论(0)