String面试核心是掌握不可变性、常量池、==与equals区别、String/StringBuilder/StringBuffer对比及底层实现,需结合源码与JVM内存模型动手实践并讲清原理。

练Java字符串面试题,关键不是刷遍所有题,而是抓住高频场景、吃透底层逻辑、动手写得准。大厂真题看似多,其实集中在几个核心维度:不可变性、内存模型、编码转换、常用API行为、以及字符串操作类对比。下面分几块说清楚怎么高效练。
紧扣高频考点,优先掌握这5类真题
不用从LeetCode第1题开始刷,直接聚焦大厂常考的字符串题型:
-
String创建与==/equals辨析:比如
String s1 = "abc"; String s2 = new String("abc");,问s1 == s2和s1.equals(s2)结果,必须能画出常量池+堆内存图解释原因 -
String、StringBuilder、StringBuffer三者区别:不只是背“可变/线程安全”,要能说出
append()底层怎么扩容、synchronized加在哪、为什么StringBuffer在并发场景下仍可能出错(如链式调用未同步) -
字符串反转与子串处理:像“翻转单词顺序”“左旋转字符串”“替换空格”,重点练
toCharArray()+ 双指针、substring()边界处理、避免String +=这种低效写法 -
编码与乱码问题:例如“GBK转UTF-8时出现?号”,要会写
new String(str.getBytes("GBK"), "UTF-8"),并知道为什么不能直接用str.getBytes()(依赖系统默认编码) -
KMP相关应用:不一定要手撸KMP,但得懂
indexOf()在什么情况下退化为O(nm),以及strStr()题中为何用KMP能优化到O(n+m)
动手写,别只看答案
很多同学看懂了,一写就错。建议每道题按三步走:
- 先合上资料,自己写一个最朴素解法(哪怕用
split()或replaceAll()),跑通测试用例 - 再对照标准解法,重点比对:是否用了不必要的对象创建?有没有边界越界风险(比如
substring(0, -1))?是否考虑空字符串、null输入? - 最后改造成“面试可讲版”:比如反转字符串,不仅要写出
StringBuilder.reverse(),还要能手写双指针版本,并说明时间/空间复杂度
结合JVM和源码理解行为
光记结论容易忘,结合源码看才扎实。例如:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
- 打开
String.equals()源码,看到它先判引用相等,再判长度,最后逐字符比较——这就解释了为什么""和null调用equals不会NPE,但null.equals("")会 - 查
Integer.valueOf()缓存机制,顺带理解String.valueOf(int)为什么不用缓存(数字转字符串结果千变万化,缓存无意义) - 翻
StringBuilder.append()源码,看到内部用char[]数组+count计数,扩容策略是oldCapacity * 2 + 2,这就是性能优势的来源
模拟真实面试节奏
大厂面试不是笔试,要边写边讲。练习时给自己限时(比如15分钟),并录音复盘:
- 是否一上来就写代码?正确做法是先确认题目边界(“字符串是否可能为空?”“是否区分大小写?”)
- 写完是否主动分析复杂度?有没有提优化点(比如“这里用HashMap可以降为O(n)”)?
- 被追问“如果内存受限怎么办?”“并发环境下怎么改?”能否快速反应?
不复杂但容易忽略。练熟这几十道典型题,把每道题背后的原理讲清楚,比刷几百道偏题更有效。

















