2025 年最全Java面试题 ,热门高频200 题+答案汇总!

为大家准备了 2025年全新热门高频 Java 面试题。

适合准备求职、或者有跳槽想法的初/中/高级程序员。

也合适想要对自己技术栈查缺补漏、不断完善成长的人。

我们将面试题分成 Java基础&并发、MySQL、Redis、JVM......等多个分类。下面一起看看这些题目:

Java 基础&并发(33 题)

1,说说 Java 中 HashMap 的原理?

HashMap 是基于哈希表的数据结构,用于存储键值对key-value)。其核心是将键的哈希值映射到数组索引位置,通过数组 + 链表 (在 Java 8 及之后是数组 + 链表 + 红黑树)来处理哈希冲突。

HashMap 使用键的 hashCode() 方法计算哈希值,并通过 indexFor 方法(JDK 1.7 及之后版本移除了这个方法,直接使用 (n - 1) & hash)确定元素在数组中的存储位置。哈希值是经过一定扰动处理的,防止哈希值分布不均匀,从而减少冲突。

HashMap 的默认初始容量为 16,负载因子为 0.75。也就是说,当存储的元素数量超过 16 × 0.75 = 12 个时,HashMap 会触发扩容操作,容量x2并重新分配元素位置。这种扩容是比较耗时的操作,频繁扩容会影响性能。

2,Java 中 ConcurrentHashMap 1.7 和 1.8 之间有哪些区别?

JDK 1.7 ConcurrentHashMap 采用的是分段锁 ,即每个 Segment 是独立的,可以并发访问不同的 Segment,默认是 16 个 Segment,所以最多有 16 个线程可以并发执行。

而 JDK 1.8 移除了 Segment,锁的粒度变得更加细化,锁只在链表或红黑树的节点级别 上进行。通过 CAS 进行插入操作,只有在更新链表或红黑树时才使用 synchronized,并且只锁住链表或树的头节点,进一步减少了锁的竞争,并发度大大增加。

并且 JDK 1.7 ConcurrentHashMap 只使用了数组 + 链表 的结构,而 JDK 1.8 和 HashMap一样引入了红黑树。

除此之外,还有扩容的区别以及 size 方法的计算也不一样。

3,为什么 JDK 1.8 对 HashMap 进行了红黑树的改动?

在 JDK 1.8 之前,HashMap 使用链表来解决哈希冲突。当哈希冲突较多时,链表中的元素增多,查找、插入和删除的时间复杂度从 O(1) 退化为 O(n)。

因此在 JDK 1.8 引入红黑树,将链表长度超过一定阈值(默认 8)时的链表转换为红黑树,避免性能急剧下降。当链表长度降到 6 以下时,红黑树会重新退化为链表,保持简单高效。

红黑树是一种平衡二叉搜索树,插入、删除、查找操作的时间复杂度为 O(log n),在元素多的情况下远优于链表的 O(n)。

4,JDK 1.8 对 HashMap 除了红黑树还进行了哪些改动?

  • 改进了哈希函数的计算:JDK 1.8 中优化了哈希函数,使得哈希值的分布更加均匀,减少了哈希冲突的发生。通过在生成哈希值时使用"扰动函数",确保哈希值的高低位都能参与到桶的选择中。
  • 扩容机制优化:JDK 1.8 改进了扩容时的元素迁移机制。在扩容过程中不再对每个元素重新计算哈希值,而是根据原数组长度的高位来判断元素是留在原位置,还是迁移到新数组中的新位置。这一改动减少了不必要的计算,提升了扩容效率。
  • 头插法变为尾插法:头插法的好处就是插入的时候不需要遍历链表,直接替换成头结点,但是缺点是扩容的时候会逆序,而逆序在多线程操作下可能会出现环,产生死循环,于是改为尾插法。

5,Java 中有哪些集合类?请简单介绍

Java 中的集合类主要分为两大类:Collection 接口和 Map 接口。前者是存储对象的集合类,后者存储的是键值对(key-value)。

Collection 接口下又分为 List、Set 和 Queue 接口。每个接口有其具体实现类。以下是主要的集合类:

List 接口:

  • ArrayList:基于动态数组,查询速度快,插入、删除慢。
  • LinkedList:基于双向链表,插入、删除快,查询速度慢。
  • Vector:线程安全的动态数组,类似于 ArrayList,但开销较大。

Set 接口:

  • HashSet:基于哈希表,元素无序,不允许重复。
  • LinkedHashSet:基于链表和哈希表,维护插入顺序,不允许重复。
  • TreeSet:基于红黑树,元素有序,不允许重复。

所以网上有些说 Set 是无序集合非常不准确,因为需要看具体的实现类。

Queue 接口:

  • PriorityQueue:基于优先级堆,元素按照自然顺序或指定比较器排序。
  • LinkedList:可以作为队列使用,支持 FIFO(先进先出)操作。

Map 接口:

存储的是键值对,也就是给对象(value)设置了一个 key,这样通过 key 可以找到那个 value。

  • HashMap:基于哈希表,键值对无序,不允许键重复。
  • LinkedHashMap:基于链表和哈希表,维护插入顺序,不允许键重复。
  • TreeMap:基于红黑树,键值对有序,不允许键重复。
  • Hashtable:线程安全的哈希表,不允许键或值为 null。
  • ConcurrentHashMap:线程安全的哈希表,适合高并发环境,不允许键或值为 null。

我们整理了2025年全新 java 高频热门面试题,包括:Java、 MySQL、Redis、Spring、SpringBoot、SpringCloud、计算机网络、操作系统、消息队列、Netty、后端场景题、线上问题排查、后端系统设计题 等等内容。

篇幅限制,后续全套高频面试题及详细题解 可以【点击此处获取】

6,为什么 Java 8 移除了永久代(PermGen)并引入了元空间(Metaspace)?

7,为什么 Java 中 HashMap 的默认负载因子是 0.75?

8,Java 中 HashMap 的扩容机制是怎样的?

9,为什么 HashMap 在 Java 中扩容时采用 2 的 n 次方倍?

10,数组和链表在 Java 中的区别是什么?

11,Java 线程池核心线程数在运行过程中能修改吗?如何修改?

12,Java 中如何创建多线程?

13,Java 中的 final 关键字是否能保证变量的可见性?

14,什么是 Java 中的原子性、可见性和有序性?

15,什么是 Java 的 CAS(Compare-And-Swap)操作?

16,为什么 Java 中的 ThreadLocal 对 key 的引用为弱引用?

17,编译执行与解释执行的区别是什么?JVM 使用哪种方式?

18,Java 中什么情况会导致死锁?如何避免?

19,你了解 Java 线程池的原理吗?

20,Java 线程池有哪些拒绝策略?

21,如何合理地设置 Java 线程池的线程数?

22,你使用过哪些 Java 并发工具类?

23,Synchronized 和 ReentrantLock 有什么区别?

24,Java 的 synchronized 是怎么实现的?

25,如何优化 Java 中的锁的使用?

26,Java 中常见的垃圾收集器有哪些?

27,Java 中有哪些垃圾回收算法?

28,什么是 Java 内存模型(JMM)?

29,线程和进程有什么区别?

30,Java 中 volatile 关键字的作用是什么?

31,什么是 Java 中的 ABA 问题?

32,线程的生命周期在 Java 中是如何定义的?

33,说说 AQS 吧?

JVM 相关(7 题)

  1. JVM 由哪些部分组成?
  2. JVM 垃圾回收调优的主要目标是什么?
  3. 如何对 Java 的垃圾回收进行调优?
  4. 常用的 JVM 配置参数有哪些?
  5. JVM 的内存区域是如何划分的?
  6. JVM 有哪几种情况会产生 OOM(内存溢出)?
  7. 怎么分析 JVM 当前的内存占用情况?OOM 后怎么分析?

MySQL(32 题)

  1. MySQL 索引的最左前缀匹配原则是什么?
  2. 数据库的脏读、不可重复读和幻读分别是什么?
  3. MySQL 的存储引擎有哪些?它们之间有什么区别?
  4. MySQL 的覆盖索引是什么?
  5. MySQL 的索引类型有哪些?
  6. MySQL 的索引下推是什么?
  7. MySQL InnoDB 引擎中的聚簇索引和非聚簇索引有什么区别?
  8. MySQL 中的回表是什么?
  9. MySQL 中使用索引一定有效吗?如何排查索引效果?
  10. MySQL 中的索引数量是否越多越好?为什么?
  11. 请详细描述 MySQL 的 B+ 树中查询数据的全过程
  12. 为什么 MySQL 选择使用 B+ 树作为索引结构?
  13. MySQL 三层 B+ 树能存多少数据?
  14. 详细描述一条 SQL 语句在 MySQL 中的执行过程。
  15. MySQL 是如何实现事务的?
  16. MySQL 事务的二阶段提交是什么?
  17. MySQL 中长事务可能会导致哪些问题?
  18. MySQL 中的 MVCC 是什么?
  19. MySQL 中的事务隔离级别有哪些?
  20. MySQL 默认的事务隔离级别是什么?为什么选择这个级别?
  21. MySQL 中有哪些锁类型?
  22. MySQL 的乐观锁和悲观锁是什么?
  23. MySQL 中如果发生死锁应该如何解决?
  24. MySQL 中 count(*)、count(1) 和 count(字段名) 有什么区别?
  25. MySQL 中如何进行 SQL 调优?
  26. 如何使用 MySQL 的 EXPLAIN 语句进行查询分析?
  27. MySQL 中如何解决深度分页的问题?
  28. 什么是 MySQL 的主从同步机制?它是如何实现的?
  29. 如何处理 MySQL 的主从同步延迟?
  30. MySQL 中如果我 select * from 一个有 1000 万行的表,内存会飙升么?
  31. 在 MySQL 中建索引时需要注意哪些事项?
  32. 在什么情况下,不推荐为数据库建立索引?

消息队列(16 题)

  1. RabbitMQ 怎么实现延迟队列?
  2. RabbitMQ 中消息什么时候会进入死信交换机?
  3. RabbitMQ 中无法路由的消息会去到哪里?
  4. Kafka 为什么要抛弃 Zookeeper?
  5. Kafka 中 Zookeeper 的作用?
  6. 说一下 Kafka 中关于事务消息的实现?
  7. 说一下 RocketMQ 中关于事务消息的实现?
  8. RocketMQ 的事务消息有什么缺点?你还了解过别的事务消息实现吗?
  9. 为什么需要消息队列?
  10. 说一下消息队列的模型有哪些?
  11. 如何处理重复消息?
  12. 如何保证消息的有序性?
  13. 如何处理消息堆积?
  14. 如何保证消息不丢失?
  15. 消息队列设计成推消息还是拉消息?推拉模式的优缺点?
  16. 为什么 RocketMQ 不使用 Zookeeper 作为注册中心?

设计模式(11 题)

  1. 谈谈你了解的最常见的几种设计模式,说说他们的应用场景
  2. 什么是策略模式?一般用在什么场景?
  3. 什么是责任链模式?一般用在什么场景?
  4. 什么是模板方法模式?一般用在什么场景?
  5. 什么是观察者模式?一般用在什么场景?
  6. 什么是代理模式?一般用在什么场景?
  7. 请描述简单工厂模式的工作原理。
  8. 工厂模式和抽象工厂模式有什么区别?
  9. 什么是设计模式?请简述其作用。
  10. 单例模式有哪几种实现?如何保证线程安全?
  11. Netty 采用了哪些设计模式?

Spring 框架(19 题)

  1. 说说 Spring 启动过程?
  2. 你了解的 Spring 都用到哪些设计模式?
  3. Spring 有哪几种事务传播行为?
  4. 说说 Springboot 的启动流程?
  5. SpringBoot 是如何实现自动配置的?
  6. 如何理解 Spring Boot 中的 starter?
  7. Spring Boot 是如何通过 main 方法启动 web 项目的?
  8. Spring Boot 的核心特性有哪些?
  9. 什么是 Spring Boot?
  10. 什么是 Spring IOC?
  11. Spring AOP 默认用的是什么动态代理,两者的区别?
  12. 什么是 AOP?
  13. 看过源码吗?说下 Spring 由哪些重要的模块组成?
  14. 什么是循环依赖(常问)?
  15. Spring 如何解决循环依赖?
  16. 为什么 Spring 循环依赖需要三级缓存,二级不够吗?
  17. 说下 Spring Bean 的生命周期?
  18. Spring MVC 具体的工作原理?
  19. Spring 中的 DI 是什么?

Redis(31 题)

  1. Redis 集群的实现原理是什么?
  2. Redis 集群会出现脑裂问题吗?
  3. Redis 中如何实现分布式锁?
  4. Redis 实现分布式锁时可能遇到的问题有哪些?
  5. 说说 Redisson 分布式锁的原理?
  6. 如何使用 Redis 快速实现排行榜?
  7. Redis 中如何保证缓存与数据库的数据一致性?
  8. Redis 为什么这么快?
  9. 如何使用 Redis 快速实现布隆过滤器?
  10. 为什么 Redis 设计为单线程?6.0 版本为何引入多线程?
  11. 你在项目中使用的 Redis 客户端是什么?
  12. Redis 中常见的数据类型有哪些?
  13. Redis 中跳表的实现原理是什么?
  14. Redis 性能瓶颈时如何处理?
  15. Redis 的 hash 是什么?
  16. Redis 和 Memcached 有哪些区别?
  17. Redis 支持事务吗?如何实现?
  18. Redis 数据过期后的删除策略是什么?
  19. Redis 中有哪些内存淘汰策略?
  20. Redis 的 Lua 脚本功能是什么?如何使用?
  21. Redis 的 Pipeline 功能是什么?
  22. Redis 通常应用于哪些场景?
  23. Redis 中的 Big Key 问题是什么?如何解决?
  24. 如何解决 Redis 中的热点 key 问题?
  25. Redis 的持久化机制有哪些?
  26. Redis 中的缓存击穿、缓存穿透和缓存雪崩是什么?
  27. 线上发现 Redis 机器爆了,如何优化?
  28. Redis 在生成 RDB 文件时如何处理请求?
  29. Redis 的哨兵机制是什么?
  30. Redis 主从复制的实现原理是什么?
  31. 如果发现 Redis 内存溢出了?你会怎么做?

计算机网络相关(19 题)

  1. 说说 TCP 的三次握手?
  2. 说说 TCP 的四次挥手?
  3. 为什么 TCP 挥手需要有 TIME_WAIT 状态?
  4. TCP 超时重传机制是为了解决什么问题?
  5. TCP 滑动窗口的作用是什么?
  6. TCP/IP 四层模型是什么?
  7. OSI 七层模型是什么?
  8. 从网络角度来看,用户从输入网址到网页显示,期间发生了什么?
  9. 什么是物理地址,什么是逻辑地址?
  10. 到底什么是 TCP 连接?
  11. HTTP 1.0 和 2.0 有什么区别?
  12. HTTP 2.0 和 3.0 有什么区别?
  13. HTTP 和 HTTPS 有什么区别?
  14. HTTP 与 RPC 之间的区别?
  15. TCP 和 UDP 有什么区别?
  16. TCP 的粘包和拆包能说说吗?
  17. Cookie、Session、Token 之间有什么区别?
  18. 线上 CPU 飙高如何排查?
  19. TCP 是用来解决什么问题?

其他框架(17 题)

  1. 简单说说 Netty 的零拷贝机制?
  2. Netty 是如何解决粘包和拆包问题的?
  3. Netty 如何解决 JDK NIO 中的空轮询 Bug?
  4. 介绍一下 Reactor 线程模型?
  5. 说说你知道的几种 I/O 模型
  6. Select、Poll、Epoll 之间有什么区别?
  7. 说一下 Netty 的应用场景?
  8. 为什么不选择使用原生的 NIO 而选择使用 Netty 呢?
  9. Netty 性能为什么这么高?
  10. 简述 MyBatis 的插件运行原理,以及如何编写一个插件?
  11. 说说 MyBatis 的缓存机制?
  12. MyBatis 中 #{} 和 ${} 的区别是什么?
  13. MyBatis 与 Hibernate 有哪些不同?
  14. 什么是 MyBatis-Plus?它有什么作用?
  15. Dubbo 和 Spring Cloud Gateway 有什么区别?
  16. 什么是 API 网关?它有什么作用?
  17. 什么是 Seata?

分布式相关(13 题)

  1. 什么情况下需要使用分布式事务,有哪些方案?
  2. 如何设计一个秒杀功能?
  3. 让你设计一个分布式 ID 发号器,怎么设计?
  4. 让你设计一个短链系统,怎么设计?
  5. 分布式锁一般都怎样实现?
  6. 如何设计一个点赞系统?
  7. 让你设计一个 RPC 框架,怎么设计?
  8. 什么是限流?限流算法有哪些?
  9. 负载均衡算法有哪些?
  10. 分布式和微服务有什么区别?
  11. 什么是服务熔断?
  12. 什么是服务降级?
  13. 什么是服务雪崩?

更多

💻 编程学习交流:编程导航 📃 简历快速制作:老鱼简历 ✏️ 面试刷题神器:面试鸭

相关推荐
王达舒199410 分钟前
Spring Boot中定时任务Cron表达式的终极指南
java·spring boot·后端
demonlg011214 分钟前
Go 语言标准库中Channels,Goroutines详细功能介绍与示例
开发语言·后端·golang
王强你强17 分钟前
Spring Boot 启动参数终极解析:如何优雅地控制你的应用?
java·spring boot·后端
vener_22 分钟前
基于Flask的通用登录注册模块,并代理跳转到目标网址
后端·python·flask
Lonwayne24 分钟前
当编程语言有了人格
java·javascript·c++·python·php
Asthenia041236 分钟前
git的回退:revert还是reset?来个例子看看吧!
后端
qq_5895681044 分钟前
java学习笔记——多线程
java·笔记·学习·intellij-idea
Asthenia04121 小时前
接口速度太慢,排除DB影响,试试通过异步来优化吧!
后端
编程的大耳朵1 小时前
Java 实现将Word 转换成markdown
java·word