Java后端面试八股文大全(2025最新版)

发布于:2025-05-20 ⋅ 阅读:(21) ⋅ 点赞:(0)

一、Java基础篇

1. HashMap底层原理

经典回答:HashMap采用数组+链表+红黑树结构,默认初始容量16,负载因子0.75。当链表长度>8且数组长度≥64时转为红黑树。JDK8优化了hash算法:(h = key.hashCode()) ^ (h >>> 16)。扩容时newCap = oldCap << 1,元素要么在原位置,要么在原位置+oldCap。

2. ConcurrentHashMap线程安全实现

标准答案:JDK7使用分段锁(Segment继承ReentrantLock),JDK8改为synchronized+CAS:

  • putVal时对数组元素加锁

  • size()采用baseCount+CounterCell分段统计

  • 扩容时协助迁移(多线程协同)

二、JVM篇

3. 对象内存布局

八股模板

4. G1垃圾回收器

背诵要点

  • 分区算法(Region大小1-32MB)

  • 四种GC模式:Young GC、Mixed GC、Full GC、并发标记

  • SATB解决并发标记漏标问题

  • 推荐场景:堆>6GB,停顿时间<500ms

三、并发编程篇

5. AQS实现原理

标准话术

  • 核心字段:state(volatile)、head/tail(CAS更新)

  • ConditionObject实现条件等待

6. ThreadLocal内存泄漏

标准答案

  • Key泄漏:ThreadLocal弱引用被回收,但Value强引用仍在

  • 根本原因:线程池场景下线程长期存活

  • 解决方案:1) 及时remove() 2) 使用static final修饰

四、Spring篇

7. 循环依赖解决

Spring标准回答
三级缓存解决setter注入循环依赖:

  1. 一级缓存:singletonObjects(完整Bean)

  2. 二级缓存:earlySingletonObjects(早期引用)

  3. 三级缓存:singletonFactories(ObjectFactory)

构造器注入无法解决,需改用@Lazy

8. Spring事务失效场景

排查清单

  1. 非public方法

  2. 同类方法调用(未走代理)

  3. 异常类型不匹配

  4. 多线程调用

  5. 数据库引擎不支持(如MyISAM)

五、数据库篇

9. MySQL索引优化

B+树标准回答

  • 聚簇索引:叶子节点存整行数据(主键索引)

  • 非聚簇索引:叶子节点存主键值(需要回表)

  • 索引失效场景:1) 函数操作 2) 隐式转换 3) 前导模糊查询 4) 范围查询阻断

10. MVCC实现原理

InnoDB标准答案

  • 隐藏字段:DB_TRX_ID(事务ID)、DB_ROLL_PTR(回滚指针)

  • ReadView:m_ids(活跃事务)、min_trx_id、max_trx_id

  • 判断规则:trx_id < min_trx_id可见,trx_id > max_trx_id不可见

六、分布式篇

11. Redis持久化对比

标准对比表

方式 触发机制 数据安全性 恢复速度 性能影响
RDB 定时/save命令
AOF 每条写命令
混合 RDB+AOF 中高 中等 中等

12. CAP理论应用

标准解释

  • CP系统(Zookeeper):网络分区时拒绝写入

  • AP系统(Eureka):网络分区时返回旧数据

  • 实际选择:1) 支付系统选CP 2) 商品系统选AP

七、场景设计篇

13. 短链系统设计

标准架构

  1. 发号器:Snowflake(64位ID)

  2. 转码:Base62(0-9a-zA-Z)

  3. 存储:Redis缓存+MySQL持久化

  4. 跳转:302临时重定向

  5. 统计:Redis HyperLogLog

14. 秒杀系统设计

标准方案

  1. 分层削峰:静态化->网关限流->队列缓冲

  2. 库存扣减:Redis Lua脚本原子操作

  3. 防刷:令牌桶限流+风控规则

  4. 降级:排队页+异步通知

八、HR问题篇

15. 职业规划标准答案

三段式模板

  1. 短期(1年):深耕技术栈(如Spring Cloud Alibaba)

  2. 中期(3年):提升架构能力(主导系统重构)

  3. 长期(5年):技术管理双通道(TL或架构师)



网站公告

今日签到

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