Java面试必备知识点:基础概念与进阶挑战
需积分: 33 118 浏览量
更新于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-10-19 上传
2022-09-21 上传
2018-06-11 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
Lidisam
- 粉丝: 421
- 资源: 22
最新资源
- 黑板风格计算机毕业答辩PPT模板下载
- CodeSandbox实现ListView快速创建指南
- Node.js脚本实现WXR文件到Postgres数据库帖子导入
- 清新简约创意三角毕业论文答辩PPT模板
- DISCORD-JS-CRUD:提升 Discord 机器人开发体验
- Node.js v4.3.2版本Linux ARM64平台运行时环境发布
- SQLight:C++11编写的轻量级MySQL客户端
- 计算机专业毕业论文答辩PPT模板
- Wireshark网络抓包工具的使用与数据包解析
- Wild Match Map: JavaScript中实现通配符映射与事件绑定
- 毕业答辩利器:蝶恋花毕业设计PPT模板
- Node.js深度解析:高性能Web服务器与实时应用构建
- 掌握深度图技术:游戏开发中的绚丽应用案例
- Dart语言的HTTP扩展包功能详解
- MoonMaker: 投资组合加固神器,助力$GME投资者登月
- 计算机毕业设计答辩PPT模板下载