"JAVA常见面试题的精选列表"
在Java面试中,掌握这些核心知识点是至关重要的。以下是对部分题目详细解答:
1. **双亲委派机制**:当加载类时,Java虚拟机(JVM)会使用类加载器遵循从父类到子类的顺序来查找并加载类,以确保基础类的唯一性。
2. **JDK、JRE、JVM**:JDK是Java Development Kit,包含了开发和运行Java应用程序所需的全部工具;JRE是Java Runtime Environment,用于执行Java程序;JVM是Java虚拟机,负责解释和执行字节码。
3. **==和equals**:`==`比较的是两个对象的内存地址,而`equals`方法(默认行为也是比较地址,但在对象类中通常重写为比较内容)比较的是两个对象的内容是否相等。
4. **final的作用**:final关键字用于声明不可变的变量、类或方法。它确保变量一旦赋值就不能改变,类不能被继承,而方法不能被覆盖。
5. **局部内部类和匿名内部类访问final变量**:这是为了保证在非静态内部类中能够访问外部类的局部变量,因为这些变量在内部类的生命周期之外已经不存在了,所以必须是final的。
6. **String、StringBuffer、StringBuilder**:String是不可变对象,适用于不可修改的字符串;StringBuilder是可变对象,在单线程环境下构建字符串更高效;StringBuffer线程安全,适合多线程环境。
7. **接口和抽象类**:接口是完全抽象的,只包含方法签名,不包含实现;抽象类可以有部分实现,可以有构造函数和非抽象方法。接口主要用于多继承,抽象类用于代码复用。
8. **重载和重写**:重载(Overloading)发生在同一个类中,方法名相同但参数列表不同;重写(Overriding)发生在子类中,子类方法与父类方法同名且参数列表相同,但子类可以提供不同的实现。
9. **List和Set的区别**:List是有序的集合,元素可以重复,允许索引访问;Set不允许元素重复,无序。
10. **hashCode和equals**:当比较对象是否相等时,如果两个对象的equals方法返回true,那么它们的hashCode也应该相等。在实现自定义类时,如果重写了equals,通常也要重写hashCode以保持一致性。
11. **重写equals和hashCode**:对于存储在哈希结构(如HashSet或HashMap)中的对象,重写这两个方法是为了确保正确地比较和存储对象。
12. **ArrayList和LinkedList**:ArrayList基于动态数组,随机访问快,插入删除慢;LinkedList基于链表,插入删除快,随机访问慢。
13. **HashMap和HashTable**:HashMap是非线程安全的,效率高;HashTable是线程安全的,效率相对较低,不推荐在Java 5及以上版本使用。
14. **线程安全的HashMap**:使用Collections.synchronizedMap()包装HashMap或使用ConcurrentHashMap。
15. **ConcurrentHashMap原理**:JDK7使用分段锁,JDK8使用CAS和Synchronized实现,提高了并发性能。
16. **HashMap扩容优化**:当负载因子达到一定程度时,HashMap会进行扩容,旧的链表会被拆分成两半,降低冲突概率。
17. **实现IOC容器**:通过依赖注入,容器管理对象的生命周期和依赖关系,如Spring框架。
18. **字节码**:字节码是Java虚拟机执行的中间语言,提高了平台无关性和安全性。
19. **Java类加载器**:主要分为Bootstrap ClassLoader、Extension ClassLoader和AppClassLo