2026春招:Java后端高频面试题Top 100(全网最全,附详细答案)

0 阅读5分钟

前言: 2026年的春招竞争依然激烈,面试官的考核重点已经从单纯的“背八股文”转向了“底层原理 + 场景解决 + 新技术(JDK21/云原生)”。
本文耗时两周,为你整理了阿里、字节、美团、腾讯等一线大厂出现频率最高的 100 道 Java 后端面试题。全文无废话,直击采分点,建议先收藏再看,考前突击必备!


第一篇:Java 基础与进阶(1-20)

1. 面向对象的四大特性是什么?

  • 抽象: 提取核心属性和行为。
  • 封装: 隐藏内部实现细节,对外暴露接口(如 private 属性 + public 方法)。
  • 继承: 代码复用(Java 单继承,但可多实现)。
  • 多态(重点): 同一方法在不同子类中有不同实现。前提:继承、重写、父类引用指向子类对象。

2. == 和 equals() 的区别?

  • ==:比较基本类型的值,或比较引用类型的内存地址
  • equals():默认比较地址,但 String、Integer 等重写了该方法,比较的是内容

3. String、StringBuffer、StringBuilder 的区别?

  • String: 不可变(JDK 9后底层由 char[] 变为 byte[]),每次修改产生新对象。
  • StringBuffer: 可变,方法加了 synchronized,线程安全,效率低。
  • StringBuilder: 可变,线程不安全,效率最高(单线程拼接首选)。

4. 为什么重写 equals() 必须重写 hashCode()?

  • 为了保证在 Hash 集合(如 HashMap、HashSet)中,内容相同的对象能计算出相同的 Hash 槽位。如果不重写,两个逻辑相等的对象会被存入不同的槽中,破坏集合规则。

5. ArrayList 和 LinkedList 的区别?

  • ArrayList: 基于动态数组,支持随机访问(O(1)),尾部插入快,中间插入/删除慢(需挪动元素)。扩容机制为 1.5 倍。
  • LinkedList: 基于双向链表,不支持随机访问(O(n)),头尾插入/删除极快。额外占用节点指针空间。

6. HashMap 的底层数据结构?(JDK 1.8)

  • 数组 + 链表 + 红黑树
  • 当链表长度 > 8 且数组长度 > 64 时,链表转红黑树(查询时间复杂度从 O(n) 降为 O(log n))。

7. HashMap 的 put 流程是什么?

  1. 计算 key 的 hash 值(高16位异或低16位,扰动函数)。
  2. 判断数组是否为空,空则初始化(默认长度16)。
  3. 计算数组下标 (n-1) & hash。
  4. 若无哈希冲突,直接放入;若冲突,判断是红黑树还是链表,分别执行插入。
  5. 若插入后超过扩容阈值(容量 * 负载因子0.75),则扩容2倍。

8. ConcurrentHashMap 如何保证线程安全?

  • JDK 1.7: Segment 分段锁(ReentrantLock)。
  • JDK 1.8: Node数组 + CAS乐观锁 + synchronized(只锁链表/红黑树的头节点,锁粒度极细)。

9. 什么是泛型擦除?

  • Java 的泛型是伪泛型,在编译后所有的泛型类型(如 )都会被擦除,替换为 Object 或其上限类型。目的是为了向后兼容 JDK 1.5 之前的代码。

10. 反射的应用场景有哪些?

  • 在运行时动态获取类信息、调用方法。核心应用:Spring IoC 容器(读取 XML/注解创建 Bean)、AOP 动态代理、JDBC 加载驱动。

11. Error 和 Exception 的区别?

  • Error: 系统级错误(如 OOM、StackOverflow),程序无法处理。
  • Exception: 程序级异常。分为受检异常(IOException,必须 try-catch)和非受检异常(RuntimeException,如 NullPointerException)。

12. JDK 8 新特性有哪些?

  • Lambda 表达式、Stream API、Optional(解决空指针)、新日期时间 API(LocalDate)。

13. Stream 流中 map 和 flatMap 的区别?

  • map:一对一映射,将一个元素转换为另一个元素。
  • flatMap:一对多映射,将一个元素转换为一个流,然后将所有流“拍平”合并成一个流。

14. 【新特性】JDK 21 的虚拟线程(Virtual Threads)是什么?

  • 即协程。由 JVM 调度的轻量级线程,创建成本极低,阻塞时不占用操作系统线程(OS Thread)。彻底取代 WebFlux 等响应式编程,实现“同步代码写出异步性能”。

15. 【新特性】JDK 14 引入的 Record 类是什么?

  • 一种不可变的透明数据载体(类似 Lombok 的 @Data),自动生成构造器、equals、hashCode 和 getter,专门用于 DTO/VO 数据传输。

16. Java 中如何实现深拷贝和浅拷贝?

  • 浅拷贝: 实现 Cloneable 接口重写 clone(),只拷贝基本类型,引用类型复制地址。
  • 深拷贝: 引用类型的对象也要重新克隆,或者利用序列化/反序列化(JSON 转换)实现彻底的深拷贝。

17. ThreadLocal 的底层原理与内存泄漏问题?

  • 原理: 每个线程内部有一个 ThreadLocalMap,Key 是 ThreadLocal 实例的弱引用,Value 是具体数据(强引用)。
  • 泄漏原因: 若线程复用(线程池),Key 被 GC 回收变 null,但 Value 的强引用还在,导致内存泄漏。解决: 用完必须 remove()。

18. Java IO 模型有哪些?

  • BIO(同步阻塞): 一个连接一个线程。
  • NIO(同步非阻塞): 核心是 Channel、Buffer、Selector,单线程通过多路复用器(Epoll)管理多个连接,适合高并发。
  • AIO(异步非阻塞): 操作系统完成后回调。

19. 序列化与反序列化?transient 关键字的作用?

  • 实现 Serializable 接口。transient 修饰的变量不会被序列化(如密码字段),反序列化后值为默认值(null 或 0)。

20. 动态代理的两种实现方式?

  • JDK 动态代理: 基于接口,利用 InvocationHandler 和反射生成代理类。
  • CGLIB: 基于继承,底层用 ASM 字节码技术生成子类,不能代理 final 类和方法。

🎁 完整版 / PDF版下载

由于《2026春招:Java后端高频面试题Top 100》完整版包含详细的解析和代码示例,篇幅过长(共计2万字/50页),为了方便大家复习和打印,我已将其整理成文档上传至网盘,需要的同学可以免费下载:

(注:内容纯免费分享,祝大家春招顺利,拿到心仪Offer!)