以下是LZ准备的流程:
从Cracking the Coding Interview入手,把Data Structures,Concepts and Algorithms,以及Advanced Topics下面的章节非常仔细地过了两边。把每一章自己觉得重点的的部分copy到OneNote上方便之后复习,然后保证每道例题都能非常快地回忆起解法。为了节约时间,这个过程LZ更多的是去记忆。
新版的CTCI加入了Additional Review Problems。LZ很粗略地过了一遍。一般是直接看答案搞清楚解题思路就过了。
花了大概两周的时间把CTCI的内容看完,准备开始在LeetCode上面刷题。因为没有跳槽的经验,不知道会需要多长时间准备,LZ开通了一年的LeetCode Premium。事实证明,这是LZ这次准备过程中最明智的投资之一,确实帮助LZ在刷题的选择上避免了一些弯路。
LZ有两个刷题策略。一个是按公司tag分类,然后从最高出现频率依次往下刷。LZ刷了的公司依次为微软,亚麻,领英,谷歌。前三家都是刷了top 50,谷歌因为时间问题只刷了一部分。另一个是按topic分类,每个topic大概刷了出现频率最高的前10~15道。LZ一共刷了281道题(86 easy, 143 medium, 52 hard)。
LZ对于hard题的态度是不主动不拒绝,刷不到就当没看见刷到了就跟它死磕。52道hard中大概有一半左右是LZ自己想出来的(虽然有些时候到最后submit成功需要花好几个小时),剩下的就看高票答案。最关键的是举一反三。所有刷题中学到的知识跟技巧都记录到OneNote里面。
时间上来讲,LZ是周一到周四每天晚上学习2到3个小时。周五休息。周末如果不跟朋友出去玩就全天学习。
电面让找两个sorted lists的交集跟合集,follow-up是如何并行化处理,难度medium。
Onsite除去recruiter meeting一共六轮,3轮technical,3轮behavior。
Technical两轮算法一轮system design。Max Stack, Falling Leaves, Design TinyUrl 都是LeetCode上面的原题,难度medium。
食堂感觉不错。不过因为是lunch interview,所以LZ没有太有心思吃东西。
用作competing offer 了