Java 基础高频面试题
2026/5/28 7:47:51 网站建设 项目流程

整理了Java 面试必问的基础题,覆盖基础语法、面向对象、集合、异常、多线程、JVM 等核心考点,答案简洁好记,适合面试突击背诵。

一、Java 基础语法

1. JDK、JRE、JVM 的区别?

  • JVM:Java 虚拟机,负责将字节码翻译成机器码,实现跨平台。
  • JRE:Java 运行时环境,包含 JVM + 核心类库,只能运行 Java 程序
  • JDK:Java 开发工具包,包含 JRE + 编译器 (javac) + 调试工具,既能运行又能开发 Java 程序

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

  • ==:基本类型比较;引用类型比较内存地址
  • equals()
    • 未重写:和 == 一样,比较地址;
    • 重写(如 String、Integer):比较内容

3. String、StringBuilder、StringBuffer 区别?

  • String:不可变字符序列,线程安全,效率低。
  • StringBuilder:可变字符序列,非线程安全,效率最高。
  • StringBuffer:可变字符序列,线程安全(加了 synchronized),效率中等。

4. 重载和重写的区别?

  • 重载(Overload):同一个类中,方法名相同,参数列表不同(个数、类型、顺序),与返回值无关。
  • 重写(Override):子类重写父类方法,方法名、参数列表、返回值都相同,子类权限不能更小,不能抛出更大异常。

5. final 关键字的作用?

  • 修饰:类不能被继承。
  • 修饰方法:方法不能被重写。
  • 修饰变量:变量变为常量,只能赋值一次。

二、面向对象(OOP)

6. 面向对象的四大特性?

封装、继承、多态、抽象

  • 封装:隐藏实现细节,对外提供接口。
  • 继承:子类复用父类属性和方法。
  • 多态:父类引用指向子类对象,编译看左边,运行看右边。
  • 抽象:抽离公共特征,用抽象类 / 接口实现。

7. 接口和抽象类的区别?

表格

特性接口抽象类
继承多实现单继承
方法默认 public abstract(JDK8 + 支持默认方法)可以有抽象 / 普通方法
变量只能是 public static final 常量可以有普通变量
构造器

8. 多态的实现条件?

  1. 继承 / 实现关系
  2. 方法重写
  3. 父类引用指向子类对象

三、集合框架(高频)

9. List、Set、Map 的区别?

  • List:有序、可重复、可通过索引访问。
  • Set:无序、不可重复。
  • Map:键值对存储,Key 不可重复,Value 可重复。

10. ArrayList 和 LinkedList 区别?

  • ArrayList:数组结构,查询快,增删慢,线程不安全。
  • LinkedList:双向链表,查询慢,增删快,线程不安全。

11. HashMap 和 Hashtable 区别?

  • HashMap:线程不安全,允许 null 键 / 值,效率高。
  • Hashtable:线程安全(synchronized),不允许 null,效率低。

12. HashMap 底层原理?

JDK7:数组 + 链表 JDK8+:数组 + 链表 + 红黑树(链表长度≥8 转红黑树,≤6 转回链表) 核心:通过 hash 算法计算索引,解决哈希冲突用链表 / 红黑树。

13. ConcurrentHashMap 线程安全原理?

  • JDK7:分段锁(Segment),减小锁粒度。
  • JDK8+:CAS + synchronized,锁头节点,效率更高。

四、异常处理

14. Checked 和 Unchecked 异常区别?

  • 受检异常(Checked):编译期必须处理(try-catch/throws),如 IOException、SQLException。
  • 非受检异常(Unchecked):运行时异常,编译不检查,如 NullPointerException、ArrayIndexOutOfBoundsException。

15. throw 和 throws 区别?

  • throw:手动抛出一个异常对象,在方法体内。
  • throws:方法声明可能抛出异常,在方法签名上。

16. final、finally、finalize 区别?

  • final:修饰类、方法、变量,不可变。
  • finally:配合 try-catch,一定执行(除非 JVM 退出),用于释放资源。
  • finalize:Object 方法,垃圾回收前调用,已废弃。

五、多线程与并发

17. 线程和进程的区别?

  • 进程:操作系统资源分配的最小单位,独立内存空间。
  • 线程:CPU 调度的最小单位,共享进程内存。

18. 创建线程的 4 种方式?

  1. 继承 Thread 类
  2. 实现 Runnable 接口
  3. 实现 Callable 接口(带返回值)
  4. 线程池 Executors/ThreadPoolExecutor

19. 线程的生命周期?

新建 → 就绪 → 运行 → 阻塞 → 死亡

20. sleep () 和 wait () 区别?

  • sleep ():Thread 方法,不释放锁,时间到自动唤醒。
  • wait ():Object 方法,释放锁,需 notify ()/notifyAll () 唤醒。

21. synchronized 和 Lock 区别?

  • synchronized:JVM 实现,自动加锁解锁,不可中断,非公平锁。
  • Lock:API 层面,手动加锁解锁,可中断,支持公平 / 非公平锁。

22. 死锁的四个条件?

  1. 互斥条件
  2. 请求与保持
  3. 不可剥夺
  4. 循环等待破坏任意一个即可避免死锁

六、JVM 与内存

23. JVM 内存模型(运行时数据区)?

  1. 程序计数器
  2. 虚拟机栈
  3. 本地方法栈
  4. (存储对象,GC 主要区域)
  5. 方法区(存储类信息、常量、静态变量)

24. 堆内存分代?

  • 新生代:Eden + 两个 Survivor
  • 老年代
  • 元空间(JDK8+ 替代永久代)

25. GC 垃圾回收机制?

判断对象死亡:引用计数法可达性分析算法垃圾回收算法:标记 - 清除、标记 - 复制、标记 - 整理


七、IO 流

26. BIO、NIO、AIO 区别?

  • BIO:同步阻塞,一个连接一个线程。
  • NIO:同步非阻塞,多路复用。
  • AIO:异步非阻塞,回调通知。

27. 字节流和字符流?

  • 字节流:InputStream/OutputStream,处理所有文件(图片、视频)。
  • 字符流:Reader/Writer,处理纯文本文件。

面试突击建议

  1. 先背高频题:== 和 equals、HashMap、多线程、异常、面向对象。
  2. 结合场景说:比如问集合,直接说业务中用 ArrayList 做查询、HashMap 做缓存。
  3. 手写代码准备:单例模式、排序、线程创建、HashMap 原理。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询