由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 2014 找工作总结
相关主题
面试Data Scientist需要写白板编程吗?如何快速有效准备面试
目前系统的刷题,题目分类化,求咨询。刷完一遍leetcode之后要干嘛
从地里转一个 大家共勉: 我的求职总结(EE找码农工作,已搞定菜鸟用careercup书和leetcode准备的一点体会
FB的intern和准备的经历看到这个帖子,我结结实实地跪了!!!
终于完整的刷了一遍leetcode我也发个F家面试流水账。
FG面经和感想帮中国人,提供G家内推
工作中如何保持面试水平?leetcode刷三遍,CC150 , EPI各读一遍
F,G,M offer 及 面试经历leetcode已刷五遍还没offer, LZ快绝望了。。。
相关话题的讨论汇总
话题: 楼主话题: leetcode话题: 面试话题: 对于话题: java
进入JobHunting版参与讨论
1 (共1页)
s*********p
发帖数: 130
1
楼主很懒,从12 月拿到offer 就一直想着写一篇面经,结果断断续续的写了这么久。
。。
楼主在圣诞旅行的过程中收到了Facebook 的 Intern offer。拿到了dream offer, 加
入了 dream group,也意味着这半年找工作的过程暂时告了一个段落。
回想这半年,做为一个高年级的Ph.D. 来说,花半年的时间刷题找工作,真心不易。其
实自己找工作的时候从版上收益良多,所以也抱着回报和感恩的心情,也把自己找工作
的经历和教训做一个总结。希望对后人有用。
先说说自己的背景。一般大学CS Ph.D, 研究编程模型和并行计算。第五年phd,之前有
两次在非CS的大公司实习的经历,但不是software development intern。组里以前
毕业的师兄大都去了国家实验室和硬件公司,还没有人去过FLAG。
结果:
投了Facebook, Google, Amazon, LinkedIn,都是找人内推。Facebook 找了大牛校友
内推,最后很快拿到了面试。Google 找版上的国人大哥内推的,也很快拿到了内推。
LinkedIn 推了一直没消息,后来让师兄问了一下,直接据掉了。Amazon到现在也没有
回信。全部是2015 Ph.D software engineering intern.
结果是FB 拿到了offer, Google 面完再也没有音讯。。
先说说面试的过程:
据楼主所知,F家Ph.D intern 应该是2到3轮技术面加一轮选组面试。除非你住的地
址离MPK 很近,他们也许会邀请去onsite,否则全部是电面。技术面就是做题,和
Leetcode一样的那种,没有system design。选组面试就是recruiter 会让你选择几个
你感兴趣的组,如果他们也有兴趣,就可以面试。楼主技术面一共面了2轮,选组面了
一次就match 上了。下面会详细介绍一下面试的过程。
FB 技术面应该是如果你是Ph.D, 面试官也是Ph.D 并且背景和你还比较match.第一轮上
来先随便聊了聊简历和研究的东西,不是问问题,就是聊天,做为热身的活跃气氛。然
后就是一题,和leetcode 上面 minimum window substring比较像。这是楼主第一次
coding interview,即使那题做过了好几遍,也紧张的半死,犯了几个愚蠢的bug。很
快被 interviewr 指出改正了。就做了一题,没有像版上其他人说的一次做2-3题。
即使剩下的时间还很多。所以我的经验是,不求面试中一定要快速做完3题,关键是分
析的过程和coding的熟练程序。对于面试F家,楼主的经验是如果这题有最优解,比如
能用DP,你就直接做最优,除非面试官要求你先写或者先说暴力解。这和他家的公司文
化比较match。。那道题楼主就是直接给了最优解,面试官很满意,结果挂完电话几小
时以内就收到了recruiter 第二轮的通知。另外,对于bug free的要求,楼主的个人见
解是如果你能一遍bug free那最好。假如不行,写代码前口述思路是最重要的,一定要
让面试官在你写代码前知道你的基本思路。至于实现里面的bug, 写完以后一定要自己
再过一遍,能够自己找出来的就比被面试官挑出来的要好。另外,楼主的感觉是最后写
完的代码还是要bug free的,并且之前不能修修改改的太多,毕竟F 家对代码的速度和
质量要求很高。如果是坑坑迟迟写出来的代码,即使正确,我觉得他们反馈一定不会很
高。
FB 第二轮还是一个phd 来面的,并且和楼主的演技比较match。自然聊起来障碍就小很
多。和第一轮一样,先聊研究和简历,然后做题。楼主很幸运,还是leetcode 原题,
merge k sorted listed lists. 面试官很nice, 先做了一个merge two linked lists.
楼主很快给出了思路和实现,面试官很满意,就问了merge k lists怎么做。一步步引
导的。先是说brute force 怎么办,复杂度多少。楼主很快说O(k^2 * n). 然后问了如
何优化,结果说用divide-and-conquer,进一步问了复杂度,O(klogk * n). 问了如
何推导出来的。注意这题是有一个用heap 的方法做的,但是很明显面试官要的是一个
divide-and-conquer 的方法,因为先做了merge two lists, 用 divide-and-conquer
就可以复用以前的mrege two lists的方法了。所以面试中一定要灵活,察言观色很重
要。要知道面试中的考察是多方面的,不仅仅是说把题目做出来就行了,更重要的是要
一个交流的过程。这一轮很顺利,几乎前20分钟就做完了题,还想着会有下一题,结
果人家压根没往下问,直接开始又聊简历和研究(毕竟研究很match), 甚至面试官说
楼主一定能拿到offer,并且很nice 的推荐了几个合适的组。最后楼主也进入了推荐的
组。结果是面试完不到2分钟recruiter 就发信说通过了这一轮面试,直接进入team
fit interview。庆幸没有第三轮技术面。。sigh...
第三轮team fit interview 一波三折, 再所有面试之前recruiter 就给我了一个F 家
intern 可以选组的名单,楼主就凭着自己的感觉选了3个。结果是和里面的师兄师弟
大牛交流了以后,发现他们做的完全不是我想象的那样。所以经验就是千万不能只看名
字就选组啊。。再这里要非常感谢以前本科学校的师兄师弟,还有版上各位大牛的意见
和帮助,最后楼主才去了想要的组。结果给HR说了3个从新选的组以后,一周都没音
讯,完全不像是F家的作风。最后大牛师兄一经打听,说是可能已经招慢了,慌乱之下
就联系到另一个比较相关的组。结果那边已经安排好面试了,我本来选的组有给了音讯
,说是要面试。。。实在是一波三折。。
对于如何准备team fit interview。。recruiter 的解释是不太可能面试coding,会侧
重于简历和兴趣方面。但也有很多人报告说面了coding。楼主的感觉是这轮理论上什么
都可能面,完全取决于HM 了,所以当时那个紧张,题还得继续刷,还在看基本的数据
结构,又在看Java 和 OO 的基础知识,也看了很多FB 的 system design 高频题。但
是楼主运气好,面试官是技术大牛,那个组的创建人,整个软件都是人家写的。。但是
居然没有问任何技术问题,就是随便聊简历和研究相关,然后介绍了一些可能intern
会做的项目,最后就给了口头的offer。结果是第二天recruiter 就发了正式的offer。
准备面试:
最后来说说楼主如何准备面试的吧。
前面已经介绍了楼主的背景,算是众多找工作里面比较弱的了。本科学的偏EE, 基本的
数据结构和算法都不熟悉,也就只听过名字吧。。编程语言平时只用C, 对于OO 的东西
一问三不知,可见楼主的背景有多弱。所以楼主的经历也可能适用于转专业和背景薄弱
的人吧。
楼主是从今年6月份开始正式准备找实习的。因为背景薄弱,又不知从何下手,所以也
走了不少的弯路。这点也是楼主特别想写出来和大家分享的。
楼主开始的计划是先看C++的那个貌似是原作者写的大部头的书,结果是花了将近3个
多礼拜啃完了,结果不会写代码了。。。最直接的的影响就是觉得C++ 深部可测,如果
用C++面试估计会被问死,转而投向Java。所以准备面试第一个教训就是如果只为了刷
题,不要花太多时间看C++/Java 的基础书籍,尤其是大部头的那种,看完只能叫你更
加崩溃。对于刷题,只要知道最基本的语法就行了,可以一遍刷题一边学习。楼主对于
Java 开始一行代码都没写过,刚开始刷题的时候几乎每个method 都要查查书,基本上
写了十几个以后语言方面就没有太多问题了。另外,多看看别人的代码,尤其是对于某
一题别人是怎么写的。楼主在刷Leetcode 第一遍的时候,代码风格及其冗余,基本上
第二遍,第三遍的时候就变得更加简洁起来。
另外的一个教训是,楼主几乎没有任何算法和数据结构基础。在看C++ 的同时也在看
CC150 的重点章节。开始的计划是一周看2章,大概一个月看完。结果是数据结构和算
法基础太差,cc150 每题都做很久而且没思路。楼主的建议是,如果数据结构基础不扎
实,建议上Coursea 上面的普林斯顿的那个Algorithms I, 一定要每一个细节都搞懂,
包括作业题目。楼主觉得如果那上面的算法都能搞懂,基本上大部分的算法面试的基础
部分就搞定了。
对于CC 150 的看法,楼主个人觉得如果以前没有太多做题的经验,还是不要上CC 150,
主要问题是没有test case. 很多时候楼主自己随便写了几个test case能pass 就算过
了。其实很多corner case 都没有考虑到。楼主的建议是即使没有太多基础和经验,还
是直接上Leetcode。如何做Leetcode 的方法楼主接下来会讲,但基本思路就是第一遍
还是按照分类,从简单的做起,对于AC Rate < 15 % 的题目可以先放着不做。直接做
Leetcode 的好处就是有详细的Test case, 可以直接知道这题做对了没有。另外,网上
有太多的资源,博客可以借鉴,即使有哪题不会,也可以很容易的找到别人的解法。而
CC 150 就没有这么方便,况且楼主个人认为CC 150 的讲解过于繁琐。。
楼主浪费了这么多时间,虽然6月初就开始准备刷题,其实真正开始刷Leetcode 的时
候已经7月底8月初了。这也是楼主准备面试最为后悔的地方。假如开始就刷Leetcode
至少能节省2个月时间,这两个月不知道又能够多刷多少遍Leetcode,开多少新的东
西。也许能拿到更多offer。或者早早就拿到offer,不至于像现在拖得那么晚。所以楼
主的建议是,不管有没有基础,直接上来做Leetcode,即使开始一个题都不会做,也不
要气馁。
下面讲讲楼主做Leetcode 的经验。楼主是按照分类来和难度的顺寻来做的。至于
Leetcode 的分类,现在OJ 上面已经提供了一种,另外网上其实很容易找到一个广为流
传的分类,楼主在这里就不列举了。我是按照先做Array / String, 然后Linked List,
Tree来做的。这样的考虑是Array / String 数据结构简单(楼主不是数据结构基础弱
么。。Tree, Linked List都不会。。)。其实后来想想 Leetcode 里面可能也就是
String / Array 这块难题多了,各种 DP 的,字符串处理的, DFS, BFS 都在 array /
string 里面。。。所以对于按照什么顺序来刷,楼主还是觉得因人而异吧,而且也没
必要在这上面纠结太长时间,毕竟以后都要碰见么。。
楼主刚开始做题的时候,一天花至少8小时做题,还要顶着实验室和实习公司的压力(
好在楼主实习的工作内容和平时研究相关)一天也就能刷2-3题,压力可想而知。对
于基础不太好的童鞋,楼主的建议是拿到一题自己先想想,至少应该能想出来brute
force 的解法。如果一个小时都想不出来,直接去找答案吧。;-) 有时候楼主看懂别人
的答案就花好久,更别提自己能做出来了。看懂了别人的答案,最关键的是要自己完全
的实现一遍,通过OJ。切忌切忌拷贝别人的答案,这样毫无意义。如果实在调不出来,
可以先放放往下做,过几天再回来看看究竟是什么原因,这样子就可以把一个问题真正
搞明白。期间,因为受到网上众多大牛的启发,自己也开了一个博客,主要就是把每题
的思路的代码贴上面,算是一个总结。每做一题,就写一个帖子。这样下去虽然开始有
点慢,但是能真正理解一道题目,映像也深刻很多。如果能坚持这样总结,到后面能发
现做题越做越快。
楼主第一遍刷完一整遍OJ 就快10月了,基本上用了快3个月,可见速度多慢。可是
楼主在这里强调的是一定要坚持,万事开头难。开始做的慢不要紧,坚持下来就会发现
越到最后做的就越快。
楼主在做第二遍的时候速度就非常的快了,因为每题不可能完全没有思路。另外,第二
遍做的时候就没有按分类了,因为这样子印象太深,呵呵。对于每题,如果10分钟内
没有思路,就直接翻看以前的博客是怎么写的。期间,楼主建了一个excel sheet把所
有没有思路的题目记录下来,以后留作重点练习。刷到第二遍的时候差不多每天就能至
少10题以上了,所以用了大概两周的时间就做完了第二遍题目。
很多人可能在刷完一遍或者两遍Leetcode 题目的时候可能很茫然,因为不知道接下来
该做什么了。对于大牛也许会有这种感觉,但是对于楼主这样的屌丝,一个最直接检验
Leetcode 做的怎么样的方法就是随机挑出5题,如果每题都能马上有思路,15分钟
写出代码并且通过测试。恭喜您,您的状态可以去找工作了!!显然对于楼主这样的要
求还达不到,所以楼主没有歇着转而又开始继续刷第三遍和第四遍了。
刷第三遍的时候,楼主会更加注意代码的风格和一遍的bug free,并且就像模拟面试那
样在collabedit 上面写,然后贴到OJ运行。为了提高效率,楼主以5题为一单位,做
完5个题再去测试,这样避免做一题测一题的低效率。对于通不过的题目,楼主也不会
去看答案,而是放两天再看看。这时候还是有一些题目一开始没有思路,正如楼主以前
介绍的,我用了一个exceel sheet 来记录每题的状态,用不同的颜色来标记是一遍做
不过,两遍,还是三遍。这样一个很大的好处就是你会发现其实不会做的题目永远是那
么多。这样在第四遍的时候就只做那些不会的题目和以前总是做错的题目了。这个方法
还有一个好处就是在准备面试中,如果你通过第一轮,你不太可能有足够的时间把OJ
在完整的刷一遍。这时候只刷难题和错题就显得效率很高了。这有点像高考时候的错题
本。。不肯否认,楼主在面试F 家的时候就很收益这种方法,因为面试的题目都是在楼
主的“错题本”上面的, 所以印象非常深刻,一遍就写出了bug free 的代码来。
对于Leetcode 准备楼主就说这么多了。其实没有特别的方法,就是坚持和重复。判定
是否刷通关的方法就是拿到一题马上有思路(5秒以内),10分钟能写出bug free的
代码。想想我们当年怎么准备GRE 红宝的,其实是一个思路。
另外对于面经的准备,楼主认为有必要,但不是重点。做面经一方面是为了面试碰见原
题,另一方面是一个练习。但面经的问题是第一没有Test case, 所以做了以后不知道
是否一定正确,正如CC 150 一样。另一方面面经大都网友自己发布和收集,所以题目
本身很多都不清楚。
楼主只有G 家和F 家的经验可言。F 家的感觉是出题比较中规中居,和Leetcode 难度
相当,而且很多原题,版上和网上搜到的面经+Leetcode就足够搞定了。楼主也在自己
的博客里面收集了一些自己找到的F家面经 (http://buttercola.blogspot.com/)。
对于G家,楼主的感觉是他家出题很飘逸,基本上面经不会重复出现。楼主个人觉得,
对于G家而言,能拿到Offer的都是大牛,肯定刷Leetcode 都觉得太简单,并且算法基
础扎实,人也聪明。最于楼主这种撮人还是再潜心修炼一年功再来吧。
楼主废话了这么多,主要也就是希望像楼主一样屌丝的人不要放弃,并且把楼主一些失
败的教训传授给大家。另外,对于职场的见解,楼主认为要时刻保持忧患意识,要一直
坚持骑驴找马的心态,不断学习,不断充实自己,耳不是等着被公司炒掉才想着走下家。
另外,楼主也想借这个风水宝地请教各位大牛如何安排接下来的半年,就是拿到offer
到5月份实习开始之前。楼主在FB 实习的组主要是关于data infra, Hadoop, Hive之
类。楼主以后想发展的方向也是这些大数据处理相关的,比如Hadoop, Hive, 但是完全
没有经验,所以楼主列了一个简单的清单,也请各位大牛指点。
-- Java, 楼主目前对于Java 的经验也就只限于做题和简单的OO 概念理解,买了一本
Think in Java, 不知道有没有必要看一遍(又是一个大部头。。唉。)。这块有点纠
结,因为楼主今后实习时候在F 家一定是用的Java,所以一直想看一遍,有怕看完浪费
时间反而没效果。。
-- Hadoop, Hive, etc.. 楼主这块目前还是一个空白,只是想往这个方向发展。楼主
的PhD 背景是并行计算,所以感觉这块入门不会太难。目前买了一本 Hadoop, the
Definitive Guide, 还没开始看。不知道这块大牛有什么建议。
-- Top coder?? 楼主的计划是在接下来半年继续保持做题的状态。听说 top coder 题
目会难一些?是不是更加适合锻炼思维和能力?Top coder 应该如何刷,还请大牛给建
议?
-- Open Source Project. 楼主一直想进入开源社区,这也是为什么实习选择了做开源
项目的组。想在下半年做一些 MapReduce, Hadoop 的开源项目,不要太复杂,入门级
的那种,不知道有什么建议?
w****a
发帖数: 710
2
恭喜!楼主的intern是去Seattle么?
s*********p
发帖数: 130
3
没。去MPK

【在 w****a 的大作中提到】
: 恭喜!楼主的intern是去Seattle么?
j*******t
发帖数: 223
4
赞,祝你拿到return offer。
C*********e
发帖数: 587
5
赞一个,很中肯的总结,lz加油!
btw,G的话,随机性很大,而且很多人会出有新意的新题,所以纯靠刷题不是办法,还
是算法功力要好

【在 s*********p 的大作中提到】
: 楼主很懒,从12 月拿到offer 就一直想着写一篇面经,结果断断续续的写了这么久。
: 。。
: 楼主在圣诞旅行的过程中收到了Facebook 的 Intern offer。拿到了dream offer, 加
: 入了 dream group,也意味着这半年找工作的过程暂时告了一个段落。
: 回想这半年,做为一个高年级的Ph.D. 来说,花半年的时间刷题找工作,真心不易。其
: 实自己找工作的时候从版上收益良多,所以也抱着回报和感恩的心情,也把自己找工作
: 的经历和教训做一个总结。希望对后人有用。
: 先说说自己的背景。一般大学CS Ph.D, 研究编程模型和并行计算。第五年phd,之前有
: 两次在非CS的大公司实习的经历,但不是software development intern。组里以前
: 毕业的师兄大都去了国家实验室和硬件公司,还没有人去过FLAG。

B********4
发帖数: 7156
6
多谢总结。
你也提到技术面试一般就是网上做题。为啥你一面二面都是见着真人,可以讨论的?难
道你就在FB本地?
s*********p
发帖数: 130
7
没有哈 FB 的技术电面是 phone screen,就是一边打电话,一边在collabdit 写代码

多谢总结。你也提到技术面试一般就是网上做题。为啥你一面二面都是见着真人,可以
讨论的?难道你就在FB本地?

【在 B********4 的大作中提到】
: 多谢总结。
: 你也提到技术面试一般就是网上做题。为啥你一面二面都是见着真人,可以讨论的?难
: 道你就在FB本地?

1 (共1页)
进入JobHunting版参与讨论
相关主题
leetcode已刷五遍还没offer, LZ快绝望了。。。终于完整的刷了一遍leetcode
爆一个恶心的FB小留面试官。电面都答出来了还fail我FG面经和感想
面试题总结(7) - Tree工作中如何保持面试水平?
要不要跟风搞搞big data?F,G,M offer 及 面试经历
面试Data Scientist需要写白板编程吗?如何快速有效准备面试
目前系统的刷题,题目分类化,求咨询。刷完一遍leetcode之后要干嘛
从地里转一个 大家共勉: 我的求职总结(EE找码农工作,已搞定菜鸟用careercup书和leetcode准备的一点体会
FB的intern和准备的经历看到这个帖子,我结结实实地跪了!!!
相关话题的讨论汇总
话题: 楼主话题: leetcode话题: 面试话题: 对于话题: java