"java面试题2020.pdf"
这是一份针对Java开发人员的面试题集,涵盖了广泛的Java基础知识和进阶概念。这份文档由千锋郑州Java教学部编写,旨在帮助求职者全面准备Java面试,提升就业竞争力。
1. `final`关键字:final用于声明变量、方法或类,表示其不可改变或不可被继承。
2. `abstract class`与`interface`:抽象类可以有构造器和非抽象方法,而接口只能包含抽象方法和默认方法,且不能实例化。
3. Java集合类:`List`(有序可重复)、`Set`(无序不重复)、`Queue`(先进先出)、`Map`(键值对)和`Stack`(后进先出),各有特定用途。
4. `ArrayList`, `Vector`, `LinkedList`比较:ArrayList基于动态数组,适合随机访问;Vector线程安全但效率较低;LinkedList适合频繁插入删除。
5. 内存泄漏和内存溢出:内存泄漏是程序未释放不再使用的内存,内存溢出是系统可用内存耗尽导致程序崩溃。
6. `Class.forName()`与`ClassLoader.loadClass()`:前者会初始化类,后者仅加载但不初始化。
7. `Int`与`Integer`:Int是基本类型,直接存储值;Integer是包装类,支持对象操作。
8. `String`, `StringBuilder`, `StringBuffer`:String不可变,StringBuilder和StringBuffer可变,线程安全性不同(StringBuilder非线程安全,StringBuffer线程安全)。
9. `Hashtable`与`HashMap`:两者都是键值对容器,但Hashtable不支持null键值,线程安全;HashMap允许null键值,非线程安全。
10. 编译时异常:如`NullPointerException`, `ArithmeticException`等,需要显式捕获或抛出。
11. 方法重载:参数列表不同(数量、类型或顺序)的同名方法。
12. 方法重写:子类覆盖父类的方法,保持方法名、返回类型和参数列表相同。
13. `throw`与`throws`:throw用于主动抛出异常,throws用于声明方法可能抛出的异常。
14. 抽象类与接口:抽象类有构造行为,接口仅定义行为,类可实现多个接口但只能继承一个抽象类。
15. Java基础类型及字节大小:如int占4字节,byte占1字节。
16. 访问修饰符:`public`(全局访问)、`protected`(包内及子类访问)、默认(包内访问)、`private`(仅本类访问)。
17. `String`与`StringBuffer`区别:String不可变,StringBuffer可变,适用于大量字符串拼接。
18. `HashSet`底层实现:基于HashMap,存储元素时使用对象的哈希码。
19. 抽象类意义:作为基类,提供统一接口,定义通用方法,强迫子类实现特定行为。
20. 重写`equals`与`hashCode`:确保当两个对象相等时,它们的哈希码也相等,避免HashSet/TrieSet中的不一致。
21. `HashSet`与`TreeSet`区别:HashSet基于哈希表,插入和查询速度快;TreeSet基于红黑树,保证元素排序。
22. 强引用、软引用、弱引用和虚引用:不同级别的引用强度,影响垃圾回收机制。
23. 数组内存分配:在堆上分配,数组长度固定,每个元素存储对应类型的数据。
24. 创建不可变对象:通常通过final修饰字段,只提供getter,不提供setter,构造器私有,以及不可变类的其他成员方法。
25. `++`操作符线程安全性:取决于操作的对象是否线程安全,例如,对基本类型是线程安全的,但对共享对象的属性操作可能不是。
26. new对象与clone对象:new创建新实例,clone复制现有对象状态。
27. `==`与`equals()`:`==`比较对象引用,`equals()`比较对象内容(默认比较引用,可重写)。
28. final、finalize与finally:final修饰变量或方法,不可修改;finalize是对象被垃圾回收前调用的方法;finally保证代码块在任何情况下都会执行。
29. Java的多态:子类对象可以赋值给父类引用,调用父类可见的方法,实现运行时绑定。
30. 静态类型:类型在编译时确定,与对象无关,如静态变量、静态方法。
31. 创建对象方式:new关键字、反序列化、clone、工厂方法、构造器等。
32. `Object`类的公共方法:如`toString()`, `equals()`, `hashCode()`, `clone()`, `getClass()`, `notify()`, `notifyAll()`, `wait()`等。
33. `&`与`&&`:`&`是逻辑与运算符,始终计算两边表达式;`&&`是短路与,如果左侧为假,不会计算右侧。
34. .java源文件中类限制:主类(有`public static void main(String[] args)`的类)只能有一个,其余类不限数量。
35. 退出多层嵌套循环:通常使用`break`或`return`,配合标签来指定跳出特定层次。
36. 内部类:提供封装,创建匿名对象,访问外部类的私有成员,实现闭包等功能。
这份题库全面覆盖了Java编程的基础和核心概念,对于准备面试和深入理解Java语言非常有价值。