面完 TikTok 才发现:我以为最难的 coding 是最简单的,最没准备的简历反而差点要命
刚面完 TikTok 的 VO走出面试间的时候我脑子里就一个念头完全跟我预想的反了。我准备了两周重点全押在 coding 和八股上。结果真开面才发现——coding 那道题虽然风格挺意外让手写 HashMap还得真跑起来但踏踏实实写完就过了。真正把我按在地上追问的是简历。我写的每一个技术栈他都问了一遍而且完全不停在你用过吗这层一路往原理、场景、细节里钻。你稍微答虚一点下一个 follow-up 立马就来快到没时间组织语言。一轮 60 分钟我按环节说。自我介绍开场就是让你简单介绍下自己我讲了两分多钟。这块有个我事后才想明白的事你介绍的顺序基本决定了他接下来挖哪。我最后提到的那个项目他张嘴就是从这个开始问的。所以别平铺直叙念简历把最有把握的那个放后面、讲得稍微细一点等于给他递了个话头。反过来简历上那些你自己都心虚的部分一句带过就行别主动送人头。简历深挖 BQ 八股这段大概 25 分钟三块内容压在一起是全场最难受的部分。先是项目。上来问的是最近的实习和你做过最复杂的项目。问题都特别具体——为什么选这个方案、当时还有别的选项吗、上线之后效果怎么样、最大的坑是什么。我聊到一半才反应过来——他不是在听我讲故事是在验证我到底有没有真参与。真做过的人细节是张口就来的编的第三层就露馅。中间穿插了几个 BQ团队冲突、deadline 紧的时候怎么排优先级之类不难但答空了也拉分。我尽量把故事跟前面聊的项目串起来。然后是八股全都从我简历里的技术栈来。碰到两道印象比较深的一道是 Java 的垃圾回收怎么工作的。我说了个大概他立刻往下追——分代怎么分、为什么这么分、GC Roots 有哪些、不同收集器怎么取舍。你要是只会一句自动回收没用的对象这题就完了。另一道有点意思C 为什么不支持函数重载。这题答因为 C 是面向过程的是不够的得说到编译链接那层——C 的符号表不做 name mangling函数编译完符号名就是函数名本身同名的链接期直接冲突C 会把参数类型编进符号名里所以能共存。这段的结论就一句你简历写啥他问啥不敢展开的东西就别往上写。Coding手写 HashMap题目风格挺意外的偏 OOD不是 LC 那种。要求实现一个固定容量、int, int 的 HashMap。而且写完要真的 run code不是写完了事。我的做法是拿一个大小 1000 的数组当桶每个桶挂链表拉链法解决冲突。put 先查 key 在不在在就更新值不在就头插。get 就遍历对应桶的链表找到返回值没有返回 -1。rem 稍微麻烦点删的是头节点和删中间/尾节点的指针操作不一样这里最容易写错我是特意分开处理的。main 里我演示了几种情况故意让几个 key 落进同一个桶看冲突处理、更新已有 key、查找、删除。这个演示我觉得挺加分——既然要求跑代码那他就是想看真实场景下你的实现对不对尤其是冲突那块。也听说有人碰到的是常规题比如有序数组双指针去重。所以他家 coding 的跨度真挺大从手写数据结构到常规双指针都有可能别只押一边。反问最后留了 10 分钟。这时间不短别浪费在那些一查就知道的问题上。我问的是团队现在在做什么、这个岗位前三个月大概负责哪块、他们的 code review 和上线流程怎么走。最后还问了句你在这个团队感受最大的是什么——这问题挺好用把球抛回去让他聊自己气氛立马松下来也能真听出点团队的实际情况。说点掏心窝的写这篇最想传达的一点别把准备的重心全押在 coding 上。TikTok 这家真正筛人的是简历深挖coding 反而是相对可控的部分。老实说我一开始也没打算找辅助——想着都是自己简历上的东西我还能被问倒结果第一次做 mock 就被追到无话可说一段实习讲到第三个 follow-up 就卡壳了我才意识到我以为自己懂的东西其实是用过一次和看过一眼博客拼起来的印象。后来跟着 InterviewShow 又练了几轮每次都能挖出几个我自己没意识到的空处真场上那些追问都是复现的感觉。这钱花得不冤尤其在他家这种深挖狂魔面前。祝各位都顺利。