前言
在我看来,深入阅读源码是必修课。以常用的 Java 类为例,为什么 ArrayList 支持快速随机访问?为什么它支持序列化?无论是 JDK 作者的设计意图还是自己研读源码,都能找到答案,而面试题往往就源于这些底层原理。其次是实战经验,必须亲手做一个 Java 项目。如果不做,投递相关岗位会吃亏,面试官很难追问出有深度的问题。
一面
面试官深挖了项目细节,询问原理。我提到了单点登录,随后被连续追问直到无法回答为止,表现并不理想。面试官直言项目技术深度有待发掘。
接着进入 Java 基础环节:
- 为什么分为基本数据类型和引用数据类型?String 属于哪一类?
- String 为什么不可修改?这与 final 修饰符有关吗?你知道 final 的具体作用吗?既然了解了底层结构,那它的线程安全性如何?还有哪些类是线程安全的?这三者的区别清楚吗(String、StringBuilder、StringBuffer)?常用方法有哪些?substring 的原理是什么?
- 随后是关于 equals 与 == 的辨析。当两个变量都是 String 类型,例如 String st1 和 st2 时,该如何判断?


