2025年Java后端最新面试场景题 + 八股文高频面试题

发布于:2025-06-26 ⋅ 阅读:(61) ⋅ 点赞:(0)

一、Java 八股文高频面试题(基础+进阶)

1. Java 基础

  1. HashMap 和 ConcurrentHashMap 的区别?ConcurrentHashMap 如何保证线程安全?

    • HashMap:非线程安全,JDK1.8 后采用 数组+链表/红黑树,扩容时可能死循环(JDK1.7)。

    • ConcurrentHashMap:线程安全,JDK1.7 使用 分段锁,JDK1.8 改用 CAS + synchronized 优化锁粒度。

  2. synchronized 和 ReentrantLock 的区别?

    • synchronized:JVM 内置锁,自动释放,非公平锁,不可中断。

    • ReentrantLock:可重入锁,支持 公平锁/非公平锁,可中断,支持 Condition 条件队列

  3. volatile 的作用?能否保证原子性?

    • 可见性:强制线程从主存读取最新值。

    • 有序性:禁止指令重排序(内存屏障)。

    • 不保证原子性(如 i++ 仍需 AtomicInteger)。

  4. ThreadLocal 原理及内存泄漏问题?

    • 原理:每个线程维护 ThreadLocalMap,Key 是弱引用,Value 是强引用。

    • 内存泄漏:Key 被回收后,Value 仍存在,需手动 remove()

  5. Java 8 新特性?

    • LambdaStream APIOptional方法引用接口默认方法


2. JVM 篇

  1. JVM 内存模型?哪些区域是线程共享的?

    • 线程私有:虚拟机栈、本地方法栈、程序计数器。

    • 线程共享:堆、方法区(JDK1.8 后为元空间)。

  2. 垃圾回收算法有哪些?G1 的特点?

    • 标记-清除(碎片化)、复制算法(新生代)、标记-整理(老年代)。

    • G1:分代回收,Region 分区可预测停顿,适合大内存应用。

  3. 如何排查 OOM?常见工具有哪些?

    • MAT(Memory Analyzer)jstack(线程分析)、jmap(堆内存快照)。

  4. 类加载机制?如何打破双亲委派?

    • 双亲委派:BootStrap → Extension → Application → 自定义类加载器。

    • 打破方式:重写 loadClass()(如 Tomcat 的 WebAppClassLoader)。

  5. JVM 调优参数?

    • -Xms(初始堆)、-Xmx(最大堆)、-Xmn(新生代)、-XX:SurvivorRatio(Eden:Survivor 比例)。


3. 并发编程

  1. 线程池的核心参数?如何设置?

    • corePoolSize(核心线程)、maxPoolSize(最大线程)、workQueue(任务队列)、拒绝策略

    • IO 密集型CPU 核心数 * 2CPU 密集型CPU 核心数 + 1

  2. AQS(AbstractQueuedSynchronizer)原理?

    • 核心state(资源状态) + CLH 队列(线程排队)。

    • 实现类ReentrantLockCountDownLatchSemaphore

  3. CAS 的 ABA 问题如何解决?

    • 版本号AtomicStampedReference)或 时间戳

  4. synchronized 锁升级过程?

    • 无锁 → 偏向锁 → 轻量级锁(CAS)→ 重量级锁(OS 互斥锁)

  5. 分布式锁的实现方式?

    • Redis(SETNX + RedLock)ZooKeeper(临时节点 + Watch)


二、Java 后端面试场景题(实战向)

1. 高并发场景

  1. 如何设计一个百万级 QPS 的秒杀系统?

    • 分层削峰:Nginx 限流 + Redis 预减库存 + 消息队列异步处理。

    • 热点隔离:单独 Redis 集群处理秒杀商品。

  2. 如何解决缓存穿透?

    • 布隆过滤器(拦截无效请求)+ 空值缓存(防止频繁查 DB)。

  3. 如何防止缓存雪崩?

    • 随机过期时间 + 多级缓存(本地缓存 → Redis → DB)+ 熔断降级(Hystrix/Sentinel)。


2. 分布式系统

  1. 如何实现分布式唯一 ID?

    • Snowflake(趋势递增,时钟回拨问题)。

    • Leaf-Segment(DB 号段缓冲,适合金融场景)。

  2. 如何保证分布式事务?

    • 2PC(强一致,性能差)TCC(最终一致)SAGA(长事务)本地消息表

  3. CAP 理论如何理解?银行系统更侧重哪两点?

    • CP(一致性 + 分区容错性),如支付系统必须保证数据强一致。


3. 数据库优化

  1. 十亿级数据分页查询优化?

    • ES search_after(深度分页)+ 覆盖索引 + 禁止跳页

  2. MySQL 索引失效场景?

    • LIKE '%xx'函数计算OR 条件隐式类型转换

  3. MVCC 实现原理?

    • ReadView + Undo Log 版本链,解决 不可重复读 & 幻读


4. 微服务 & 架构

  1. Spring Boot 自动配置原理?

    • @EnableAutoConfiguration + META-INF/spring.factories + 条件注解@Conditional)4。

  2. Dubbo 和 Spring Cloud 的区别?

    • Dubbo:RPC 框架,性能高,适合内部服务调用。

    • Spring Cloud:全家桶(Eureka、Feign、Hystrix),适合微服务生态。

  3. 如何设计微服务限流?

    • 令牌桶算法(Guava RateLimiter)+ Sentinel 熔断降级


三、银行业务相关面试题(加分项)

  1. 如何保证金融级数据一致性?

    • TCC 事务(Try-Confirm-Cancel)+ 对账机制(定时核对账务)。

  2. 如何防止重复支付?

    • 幂等性设计(唯一订单号 + 状态机)。

  3. 银行系统常用的加密算法?

    • RSA(非对称)SHA-256(摘要)国密 SM4(对称)

 

 

 

  需要25年最新完整版面试场景题库丝我890嗱


网站公告

今日签到

点亮在社区的每一天
去签到