JAVA面试必备知识点:基础到高级

需积分: 5 2 下载量 197 浏览量 更新于2024-08-29 收藏 736KB PDF 举报
"JAVA面试题总览" 在Java面试中,面试官通常会考察候选人的基础知识、编程技巧以及对Java特性的深入理解。以下是一些重要的Java面试知识点: 1. **JAVA中的基本数据类型**:Java有八种基本数据类型,包括整型(byte, short, int, long)、浮点型(float, double)、字符型(char)和布尔型(boolean)。它们占用的字节数分别为:byte(1字节),short(2字节),int(4字节),long(8字节),float(4字节),double(8字节),char(2字节)和boolean(1字节或32位,取决于实现)。 2. **String类的特性**:String类是final的,不能被继承,以保证字符串的不可变性。 3. **StringBuffer和StringBuilder的区别**:两者都用于字符串的拼接,但在多线程环境中,StringBuffer是线程安全的,而StringBuilder则更高效,因为它不进行同步处理。 4. **ArrayList和LinkedList的区别**:ArrayList基于动态数组,插入和删除操作在中间位置效率较低,但随机访问速度快;LinkedList基于双向链表,插入和删除操作快,但随机访问慢。 5. **类的实例化顺序**:构造顺序为:静态初始化块 -> 实例初始化块 -> 构造函数 -> 子类静态初始化块 -> 子类构造函数。 6. **Map类及其线程安全性**:常见的Map有HashMap、HashTable、ConcurrentHashMap等。HashMap非线程安全,适合单线程环境;HashTable是线程安全的,但效率较低;ConcurrentHashMap在Java 8之前采用分段锁,之后改为使用CAS和synchronized实现,效率更高。 7. **Java 8的ConcurrentHashMap放弃分段锁**:原因是分段锁在高并发场景下可能导致过多的锁粒度,降低了并发性能。Java 8通过 CAS 和细粒度锁来提高并发性能。 8. **有序Map实现**:TreeMap是有序的Map实现,它基于红黑树,保证了元素的排序性。 9. **抽象类与接口的区别**:抽象类可以有方法实现,接口只能声明方法。Java中类只能单继承,但可以实现多个接口。 10. **继承与聚合**:继承是一种“is-a”关系,表示类的层次结构;聚合是一种“has-a”关系,表示对象之间的组合。 11. **IO模型**:包括阻塞IO(BIO)、非阻塞IO(NIO)和异步IO(AIO)。NIO提供了选择器和通道的概念,可以在一个线程中处理多个连接。Reactor模型是NIO的一种设计模式,用于处理多个并发连接。 12. **反射的原理**:反射允许在运行时检查类、接口、字段和方法的信息,也可以在运行时创建和访问对象。 13. **Class.forName和ClassLoader的区别**:Class.forName是静态方法,根据字符串名称加载类;ClassLoader是动态加载类的机制,可以根据自定义逻辑加载类。 14. **动态代理的实现**:Java内置的InvocationHandler接口和Proxy类可实现动态代理,另外还有第三方库如CGLIB和ASM提供字节码层面的动态代理。 15. **动态代理与CGLib的区别**:Java动态代理基于接口实现,CGLib基于字节码生成类的子类,无需接口即可实现代理。 16. **CGlib实现接口代理**:CGlib可以为没有接口的类创建子类并动态插入代理逻辑。 17. **final关键字**:final用于声明常量、方法和类,确保其不可修改或重写。 18. **单例模式实现**:常见实现包括饿汉式(静态常量)、懒汉式(静态代码块)、双重检查锁定(DCL)和枚举。 19. **自动完成hashcode和equals**:使用`@Override`注解和IDE工具,可以自动生成满足equals和hashCode合同的方法。这样做可以保证对象比较的一致性。 20. **访问修饰符的作用**:public允许任何包内的类访问,private仅限于本类,protected允许本包和子类访问,default(无修饰符)仅限于本包访问。 21. **深拷贝与浅拷贝**:深拷贝创建完全独立的对象副本,包括所有引用的对象;浅拷贝只复制对象本身,引用的对象没有复制。 22. **数组与链表的时间复杂度**:数组的查找、插入和删除在已知索引时时间复杂度为O(1),但在中间插入或删除时需要移动元素,时间复杂度为O(n)。链表的插入和删除通常为O(1),但查找需要遍历,时间复杂度为O(n)。 23. **error和exception**:Error是系统级别的错误,如内存溢出,通常无法恢复;Exception是程序运行时的异常,可以捕获并处理。CheckedException是编译期需要处理的异常,如IOException;RuntimeException是运行时异常,如NullPointerException。 24. **运行时异常举例**:NullPointerException、ArrayIndexOutOfBoundsException、ArithmeticException、IllegalArgumentException、IllegalStateException等。 25. **自定义String类**:Java中String是final的,所以不能创建新的String类,否则无法加载。 26. **Object类的hashCode**:hashCode()方法返回对象的哈希值,用于哈希表(如HashMap)中的快速定位。两个相等的对象必须有相同的哈希值。重写equals()时,通常需要同时重写hashCode()以保持一致性。