java面试八股 重点篇
数字马力后端开发(郑州)一面突击复习清单
面试时间:12月5日
背景说明:因国考时间紧张,Java 八股仅系统复习了 Redis 和 MySQL。本清单聚焦校招一面常见、基础、高频问题,按模块分类整理,优先掌握加粗项。
一、Redis 篇
- 缓存三兄弟问题是什么?分别如何解决?
- 缓存穿透、缓存击穿、缓存雪崩
- Redis 持久化机制有哪些?RDB 和 AOF 的区别?
- 如何保证 Redis 与 MySQL 的双写一致性?
- Redis 分布式锁如何实现?需要注意哪些问题?(如锁过期、可重入)
- Redis 为什么执行速度快?
- Redis 和 MySQL 的核心区别是什么?适用场景有何不同?
- Redis 是单线程的吗?为什么还能这么快?
二、MySQL 篇
- 如何定位慢查询?(开启慢日志、使用 EXPLAIN)
- 常见的 SQL 优化手段有哪些?
- MySQL 索引的底层数据结构是什么?为什么用 B+ 树?
- 哪些情况会导致索引失效?
- 联合索引 (a, b, c) 查询 a=1 AND c=3 能走索引吗?
- 什么是覆盖索引?它有什么好处?
三、框架篇(Spring / Spring Boot / MyBatis)
- Spring 是如何解决循环依赖的?三级缓存分别是什么?
- Spring Boot 自动装配的原理是什么?(@EnableAutoConfiguration + spring.factories)
- MyBatis 如何防止 SQL 注入?#{} 和 ${} 的区别?
- MyBatis-Plus 相比原生 MyBatis 有哪些优势?常用注解有哪些?
- Spring、Spring Boot、Spring Cloud 三者有什么区别?
- Spring Cloud 和 Spring MVC 的定位有何不同?
- Spring Boot 的启动流程是怎样的?SpringApplication.run() 做了哪些事?
- MyBatis 的一级缓存和二级缓存有什么区别?默认开启吗?存在什么问题?
- @Autowired 和 @Resource 的区别是什么?
四、消息中间件篇
- Kafka / RabbitMQ 如何保证消息不丢失?(从生产端、中间件、消费端三方面回答)
- RabbitMQ、Kafka、MQTT、Redis Pub/Sub 的发布/订阅机制有什么区别?(从可靠性、持久化、适用场景对比)
- Kafka 为什么吞吐量高?核心设计思想是什么?
五、Java 基础篇
集合
- HashMap 的底层结构是什么?JDK 8 做了哪些优化?
- HashMap 默认初始容量和负载因子是多少?
- ConcurrentHashMap 是如何保证线程安全的?
并发编程
- 进程和线程的区别是什么?
- 并发和并行的区别?
- 死锁产生的四个必要条件是什么?如何避免?
- 什么是线程安全?如何实现?
- 线程池的核心参数有哪些?拒绝策略有哪几种?
- corePoolSize=2, maxPoolSize=4, queue=100,提交5个任务会怎么执行?
JVM
- JVM 内存结构包括哪些区域?
- 什么是类加载机制?什么是双亲委派模型?
- 常见的垃圾回收算法有哪些?新生代和老年代分别用什么?
- Minor GC 和 Full GC 的触发条件是什么?
六、企业场景题(系统设计简答)
问题:一套系统同时负责很多地方的摄像机接入,压力大,如何解决?
思考方向:
- 使用消息队列(如 Kafka)削峰填谷
- 视频/图片文件存储到对象存储(OSS/MinIO),数据库只存 URL
- 设备状态信息缓存到 Redis,减少数据库压力
- 服务部署集群 + Nginx 负载均衡
- 数据库读写分离、分库分表(如 ShardingSphere)

浙公网安备 33010602011771号