引言
Java 作为全球最流行的编程语言之一,其面试题不仅考察候选人的编程能力,更关注对底层原理和架构设计的理解。本文将系统梳理 Java 面试中的高频考点,结合代码示例与原理分析,助您从容应对技术面试。
一、Java 基础语法与核心特性
1. String、StringBuilder 与 StringBuffer 的区别
- String:不可变对象,每次修改都会生成新对象,适合少量字符串操作。
 - StringBuilder:可变字符序列,线程不安全,性能高,适合单线程环境。
 - StringBuffer:可变字符序列,线程安全(通过
synchronized修饰方法),适合多线程环境。 
示例代码:
java
String str = "hello";
str += "world"; // 生成新对象"helloworld"StringBuilder sb = new StringBuilder();
sb.append("hello").append("world"); // 直接修改原对象
 
2. 异常处理机制
- 受检异常(Checked Exception):必须显式捕获或抛出(如
IOException)。 - 非受检异常(Unchecked Exception):无需显式处理(如
NullPointerException)。 - 最佳实践:用
finally释放资源,优先捕获具体异常而非Exception。 
二、面向对象与设计模式
3. 多态的实现方式
- 重载(Overloading):编译时多态,通过参数列表区分。
 - 重写(Overriding):运行时多态,基于动态绑定。
 
示例:
java
class Animal {public void sound() { System.out.println("Animal makes sound"); }
}class Dog extends Animal {@Overridepublic void sound() { System.out.println("Woof!"); }
}
 
4. 单例模式的线程安全实现
双重检查锁定(DCL):
java
public class Singleton {private static volatile Singleton instance; // volatile防止指令重排private Singleton() {}public static Singleton getInstance() {if (instance == null) {synchronized (Singleton.class) {if (instance == null) {instance = new Singleton();}}}return instance;}
}
 
三、多线程与并发编程
5. 线程的创建方式
- 继承
Thread类:代码简单,但扩展性差。 - 实现
Runnable接口:推荐方式,支持资源共享。 - 实现
Callable接口:可返回值并抛出异常。 
示例:
java
ExecutorService executor = Executors.newFixedThreadPool(1);
Future<String> future = executor.submit(() -> "Hello from Callable");
 
6. 锁机制对比
| 锁类型 | 实现方式 | 特性 | 
|---|---|---|
| 内置锁 | synchronized | 可重入、非公平 | 
| 显式锁 | ReentrantLock | 可重入、公平性可选 | 
| 读写锁 | ReentrantReadWriteLock | 读共享、写独占 | 
四、集合框架与数据结构
7. ArrayList 与 LinkedList 的选择
- ArrayList:基于数组,随机访问快,插入 / 删除慢。
 - LinkedList:基于双向链表,插入 / 删除快,随机访问慢。
 
应用场景:
- 频繁查询 → ArrayList
 - 频繁增删 → LinkedList
 
8. HashMap 的底层实现
- JDK 1.7:数组 + 链表
 - JDK 1.8:数组 + 链表 + 红黑树(链表长度≥8 时转换为红黑树)
 - 线程安全:使用
ConcurrentHashMap或Hashtable 
五、JVM 原理与性能优化
9. JVM 内存区域划分
- 堆(Heap):存储对象实例,GC 主要区域。
 - 方法区(Method Area):存储类信息、常量等。
 - 程序计数器(PC Register):记录当前线程执行的字节码指令地址。
 
10. GC 算法对比
- 标记 - 清除:简单但易产生碎片。
 - 复制算法:无碎片,适合新生代。
 - 标记 - 整理:减少碎片,适合老年代。
 
六、数据库与 SQL 优化
11. 事务的隔离级别
- 读未提交(Read Uncommitted):可能出现脏读。
 - 读已提交(Read Committed):避免脏读,可能出现不可重复读。
 - 可重复读(Repeatable Read):默认级别,避免脏读和不可重复读。
 - 串行化(Serializable):最高级别,完全隔离。
 
12. SQL 优化策略
- 索引优化:为高频查询字段添加索引。
 - 分页优化:使用
LIMIT offset, size时,通过覆盖索引减少回表。 - 批量操作:使用
INSERT INTO ... VALUES (...), (...), ...减少网络 IO。 
七、主流框架与中间件
13. Spring IOC 与 AOP
- IOC(控制反转):通过依赖注入(DI)解耦组件。
 - AOP(面向切面编程):用于日志、事务等横切关注点。
 
示例:
java
@Service
public class UserService {@Autowiredprivate UserRepository repository; // 自动注入依赖
}
 
14. MyBatis 的缓存机制
- 一级缓存:SqlSession 级别的本地缓存。
 - 二级缓存:全局缓存,基于
Cache接口实现。 
八、分布式系统设计
15. CAP 定理与 BASE 理论
- CAP:一致性(Consistency)、可用性(Availability)、分区容错性(Partition Tolerance)。
 - BASE:基本可用(Basically Available)、软状态(Soft State)、最终一致性(Eventually Consistent)。
 
16. 服务治理的核心问题
- 服务发现:Eureka、Consul。
 - 负载均衡:Ribbon、Nginx。
 - 熔断降级:Hystrix、Sentinel。
 
结语
Java 面试的核心在于 “知其然,更知其所以然”,建议:
- 结合项目经验理解知识点
 - 深入阅读源码(如集合框架、并发包)
 - 多做模拟面试(推荐 LeetCode、剑指 Offer)
 
通过系统梳理与针对性练习,您将在面试中展现扎实的技术功底与架构思维。