下面我将为你提供 10道经典Java面试题,并附上 参考答案和考察点,这些题目在面试中高频出现,涵盖了Java基础、集合、多线程、JVM等核心知识点。
Java面试题目10道
1. 请解释Java中的多态性及其实现方式
参考答案:
多态性是指同一个方法名在不同对象上有不同的实现方式。
- 实现方式:
- 方法重写(Override) :子类重写父类的方法。
- 方法重载(Overload) :同一个类中方法名相同,参数列表不同。
- 优点:提高代码复用性和扩展性。
考察点:OOP基础,多态的原理和应用。
2. HashMap和Hashtable的区别
参考答案:
| 特性 | HashMap | Hashtable |
|---|---|---|
| 线程安全 | 不安全 | 安全(synchronized) |
| 效率 | 高 | 低 |
| 允许null键值 | 允许一个null键 | 不允许null键和值 |
| 初始容量 | 16 | 11 |
| 扩容机制 | 2倍 | 2倍+1 |
考察点:集合框架,并发编程。
3. 什么是Java内存模型(JMM)?
参考答案:
JMM定义了线程和主内存之间的抽象关系,规定所有变量存储在主内存,线程操作需要将变量加载到工作内存。
- 核心特性:
- 原子性:操作不可分割。
- 可见性:一个线程修改的状态对其他线程可见。
- 有序性:避免指令重排序导致的问题。
- 实现:通过
volatile、synchronized和final关键字。
考察点:JVM内存模型,并发编程基础。
4. 解释Java中的垃圾回收(GC)机制
参考答案:
GC是自动管理内存的机制,回收不再使用的对象。
- 回收算法:
- 标记-清除:标记无用对象,然后清除。
- 复制算法:将内存分为两块,复制存活对象到另一块。
- 标记-整理:标记后将存活对象移动到一端。
- 垃圾收集器:Serial、Parallel、CMS、G1等。
考察点:JVM内存管理,GC原理。
5. 线程池的参数有哪些?
参考答案:
ThreadPoolExecutor的核心参数:
- 核心线程数:常驻线程数量。
- 最大线程数:线程池允许的最大线程数。
- 空闲时间:非核心线程空闲后的存活时间。
- 时间单位:空闲时间的单位。
- 工作队列:存放任务的队列(如
ArrayBlockingQueue)。 - 拒绝策略:任务过多时的处理方式(如
AbortPolicy)。
考察点:并发编程,线程池原理。
6. 什么是死锁?如何避免死锁?
参考答案:
死锁是多个线程互相等待对方释放资源导致的无限等待。
- 必要条件:
- 互斥条件
- 请求与保持条件
- 不可剥夺条件
- 循环等待条件
- 避免方法:
- 按顺序申请资源
- 超时等待
- 避免嵌套锁
考察点:并发编程,死锁排查与预防。
7. 接口和抽象类的区别
参考答案:
| 特性 | 接口(Interface) | 抽象类(Abstract Class) |
|---|---|---|
| 方法 | 只能是抽象方法(Java 8后可有默认方法) | 可以有抽象和非抽象方法 |
| 变量 | 只能是常量 | 可以有各种类型变量 |
| 继承 | 多继承 | 单继承 |
| 关键字 | implements | extends |
考察点:OOP基础,接口和抽象类的设计思想。
8. 什么是反射机制?
参考答案:
反射允许程序在运行时访问和操作类的成员(属性、方法、构造函数)。
- 应用场景:
- 框架开发(如Spring)
- 动态代理
- 序列化和反序列化
- 优缺点:
- 优点:灵活性高。
- 缺点:性能开销大,破坏封装性。
考察点:Java反射机制,动态编程。
9. String、StringBuilder和StringBuffer的区别
参考答案:
| 特性 | String | StringBuilder | StringBuffer |
|---|---|---|---|
| 可变性 | 不可变 | 可变 | 可变 |
| 线程安全 | 安全 | 不安全 | 安全(synchronized) |
| 效率 | 低 | 高 | 中 |
| 适用场景 | 少量字符串操作 | 单线程大量操作 | 多线程大量操作 |
考察点:字符串处理,性能优化。
10. 什么是Spring Bean的生命周期?
参考答案:
Spring Bean的创建到销毁的过程:
- 实例化:创建Bean对象。
- 属性赋值:注入依赖。
- 初始化:
- 调用
@PostConstruct标注的方法。 - 执行
InitializingBean#afterPropertiesSet()。
- 销毁:
- 调用
@PreDestroy标注的方法。 - 执行
DisposableBean#destroy()。
考察点:Spring框架,Bean管理。
总结
这些题目覆盖了Java面试的核心知识点,面试前建议结合实际项目经验理解和记忆。祝你面试顺利!