Java 是一种广泛使用的编程语言,尤其在IT行业中,Java程序员的需求一直居高不下。面试是评估候选人技能的重要环节,对于Java开发者来说,掌握基础知识点至关重要。以下是一些常见的Java面试题及其答案: 1. **Java中的内存溢出问题**: - **内存溢出原因**:Java程序可能会遇到三种类型的内存溢出错误,包括 PermGen Space、Java Heap Space 和 unable to create new native Thread。 - **解决方案**:调整JVM参数,如XX:PermSize和XX:MaxPermSize以增大类空间,增加Xms和Xmx以扩大堆内存,以及调整线程大小以避免操作系统层面的资源限制。 2. **String对象的创建**: - `String s = "123";`:如果字符串池中已有"123",则不会创建新对象;否则,会在池中创建一个。 - `String s = new String("123");`:无论池中是否存在"123",都会在堆中创建一个新对象,同时池中也可能添加一个。 3. **对象的垃圾回收**: - **可达性分析算法**:现代JVM通常使用该算法来判断对象是否可被回收。如果对象与GC Roots之间无引用链,即认为对象不可达,可被GC回收。 4. **Error、Exception和RuntimeException的区别**: - **Error**:表示应用程序不应尝试捕获的严重问题,如系统级错误。 - **Exception**:表示应用程序可以预见并可能需要处理的异常情况,分为检查异常(需要try-catch或声明)和非检查异常(如RuntimeException及其子类)。 5. **hashCode的作用**: - **用途**:hashCode主要用于哈希表(如HashMap)中快速定位元素。相同的对象会有相同的hashCode,但hashCode相等的对象不一定是相同的对象。 6. **HashMap和Hashtable的区别**: - **线程安全性**:HashMap非线程安全,Hashtable是线程安全的。 - **null值**:HashMap允许null键和值,Hashtable不允许。 - **效率**:HashMap通常比Hashtable更快,因为不保证线程安全。 - **迭代器**:HashMap使用Iterator,Hashtable使用Enumeration。 - **元素位置**:HashMap在rehash时,元素位置可能会变化,而Hashtable不会。 7. **Reader和InputStream的区别**: - **类型**:Reader处理字符流,InputStream处理字节流。 - **应用**:Reader适合读取字符数据,如文本文件,InputStream适用于所有二进制数据。 8. **HashMap中的key要求**: - **要求**:理论上,任何对象都可以作为HashMap的key,但key必须是不可变的,以确保其在Map中的唯一性和定位准确性。 9. **线程启动和控制**: - **启动线程**:使用`start()`方法,而非`run()`。`run()`直接执行,不创建新线程。 - **多线程实现**:通过继承Thread类、实现Runnable接口、使用ExecutorService、Future和Callable创建带返回值的线程。 - **守护线程**:通过`Thread.setDaemon(true)`设置,它在所有非守护线程结束前不会终止。 - **停止线程**:不推荐使用`Thread.stop()`,建议使用中断机制。 - **线程安全**:在多线程环境中,不受并发影响,能正确执行的代码被称为线程安全。 10. **Synchronized关键字**: - **作用**:synchronized用于实现线程同步,保证同一时刻只有一个线程访问特定代码块,以防止数据不一致。 当一个线程进入一个对象的synchronized方法后,其他线程不能进入该对象的其他synchronized方法,除非该线程退出了当前方法。这是synchronized保证互斥性的体现。理解并掌握这些基础知识对于Java开发者的面试至关重要,它们涵盖了内存管理、异常处理、线程操作、集合框架等多个核心领域。
- 粉丝: 378
- 资源: 20
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助