Java面试必备:基础、容器与多线程知识点解析
需积分: 9 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面试的人员来说,这些都是必不可少的复习资料。
2024-08-07 上传
2021-11-02 上传
2021-06-08 上传
2023-10-15 上传
2021-11-12 上传
2023-04-08 上传
2021-08-09 上传
2021-08-13 上传
你身上好香_
- 粉丝: 0
- 资源: 1
最新资源
- 黑板风格计算机毕业答辩PPT模板下载
- CodeSandbox实现ListView快速创建指南
- Node.js脚本实现WXR文件到Postgres数据库帖子导入
- 清新简约创意三角毕业论文答辩PPT模板
- DISCORD-JS-CRUD:提升 Discord 机器人开发体验
- Node.js v4.3.2版本Linux ARM64平台运行时环境发布
- SQLight:C++11编写的轻量级MySQL客户端
- 计算机专业毕业论文答辩PPT模板
- Wireshark网络抓包工具的使用与数据包解析
- Wild Match Map: JavaScript中实现通配符映射与事件绑定
- 毕业答辩利器:蝶恋花毕业设计PPT模板
- Node.js深度解析:高性能Web服务器与实时应用构建
- 掌握深度图技术:游戏开发中的绚丽应用案例
- Dart语言的HTTP扩展包功能详解
- MoonMaker: 投资组合加固神器,助力$GME投资者登月
- 计算机毕业设计答辩PPT模板下载