在Java编程语言中,面试题通常涵盖了许多核心概念和技术。以下是一些基于给定文件内容的关键知识点: 1. **线程创建**: - **实现Runnable接口**:这是创建线程的基本方式,将业务逻辑放在run()方法中,然后通过Thread类构造器传入Runnable对象启动线程。 - **继承Thread类**:直接继承Thread类并覆盖run()方法,然后创建子类对象并调用start()方法启动线程。 - **实现Callable接口**:Callable接口允许创建具有返回值的任务,配合FutureTask可以在执行完成后获取结果。 - **使用线程池**:通过ExecutorService接口和ThreadPoolExecutor类创建线程池,可以更有效地管理线程,减少资源消耗。 2. **线程池状态**: - **Running**:线程池正常工作,接受新任务并处理队列中的任务。 - **Shutdown**:不再接受新任务,但会完成已提交的任务。 - **Stop**:不再接受新任务,也不处理队列中的任务。 - **Tidying**:所有任务完成后,线程池准备终止。 - **Terminated**:线程池完全终止,terminated()方法执行完毕。 3. **JDK、JRE、JVM的区别**: - **JDK**:包含编译器javac、JRE以及开发所需的类库,用于开发Java应用程序。 - **JRE**:Java运行时环境,包含JVM和必要的类库,用于运行Java程序。 - **JVM**:Java虚拟机,负责解释和执行字节码,是JRE的一部分。 4. **hashCode()与equals()的关系**: - `hashCode()`返回对象的哈希值,用于哈希表(如HashMap)中的快速定位。 - `equals()`用于判断两个对象是否相等,当`hashCode()`相同时,`equals()`进一步比较对象内容。 5. **String、StringBuffer、StringBuilder**: - **String**是不可变的,修改时会创建新对象。 - **StringBuffer**是线程安全的,适用于多线程环境。 - **StringBuilder**是线程不安全的,单线程环境中性能优于StringBuffer。 6. **泛型中extends和super的区别**: - **extends**:表示T及其子类,用于上限边界,如`List<E extends Number>`表示E是Number或其子类。 - **super**:表示T及其父类,用于下限边界,如`List<? super Integer>`表示可以是Integer或其父类。 7. **==与equals的区别**: - **==**:比较基本类型时比较值,比较对象时比较引用(是否指向同一内存位置)。 - **equals()**:默认比较引用,但可以被重写以比较对象内容。 8. **重载与重写**: - **重载**:在同一类中,方法名相同,但参数列表不同(类型、个数或顺序)。 - **重写**:在子类中,方法名、参数列表相同,但子类方法覆盖父类方法。 9. **List与Set的区别**: - **List**:有序,允许重复元素,可以有多个null,可通过索引访问。 - **Set**:无序,不允许重复元素,最多一个null,通常不保证元素顺序。 10. **ArrayList与LinkedList的区别**: - **ArrayList**:基于数组实现,随机访问快,插入和删除慢。 - **LinkedList**:基于链表实现,插入和删除快,随机访问慢,支持双端操作。 11. **JDK1.7到1.8 HashMap的变化**: - **数据结构**:1.7中是数组+链表,1.8中是数组+链表+红黑树,提高查找和插入效率。 - **链表插入**:1.7是头插法,1.8改为尾插法。 - **哈希算法**:1.8的哈希算法更简洁。 12. **深拷贝与浅拷贝**: - **浅拷贝**:只复制基本类型,引用对象仅复制引用,修改拷贝后的对象会影响原对象。 - **深拷贝**:不仅复制基本类型,还创建引用对象的新副本,修改拷贝后的对象不会影响原对象。
- 粉丝: 32
- 资源: 5321
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助