“八股文”原本是中国古代科举考试的一种固定文体结构,在现代编程语言中,尤其是在
Java 编程面试中,“八股文”被用来指那些固定的常见问题及其标准化的答案。下面是一些
常见的 Java 面试问题及其标准回答,涉及面较广,包括基本语法、面向对象、集合、线程、
JVM 等。
### 1. Java 基本语法和特性
#### 1.1 什么是 Java?
Java 是一种广泛使用的编程语言和计算平台,最初由 Sun Microsystems 于 1995 年发布,
现由 Oracle 维护。Java 是一种面向对象的语言,具有跨平台的特点(一次编写,到处运
行)。
#### 1.2 JDK、JRE 和 JVM 的区别是什么?
- **JDK(Java Development Kit)**:提供了 Java 的开发环境,包括编译器(javac)、调试工
具、Java 运行环境等。
- **JRE(Java Runtime Environment)**:包含了 JVM 和 Java 的核心类库,用于运行 Java
应用程序。
- **JVM(Java Virtual Machine)**:负责将 Java 字节码转换为机器码并执行,是 Java 程
序跨平台特性的核心。
### 2. 面向对象编程(OOP)
#### 2.1 什么是面向对象编程?
面向对象编程是一种编程范式,基于“对象”和“类”的概念,通过封装、继承、多态和抽
象等特性实现程序的模块化和重用性。
#### 2.2 OOP 的四大特性是什么?
- **封装**:通过访问修饰符(如 private、public、protected)隐藏对象的内部实现,只暴
露必要的接口。
- **继承**:通过 `extends` 关键字实现类的继承,子类可以复用父类的属性和方法。
- **多态**:同一个方法在不同对象上表现出不同的行为,可以通过方法重载和重写实现。
- **抽象**:使用抽象类(`abstract` 类)和接口(`interface`)来定义对象的抽象行为。
### 3. 集合框架
#### 3.1 List、Set 和 Map 的区别是什么?
- **List**:有序集合,允许重复元素。常见实现类有 `ArrayList`、`LinkedList`。
- **Set**:无序集合,不允许重复元素。常见实现类有 `HashSet`、`TreeSet`。
- **Map**:键值对集合,键不能重复但值可以。常见实现类有 `HashMap`、`TreeMap`。
#### 3.2 ArrayList 和 LinkedList 的区别?
- **ArrayList**:底层是数组,随机访问性能好,插入和删除元素时性能较差(特别是中间
位置)。
- **LinkedList**:底层是双向链表,插入和删除元素性能好(特别是中间位置),但随机访