Java面试涵盖了广泛的Java基础知识,以下是对这些知识点的详细解析:
1. **访问修饰符的区别**:
- `public`: 公共的,可以在任何地方访问。
- `protected`: 保护的,可以在同一包内及不同包的子类中访问。
- `friendly`(也称为包私有): 只能在同一包内访问。
- `private`: 私有的,只能在当前类内部访问。如果不写,默认为friendly。
2. **ArrayList与Vector的区别**:
- **同步性**: Vector是线程安全的,ArrayList不是。这意味着在多线程环境下,Vector的操作不会引发数据不一致,而ArrayList则需要额外的同步控制。
- **扩容策略**: 当容量不足时,Vector默认扩容为原来的两倍,ArrayList则是原来的50%。
3. **HashMap与Hashtable的区别**:
- **历史背景**: Hashtable是早期的Java集合类,基于Dictionary,而HashMap是Java 1.2后引入的Map接口实现。
- **同步性**: 同样,Hashtable是线程安全的,HashMap不是。
- **值的限制**: Hashtable不允许null键和值,而HashMap允许。
4. **char存储中文**:
- Java的char类型采用Unicode编码,每个字符占用16位,因此可以存储中文字符。
5. **多线程实现**:
- **方式**: 继承Thread类或实现Runnable接口。
- **同步方式**: 使用`synchronized`关键字,以及wait/notify方法。
6. **垃圾回收机制**:
- Java的垃圾回收自动管理内存,主要通过可达性分析算法确定哪些对象不再被引用,然后进行回收。优化包括减少内存泄漏,使用弱引用,以及设置合理的堆大小等。
7. **浮点型赋值**:
- 浮点型变量直接赋值可能导致精度损失。如题中所示,`float f = 3.4;` 不准确,应使用强制类型转换,如 `float f = (float) 3.4;`。
8. **Collection Framework**:
- 包含List(如LinkedList、ArrayList和Vector)、Set(如HashSet、TreeSet)和Map(如Hashtable、HashMap、WeakHashMap)等接口和实现类。自定义数据结构通常涉及实现这些接口。
9. **异常处理**:
- Java使用try-catch-finally语句块进行异常处理,也可以使用throws关键字声明方法可能抛出的异常。
10. **多态与继承**:
- 多态是指子类对象可以被当作父类对象使用,继承是子类继承父类的属性和方法。
11. **抽象类与接口**:
- 抽象类可以有实现部分,而接口完全是抽象的,不能包含具体实现。一个类可以实现多个接口,但只能继承一个抽象类。
12. **线程编程**:
- 实现多线程可以通过继承Thread类或实现Runnable接口,同步方法用`synchronized`修饰。
- `stop()`和`suspend()`方法不推荐使用,因为它们可能导致资源泄漏和死锁。
13. **String与StringBuffer的区别**:
- String是不可变的,每次修改都会创建新的对象,而StringBuffer是可变的,修改时不会创建新对象,适合多次修改的情况。
14. **线程创建方法**:
- 两种方式:继承Thread类或实现Runnable接口。同步方法使用`synchronized`修饰。
- `stop()`和`suspend()`方法因安全问题不推荐使用。
以上是Java面试中常见的技术点,理解并掌握这些内容对于准备Java面试至关重要。