java面试题及答案(基础题122道)

一、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:默认按名称注入。

  1. 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 模式识别 、窗口计算)

医疗销售项目 :用于实时打标签、交易链监控、日志清洗入库

相关推荐
jacsonchen1 小时前
【MySQL】环境变量配置
java
番茄去哪了2 小时前
黑马点评实战篇千字总结
java·分布式·面向对象编程
Cg136269159742 小时前
JS-对象-array数组
开发语言·前端·javascript
pupudawang2 小时前
Java进阶——IO 流
java·开发语言·python
古译汉书2 小时前
【数据结构算法】二分查找
c语言·开发语言·数据结构·c++·算法
逆境不可逃2 小时前
【从零入门23种设计模式19】行为型之观察者模式
java·开发语言·算法·观察者模式·leetcode·设计模式·动态规划
一只鹿鹿鹿2 小时前
研发中心数据安全管理规定(文件)
java·运维·开发语言·数据库·后端
程可爱2 小时前
SpringAI自学成才系列(二)-结合SpringAI开发会话记忆功能
spring·ai
旺旺仙贝呦2 小时前
Java常用注解
java·开发语言·python