2025年Java后端最新面试场景题 + 八股文高频面试题
一、Java 八股文高频面试题(基础+进阶)
1. Java 基础
-
HashMap 和 ConcurrentHashMap 的区别?ConcurrentHashMap 如何保证线程安全?
-
HashMap:非线程安全,JDK1.8 后采用 数组+链表/红黑树,扩容时可能死循环(JDK1.7)。
-
ConcurrentHashMap:线程安全,JDK1.7 使用 分段锁,JDK1.8 改用 CAS + synchronized 优化锁粒度。
-
-
synchronized 和 ReentrantLock 的区别?
-
synchronized:JVM 内置锁,自动释放,非公平锁,不可中断。
-
ReentrantLock:可重入锁,支持 公平锁/非公平锁,可中断,支持 Condition 条件队列。
-
-
volatile 的作用?能否保证原子性?
-
可见性:强制线程从主存读取最新值。
-
有序性:禁止指令重排序(内存屏障)。
-
不保证原子性(如
i++
仍需AtomicInteger
)。
-
-
ThreadLocal 原理及内存泄漏问题?
-
原理:每个线程维护
ThreadLocalMap
,Key 是弱引用,Value 是强引用。 -
内存泄漏:Key 被回收后,Value 仍存在,需手动
remove()
。
-
-
Java 8 新特性?
-
Lambda、Stream API、Optional、方法引用、接口默认方法。
-
2. JVM 篇
-
JVM 内存模型?哪些区域是线程共享的?
-
线程私有:虚拟机栈、本地方法栈、程序计数器。
-
线程共享:堆、方法区(JDK1.8 后为元空间)。
-
-
垃圾回收算法有哪些?G1 的特点?
-
标记-清除(碎片化)、复制算法(新生代)、标记-整理(老年代)。
-
G1:分代回收,Region 分区,可预测停顿,适合大内存应用。
-
-
如何排查 OOM?常见工具有哪些?
-
MAT(Memory Analyzer)、jstack(线程分析)、jmap(堆内存快照)。
-
-
类加载机制?如何打破双亲委派?
-
双亲委派:BootStrap → Extension → Application → 自定义类加载器。
-
打破方式:重写
loadClass()
(如 Tomcat 的 WebAppClassLoader)。
-
-
JVM 调优参数?
-
-Xms
(初始堆)、-Xmx
(最大堆)、-Xmn
(新生代)、-XX:SurvivorRatio
(Eden:Survivor 比例)。
-
3. 并发编程
-
线程池的核心参数?如何设置?
-
corePoolSize(核心线程)、maxPoolSize(最大线程)、workQueue(任务队列)、拒绝策略。
-
IO 密集型:
CPU 核心数 * 2
;CPU 密集型:CPU 核心数 + 1
。
-
-
AQS(AbstractQueuedSynchronizer)原理?
-
核心:
state
(资源状态) + CLH 队列(线程排队)。 -
实现类:
ReentrantLock
、CountDownLatch
、Semaphore
。
-
-
CAS 的 ABA 问题如何解决?
-
版本号(
AtomicStampedReference
)或 时间戳。
-
-
synchronized 锁升级过程?
-
无锁 → 偏向锁 → 轻量级锁(CAS)→ 重量级锁(OS 互斥锁)
-
-
分布式锁的实现方式?
-
Redis(SETNX + RedLock)、ZooKeeper(临时节点 + Watch)
-
二、Java 后端面试场景题(实战向)
1. 高并发场景
-
如何设计一个百万级 QPS 的秒杀系统?
-
分层削峰:Nginx 限流 + Redis 预减库存 + 消息队列异步处理。
-
热点隔离:单独 Redis 集群处理秒杀商品。
-
-
如何解决缓存穿透?
-
布隆过滤器(拦截无效请求)+ 空值缓存(防止频繁查 DB)。
-
-
如何防止缓存雪崩?
-
随机过期时间 + 多级缓存(本地缓存 → Redis → DB)+ 熔断降级(Hystrix/Sentinel)。
-
2. 分布式系统
-
如何实现分布式唯一 ID?
-
Snowflake(趋势递增,时钟回拨问题)。
-
Leaf-Segment(DB 号段缓冲,适合金融场景)。
-
-
如何保证分布式事务?
-
2PC(强一致,性能差)、TCC(最终一致)、SAGA(长事务)、本地消息表。
-
-
CAP 理论如何理解?银行系统更侧重哪两点?
-
CP(一致性 + 分区容错性),如支付系统必须保证数据强一致。
-
3. 数据库优化
-
十亿级数据分页查询优化?
-
ES search_after(深度分页)+ 覆盖索引 + 禁止跳页。
-
-
MySQL 索引失效场景?
-
LIKE '%xx'、函数计算、OR 条件、隐式类型转换。
-
-
MVCC 实现原理?
-
ReadView + Undo Log 版本链,解决 不可重复读 & 幻读。
-
4. 微服务 & 架构
-
Spring Boot 自动配置原理?
-
@EnableAutoConfiguration
+META-INF/spring.factories
+ 条件注解(@Conditional
)4。
-
-
Dubbo 和 Spring Cloud 的区别?
-
Dubbo:RPC 框架,性能高,适合内部服务调用。
-
Spring Cloud:全家桶(Eureka、Feign、Hystrix),适合微服务生态。
-
-
如何设计微服务限流?
-
令牌桶算法(Guava RateLimiter)+ Sentinel 熔断降级。
-
三、银行业务相关面试题(加分项)
-
如何保证金融级数据一致性?
-
TCC 事务(Try-Confirm-Cancel)+ 对账机制(定时核对账务)。
-
-
如何防止重复支付?
-
幂等性设计(唯一订单号 + 状态机)。
-
-
银行系统常用的加密算法?
-
RSA(非对称)、SHA-256(摘要)、国密 SM4(对称)。
-