Java面试精华:基础与进阶问题解析

需积分: 14 1 下载量 176 浏览量 更新于2024-06-27 收藏 109KB DOCX 举报
本文档涵盖了Java面试中常见的基础知识,包括JDK与JRE的区别,`==`和`equals`的比较,以及`final`关键字在Java中的作用。此外,还深入探讨了Java中的字符串处理,如String类的常用方法、StringBuffer和StringBuilder的差异,以及String数据类型的特性和操作。 1. **JDK与JRE的区别**: JDK(Java Development Kit)是Java开发工具包,提供编译器(javac)、调试工具和整个Java开发环境,而JRE(Java Runtime Environment)是运行Java程序所需的最低环境,包含Java虚拟机(JVM)和核心类库。安装JRE仅够运行Java应用,但若要开发,需要同时安装JDK。 2. **`==`与`equals`的区别**: `==`用于基本类型进行值比较,而对于对象则是比较内存地址。而`equals()`方法在默认情况下用于比较对象引用,但在像String和Integer这样的类中,它被重写为值比较。因此,除非明确指定,否则`equals()`通常意味着比较内容而非引用。 3. **`hashCode()`与`equals()`的关系**: 不是。两个对象的`hashCode()`相等并不意味着它们的`equals()`返回true,因为哈希冲突可能发生,即使两个对象的内容不同。 4. **`final`的关键字**: - 类:final类不能被继承。 - 方法:final方法不能被子类重写。 - 变量:final变量是常量,一旦赋值就不可更改。 5. **`Math.round(-1.5)`示例**: 当调用`Math.round(-1.5)`时,结果为-1,这是由于Java在取整时遵循“银行家舍入规则”,负数半数向下取整。 6. **String类与操作字符串的类**: Java中有String、StringBuffer和StringBuilder用于操作字符串。String是不可变的,每次操作会创建新对象,而StringBuffer和StringBuilder是可变的,提供了高效的字符串构建和修改功能。 7. **其他概念**: - Java容器(List、Set、Map)的区别:List有序且可重复,Set无序且不重复,Map关联键值对,允许查找、插入和删除键值对。 - Collection与Collections的区别:Collection是接口,代表所有类型的集合,Collections是工具类,提供对Collection的实用操作。 - HashMap与Hashtable的区别:HashMap是非同步的,性能优于Hashtable(同步版本),但没有遗留的Vector类。 8. **并发与并行**: 并发是指多个任务在同一时间段内运行,而并行是在多个处理器或线程上同时执行任务。Java提供了synchronized、Thread和ExecutorService等工具管理并发。 9. **Runnable与Callable的区别**: Runnable没有返回值,适合轻量级任务,Callable有返回值并可能抛出异常,更适合复杂的任务。 10. **线程的run()与start()**: - run()是线程体,用于执行任务;start()启动线程,执行run()方法,线程开始执行。 11. **线程池的创建**: 有多种方式创建线程池,如使用`ExecutorService`、`ThreadPoolExecutor`、`ScheduledExecutorService`等,可以控制线程数量、任务队列策略和线程复用等。 12. **多线程运行安全**: 通过synchronized、volatile、Lock、ReentrantLock等机制确保数据一致性,避免竞态条件和死锁。 13. **死锁**: 死锁是当两个或更多线程相互等待对方释放资源,导致所有线程都无法继续执行的情况。要避免死锁,应避免循环等待资源的条件。 以上知识点覆盖了Java面试中关于基础、字符串处理、并发和线程管理等方面的重要内容,为面试者提供了全面的理解和准备。