Java 面试题与基础复习路线
从语言基础到集合,建立能解释、能编码、能选型的 Java 知识框架。
适用范围
Java 基础;集合示例以 JDK 8 为起点,具体行为以目标 JDK 为准。
先掌握对象、类型和异常,再看集合的接口约定与具体实现。面试中的关键是说明一个选择何时成立:数据量、并发访问、顺序要求和修改频率改变后,原来的实现是否仍合适。
按这个顺序准备
- 语言与对象。 用自己的代码区分基本类型、引用类型、重载与重写。给每个概念写一个反例,比记住术语更容易发现理解漏洞。
- 集合接口。 从 List、Set、Map 的约束出发,再比较 ArrayList、HashSet、HashMap。先解释功能,再讨论实现细节。
- 哈希与冲突。 手绘 put、get 的查找路径,说明 equals 与 hashCode 的关系。涉及链表、树化或扩容时注明 JDK 版本。
- 并发使用。 追问普通集合为什么不能直接承担并发写入;把具体的复合操作与线程安全容器的保证区分开。
一次有效练习
准备一个按用户 ID 去重的例子,说明键如何设计、对象修改会发生什么、是否需要保留插入顺序。随后把需求改为多个线程同时写入,重新评估方案。不要用“大概更快”替代操作语义和测量结果。
复盘清单
- 能否在两分钟内说明一个实现的适用条件?
- 能否写出最小代码证明自己的解释?
- 能否指出实现细节随 JDK 版本改变的地方?
集合基础通过后,继续进入并发和 JVM 专题。
参考资料
相关学习路线
- MySQL 面试题:索引、事务与排查
- Redis 面试题:数据结构与缓存场景
- JVM 面试题:内存、GC 与故障排查
- Java 并发面试题:锁、线程池与可见性
- 计算机网络面试题:TCP、HTTP 与请求链路
安排复习节奏
Java 基础题库
共 77 道题按题库默认顺序排列,可选择分类集中练习。
显示 77 道题
- 说说你对 “面向对象” 的理解 基础与综合
- Java 语言的特性有哪些? 基础与综合
- Java 与 Python/C++ 的区别? 基础与综合
- JDK 和 JRE 的区别 基础与综合
- 介绍下 Java 中的数据类型及所占字节和取值范围 基础与综合
- 在实际开发中为什么不能用浮点类型(float、double)来存金钱的数据,浮点数不精确的本质是什么 基础与综合
- char 能不能存储中文汉字?能存储所有的中文汉字吗? 基础与综合
- switch 语句可以用 String 类型当参数吗?switch 语句中不支持哪些类型的参数?支持和不支持的核心原因是什么 字符串
- Java 是按值调用还是按引用调用? 基础与综合
- 介绍下 Java 中的访问权限控制 基础与综合
- 实例方法和静态 (static) 方法的区别 基础与综合
- Java 中父类和子类的静态代码块、非静态代码块、构造方法的执行顺序是怎样的 基础与综合
- 什么是继承?Java 是单继承还是多继承?为什么用单继承? 基础与综合
- 什么是多态?运行时多态和编译时多态?重载和重写的区别 基础与综合
- 什么是抽象类?什么是接口?抽象类和接口的适用场景分别是什么? 基础与综合
- 内部类和嵌套类的定义?两者的区别 基础与综合
- 介绍下 Java 中的深拷贝和浅拷贝 基础与综合
- 什么是包装类?为什么需要包装类 基础与综合
- 包装类的缓存机制 基础与综合
- 给 Integer 的最大值 +1,是什么结果 基础与综合
- Object 类是什么,有哪些方法 基础与综合
- equals 和 == 的区别 基础与综合
- 为什么要同时重写 equals() 和 hashCode() 集合与容器
- new String("hello") 创建了几个字符串对象 字符串
- 为什么说 String 是不可变的?String 为什么要设计成不可变的?String 真的不可变吗? 字符串
- String、StringBuffer、StringBuilder 的区别 字符串
- StringBuffer/StringBuilder 的 append 和 String 的 + 的区别? 字符串
- 反射的作用、原理、优缺点、适用场景 反射、代理与扩展
- 获取 Class 类对象有几种方式 反射、代理与扩展
- 讲一下你对动态代理的理解 反射、代理与扩展
- Java 集合体系的划分、List、Set、Map 的区别 集合与容器
- 知道迭代器么,普通 for 循环和迭代器遍历有什么区别 集合与容器
- Java 中对集合对象或者数组对象排序有几种实现方式(Comparable 和 Comparator 的区别) 集合与容器
- Arrays.sort 底层排序算法是什么?做了什么优化 集合与容器
- Arrays.asList(int[] arr) 返回的 List 和我们一般使用的 ArrayList 一样吗?可以用同样的方法吗?如何正确转数组到 List 呢? 集合与容器
- ArrayList 是怎么对底层数组进行扩容的? 集合与容器
- Arraylist 扩容的数组长度为什么是原数组长度的 1.5 倍? 集合与容器
- ArrayList 是怎么添加/删除元素的 集合与容器
- ArrayList 可以添加 NULL 吗? 集合与容器
- ArrayList 和 LinkedList 的区别 集合与容器
- ArrayList 和 LinkedList的 查找复杂度是多少?怎么优化 LinkedList 的查找复杂度 集合与容器
- HashSet 原理,是如何去重的? 集合与容器
- HashSet 的 value 为什么用 Object 而不用 null,效率更高而且还省得创建对象了? 集合与容器
- 介绍下 TreeSet?HashSet 和 TreeSet 区别 集合与容器
- HashMap 的底层结构和原理 集合与容器
- 讲一下 HashMap 的 put 方法(HashMap 如何解决冲突的) 集合与容器
- 有哪些解决 Hash 冲突的方法 集合与容器
- HashMap key 的 hash 值是怎么计算的(扰动函数) 集合与容器
- 自定义类做 HashMap 的 key 可以吗?设计类的时候还需要注意什么 集合与容器
- HashMap get 元素的时间复杂度为什么是 O(1) 集合与容器
- HashMap 为什么用红黑树而不用平衡二叉树 or B/B+ 树? 集合与容器
- HashMap 的扩容机制是怎么样的?JDK7 与 JDK8 有什么不同吗? 集合与容器
- HashMap 会缩容吗?怎么缩容的 集合与容器
- HashMap 的负载因子(LoadFactor)为什么是 0.75? 集合与容器
- HashMap 的默认初始数组长度是多少?为什么是这么多? 集合与容器
- 即然 HashMap 默认数组长度是 16,那如果我在构造函数中指定容量为 3,HashMap 生成的数组长度是多少呢 集合与容器
- HashMap 线程不安全的表现有哪些(HashMap 什么情况下会出现 CPU 100% 的问题) 集合与容器
- 如何保证 HashMap 线程安全? 集合与容器
- HashMap 和 Hashtable 的区别 集合与容器
- HashMap 可以添加 NULL key/value 么? 集合与容器
- HashTable 可以添加 NULL key/value 么? 集合与容器
- LinkedHashMap 是什么,哪些场景能够使用 集合与容器
- HashMap 和 TreeMap 的区别 集合与容器
- 介绍 Java 的异常体系 异常处理
- Java 异常为什么要区分 Checked Exception 和 UnChecked Exception 异常处理
- 如何自定义异常 异常处理
- try 块中有 System.exit(),那么 finally 块还会执行吗 异常处理
- 在 finally 中执行 return 会发生什么 / 在 try 中 return 后,finally 会不会执行 异常处理
- 泛型以及泛型的实现原理 泛型与语言特性
- 什么是序列化和反序列化 IO 与序列化
- transizent 关键字 IO 与序列化
- Java 中几个 IO 流有了解吗 IO 与序列化
- 注解的作用、使用方式、底层原理 反射、代理与扩展
- 什么情况下可以用到自定义注解? 反射、代理与扩展
- Java5 ~ Java21 新特性有哪些 泛型与语言特性
- Java 语法糖有哪些 泛型与语言特性
- 介绍下 Java SPI 机制 反射、代理与扩展

评论 0 友善交流,让每个问题都有回响
还没有评论,分享你的看法吧。