一、Java 基础与集合
1. ArrayList 和 LinkedList 的区别?
ArrayList 底层是数组,查询快,增删慢;适合查多改少。
LinkedList 底层是双向链表,增删快,查询慢;适合频繁插入删除。
2. HashMap 的底层实现?
JDK8 以前:数组 + 链表。
JDK8 起:数组 + 链表 + 红黑树(链表长度 > 8 且数组长度 > 64 时转红黑树)。
3. String、StringBuilder、StringBuffer 区别?
String:不可变,线程安全,适合少量字符串 拼接。
StringBuilder:可变,非线程安全,单线程下效率高。
StringBuffer:可变,线程安全,适合多线程场景。
4. equals 和 == 的区别?
== 比较的是地址(引用是否相同)。
equals 比较的是内容(需重写 equals 方法)。
二、并发编程
5. synchronized 和 ReentrantLock 区别?
synchronized 是 JVM 实现,语法简洁;
ReentrantLock 是 Java 实现,功能更强,支持公平锁、可中断锁、超时锁。
6. volatile 关键字的作用?
保证变量在多线程间的可见性;禁止指令重排序(通过内存屏障);不保证原子性。
7. 线程池的核心参数?
corePoolSize:核心线程数;
maximumPoolSize:最大线程数;
keepAliveTime:空闲线程最大存活时间;
workQueue:任务队列;
rejectionHandler:拒绝策略。
三、JVM 与性能调优
8. JVM 内存模型有哪些区域?
程序计数器、虚拟机栈、本地方法栈、堆、方法区(JDK8 后为元空间)。
9. GC 的垃圾收集器有哪些?
Serial、ParNew、Parallel、CMS、G1、ZGC、Shenandoah。
10. Minor GC 和 Full GC 的区别?
Minor GC:新生代垃圾回收,频繁,耗时短;
Full GC:老年代 + 新生代,频率低,耗时长。
四、Spring & Spring Boot
11. Spring Bean 的生命周期?
实例化
设置属性
调用 BeanNameAware、BeanFactoryAware 等回调接口
初始化(@PostConstruct、InitializingBean)
使用中
销毁前调用(@PreDestroy、DisposableBean)
12. @Autowired 和 @Resource 区别?
@Autowired:按类型注入,需配合 @Qualifier;
@Resource:默认按名称注入。
- Spring 事务的传播机制?
REQUIRED:默认,有就加入事务,无则新建。
REQUIRES_NEW:新建事务,原事务挂起。
NESTED:嵌套事务,支持回滚到 savepoint。
SUPPORTS、NOT_SUPPORTED、MANDATORY、NEVER:分别代表是否支持或必须事务。
14. Spring Boot 自动装配原理?
启动类 @SpringBootApplication -> @EnableAutoConfiguration -> SpringFactoriesLoader 加载 META-INF/spring.factories 中配置类。
五、MySQL
15. 索引的底层结构?
B+ 树结构:所有数据存储在叶子节点,非叶子节点仅存储索引键和指向子节点的指针。
叶子节点之间通过链表连接,便于范围查找。
16. 覆盖索引是什么?如何避免回表?
查询字段完全在索引列中,直接从索引获取数据而无需回表,提高查询效率。
SQL 查询时只选用索引包含的列,并观察 EXPLAIN 中 Extra 是否为 Using index。
17. 聚簇索引和非聚簇索引的区别?
聚簇索引(InnoDB 主键索引):数据行与索引存储在一起。
非聚簇索引(二级索引):索引存储的是主键值,通过主键再回表查询数据。
18. MySQL 锁机制?
表锁(MyISAM)
行锁(InnoDB):共享锁、排它锁
意向锁(辅助行锁加速)
间隙锁、临键锁(防止幻读)
19. MySQL 事务的四大特性(ACID)?
原子性(Atomicity):要么全部执行,要么回滚。
一致性(Consistency):事务前后数据一致。
隔离性(Isolation):多个事务互不干扰。
持久性(Durability):事务提交后永久保存。
20. 常见的隔离级别?
读未提交(Read Uncommitted):可能脏读
读已提交(Read Committed):解决脏读
可重复读(Repeatable Read,MySQL 默认):解决不可重复读
串行化(Serializable):最高隔离,性能低
21. 如何排查死锁?
使用 SHOW ENGINE INNODB STATUS 查看死锁信息。
分析死锁发生的 SQL 与表结构,优化索引与锁顺序。
六、Redis
22. Redis 支持哪些数据结构?
String、List、Set、Hash、ZSet、Bitmap、HyperLogLog、Geo。
23. Redis 缓存雪崩/穿透/击穿?
雪崩:大量 key 同时失效 → 加锁、均匀过期时间、预热
穿透:请求不存在 key → 布隆过滤器、缓存空值
击穿:热点 key 突然失效 → 加互斥锁、逻辑过期
24. 分布式锁实现?
setnx + expire 原子操作;Redisson 提供高可用实现
篇幅限制下面就只能给大家展示小册部分内容了。整理了一份核心面试笔记包括了:Java面试、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafc
需要全套面试笔记及答案************【点击此处即可/免费获取】
https://docs.qq.com/doc/DQXdYWE9LZ2ZHZ1ho****************
七、消息队列(Kafka / RabbitMQ)
25. Kafka 的消息机制?
Producer 将消息发送到 topic 下的 partition。
Consumer 按 group 消费,每个 partition 只能被 group 内一个 consumer 消费。
每条消息有 offset,消费顺序由 partition 保证。
26. Kafka 如何保证消息不丢失?
ACK 机制 + ISR 副本机制。
设置 acks=all,启用幂等 producer,添加 retries 保证重试。
可使用事务 API 实现 exactly-once。
27. RabbitMQ 的 Exchange 类型?
Direct:路由键精准匹配
Topic:模糊匹配(支持 * 和 #)
Fanout:广播全部绑定队列
Headers:根据 headers 属性匹配
28. RabbitMQ 与 Kafka 区别?
RabbitMQ 延迟低,支持消息确认机制,适合事务场景。
Kafka 吞吐高,适合日志采集、流处理等高并发场景。
八、分布式、微服务
29. 分库分表怎么做?
水平拆分:按业务字段 hash/取模/分片(如用户 ID、地区)
垂直拆分:按功能模块分库
使用 ShardingSphere、MyCat 实现自动路由
30. 雪花 ID 原理?
64 位整型 = 时间戳 + 数据中心 ID + 机器 ID + 自增序列
支持高并发下唯一性,避免数据库主键冲突
31. 微服务常见组件及作用?
注册中心:Nacos、Eureka (服务发现与注册)
配置中心:Nacos(动态配置)
网关:Spring Cloud Gateway(统一入口、鉴权、限流)
熔断限流:Sentinel、Hystrix(保护系统稳定性)
调用:Feign、OpenFeign(简化远程调用)
链路追踪:Sleuth + Zipkin / SkyWalking(排查性能瓶颈)
32. Spring Cloud 中 Nacos 的使用?
注册服务:@EnableDiscoveryClient,配置 spring.cloud.nacos.discovery
获取配置:@RefreshScope + @Value,配置 spring.cloud.nacos.config
九、常用中间件
33. Elasticsearch 在项目中的使用?
商品搜索、联想词、条件过滤、聚合分析、搜索推荐
借助 IK 分词器进行中文分词,结合 DSL 构建复杂查询
34. Flink 的作用与场景?
实时数据处理(CEP 模式识别 、窗口计算)
医疗销售项目 :用于实时打标签、交易链监控、日志清洗入库