java 面试题目10道

55 阅读4分钟

下面我将为你提供 10道经典Java面试题,并附上 参考答案和考察点,这些题目在面试中高频出现,涵盖了Java基础、集合、多线程、JVM等核心知识点。


Java面试题目10道

1. 请解释Java中的多态性及其实现方式

参考答案
多态性是指同一个方法名在不同对象上有不同的实现方式。

  • 实现方式
  1. 方法重写(Override) :子类重写父类的方法。
  2. 方法重载(Overload) :同一个类中方法名相同,参数列表不同。
  • 优点:提高代码复用性和扩展性。

考察点:OOP基础,多态的原理和应用。


2. HashMap和Hashtable的区别

参考答案

特性HashMapHashtable
线程安全不安全安全(synchronized)
效率
允许null键值允许一个null键不允许null键和值
初始容量1611
扩容机制2倍2倍+1

考察点:集合框架,并发编程。


3. 什么是Java内存模型(JMM)?

参考答案
JMM定义了线程和主内存之间的抽象关系,规定所有变量存储在主内存,线程操作需要将变量加载到工作内存。

  • 核心特性
  1. 原子性:操作不可分割。
  2. 可见性:一个线程修改的状态对其他线程可见。
  3. 有序性:避免指令重排序导致的问题。
  • 实现:通过​​volatile​​、​​synchronized​​和​​final​​关键字。

考察点:JVM内存模型,并发编程基础。


4. 解释Java中的垃圾回收(GC)机制

参考答案
GC是自动管理内存的机制,回收不再使用的对象。

  • 回收算法
  1. 标记-清除:标记无用对象,然后清除。
  2. 复制算法:将内存分为两块,复制存活对象到另一块。
  3. 标记-整理:标记后将存活对象移动到一端。
  • 垃圾收集器:Serial、Parallel、CMS、G1等。

考察点:JVM内存管理,GC原理。


5. 线程池的参数有哪些?

参考答案
​ThreadPoolExecutor​​的核心参数:

  1. 核心线程数:常驻线程数量。
  2. 最大线程数:线程池允许的最大线程数。
  3. 空闲时间:非核心线程空闲后的存活时间。
  4. 时间单位:空闲时间的单位。
  5. 工作队列:存放任务的队列(如​​ArrayBlockingQueue​​)。
  6. 拒绝策略:任务过多时的处理方式(如​​AbortPolicy​​)。

考察点:并发编程,线程池原理。


6. 什么是死锁?如何避免死锁?

参考答案
死锁是多个线程互相等待对方释放资源导致的无限等待。

  • 必要条件
  1. 互斥条件
  2. 请求与保持条件
  3. 不可剥夺条件
  4. 循环等待条件
  • 避免方法
  1. 按顺序申请资源
  2. 超时等待
  3. 避免嵌套锁

考察点:并发编程,死锁排查与预防。


7. 接口和抽象类的区别

参考答案

特性接口(Interface)抽象类(Abstract Class)
方法只能是抽象方法(Java 8后可有默认方法)可以有抽象和非抽象方法
变量只能是常量可以有各种类型变量
继承多继承单继承
关键字​implements​​extends​

考察点:OOP基础,接口和抽象类的设计思想。


8. 什么是反射机制?

参考答案
反射允许程序在运行时访问和操作类的成员(属性、方法、构造函数)。

  • 应用场景
  1. 框架开发(如Spring)
  2. 动态代理
  3. 序列化和反序列化
  • 优缺点
  • 优点:灵活性高。
  • 缺点:性能开销大,破坏封装性。

考察点:Java反射机制,动态编程。


9. String、StringBuilder和StringBuffer的区别

参考答案

特性StringStringBuilderStringBuffer
可变性不可变可变可变
线程安全安全不安全安全(synchronized)
效率
适用场景少量字符串操作单线程大量操作多线程大量操作

考察点:字符串处理,性能优化。


10. 什么是Spring Bean的生命周期?

参考答案
Spring Bean的创建到销毁的过程:

  1. 实例化:创建Bean对象。
  2. 属性赋值:注入依赖。
  3. 初始化
  • 调用​​@PostConstruct​​标注的方法。
  • 执行​​InitializingBean#afterPropertiesSet()​​。
  1. 销毁
  • 调用​​@PreDestroy​​标注的方法。
  • 执行​​DisposableBean#destroy()​​。

考察点:Spring框架,Bean管理。


总结

这些题目覆盖了Java面试的核心知识点,面试前建议结合实际项目经验理解和记忆。祝你面试顺利!