Java基础面试题全解析:88个经典问题详解

需积分: 0 0 下载量 146 浏览量 更新于2024-08-03 收藏 160KB PDF 举报
本资源是一份详尽的Java基础系列面试题集,涵盖了广泛的主题,旨在帮助求职者或开发者准备面试。内容深入浅出,涉及了Java语言的核心概念、数据类型、基本操作、高级特性以及多线程和并发处理。 1. **JDK与JRE的区别**:JDK(Java Development Kit)是开发Java应用程序的工具包,包含编译器、调试器等;而JRE(Java Runtime Environment)是运行Java程序所需的环境,不含编译器。两者关系是JRE依赖于JDK。 2. **==与equals的区别**:`==`用于比较对象引用是否相同,`equals()`用于比较对象的内容是否相等。例如,对于非对象类型如字符串和整数,`==`判断值是否相等,而对于自定义对象,可能需要覆盖`equals()`方法实现内容比较。 3. **hashCode和equals的关系**:hashCode与equals有对应关系,但不是绝对的,如果两个对象的hashCode相同,仅意味着可能在哈希表中查找时效率较高,equals()仍需被正确实现来确保相等性。 4. **final的作用**:在Java中,final可以修饰变量、方法或类,分别表示常量、不可变方法和最终类,体现编程中的不变性原则。 5. **Math.round()函数示例**:`Math.round(-1.5)`会向下取整,结果是-2,因为Java的浮点数计算存在舍入误差。 6. **String类型讨论**:String是对象而非基础数据类型,它在内存中是不可变的。 7. **字符串处理类**:Java中涉及字符串处理的主要类有`String`、`StringBuilder`和`StringBuffer`。`String`操作不可变,`StringBuilder`/`StringBuffer`可变,性能上`StringBuilder`优于`StringBuffer`(除非多线程环境下)。 8. **String对象初始化**:`Stringstr="i"`使用的是字面量,而`Stringstr=new String("i")`创建了一个新的对象,尽管两者内容相同。 9. **字符串反转**:可以通过`StringBuilder`或`StringBuffer`的`reverse()`方法或字符数组进行反转。 10. **String类常用方法**:包括长度计算、子串获取、替换、查找、编码解码、格式化等。 11. **抽象类与抽象方法**:抽象类可以包含抽象方法(无实现),非抽象类不能。 12. **普通类与抽象类区别**:普通类可以实例化,抽象类不能,且抽象类至少有一个抽象方法。 13. **final修饰抽象类**:在Java中,抽象类不允许被final修饰。 14. **接口与抽象类**:接口仅定义方法签名,抽象类可以包含实现,接口多继承,抽象类单继承。 15. **IO流类型**:Java的IO流主要有`InputStream`、`OutputStream`、`Reader`、`Writer`等,分为字节流和字符流。 16. **BIO、NIO、AIO的区别**:BIO阻塞IO,NIO非阻塞IO,AIO异步IO,分别代表不同的IO模型,NIO更高效。 17. **Files类方法**:提供文件系统操作功能,如读写、路径处理、属性获取等。 18. **Java容器**:包括数组、List(ArrayList, LinkedList等)、Set(HashSet, TreeSet等)、Map(HashMap, TreeMap等)。 19. **Collection与Collections的区别**:`Collection`是接口,`Collections`是工具类,提供操作集合的方法。 20. **List、Set、Map的区别**:List有序,Set无序且不重复,Map键值对关联。 21. **HashMap与Hashtable**:两者都是Map接口的实现,区别在于线程安全性(Hashtable线程安全,同步)和允许null键值。 22. **选择HashMap或TreeMap**:HashMap根据哈希值存储,查找快但无排序,TreeMap自然排序,查找稍慢。 23. **HashMap实现原理**:基于哈希表,通过哈希函数确定元素位置。 24. **HashSet实现原理**:无序的哈希集合,基于HashMap实现,不允许重复元素。 25. **ArrayList与LinkedList**:ArrayList动态数组,访问速度快;LinkedList链表,插入删除高效。 26. **数组和List转换**:通过`Arrays.asList()`将数组转为List,反之通过`new ArrayList<>(array)`。 27. **ArrayList与Vector区别**:Vector同步,适合多线程环境,性能略低。 28. **Array与ArrayList**:Array是固定大小的数组,ArrayList动态增长。 29. **Queue方法区别**:`poll()`移除并返回队首元素,`remove()`移除指定元素。 30. **线程安全集合**:如`Collections.synchronizedList()`等方法返回线程安全的列表。 31. **Iterator**:用于遍历集合的迭代器,提供了前进、后退和检查是否存在下一个元素的功能。 32. **Iterator使用**:通常用于遍历集合,特点是只能单向移动且没有索引。 33. **Iterator与ListIterator区别**:ListIterator适用于List,支持双向移动和定位。 34. **防止集合修改**:可以使用`Collections.unmodifiableXXX()`方法创建只读集合,或者使用`final`关键字锁定集合。 35. **并发与并行**:并发指的是多个任务同时执行,但不保证在同一时刻,而并行是指在多核CPU上同时执行任务。 36. **线程与进程**:线程是进程内的独立执行单元,进程是资源分配和隔离的基本单位。 37. **守护线程**:后台运行,主要负责维护系统的稳定,当主线程结束时,守护线程也会停止。 38. **创建线程方式**:继承Thread类、实现Runnable接口或Callable接口(FutureTask)。 39. **Runnable和Callable的区别**:Runnable用于直接执行任务,Callable可以返回值,并提供异常处理。 40. **线程状态**:新建、就绪、运行、阻塞、死亡等。 41. **sleep()与wait()**:前者使当前线程睡眠,后者使线程等待某个条件满足。 42. **notify()与notifyAll()**:唤醒一个等待该对象的单个线程或所有线程。 这份面试题集详细涵盖了Java基础和进阶概念,对于理解Java语言的内部机制、优化性能、并发编程等方面具有重要价值。通过解答这些问题,面试者可以展现扎实的编程基础和深入理解。