Han You bio photo

Han You

Experiences bring wisdom

Github Email

刷题经验


2019/01/09,于纽黑文


点开Leetcode,发现上一次提交还在一个多月前微软onsite的前夜,然后发现之后pony.ai的onsite前几天都没提交过,浪是我浪...


虽然2月初基本就定了学校,但是记录显示3月1号才有今年第一个submission。拿到学校offer时定的sem b每天刷三道题并没有执行。三天打鱼两天晒网,到了五月底才只有四十多题 。直到开始实习才算是有了稳定输出,但八月初实习完后刷到300道左右后又有20多天没刷过题。 9月开学后重新开始猛按tag刷到了400,之后几个月忙于面试就低频维持了一下手感。总结一下, 一路过来的效率还可以,但是走了很多弯路,在这里记录一下,也算是避免以后再犯类似错误。


顺序 or tag?

直到这边开学前,我都是按照顺序刷的。这样做一个很大的弊端就是很难有效的总结不同类型的题。比如今天我做了一道Trie的套路题,记下了大概的套路。但是明天我又按照题号去做其他类型的题了, 两个礼拜后假如我再遇到一道Trie的变种题,那时大概率是没有印象的。也是来这里认识余老师后才意识到了这个问题,开始按照tag来做,基本每一到两天做一个专题,诸如dp,Union Find, Trie, Tree等等。像 dp这种变种繁复的会多花上几天。这样开始刷以后,能在集中的时间里强化不同类型的题目,明显感觉自己各种套路掌握得更好了。


如果时间允许,平时的错题可以记录下来,大概两周后回过来做强化一下印象。尤其是一些比较trick的题,比如Google的一些题。目前我没有发现什么特别好的办法,只能参考记忆曲线强行记下来。

leetcode
2018的Leetcode提交记录
讲题能力

国内面试对算法要求高的公司并不多,只有头条或者一些明星startup会出较多的算法题。对比国内和这边面试遇到的算法题,国内的往往难度更大更狂野,头条这种公司,LC hard家常便饭,有些startup甚至 动辄来几道计算几何的算法题。美国这边的公司还是温和很多,但会更强调你的交流能力。在写题前,大部分面试官会期望你和他探讨思路,可能你已经做过原题,但是面试官是assume你没见过的,所以你需要向 他如何一步步从分析到最终给出可实现的方案。换句话说,你的任务不是埋头写出能work的代码,而是要把面试官当成你的同事,并且以你为主,带他探索这个问题的不同解法,并最终coding实现最好的解法。


作为港本这样一个介于陆本和海本之间群体的一员,本科虽然是在英语环境里,但由于大部分老师的港英以及内地生抱团,并没有练到很多英语能力。所以我想我的英语底子应该和国内来的大部分同学不相上下。自己意识到了 这个问题,来了以后抓紧9月和同学mock interview。平时自己在房间做题时也会边做边讲,不过这个还是比找同学mock效率低。在mock里面,作为面试者当然很好,但是作为面试官可能会学到更多。在作为面试官听同学 讲思路写代码的过程里,会注意到很多可以提升的细节,这些细节是平时作为面试者很难注意到的,所谓当局者迷旁观者清吧。不过有趣的是真正面试时往往交流会更流利一些,可能是没在熟悉的同学面前会更放得开吧。 另外需要注意的是,电面和onsite还是不太一样,onsite当面讲很多东西会更容易。比如dp的题,电面你需要说一大堆,但当面的话你直接在黑板上画个tree再转到matrix就好了。相对来说电面对交流要求更高,可以平时 针对做一下电面的mock。


mock
mock时大佬的java底层教学

之前某次onsite最后manager面时,香港大叔manager问了我一道design题,缺乏经验,答得很艰难,中间提出的各种方案不断被manager找出漏洞否定,自己能感受到整个人很虚了。在送我走时他很告诉我以后 要更自信一点,哪怕不会也要理直气壮地问面试官该怎么办,要把面试官完全当成同事来看待。面试时,面试官不是要招学生,而是要招同事,所以需要向面试官展现你作为同事的能力。 总的来说,中国的学生普遍还是话比较少,可以让自己在面试时尽量活跃尽量跳一点。

关于System Design

对于一些比较热门的startup,new grad面到system design还是比较常见比如。比如知道的Robinhood和Opendoor就明确onsite有一轮system design。个人觉得这对缺乏工业界经验的学生来讲还是挺尴尬的 ,因为对于一个完整的系统来说,各个模块的细节能讲的太多了。某次面试时提出后台做sharding就被面试官就被好好教育了一番。当时面某家startup前押中了题,是design一个搜索房子的listing system。当时找 大神帮我mock了一次给了完整方案。结果面试时的面试官是data engineer,一直在问分布式方面的问题,到后面完全答不上来了。当然题目还是要尽量押的,一般这种startup的设计题都是和自身业务相关的,还是要努力准备。 平时的积累也很重要,哪怕没有那么多项目经历,可以针对学一些相关知识。https://github.com/donnemartin/system-design-primer 这里就有很多system design的相关知识,如果能完整啃下来还是很有帮助的。

design
system design的mock,余老师表示带不动