字符串面试聚焦三类高频题:基础操作(反转、回文等,重双指针与StringBuilder配合)、内存对象(==/equals、new String、intern,需画内存图理解)、算法思维(异位词、回文子串等,重频次统计或中心扩展建模),强调机制吃透、边界处理与底层细节验证。

直接练核心题型,不堆数量,重点吃透机制和边界。
抓三类高频真题练手感
校招面试中字符串题集中在三块:
- 基础操作类:反转、回文判断、字符统计、去空格、大小写转换。练熟双指针和 StringBuilder 的配合,比如反转不用循环拼接,直接用 reverse() 或头尾交换。
-
内存与对象类:
==和equals()区别、new String("x")创建几个对象、intern()的作用。关键不是背答案,而是画出常量池+堆的内存图,搞清每行代码在哪分配、是否复用。 - 算法思维类:最长回文子串、第一个只出现一次的字符、字符串排列、同构字符串、有效字母异位词。这类题重在思路建模——比如异位词优先想字符频次数组或排序后比较;回文子串优先想中心扩展或 Manacher(面试提一下即可)。
练法要带反馈闭环
别光看题解,按这个节奏走:
- 先自己手写(不用 IDE),限时 15 分钟内完成逻辑+边界处理(空串、null、单字符等);
- 再对照 JDK 源码或权威解析,看是否用了冗余操作(比如用 HashMap 统计单字节字符,其实用 int[256] 更快);
- 最后用
javap -v看字节码,验证字符串拼接是否被编译器优化、intern()是否真的命中常量池。
绕不开的底层细节必须过一遍
这些点一问就卡壳,建议默写式复习:
立即学习“Java免费学习笔记(深入)”;
- String 不可变,是因为内部
value[]是 final char 数组(JDK 9 后是 byte[] + coder 标识); - 字符串常量池在方法区(JDK 7+ 移到堆),
"abc"字面量一定进池,new String("abc")一定在堆新建对象; -
str1 == str2比的是引用地址,str1.equals(str2)才比内容,且 equals 已对 null 做了防护; - 拼接时:
"a"+"b"编译期优化为字面量;s1 + s2运行期转 StringBuilder.append;final String a="a"; a+"b"也能优化。
模拟真实面试场景
找人互问,或录音自述,重点练两件事:
- 说清“为什么这么写”——比如回文题选双指针而不是翻转再比较,是因为省空间、少遍历、早退出;
- 主动补全“还能怎么优化”——如统计字符频次,若只含小写字母,用
int[26]替代 HashMap;若含 Unicode,则需考虑 codePoint。


















