后端开发后端开发Java高频面试题面试真题

后端开发面试高频题 Top 25:真实面试热度榜(2026 年 7 月版)

基于后端开发岗近 90 天的真实面试记录整理:被问得最多的 25 道高频题,标注热度等级和近期实际出题的知名公司,附答题框架解析。

收录题目
25
统计周期
2026年5月 - 2026年7月
近期出题公司字节跳动腾讯阿里巴巴京东快手美团华为携程滴滴得物
面灵AI
18 分钟阅读

这份榜单不是从旧题库里翻出来的,也不是 AI 凭空编的「押题」。

我们持续沉淀真实的面试记录,按岗位、按周期跟踪每道题在面试里的出现情况。这 25 道,是后端开发岗近 90 天里被反复问到的高频题——每一道都标了它的热度等级,以及近期实际考过这道题、且能公开确认的知名公司,越靠前的题目复习优先级越高。

怎么用这份榜单:

  • 「🔥 高频 / ⭐ 较高频 / 常规」标的是这道题在近 90 天、后端开发岗里的相对热度,跟其他岗位、其他时间段无关
  • 公司名单只列近期实际考过、且能公开确认的知名公司,不是完整名单
  • 每题的解析给的是答题框架和考点拆解,不是让你背的标准答案——面试官对着背书腔基本一听一个准

Redis 与缓存

1. Redis 分布式锁如何实现?

🔥 高频考点 · 京东、字节跳动、快手、携程 等大厂近期都在考

基础版:SET key value NX PX 原子加锁,value 放唯一标识(比如 UUID),释放时用 Lua 脚本先校验 value 再删,防止误删别人的锁。

追问几乎必到:锁过期但业务没执行完怎么办(看门狗续期,Redisson 的做法)、主从切换锁丢了怎么办(RedLock 的争议可以聊,但别把它当标准答案吹)、为什么释放锁必须用 Lua(GET 和 DEL 两步之间锁可能易主)。能把「加锁-续期-释放-异常」整条链讲顺,这题就稳了。

2. 缓存穿透、缓存击穿、缓存雪崩分别是什么?如何解决?

🔥 高频考点 · 京东、字节跳动、快手、阿里巴巴 等大厂近期都在考

三个概念先分清楚:穿透是查不存在的数据,缓存永远没有,请求全打到数据库(解法:布隆过滤器拦截、缓存空值);击穿是某个热点 key 过期的瞬间,大量请求同时回源(解法:互斥锁重建、逻辑过期不删 key);雪崩是大量 key 同时失效或者缓存整体故障(解法:过期时间加随机值、多级缓存、限流降级兜底)。

加分点:说清楚三者的区别本质是「打到数据库的原因不同」,再补一句你在项目里实际用过哪种方案、为什么选它。

3. Redis 常用数据类型有哪些?分别适用什么场景?

⭐ 较高频 · 字节跳动、腾讯 等公司近期有考

String(缓存、计数器、分布式锁)、Hash(对象字段存储,改单个字段不用整存整取)、List(消息队列、时间线)、Set(去重、共同好友这类集合运算)、ZSet(排行榜、延时队列)。

别只报名词——每个类型带一个你真用过的场景,一句话就够。追问方向:ZSet 底层跳表为什么不用红黑树、String 的 SDS 和 C 字符串的区别。

MySQL

4. MySQL 事务隔离级别有哪些?

🔥 高频考点 · 京东、字节跳动、携程 等大厂近期都在考

读未提交、读已提交、可重复读、串行化,逐级解决脏读、不可重复读、幻读。InnoDB 默认可重复读。

高分答法是往下钻一层:可重复读靠 MVCC(undo log + ReadView)实现快照读,幻读在快照读下由 MVCC 解决、在当前读下靠间隙锁解决——「MySQL 的可重复读到底防不防幻读」是这题最常见的追问,提前把快照读/当前读的区别想清楚。

5. 慢 SQL 怎么排查和优化?

🔥 高频考点 · 字节跳动、快手 等大厂近期都在考

给一条完整链路:慢查询日志/监控定位 → EXPLAIN 看执行计划(type 是不是走到 index/range、扫描行数、有没有 Using filesort / Using temporary)→ 对症下药:加索引或改联合索引顺序、SQL 改写(避免函数包字段、隐式类型转换)、减少回表(覆盖索引)、深分页改游标、大查询拆小。

这题几乎一定追问「你真排查过的一次慢 SQL」——没有真实案例就提前准备一个,带数字(从多少 ms 降到多少 ms)。

6. MySQL 的索引结构是什么?为什么用 B+ 树而不是 B 树或哈希表?

⭐ 较高频 · 携程、字节跳动、腾讯 等大厂近期有考

B+ 树非叶子节点只存 key 不存数据,同样一页能放更多索引项,树更矮、磁盘 IO 更少;叶子节点串成有序链表,范围查询和排序直接顺着扫。对比着说:B 树数据分散在所有节点,范围查询要中序遍历来回跳;哈希等值查询 O(1) 但范围、排序全废。

延伸考点:聚簇索引 vs 二级索引、回表、覆盖索引——这几个词最好主动带出来,面试官往往就顺着你给的词往下问。

7. MySQL 事务有哪些特性和实现原理?

⭐ 较高频 · 字节跳动、快手、携程、腾讯 等公司近期有考

ACID 四个特性先各给一句话定义,重点放在原子性靠 undo log、持久性靠 redo log、隔离性靠锁 + MVCC 这条实现链上——这是跟「隔离级别」那题的区分点,面试官问「实现原理」是想听底层日志和锁,不是想再听一遍隔离级别定义。

一致性容易被漏答:它是前三者共同保证的结果,不是独立机制,能说清这层关系会明显加分。

8. MySQL 索引在什么情况下会失效?

⭐ 较高频 · 快手、滴滴 等公司近期有考

高频原因清单:违反最左前缀、对索引列用函数或运算、隐式类型转换(字符串列传数字)、前导模糊 LIKE '%xx'、OR 连接了非索引列、优化器判断全表扫描更快(区分度太低)。答的时候带一句「用 EXPLAIN 验证,不靠猜」,工程味立刻出来。

9. InnoDB 和 MyISAM 有什么区别?

常规考点 · 腾讯 等公司近期有考

InnoDB 支持事务和行锁、有崩溃恢复(redo log)、外键约束、聚簇索引存储;MyISAM 不支持事务、只有表锁、索引和数据分开存,插入更快但并发写和数据安全都弱。现在建表默认 InnoDB,这题的意义更多是考「你知不知道为什么」——答到崩溃恢复和行锁基本就够。

Java 并发

10. synchronized 和 ReentrantLock 有什么区别?什么场景下用哪个?

⭐ 较高频 · 京东、得物、联想 等公司近期有考

synchronized 是 JVM 内置锁:自动释放、不会忘 unlock,1.6 之后有偏向锁/轻量级锁的升级优化,日常同步首选。ReentrantLock 是 API 层显式锁:支持公平锁、可中断、tryLock 限时、多个 Condition 精准唤醒,代价是必须 finally 里手动释放。

选择逻辑一句话:没有特殊需求用 synchronized,需要「可中断/限时/公平/多条件队列」这些高级能力才上 ReentrantLock。追问常去 AQS 原理,有余力把 state + CLH 队列的骨架讲出来。

11. HashMap 和 ConcurrentHashMap 有什么区别?

常规考点 · 京东、快手、美团 等大厂近期有考

HashMap 非线程安全,并发 put 可能死循环(1.7 头插)或数据覆盖;ConcurrentHashMap 用 CAS + synchronized 锁桶头节点(1.8 后取消了 1.7 的 Segment 分段锁),锁粒度更细。

追问必到「1.8 为什么放弃分段锁」(分段锁粒度太粗,桶级别的 CAS+synchronized 并发度更高、内存也更省)和「size() 为什么不精确」(并发场景下只做近似统计)。

Java 基础与集合

12. Java 中 equals 和 == 有什么区别?

🔥 高频考点 · 京东、字节跳动、得物、腾讯 等大厂近期都在考

== 对基本类型比值,对引用类型比内存地址;equals 默认也是比地址(Object 的实现),但可以重写成业务相等(String 就重写了)。

必带的一句:重写 equals 必须同时重写 hashCode,否则放进 HashMap/HashSet 会出现「相等的对象查不到」。再准备好 Integer 缓存池(-128~127 用 == 是 true,出了范围是 false)这个经典陷阱,追问率很高。

13. 接口和抽象类有什么区别?

⭐ 较高频 · 华为、字节跳动 等大厂近期有考

语法差异(多实现 vs 单继承、Java 8 后接口也能有 default 方法)只是入场券,真正的区分在语义:接口定义「能做什么」(能力契约),抽象类定义「是什么」(模板骨架 + 复用实现)。举一对例子收尾:Comparable 是能力,AbstractList 是骨架。设计题味道的问法(「什么时候该用哪个」)答语义,别背语法表。

14. ArrayList 和 LinkedList 的区别?

⭐ 较高频 · 字节跳动、腾讯 等大厂近期有考

底层数组 vs 双向链表,随机访问 O(1) vs O(n),中间插删的复杂度差异。加一层实践认知会好很多:绝大多数场景 ArrayList 都更快——LinkedList 插删「O(1)」的前提是已经定位到节点,而定位本身 O(n),加上链表节点内存不连续、缓存不友好。「你什么时候会用 LinkedList」的诚实答案是几乎不用,这个反直觉结论面试官通常很买账。

15. StringBuffer 和 StringBuilder 有什么区别?

⭐ 较高频 · 腾讯 等公司近期有考

StringBuffer 方法加了 synchronized,线程安全但慢;StringBuilder 非线程安全,单线程更快。实际开发几乎都用 StringBuilder——多线程拼字符串的正确做法通常是各线程自己拼完再合并,而不是共享一个 StringBuffer。顺手把 String 不可变性、编译器对 + 的优化(循环里 + 为什么慢)带上,这题就从送分题变成加分题。

16. 数组和链表有什么区别?

常规考点 · 华为 等公司近期有考

数组连续存储,支持 O(1) 随机访问,但插入删除要挪动后续元素;链表非连续存储(节点靠指针串联),插入删除只需改指针是 O(1),但定位到目标节点要 O(n)。

这题看着基础,考的其实是「你能不能把这个取舍讲清楚」——数组的连续内存对 CPU 缓存友好,链表的碎片化内存反而拖慢实际访问,跟上一题 ArrayList/LinkedList 的结论是一回事,可以连起来讲。

17. Java 中的线程安全集合有哪些?

常规考点 · 字节跳动 等公司近期有考

分两类讲:JUC 并发集合(ConcurrentHashMap、CopyOnWriteArrayList、ConcurrentLinkedQueue、BlockingQueue 系列)用细粒度锁或 CAS 实现高并发;Collections.synchronizedXxx 是给普通集合包一层全局锁,简单但并发度低。

追问常问 CopyOnWriteArrayList 的写时复制代价(适合读多写少,写操作会整体复制数组)和它跟 ArrayList 的取舍边界。

18. Exception 和 Error 有什么区别?

常规考点 · 多家公司近期有考

两者都继承自 Throwable。Exception 表示程序可以预期并处理的异常,分受检异常(编译期强制处理,如 IOException)和运行时异常(如 NullPointerException);Error 表示 JVM 或系统级的严重问题(OOM、StackOverflowError),通常不建议业务代码捕获处理,因为捕获了也无法恢复。

加分点:受检异常在工程实践里争议很大——很多团队现在倾向少用受检异常(会污染方法签名、逼着上层 try/catch 或继续往外抛),用运行时异常 + 统一异常处理器替代,能聊到这层说明有实际工程判断。

19. HashMap 的底层结构、扩容机制和线程安全问题是什么?

常规考点 · 快手 等公司近期有考

1.8 的结构:数组 + 链表 + 红黑树(链表长度 ≥8 且数组容量 ≥64 才树化)。扩容:容量翻倍,节点按 hash & oldCap 是否为 0 决定留在原位还是挪到 原位 + oldCap,不用像 1.7 那样重新计算每个元素的位置。

标准追问链:为什么容量是 2 的幂(位运算取模 + 上面这条扩容迁移规律)→ 为什么树化阈值是 8(泊松分布,正常情况链表到 8 的概率极低)→ 1.7 头插法为什么并发扩容会成环、1.8 改尾插后是不是就线程安全了(不是,只是不会成环,并发 put 依然会丢数据)。

Spring 框架

20. Spring IoC 和 AOP 分别是什么?

⭐ 较高频 · 字节跳动 等大厂近期有考

IoC:对象的创建和依赖装配交给容器,代码从「主动 new」变成「声明我要什么」,解耦、可测试。AOP:把日志、事务、权限这些横切逻辑抽出来,通过动态代理织入业务方法。

两个都别停在定义上:IoC 补一句 Bean 生命周期或三级缓存的存在,AOP 补一句 JDK 动态代理(有接口)和 CGLIB(无接口、子类化)怎么选——@Transactional 失效的几种场景(自调用、非 public 方法)也是从 AOP 代理机制推出来的,串起来讲印象分很高。

21. Spring Boot 自动装配原理是什么?

⭐ 较高频 · 京东 等公司近期有考

一条主线讲完:@SpringBootApplication@EnableAutoConfigurationAutoConfigurationImportSelector 读取 META-INF/spring/...AutoConfiguration.imports(旧版是 spring.factories)拿到候选配置类 → @ConditionalOnClass / OnMissingBean / OnProperty 条件过滤 → 满足条件的配置类注册 Bean。

一句话本质:约定大于配置,classpath 里有什么就自动配什么,你自己定义了就用你的。追问方向:怎么写一个 starter(把这条链反着走一遍)。

22. @Transactional 注解在哪些场景会失效,如何解决?

⭐ 较高频 · 得物 等公司近期有考

失效根源都指向同一件事:@Transactional 靠动态代理生效,凡是绕开了代理对象的调用都会失效。常见场景:同类内部方法互相调用(this 调用没走代理)、方法不是 public、异常被自己 catch 掉没往外抛、默认只回滚 unchecked 异常(受检异常要显式配 rollbackFor)、方法所在类没被 Spring 管理。

解法对应着场景来:内部调用改成注入自己的代理对象或拆到另一个 Bean、rollbackFor = Exception.class、确认类和方法的可见性。这题本质是在考「你理解不理解 Spring AOP 代理」,答案落到代理机制上就对了。

网络基础

23. TCP 三次握手过程是什么?

⭐ 较高频 · 腾讯 等公司近期有考

SYN → SYN+ACK → ACK,把每一步双方的状态变化(SYN_SENT / SYN_RCVD / ESTABLISHED)带上。必备追问:为什么是三次不是两次(两次的话,网络里滞留的旧 SYN 会让服务端凭空建连接,且服务端无法确认自己的发送能力)、SYN Flood 攻击和防御(半连接队列打满,syn cookie)。四次挥手和 TIME_WAIT 为什么等 2MSL 大概率连着问,一起备。

24. TCP 和 UDP 有什么区别?

⭐ 较高频 · 京东、腾讯 等大厂近期有考

面向连接/可靠/字节流/有拥塞控制 vs 无连接/不可靠/数据报/开销小。背完表格别停,落到选型:什么场景选 UDP(实时音视频、DNS、游戏——丢一帧无所谓、延迟是命)、怎么在 UDP 上做可靠传输(QUIC/KCP 的思路:应用层自己做确认重传)。后端岗问这题,醉翁之意常在「HTTP/3 为什么改用 UDP」。

25. HTTP 和 HTTPS 有什么区别?

常规考点 · 京东、字节跳动 等大厂近期有考

HTTPS 是 HTTP 在 TLS 之上跑,默认端口不同(80 vs 443),核心多了三件事:加密(防窃听)、身份认证(证书防中间人)、完整性校验(防篡改)。

追问常问 TLS 握手大概几步(证书验证 + 密钥交换协商出对称密钥,之后正文用对称加密提速)、为什么不全程非对称加密(非对称运算太贵,只用来交换对称密钥)。

榜单之外:几条趋势观察

  • 八股仍是主战场,但问法在变。头部公司现在普遍追问到「你项目里怎么处理的」,纯背诵的通过率在肉眼可见地下降。
  • Spring 相关的追问越来越细@Transactional 失效场景单独成题,说明面试官不再满足于「知道 IoC/AOP 是什么」,而是要验证你踩没踩过 AOP 代理的坑。
  • 贴着榜单边缘的题:Java 创建线程的方式、Java 反射、Redis 过期与淘汰策略、MQ 消息可靠性、Spring 循环依赖——热度都在常规考点量级,时间充裕建议一并过掉。

常见问题

这份榜单的题目是怎么筛出来的?

我们持续收录和整理面试相关的真实记录,把语义相同的题(不同问法)聚合成一道,按岗位、按最近 90 天的窗口比较每道题被问到的相对热度,取热度最高的题目收录进榜单。热度只做「高频/较高频/常规」的等级标注,不对外公开具体的次数和公司家数。

高频题背下来就能过面试吗?

不能。高频题的价值是帮你把有限的准备时间花在最可能被问的地方,但头部公司的面试官普遍会追问项目细节和底层原理,纯背诵很容易在第二问暴露。建议每道题都准备一个自己项目里的真实案例,把解析里提到的追问方向提前想一遍。

榜单多久更新一次?

按岗位定期更新,统计窗口固定为最近 90 天,保证反映的是当下的出题趋势而不是几年前的旧题。新一期发布后,旧榜单会保留存档。

有针对特定公司或岗位方向的版本吗?

官方合集按岗位大类整理。如果你想要针对具体目标公司、具体技术栈方向的高频题,可以用面灵AI 的定制题库功能:输入目标公司和岗位,结合你的简历生成专属的高频题和参考回答。

想要一份属于你的题库?

按你的目标公司和岗位,定制专属高频题

这份合集是官方按岗位整理的通用版。告诉面灵AI 你要面的公司和岗位,结合你的简历,生成一份只属于你的近期高频题和参考回答。