今天中午刚收到f家的intern offer, 超级开心。在这个版块看了很多也收获很多。
onsite前天晚上面就就对自己过了一定发个帖跟需要的人分享下自己的经历。论坛上帖
子看了很多,很多拿了FLAG之类公司的人都说自己不是大牛啦,没准备多久啦。 LZ 觉
得都太假了。 所以希望LZ的帖子能真正的对之后同学的人有些启发。也给LZ攒攒RP啦。
首先说下背景。本科西安一个万年211的高校的telecommunication,EE很强(西安的同
学应该猜到了是哪个了)。本科没做过research。春季入学了LA一个中国学生超级多的
学校, 专业CS, Master。没有任何实习经历或者research 经历。因为LZ完全不知道
从哪下手于是就作罢了。 科目修了OS,Alg,DB, ML, Software Architecture,AI
。GPA3.79
1月份下旬开始投的简历,因为有大牛的帮助,有5个refer。结果LinkedIn 和twitter
refer直接被拒,Yahoo 一直没合适的岗位。自己也投了将近10家大公司和4家小公司,
都没有消息(可以看出LZ背景确实不行)。 最后只收到了G 和 F的电面。最后G家进了
waiting pool,F 家一轮oniste 拿到offer。
准备资料:
leetcode + cc150 + Coursera 的 Algorithms, Part I. LZ其实1月5号左右才开始正
儿八经准备面试,之前只是上过学校的算法课。不过简历是寒假就准备了的。
准备顺序:
1. cc150 基础部分(不包括 programming language, memory limit 和 OOD)。 筑
基过程,非常中庸。
2. leetcode 老80 道题。 LZ一开始以为leetcode就是 leetcode.com 不知道有oj 这
么个东西,不过 老80道题有些题目真的非常经典,建议有空可以看看。
3. leetcode oj,一共150道题,LZ是每一题都是自己独立做的,除了 string pattern
类的题目,有一些是抄的。 但是这是绝对的错误,尤其是你去FB的话,string 类的
题极其容易被考的,不信可以翻mitbbs记录。这也是最痛苦的过程。LZ建议不要干别的
事这个时间,集中画2周到3周一题题突破。不要拖太长时间,因为你会发现时间越长越
没动力。
4.CC150 最后两章。LZ是在G 家第一轮面试前发现的这两章,当时吓出了一身冷汗。因
为之前室友问过LZ自己面试遇到的难题都在这里面发现了,甚至一些比较偏门的也能在
这发现。强烈建议练习,背诵!
5. CC150 全书,这段时间也是LZ最迷茫的时候,因为不知道该做什么了。最后决定还
是继续筑基。于是开始重做CC150.
6. leetcode 130道题。如果你之前都是自己做的话,你会发现这个阶段你提高的非常
明显。LZ 没写一道题都会发现 coding 风格比之前的更加简洁,并且做得更快,130题
只用了一周多一点点就全部跑过了。
7. Coursera 的Algorithms, Part I, Princeton Univ. 很多人都觉得 leetcode 刷
通了就能进FLAG。 但是LZ觉得,不管是intern 还是 fulltime, leetcode对付 电面
完全够了,但是onsite 就比较悬了,必须要从算法根本重新复习。所以LZ F家onsite
之前花了2天看了公开课的所有视频,有些章节甚至看了两遍。LZ承认,自己onsite没
用到,但是跟LZ一起onsite的一个CMU的哥们问到了 sparse vector multiplication,
公开课的原题啊!
基本上顺序就是这些,其实每次电面前三天LZ都会用google doc 敲一遍 CC150最后两
章的重点题,因为实在是太经典了。之前的章节也会自己带着做一些。
准备建议:
1。 数据结构必须精通,甚至要回搭建自己简单的数据结构 比如hashmap, linklist
之类的。
2. CC150 是神书,最神奇的是最后两章,
3. 不要浮躁的刷题,有时间多看一些算法课的视频,有些思想没准哪天你就会用到了。
4. leetcode要练精,第一遍做的时候可以尝试多一些,第二次要尽量做到bug free,
代码一次成型,这点非常重要。
5. leetcode上一些复杂的DP其实考得很少,因为45分钟你很难做出来,(面试官当然
会假设你没做过)而且面试官也不一定能确定你做的是对的。真正重要的就是一些
string 类型的小题目。很简单,但是容易错,非常考验代码风格。
6。 做题的时候就要保证代码规范,虽然只有F家注重这些,但是好的代码规范据说会
加分哦。
7. 只用写字板写代码,onsite 前可以找白板练练。
8. coding 要老老实实地练,不管java 还是C++ ,leetcode总有人能跑过的,LZ自己
就是Java 151/151. 所以,少抱怨些,多静下心来做做题。(如果你有跑不过的,可以
给LZ留言,LZ可以把自己代码发给你参考下)。
面经:
都是一些极其基础的leetcode。只有一个facebook二面时候 brain teaser, 面试官很
聪明得给了LZ一段代码,LZ觉得很眼熟,想起来时 CC150 brain teaser 最后一题。于
是一边聊天拖时间一边翻开书看了下,给了他答案。面试官最后非常满意。
其他:
其实LZ面试挺坎坷的,Google电面第一轮是LZ张那么大的第一轮面试,及其紧张。LZ英
语也是半个结巴,所以感觉非常不好。最后一道题竟然还被告知bug。但是LZ 一直找不
到,问他他也说你可以自己找。LZ最后用eclipse测出来没问题就发邮件个面试官解释
了了下自己的思路。竟然最后两轮过了之后面试官主动打电话说不要意思,面试时候看
错了 你的代码是bug free的。 不由的佩服老美native的心胸。 相比下F家第一轮的烙
印就差点把LZ坑死, two sum不给用 夹边的那个算法。LZ给了个hashmap的 被告知有
bug,还给了LZ个test让肉眼debug。真是拼了老命都没找到啊,结束后用eclipse test
, 完美跑过了他给的2个test。当时就惊呆了。。。 不过确实有个小bug,但是跟他给
的test完全没关系。LZ面试的时间就这么被耗尽了。不知道是不是被这个烙印给故意坑
了。不过幸好是refer的,所以recruiter给了第二轮面试,leetcode原题,表现良好,
就直接给了onsite。
所以大家还是保佑别遇到极品阿三吧。不过LZ Google 第二轮遇到的阿三哥还是蛮nice
的, LZ面的不错,爽快的给LZ过了, 还弥补一面悲剧的表现。所以什么地方都有好人
,也有坏人,大家不必一概而论。不过经过被F家一面烙印坑了之后,LZ还是决定,以
后如果当面试官的话,遇到不靠谱的阿三直接难题秒他。
LZ现在也有些不知所措,不知道intern 要做什么,自己能干什么。不过以前一个师兄
有句话对LZ帮助很大,最后送给大家:”当你迷茫的时候或者不知所措的时候,就老老
实实把手边的事情做好就行了,所有事情都会慢慢变好的”。
Data structure:
Link list, tree(BST), graph, stack, hashmap, array, string.
Also: trie, suffix tree, Red-black tree.
Algorithm:
DP, DC, tree traversal, some string pattern comparison algorithm including
KMP, rolling hash.
Most algorithms and data structures are practiced in CC150 and leetcode.