当前位置: 首页 > web >正文

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

一、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或架构师)


http://www.xdnf.cn/news/7395.html

相关文章:

  • 5月19日复盘-YOLOV4
  • 采用CDN技术时域名解析流程
  • Java-List集合类全面解析
  • DAY 30 模块和库的导入
  • 扫描网络内所有设备的IP地址
  • 专题讨论3:基于图的基本原理实现走迷宫问题
  • (二十二)Java File类与IO流全面解析
  • 第 1 章:数字 I/O 与串口通信(GPIO UART)
  • LeetCode 1306. 跳跃游戏 III(中等)
  • 4.【Linux】Linux工具(2)
  • 小白的进阶之路-人工智能从初步到精通pytorch的基本流程详解-1
  • 树莓派系列教程第八弹:结合 ESP32-CAM 实现远程摄像头监控
  • 14款项目管理工具点评:PingCode、TAPD等哪款更好?
  • Django框架的前端部分使用Ajax请求一
  • bisheng系列(二)- 本地部署(前后端)
  • SpringBoot 中文转拼音 Pinyin4j库 拼音转换 单据管理 客户管理
  • 电脑A和电脑B都无法ping通电脑C网络,电脑C可以ping通电脑A和B,使用新系统测试正常,排除硬件问题。
  • 【漫话机器学习系列】268. K 折交叉验证(K-Fold Cross-Validation)
  • CAD看图王三维功能升级能解决哪些问题?
  • vulfocus漏洞学习——redis 未授权访问 (CNVD-2015-07557)
  • CSS提高性能的方法有哪些
  • @RequestParam 和 @RequestBody、HttpServletrequest 与HttpServletResponse
  • 解析:新能源汽车芯片主要玩家及技术发展
  • 从秒开到丝滑体验!WebAssembly助力ZKmall商城重构 B2B2C 商城性能基线
  • 四:操作系统cpu调度之调度算法
  • PyQt5绘图全攻略:QPainter、QPen、QBrush与QPixmap详解
  • uniapp运行到微信开发者工具报错“更改appid失败touristappidError:tourist appid”
  • Spring Bean 生命周期中设计模式的应用与解析
  • 通过vcpkg交叉编译grpc:构建Arm64平台的Docker化开发环境
  • 掌握Git:版本控制与高效协作指南