很多刚学 Java 的小伙伴在面试时都会遇到一个尴尬的情况:题目明明看着很眼熟,答案也能背个大概,但面试官稍微追问一句“为什么”,就立刻哑口无言。
今天我们精选了 3 道 Java 面试中出镜率最高的“老生常谈”,不讲枯燥的概念,只讲核心原理和实战场景,助你从容应对!
final、finally、finalize 有什么区别?
这道题简直是面试界的“大家来找茬”,长得像但实际上毫无关系。
String 类就是 final 的,谁也别想改它)。
finally (关键字): 它是异常处理 try-catch 的“老搭档”,通常用来关闭资源(如数据库连接、IO 流)。
try 块里写了 return,finally 还会执行吗?
finally 块里的代码会在 return 语句执行之后、但在方法真正返回给调用者之前执行。
finally 真的不管发生什么都会执行吗?
System.exit(0)(终止 JVM 运行),或者线程被强行杀死、电脑断电等物理因素,finally 就不会执行。
String、StringBuffer、StringBuilder 选谁?
你可能知道 String 是不可变的,但什么时候该用另外两个?
String:
StringBuilder (推荐):
StringBuffer:
StringBuilder 一样可变,但加了锁(synchronized),是线程安全的,因此速度稍慢。
一句话总结: 随手写用
String,循环拼接用StringBuilder,多线程并发才考虑StringBuffer。
ArrayList 和 LinkedList 的底层战争
这道题考察的是你对数据结构的理解。
ArrayList (基于数组):
LinkedList (基于链表):
实战选择:
90% 的业务场景中,我们都是“读多写少”,所以 ArrayList 是首选。除非你真的需要在列表头部频繁插入删除数据,否则请忘记 LinkedList。
总结
面试不是背书,而是展示你对技术的理解。
掌握了这些底层逻辑,面试官再怎么变着法问,你都能从容接招!