知识点专题话题 #3

Java 面试题与基础复习路线

面试之星官方的头像 面试之星官方 更新于

从语言基础到集合,建立能解释、能编码、能选型的 Java 知识框架。

适用范围

Java 基础;集合示例以 JDK 8 为起点,具体行为以目标 JDK 为准。

先掌握对象、类型和异常,再看集合的接口约定与具体实现。面试中的关键是说明一个选择何时成立:数据量、并发访问、顺序要求和修改频率改变后,原来的实现是否仍合适。

按这个顺序准备

  1. 语言与对象。 用自己的代码区分基本类型、引用类型、重载与重写。给每个概念写一个反例,比记住术语更容易发现理解漏洞。
  2. 集合接口。 从 List、Set、Map 的约束出发,再比较 ArrayList、HashSet、HashMap。先解释功能,再讨论实现细节。
  3. 哈希与冲突。 手绘 put、get 的查找路径,说明 equals 与 hashCode 的关系。涉及链表、树化或扩容时注明 JDK 版本。
  4. 并发使用。 追问普通集合为什么不能直接承担并发写入;把具体的复合操作与线程安全容器的保证区分开。

一次有效练习

准备一个按用户 ID 去重的例子,说明键如何设计、对象修改会发生什么、是否需要保留插入顺序。随后把需求改为多个线程同时写入,重新评估方案。不要用“大概更快”替代操作语义和测量结果。

复盘清单

  • 能否在两分钟内说明一个实现的适用条件?
  • 能否写出最小代码证明自己的解释?
  • 能否指出实现细节随 JDK 版本改变的地方?

集合基础通过后,继续进入并发和 JVM 专题。

参考资料

相关学习路线

安排复习节奏

30 天 Java 面试计划

Java 基础题库

共 77 道题

按题库默认顺序排列,可选择分类集中练习。

显示 77 道题

  1. 说说你对 “面向对象” 的理解 基础与综合
  2. Java 语言的特性有哪些? 基础与综合
  3. Java 与 Python/C++ 的区别? 基础与综合
  4. JDK 和 JRE 的区别 基础与综合
  5. 介绍下 Java 中的数据类型及所占字节和取值范围 基础与综合
  6. 在实际开发中为什么不能用浮点类型(float、double)来存金钱的数据,浮点数不精确的本质是什么 基础与综合
  7. char 能不能存储中文汉字?能存储所有的中文汉字吗? 基础与综合
  8. switch 语句可以用 String 类型当参数吗?switch 语句中不支持哪些类型的参数?支持和不支持的核心原因是什么 字符串
  9. Java 是按值调用还是按引用调用? 基础与综合
  10. 介绍下 Java 中的访问权限控制 基础与综合
  11. 实例方法和静态 (static) 方法的区别 基础与综合
  12. Java 中父类和子类的静态代码块、非静态代码块、构造方法的执行顺序是怎样的 基础与综合
  13. 什么是继承?Java 是单继承还是多继承?为什么用单继承? 基础与综合
  14. 什么是多态?运行时多态和编译时多态?重载和重写的区别 基础与综合
  15. 什么是抽象类?什么是接口?抽象类和接口的适用场景分别是什么? 基础与综合
  16. 内部类和嵌套类的定义?两者的区别 基础与综合
  17. 介绍下 Java 中的深拷贝和浅拷贝 基础与综合
  18. 什么是包装类?为什么需要包装类 基础与综合
  19. 包装类的缓存机制 基础与综合
  20. 给 Integer 的最大值 +1,是什么结果 基础与综合
  21. Object 类是什么,有哪些方法 基础与综合
  22. equals 和 == 的区别 基础与综合
  23. 为什么要同时重写 equals() 和 hashCode() 集合与容器
  24. new String("hello") 创建了几个字符串对象 字符串
  25. 为什么说 String 是不可变的?String 为什么要设计成不可变的?String 真的不可变吗? 字符串
  26. String、StringBuffer、StringBuilder 的区别 字符串
  27. StringBuffer/StringBuilder 的 append 和 String 的 + 的区别? 字符串
  28. 反射的作用、原理、优缺点、适用场景 反射、代理与扩展
  29. 获取 Class 类对象有几种方式 反射、代理与扩展
  30. 讲一下你对动态代理的理解 反射、代理与扩展
  31. Java 集合体系的划分、List、Set、Map 的区别 集合与容器
  32. 知道迭代器么,普通 for 循环和迭代器遍历有什么区别 集合与容器
  33. Java 中对集合对象或者数组对象排序有几种实现方式(Comparable 和 Comparator 的区别) 集合与容器
  34. Arrays.sort 底层排序算法是什么?做了什么优化 集合与容器
  35. Arrays.asList(int[] arr) 返回的 List 和我们一般使用的 ArrayList 一样吗?可以用同样的方法吗?如何正确转数组到 List 呢? 集合与容器
  36. ArrayList 是怎么对底层数组进行扩容的? 集合与容器
  37. Arraylist 扩容的数组长度为什么是原数组长度的 1.5 倍? 集合与容器
  38. ArrayList 是怎么添加/删除元素的 集合与容器
  39. ArrayList 可以添加 NULL 吗? 集合与容器
  40. ArrayList 和 LinkedList 的区别 集合与容器
  41. ArrayList 和 LinkedList的 查找复杂度是多少?怎么优化 LinkedList 的查找复杂度 集合与容器
  42. HashSet 原理,是如何去重的? 集合与容器
  43. HashSet 的 value 为什么用 Object 而不用 null,效率更高而且还省得创建对象了? 集合与容器
  44. 介绍下 TreeSet?HashSet 和 TreeSet 区别 集合与容器
  45. HashMap 的底层结构和原理 集合与容器
  46. 讲一下 HashMap 的 put 方法(HashMap 如何解决冲突的) 集合与容器
  47. 有哪些解决 Hash 冲突的方法 集合与容器
  48. HashMap key 的 hash 值是怎么计算的(扰动函数) 集合与容器
  49. 自定义类做 HashMap 的 key 可以吗?设计类的时候还需要注意什么 集合与容器
  50. HashMap get 元素的时间复杂度为什么是 O(1) 集合与容器
  51. HashMap 为什么用红黑树而不用平衡二叉树 or B/B+ 树? 集合与容器
  52. HashMap 的扩容机制是怎么样的?JDK7 与 JDK8 有什么不同吗? 集合与容器
  53. HashMap 会缩容吗?怎么缩容的 集合与容器
  54. HashMap 的负载因子(LoadFactor)为什么是 0.75? 集合与容器
  55. HashMap 的默认初始数组长度是多少?为什么是这么多? 集合与容器
  56. 即然 HashMap 默认数组长度是 16,那如果我在构造函数中指定容量为 3,HashMap 生成的数组长度是多少呢 集合与容器
  57. HashMap 线程不安全的表现有哪些(HashMap 什么情况下会出现 CPU 100% 的问题) 集合与容器
  58. 如何保证 HashMap 线程安全? 集合与容器
  59. HashMap 和 Hashtable 的区别 集合与容器
  60. HashMap 可以添加 NULL key/value 么? 集合与容器
  61. HashTable 可以添加 NULL key/value 么? 集合与容器
  62. LinkedHashMap 是什么,哪些场景能够使用 集合与容器
  63. HashMap 和 TreeMap 的区别 集合与容器
  64. 介绍 Java 的异常体系 异常处理
  65. Java 异常为什么要区分 Checked Exception 和 UnChecked Exception 异常处理
  66. 如何自定义异常 异常处理
  67. try 块中有 System.exit(),那么 finally 块还会执行吗 异常处理
  68. 在 finally 中执行 return 会发生什么 / 在 try 中 return 后,finally 会不会执行 异常处理
  69. 泛型以及泛型的实现原理 泛型与语言特性
  70. 什么是序列化和反序列化 IO 与序列化
  71. transizent 关键字 IO 与序列化
  72. Java 中几个 IO 流有了解吗 IO 与序列化
  73. 注解的作用、使用方式、底层原理 反射、代理与扩展
  74. 什么情况下可以用到自定义注解? 反射、代理与扩展
  75. Java5 ~ Java21 新特性有哪些 泛型与语言特性
  76. Java 语法糖有哪些 泛型与语言特性
  77. 介绍下 Java SPI 机制 反射、代理与扩展

评论 0 友善交流,让每个问题都有回响

还没有评论,分享你的看法吧。