目录
正在加载目录...

TikTok SWE 面经|简历深挖比 coding 狠,手写 HashMap 还要求 run code

TikTok SWE 的 VO 面完了,简单记录一下。整个流程下来,感觉他家的 coding 难度没有想象中高,真正花时间的是简历部分。面试官会围绕你写过的项目和技术栈一直往下挖,不太满足于“用过什么”,经常会追问为什么这么设计、底层怎么实现、遇到过什么问题。很多回答如果停留在表面,基本马上会被继续追问细节。

Coding 这块也和传统刷 LeetCode 的感觉不太一样,除了算法题,也可能会碰到偏 OOD 的设计题,而且写完代码后不是简单讲思路,会要求你实际跑一下,验证结果。一共四轮,一轮 60 分钟,时间安排比较紧。

TikTok SWE 面经|简历深挖比 coding 狠,手写 HashMap 还要求 run code

自我介绍

开场先让我简单介绍一下自己,我大概讲了两分钟多一点。后面复盘的时候发现,自我介绍其实挺影响后面的节奏。你前面怎么铺垫,面试官基本就会顺着哪个方向往下问。我最后提到的那个项目,因为展开讲了一点,他后面直接从这里开始深挖。

所以个人感觉不要把自我介绍变成单纯念简历,可以稍微设计一下顺序。自己比较熟、能聊深的项目可以放后面重点提一下,方便面试官接着问。反过来,那些参与没那么深或者细节记得不清的经历,不需要主动展开,不然很容易给自己挖坑。

简历深挖 + BQ + 八股

这段大概 25 分钟,三块内容压在一起,是全场最难受的部分。

先是项目。上来问的是最近的实习和”你做过最复杂的项目”。问题都特别具体——为什么选这个方案、当时还有别的选项吗、上线之后效果怎么样、最大的坑是什么。

我聊到一半才反应过来他不是在听我讲故事,是在验证我到底有没有真参与。真做过的人细节是张口就来,编的第三层就露馅了。

中间穿插了几个 BQ,不多也不难,团队冲突怎么处理、deadline 紧的时候怎么排优先级这些。不是重点,但答空了也拉分,我尽量把故事跟前面聊的项目串起来了。

然后是八股,全都从我简历里的技术栈来。碰到两道:

一道是 Java 的垃圾回收怎么工作的。我说了个大概,他立刻往下追——分代是怎么分的、为什么这么分、GC Roots 有哪些、不同收集器怎么取舍。你要是只会一句”自动回收没用的对象”,这题就完了。

另一道有点意思:C 为什么不支持函数重载。这题答”因为 C 是面向过程的”是不够的,得说到编译链接那层——C 的符号表不做 name mangling,函数编译完符号名就是函数名本身,同名的链接期直接冲突;C++ 会把参数类型编进符号名里,所以能共存。

这段的结论就一句:你简历写啥他问啥,不敢展开的东西就别往上写。

Coding

题目风格挺意外的,偏 OOD,不是 LeetCode 那种。要求实现一个固定容量、<int, int> 的 HashMap。而且写完要真的 run code,不是写完了事。

我的做法是拿一个大小 1000 的数组当桶,每个桶挂链表,拉链法解决冲突。

put 先查 key 在不在,在就更新值,不在就头插。get 就遍历对应桶的链表,找到返回值,没有返回 -1。rem 稍微麻烦点,删的是头节点和删中间/尾节点的指针操作不一样,这里最容易写错,我是特意分开处理的。

main 里我演示了几种情况:故意让几个 key 落进同一个桶看冲突处理、更新已有 key、查找、删除。这个演示我觉得挺加分——既然要求跑代码,那他就是想看真实场景下你的实现对不对,尤其是冲突那块。

也听说有人碰到的是常规题,比如有序数组双指针去重——一个指针往后走,每次先把当前元素收进结果,然后一路跳过后面所有重复的,直到遇到新值。所以他家 coding 的跨度真挺大,从手写数据结构到常规双指针都有可能,别只押一边。

反问

最后留了 10 分钟。这时间不短,别浪费在那些一查就知道的问题上。

我问的是团队现在在做什么、这个岗位前三个月大概负责哪块、他们的 code review 和上线流程怎么走的。最后还问了句”你在这个团队感受最大的是什么”——这问题挺好用,把球抛回去让他聊自己,气氛立马松下来,也能真听出点团队的实际情况。

上岸经验分享

老实说我一开始没想找辅助——想着都是自己简历上的东西,还能被问倒?结果第一次 mock 就被追到无话可说,才服气。后来跟着 InterviewShow 的 TikTok 专线做了几轮,真场上那些追问都是复现的感觉。这钱花得不冤,尤其在他家这种深挖狂魔面前。

END