活动介绍
file-type

Java面试必备:基础、容器与多线程核心知识点解析

DOCX文件

下载需积分: 0 | 1.15MB | 更新于2024-06-24 | 173 浏览量 | 2 下载量 举报 收藏
download 立即下载
"Java面试必备知识点汇总" Java作为一门广泛使用的编程语言,其面试题涵盖了基础知识、容器类库以及多线程等多个方面。以下是对这些知识点的详细解释: 1. **JDK和JRE的区别**:JDK(Java Development Kit)是Java开发工具集,包含了JRE(Java Runtime Environment)和开发工具,如编译器javac,打包工具jar等,用于编写、运行Java程序。JRE则是运行Java程序所必需的环境,只包含运行时需要的组件。 2. **==和equals的区别**:`==`比较的是变量引用是否指向同一对象,而`equals`方法比较的是对象内容是否相等。对于基本数据类型的变量,两者行为一致;但对于对象,`equals`通常被重写以进行业务逻辑上的比较。 3. **hashCode()和equals()的关系**:如果两个对象的`hashCode()`返回值相同,这并不意味着`equals()`一定会返回`true`,因为不同的对象可能有相同的哈希码。但是,如果`equals()`返回`true`,根据约定,`hashCode()`必须返回相同的值。 4. **final关键字的作用**:final可以修饰类、方法和变量,表示不可变性。final类不能被继承,final方法不能被重写,final变量一旦赋值后不能改变。 5. **Math.round(-15)**:Java中的`Math.round()`方法会将浮点数四舍五入为最接近的整数,因此`Math.round(-15)`的结果是-15。 6. **String是否为基础数据类型**:不是,String是对象,属于引用数据类型,而基础数据类型包括int、char等。 7. **Java中操作字符串的类**:主要的有`String`、`StringBuilder`和`StringBuffer`。`String`是不可变的,`StringBuilder`和`StringBuffer`在多线程环境下分别提供线程不安全和线程安全的字符串操作。 8. **Stringstr="i"与Stringstr=newString("i")的区别**:前者是在常量池中创建,后者在堆中创建。前者只有一个实例,而后者每次都会创建新对象。 9. **字符串反转**:可以使用`StringBuilder`或`StringBuffer`的reverse()方法来实现字符串反转。 10. **String类的常用方法**:如`length()`、`charAt()`、`substring()`、`concat()`、`indexOf()`、`replace()`等。 11. **抽象类与抽象方法**:抽象类不一定包含抽象方法,但包含抽象方法的类必须声明为抽象类。 12. **普通类与抽象类的区别**:抽象类不能实例化,主要用来被继承;普通类可以实例化,可以包含抽象方法和非抽象方法。 13. **final修饰抽象类**:不可以,因为抽象类不能被实例化,而final类不能被继承,这两者冲突。 14. **接口与抽象类的区别**:接口只包含抽象方法和默认方法,不能有具体实现;抽象类可以有抽象方法、具体方法和成员变量,可以实现多继承。 15. **Java IO流分类**:分为字节流(Byte Stream)和字符流(Character Stream),又根据流向分为输入流(InputStream/Reader)和输出流(OutputStream/Writer)。 16. **BIO、NIO、AIO的区别**:BIO是同步阻塞I/O,NIO是同步非阻塞I/O,AIO(异步非阻塞I/O)基于事件和回调机制。 17. **Files类的常用方法**:如`exists()`、`createNewFile()`、`delete()`、`readAllBytes()`等,用于文件操作。 接下来,面试题涉及了Java的容器部分: 18. **Java容器**:主要包括集合类,如List、Set、Map。 19. **Collection和Collections**:Collection是所有集合接口的父接口,而Collections是操作集合的工具类,提供了排序、查找、修改等静态方法。 20. **List、Set、Map的区别**:List按顺序存储元素,允许重复;Set不保证元素顺序,不允许重复;Map存储键值对,键唯一。 21. **HashMap和Hashtable**:HashMap是非同步的,性能更好;Hashtable是线程安全的,但速度较慢。 22. **HashMap与TreeMap的选择**:HashMap适用于快速查找,无序;TreeMap按自然排序或自定义排序,有序。 23. **HashMap的实现原理**:基于哈希表,使用 Entry 数组存储键值对,通过键的哈希码进行定位。 24. **HashSet的实现原理**:底层基于HashMap,键是集合元素,值为null。 25. **ArrayList和LinkedList的区别**:ArrayList是动态数组,适合随机访问,插入删除慢;LinkedList基于双向链表,插入删除快,但随机访问慢。 26. **数组与List转换**:可以使用`Arrays.asList()`将数组转换为List,反之,使用`Arrays.array()`或`Collections.toArray()`。 27. **ArrayList与Vector的区别**:ArrayList是非线程安全的,效率高;Vector是线程安全的,效率低。 28. **Array与ArrayList**:Array是固定大小的原始类型数组,ArrayList是动态大小的对象集合。 29. **Queue中的poll()和remove()**:poll()移除并返回队列头部元素,若为空则返回null;remove()移除并返回头部元素,若为空抛出异常。 30. **线程安全的集合**:如Vector、Hashtable、ConcurrentHashMap、CopyOnWriteArrayList等。 31. **迭代器Iterator**:用于遍历集合元素,提供了`hasNext()`检查是否有下一个元素和`next()`获取下一个元素的方法。 32. **Iterator的使用和特点**:通过`iterator()`方法获取迭代器,然后用迭代器进行遍历,特点是只能单向遍历,不能修改集合元素(除非特定支持)。 最后,面试题涉及到多线程: 35. **并行和并发**:并行是指多个任务同时执行,而并发是指在一段时间内宏观上看起来多个任务在交替执行。 36. **线程与进程的区别**:线程是程序执行的最小单位,共享进程资源;进程是系统分配资源的基本单位,每个进程有自己的独立内存空间。 37. **守护线程**:守护线程不阻碍JVM的退出,如垃圾回收线程就是守护线程。 38. **创建线程方式**:实现Runnable接口、继承Thread类、使用Executor框架。 39. **Runnable与Callable的区别**:Runnable没有返回值,不抛出检查异常;Callable可以有返回值,可以抛出异常,结果通过Future获取。 40. **线程状态**:新建(NEW)、可运行(RUNNABLE)、阻塞(BLOCKED)、等待(WAITING)、超时等待(TIMED_WAITING)、终止(TERMINATED)。 41. **sleep()和wait()**:sleep()使当前线程休眠,不释放锁;wait()使当前线程等待,释放锁,需要在同步块或方法中调用。 42. **notify()和notifyAll()**:唤醒一个正在等待同一对象监视器的线程(notify())或唤醒所有等待线程(notifyAll()),都需要在同步块或方法中调用。 以上知识点涵盖了Java面试中的常见问题,对于准备面试或提升技术能力都非常有帮助。

相关推荐