我不是一个有毅力的人,从刚毕业工作到这次换工作之前,就从来没有坚持刷题超过1个月。在国内的时候靠运气进了一家硬件厂做软件,然后几年前relocate到了湾区总部。来了后一直羡慕大厂的大包,也一直有在看各种刷题的帖子, 方法,书。但总是看完了并收藏了别人的方法,下载了别人分享的书单,就该干嘛干嘛了。过段时间再看别人晒工资抖包袱的帖子被刺激一下,再看一波刷题方法分享,下载一波书,循环往复……(有一样习惯的朋友请举手)。
. check 1point3acres for more.
直到一年前,自己现有的工作越来越忙,频繁加班,工作压力竟然堪比地里出名的蕉厂。拿着微薄的收入,“享受”着蕉厂的压力,心里非常不爽。再加上娃出生,鸡娃不如鸡自己,才真正下决心刷题换工作了。由于工作确实很忙,一开始给自己定了个比较保守的计划,希望白天能用各种碎片时间花一个小时看系统设计,晚上等娃睡了再花时间专心刷题。
先说系统设计,我是先看了algo expert里25个的 Systems Design Fundamentals 视频对系统设计的基本概念有了认识以后,再慢慢把Design Data Intensive Application 的 Part II 和 III啃完了。然后又看一些系统设计Youtube视频,尤其是有个俄罗斯小哥的“System Design Interview”频道对我帮助特别大。慢慢从只有做简单网站的概念到能应付不是那么难的系统设计面试了。这里说起来过程很简单,但是实际上是在特别忙的工作期间咬牙抽时间一点一点看的。现在回想起来再也不想经历一次了,挺痛苦的。
. check 1point3acres for more.
再说coding。我一开始是撸免费的leetcode,一共40个出头tag,每个tag刷几道题,而且还根据别人分享的经验,每个题做了笔记。后来在买了algo expert账号看系统设计后,发现还是付费看答案效率高,于是想想换工作后收入可以提高,就以投资的心态买了个leetcode会员,这绝对值得,因为省了不少找答案的时间。每天晚上等娃睡着,就开始刷题,一开始经常搞到凌晨1-2点,才能做1-2题。有时候甚至连答案都看不懂。刚开始的1-2月绝对是劝退期。挺过来以后,慢慢的刷题开始比较顺手了,主要是心态调整好了,15分钟做不出就看答案。在自己受打击不想继续的时候,去做做自己之前做过的题会有一定的回血作用。再想想刷一个题等于300-500刀(涨薪幅度/刷题数量),动力就更足了。
在面试的过程中,我遇到了不少国人面试官,发现大家对同胞都很照顾。尤其是Facebook的一位国人manager,phone screen的时候我连题都没有做完,最后没时间了说了一下自己理解的最优解,他还让我把想法写在comment里面然后竟然给过了。Facebook VO的一轮coding,我有一个子方法只写了方法名说待会儿再实现,结果到后来都忘记实现了。虽然是个很简单的方法(构造prefix sum array)我肯定会写,但毕竟没写。那位国人面试官也给过了。非常感恩。
另外一个比较有趣的经历是我面试的时候尽力一直说话(因为听说要think out loud),连敲代码的时候嘴都不停在说,LinkedIn有一位面试官甚至都很“nice”的提醒我可以安静的思考,不用着急说。我想他肯定觉得我是个话痨……(我真不是,只是表演出来的)
.
流水账写完了。这是我迄今为止坚持做一件事时间最长的一次。整整刷了1年题,有时候很累了一道easy也刷一下,基本没有中断过。这是过去一年的刷题记录,中间空的那一个月是在algo expert上刷的(不推荐,题和答案都和leetcode类似)。