Java面试必备知识点:基础概念与进阶挑战
需积分: 33 35 浏览量
更新于2024-09-07
收藏 441KB PDF 举报
"这篇文档是关于Java面试题的综合汇总,涵盖了基础概念、集合框架、并发编程、IO/NIO、反射、设计模式等多个方面。它旨在帮助Java开发者准备面试,了解常见问题及其答案,提升技术素养。"
1. **Java基本数据类型**:Java有8种基本数据类型,包括整型(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类在Java中被声明为final,因此不能被继承。这是为了保护其内部实现,防止被篡改,同时也提高了字符串操作的安全性和效率。
3. **String、StringBuffer、StringBuilder的区别**:String是不可变的,每次修改都会生成新的对象;而StringBuffer和StringBuilder是可变的,它们提供了append方法用于拼接字符串,其中StringBuilder是非线程安全的,StringBuffer是线程安全的,因此在多线程环境下推荐使用StringBuffer。
4. **ArrayList和LinkedList的区别**:ArrayList基于动态数组实现,查找速度快,插入删除慢;LinkedList基于双向链表,查找慢,插入删除快。根据具体应用场景选择使用。
5. **类的实例化顺序**:在创建一个对象时,执行顺序为:父类静态初始化器(静态字段初始化)-> 子类静态初始化器-> 父类构造函数-> 父类字段初始化-> 子类构造函数-> 子类字段初始化。
6. **Map类与线程安全**:HashMap不是线程安全的,适合单线程环境。在并发环境下,可以使用ConcurrentHashMap,它是JDK1.5引入的并发容器,通过分段锁实现高效并发。HashMap的默认容量是16,负载因子是0.75,当达到阈值时会进行扩容。
7. **Java 8的ConcurrentHashMap**:Java 8放弃了旧版的分段锁,改为使用CAS操作和ForkJoinPool的线程局部变量来提高并发性能。这是因为分段锁在高并发场景下可能会出现热点段的问题,而新的实现更适应多核CPU环境。
8. **有序Map实现**:TreeMap是有序的Map实现,它按照Key的自然排序或自定义比较器进行排序。
9. **抽象类与接口**:抽象类可以包含字段和方法实现,类只能继承一个抽象类;接口只包含方法声明,类可以实现多个接口。接口提供了多继承的能力,使得设计更灵活。
10. **继承与聚合**:继承是"Is-A"关系,表示一种类型是另一种类型的特殊情况;聚合是"Has-A"关系,表示一个对象包含另一个对象。
11. **IO模型**:Java中有阻塞I/O(BIO)、非阻塞I/O(NIO)和异步I/O(AIO)。NIO允许单线程处理多个通道,降低了系统资源的消耗,而AIO则是真正意义上的异步I/O,无需等待I/O操作完成即可继续执行其他任务。
12. **反射原理**:反射允许程序在运行时检查类的信息,创建类的实例,调用方法等。创建类实例的三种方式是:`Class.newInstance()`、`Constructor.newInstance()`和`Constructor.getParameterTypes()`。
13. **Class.forName()和ClassLoader**:`Class.forName()`由类加载器加载指定类并返回其Class对象,而`ClassLoader`是加载类的机制,两者关系密切,`Class.forName()`实际上是委托给了默认的ClassLoader。
14. **动态代理实现**:Java提供了两种动态代理方式:JDK动态代理(基于接口)和CGLib(基于子类)。JDK动态代理需要目标类实现接口,CGLib通过字节码技术生成目标类的子类,适用于没有接口的情况。
15. **CGlib与JDK动态代理的区别**:JDK动态代理只能针对接口,而CGLib可以针对任何类,但CGLib生成代理类的过程比JDK动态代理慢。
16. **CGlib对接口实现代理**:CGLib通过创建目标类的子类来实现代理,即使接口没有实现类,也可以通过创建一个匿名内部类的方式实现接口。
17. **final关键字**:final用于声明常量、方法和类,表示不可改变、不可重写或不可继承。
18. **单例模式实现**:常见的单例模式实现有饿汉式(静态常量)、懒汉式(线程不安全)、双重检查锁定(DCL)、静态内部类和枚举。
19. **自动完成hashcode和equals**:可以使用`ObjectUtils.equals()`和`HashCodeBuilder`,`EqualsBuilder`来自Apache Commons Lang库。这样做简化了代码,但也可能引入额外的依赖。
20. **访问修饰符的作用**:public、private、protected、default分别控制类、字段和方法的可见性,用于封装和模块化设计,平衡信息隐藏和协作。
21. **深拷贝与浅拷贝**:深拷贝创建了一个完全独立的新对象,包括所有属性及嵌套的对象;浅拷贝仅复制对象本身,不复制引用的对象。
22. **数组和链表的时间复杂度**:数组的查找时间复杂度为O(1),插入和删除需要移动元素,时间复杂度为O(n);链表查找时间复杂度为O(n),插入和删除只需改变指针,时间复杂度为O(1)。
23. **Error和Exception**:Error表示系统级错误,无法通过程序处理;Exception是应用程序可以捕获并处理的异常,分为CheckedException(编译时需要处理)和RuntimeException(运行时异常,可选处理)。
24. **运行时异常举例**:ArithmeticException(算术异常)、NullPointerException(空指针异常)、ArrayIndexOutOfBoundsException(数组越界异常)、IllegalArgumentException(非法参数异常)、ClassNotFoundException(找不到类异常)等。
25. **自定义String类**:由于String是final的,不能创建子类。即使尝试创建,也会在编译阶段报错。
26. **hashCode方法**:`hashCode()`是Object类中的方法,返回对象的哈希码,用于在哈希表(如HashMap)中快速定位对象。重写`hashCode()`时需遵守合同,确保相同对象返回相同哈希码,不同对象返回不同的概率尽可能大。
2022-08-14 上传
2021-01-04 上传
2021-10-19 上传
2022-09-21 上传
2018-06-11 上传
点击了解资源详情
点击了解资源详情
Lidisam
- 粉丝: 421
- 资源: 22
最新资源
- 开源linux时代第四期杂志
- 微机原理与接口技术复习题
- VB与MATLAB混合编程
- matcom 函数(matlab与vc的混编)
- ORACLE 数据库管理员日常操作指南
- GIS坐标系统描述。。。。
- MyEclipse6.0中文完整教程
- 汇编语言指令合集(txt)
- 高质量c++编程,高质量c++编程
- Intel80c51以及51系列单片机
- 8051初学实验教程系列一
- hibernate与webservice结合使用
- MyEclipse_Install_Uninstall_Quickstart
- MyEclipse_HTML_JSP_Web_Designer_Quickstart
- ASP.NET-XML深入编程技术
- MyEclipse_HTML_Editing_Quickstart