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

需积分: 9 0 下载量 47 浏览量 更新于2024-07-09 收藏 1.15MB PDF 举报
"Java面试题集锦" 这篇文档包含了超过200道Java面试题目,涵盖了从基础概念到高级特性的广泛范围,旨在帮助求职者准备Java相关的技术面试。以下是部分知识点的详细说明: 一、Java基础 1. JDK(Java Development Kit)是开发工具包,包含JRE(Java Runtime Environment)以及编译器和其他开发工具。JRE则是运行Java程序所需的环境。 2. `==`比较的是对象的引用,而`equals()`方法用于比较对象的内容是否相等。对于基本数据类型的变量,`==`即比较值;对于对象,`==`比较是否指向同一个内存地址,`equals()`通常重写以比较对象属性。 3. 如果两个对象的`hashCode()`相同,但并不意味着`equals()`一定为true,因为`hashCode()`可能产生碰撞,但根据约定,如果`equals()`为true,`hashCode()`必须相同。 4. `final`关键字用于声明变量、方法或类为不可变。对于变量,一旦赋值后不能更改;对于方法,表示该方法不能被重写;对于类,表示该类不能被继承。 5. `Math.round(-1.5)`会返回-1,`Math.round()`方法会将浮点数四舍五入为最接近的整数。 6. `String`不是基础数据类型,它是对象,属于引用类型。基础数据类型包括`int`, `double`, `char`等。 7. Java中处理字符串的类有`String`, `StringBuilder`和`StringBuffer`。`String`是不可变的,`StringBuilder`和`StringBuffer`在多线程环境下可变,`StringBuffer`线程安全。 8. `String str="i"`是直接创建字符串对象,而`String str=new String("i")`会创建两次对象,一次在常量池,一次在堆。 9. 可以使用`str.reverse()`方法反转字符串。 10. `String`类的常用方法包括`length()`, `substring()`, `indexOf()`, `concat()`, `replace()`, `trim()`等。 11. 抽象类不一定包含抽象方法,但至少有一个抽象方法的类必须声明为抽象类。 12. 普通类可以实例化,而抽象类不能直接实例化;抽象类可以包含抽象方法和非抽象方法,而普通类不能包含抽象方法。 13. `final`不能修饰抽象类,因为抽象类的目的是被继承,而`final`表示不能被继承。 14. 接口是完全抽象的,不包含实现,而抽象类可以包含部分实现。接口多继承,抽象类单继承。 二、容器 18. Java容器主要包括`Collection`, `List`, `Set`, `Map`等。 19. `Collection`是所有集合类的父接口,`Collections`是静态工具类,提供集合操作的方法。 20. `List`有序且允许重复元素,如`ArrayList`和`LinkedList`;`Set`不允许重复元素,如`HashSet`和`TreeSet`;`Map`存储键值对,如`HashMap`和`TreeMap`。 21. `HashMap`是非同步的,允许null键和值,而`Hashtable`是同步的,不允许null键和值。 22. 选择`HashMap`或`TreeMap`取决于需求:`HashMap`查找速度快,但无顺序;`TreeMap`保持元素排序,适合需要排序的场景。 23. `HashMap`基于哈希表实现,通过键的哈希值快速定位元素。 24. `HashSet`底层使用`HashMap`实现,元素唯一性依赖于`HashMap`的键的唯一性。 25. `ArrayList`基于动态数组,随机访问快,插入删除慢;`LinkedList`基于链表,插入删除快,随机访问慢。 26. 可以使用`Arrays.asList()`将数组转换为`List`,反之,使用`list.toArray()`将`List`转换为数组。 27. `ArrayList`和`Vector`都是基于数组实现,但`Vector`是线程安全的,性能相对较差。 28. `Array`是原始类型数组,`ArrayList`是集合类,两者类型不同,不能直接比较。 29. `Queue`中的`poll()`移除并返回队列首元素,若为空则返回null;`remove()`移除并返回首元素,若为空则抛出异常。 30. 线程安全的集合类包括`Vector`, `Stack`, `ConcurrentHashMap`, `LinkedBlockingQueue`等。 三、多线程 35. 并行是多个任务同时执行,而并发是在一个时间段内交替执行多个任务,可能在一个CPU核心上交替执行。 36. 线程是操作系统调度的最小单位,进程是拥有独立内存空间的执行单元。 37. 守护线程(Daemon Thread)是为其他线程提供服务的线程,当所有非守护线程结束时,守护线程自动结束。 38. 创建线程的方式有实现`Runnable`接口、继承`Thread`类以及使用`ExecutorService`和`Callable`。 39. `Runnable`没有返回值,`Callable`可以返回一个结果。 40. 线程有新建、就绪、运行、阻塞和终止五种状态。 41. `sleep()`让当前线程休眠,不会释放锁;`wait()`使线程等待,释放了锁,需调用`notify()`或`notifyAll()`唤醒。 42. `notify()`唤醒一个等待同一对象的线程,`notifyAll()`唤醒所有等待的线程。 43. `synchronized`关键字可以确保线程安全,防止数据竞争。 这些只是部分面试题涉及的知识点,实际文档中应该还有更多关于异常处理、IO流、网络编程、反射、设计模式、JVM内存管理等相关内容的题目,对于准备Java面试的人员来说,这些都是必不可少的复习资料。