谷歌过经

谷歌的recruiter半年前不知道通过什么渠道看到了LZ的简历,主动联系LZ面试。电面推迟了好几次,最后定在四月末。由于缺乏面试经历,LZ第一次电面节奏特别不好,在解决第一个问题的时候花了太长的时间,以至于follow-up没来得及修bug时间就到了。电面以后心态有点爆炸。所幸的是,recruiter给了再电面一次的机会。当时的想法是,第二次机会一定要把握,要跪跪在onsite,于是约了五月末。接下来的一个月里有针对性地做了很多面试技巧方面的强化。主要用了两个网站,一个是 interviewing.io,另一个是pramp,都是完全免费。前者提供三次跟大厂工程师做mock interview的机会,每次一个小时,问题难度跟真实interview相似,结束后会有反馈。
后者是一个网友互相mock interview的网站,每人半小时,问题难度较低,遇到过几次明显没准备的奇葩,优点是频率高。对于LZ而言,mock interview最大的作用是熟悉给别人讲解解题思路以及消除面试紧张感,所以感觉两个网站都还不错。LZ也用了LeetCode自带的mock interview,但感觉上更像online assessment。题库貌似更relevant一些,每周更新一次。
与此同时,LZ也开始给其他公司投简历。首先是微软内部找了几个哥们把简历直接发给他们org的hiring manager。亚麻是先去Amazon.jobs申请然后再让朋友内推。领英是用微软公司账号海投。另外也有通过triplebyte和interviewing.io跟一些公司接触。

第一次电面让实现一个log system,同一句话出现的频率不能超过每10秒一次。Follow-up是怎么把不需要的stale data清除掉。其实整体难度也就easy/medium,但LZ确实没发挥好。。。
第二次电面让检测bingo胜利条件是否已经达成。Follow-up是如何判断两张bingo卡不同。比较简单的数据结构题,easy/medium。
Onsite一轮behavior四轮technical。因为LZ五年工作经验,recruiter表示可以面L5,不过需要把其中一轮technical从算法换成system design。LZ一直觉得system design是很玄学的东西没有特别大把握,所以就还是选择全部面算法题 (L4)。
Technical第一轮让实现一个concurrency throttling system,难度medium。LZ当时有点不在状态所以这一轮面的不是特别好。
第二轮让找出K个sorted stream的交集,难度medium/hard。面试官一开始说的是sorted list,结果后来又改口。问clarification真的非常关键。
第三轮问了两个问题,现在只能想起来一个,是Add Two Numbers II原题,medium难度。面试官着重问了测试方面。
第四轮是一个path finding问题,难度medium。问了两个follow-up,一个是找出最短距离,一个是找出最短距离path。
专门要吐槽一下的是,behavior那一轮的面试官竟然no-show。LZ从东海岸飞过去面试所以这种被放鸽子的感觉很不好。不过这也应该不是常态,因为当天的另外几个面试官都说从来没遇到过这种情况。跟recruiter沟通后第二周电面了behavior (当时LZ已经回到东海岸)。
从面试,到collect feedback,到送HC,到team matching,每一步都有delay。LZ因为被亚麻领英催得紧,基本上每天都跟recruiter要update。即使这样,onsite结束后一个月才拿到正式offer,感觉身心俱疲。
接了offer (真香)。

整体体验/心得
跳槽是科技行业当前最高效的提升收入的方法。
刷题是跳槽最直接最有力的武器。
最重要的不是刷题数量,而是刷题方法。但刷的太少也不行,经典的题型得看过。这就涉及到了刷题选择的优化,再次推荐LeetCode Premium。
小公司看重背景经历,大公司更看重你作为程序员本身的素质 (无关对错,只是LZ的一点观察)。
面过的所有公司难度区间基本上都是medium,没有遇到过无从下手的题。面试的时候一定要think out loud。
去了onsite的公司里面,难度上,谷歌 >= 领英 == 微软 == C3.ai > 亚麻。
LZ在每一场面试前都会扫一遍整理的OneNote笔记,做一道easy的题,稍微调整一下心态。
Practice makes perfect.