Sunday, August 31, 2014

分享一点经验

发信人: Jason2014 (Jason2014), 信区: JobHunting
标  题: 分享一点经验
发信站: BBS 未名空间站 (Sun Aug 31 18:49:13 2014, 美东)

从版上看了很多东西,今天也来回报一下,分享一下我的经验。希望能对大家有帮助。

简单介绍一下背景。非名校,非牛人,EE fresh Phd,machine learning方向,主要研
究理论和提一些方法。对做research很感兴趣。完全不觉得读PhD痛苦。相反经常自己
没事,周末去实验室做点事。主要目标在工业界找一个research type职位。这是自己
最主要的要求。因为必须是自己喜欢干的才能干的好,而且只要干好了,待遇也不会低
。个人对coding并不排斥,但是觉得coding只是一个工具,更重要的是要实现的内容。
已经有几年没用C和C++了,但是对自己的coding还是很有信心的,在国内工作过几年
SDE,觉得coding至少不是自己的弱项,虽然没有专门刷题练过。

老板很久前就说给一个PostDoc职位,可能也是因为这个,整个找工作的阶段自己心态
都很放松。6月开始正式找工作。8月下旬签offer。总共投了6、7家。面了两家G和A。
拿了一个offer,A的ML scientist。自己很满意这个结果。 在这里要特别感谢版上的
一位前辈给内推GE,虽然由于一些原因最后没成,但是得到了他很多帮助,在这里再说
一声谢谢!不想在这里说太多题目细节,一是签了NDA,更主要的是我不赞同刷题,还
有一个原因就是好多细节已经忘记了(汗)!

先说一下G。申的是SDE,那种不定职位的。不是很符合我的要求。问G家有没有
scientist职位,说是很少,但是SDE也是R&D,后来证明这并不是一个好的选择。一轮
电面,直接就是编程。题目出的很好,是那种有扩展性的。傻子都能给出最基本的答案
,但是要想给出最优解,还是要动动脑子的。尤其是向我这种没刷过leetcode的。通过
和interviewer的讨论,最后给出了他想要的答案。又问了一些code相关的其他问题,
big O和有些参数怎么选之类的。

然后是Onsite。行程G都给安排好了,非常不错。5轮onsite,一轮是design,问怎么设
计一个web server,给了一些限制条件。哥是做ML的,完全没弄过web server好不!!
!凭借着哥N年前看的一点linux内核的书,给他瞎说了一通,不过个人认为还是比较靠
谱的,虽然不专业。剩下4轮都是coding。都是data structure和algorithm。其中有一
轮简单说了一下哥的research,就15分钟,连四分之一都没说完,哥可是灌了15篇水的
人呀!!!这也是我对G家面试最不满的地方。等会具体说一下哥的观点。刚面完的时
候,其实哥自我感觉还是挺好的,因为我充分展示了自己思维发展的过程。这几轮面试
一开始interviewer问我知不知道一个这样的一个问题,哥都说不知道,确实不知道!
但是经过了和interviewer的探讨,虽然中间会出一些小问题,最后都给出了
interviewer想要的答案。不过,最后G还是没要哥。总结经验,两种可能。一是
interviewer问的问题和我的方向差的太大,那个web server的问题。另一个是没刷过
题,而且几年没用C了,难免有些生疏,肯定不如刷过题的给人感觉好。一个小插曲,
店面的时候用到strcmp,估计地球上的SDE都知道的,哥居然不记得返回值是什么了。
店面的小哥很耐心的给哥解释了,赞一个!

再说一下A家,哥申的是ML scientist。但是HR一开始没给准信,说看面试结果定是
scientist还是SDE。两轮店面,都是一半时间问ML,一半时间问coding。第一轮问ML主
要集中在classification。最后问了一个coding的问题,哥说可以用递归函数来做,
interviewer说可以,但是不是最优解。哥想了一会,没思路(没刷过题的坏处),问
interviewer能不能给点tips,interviewer问哥知不知到dynamic programming,答曰
不知道。当时感觉interviewer(是一个老中)都有点无语了。憋了一会,跟哥说“要
不这样吧,给你两个小时的时间,你上网查查啥是DP,然后把程序给我发过来,两个小
时以内”。哥表示很感激,赶紧上网看DP是一个什么高大上的东东。结果一看,这东西
哥知道呀,不就是HMM里面Viterbi的思路吗。赶紧写了代码,一个小时内给发过去的,
还特意加了一些注释以体现哥software development的基本功和几年SDE的经验!对这
位老中大哥还是很赞的,没有他放这一马,不可能有后面的机会。第二轮店面应该是一
个白哥,上来先让哥讲自己的research。在这里还要插几句话,哥做的比较偏理论,而
且研究了几个比较基础的topics,刚开始找工作的时候自我感觉还挺好,因为这些
topics应用的面很广,觉得只要是做ML的,应该都知道些,应该很容易找道共同语言的
。第一轮店面的时候哥讲的是likelihood estimation,结果那位老中大哥表示不能
follow。这第二轮,哥心里想,likelihood有点偏,那这次哥讲probability density
estimation,做ML的总应该知道probability density吧。结果讲完后,白哥停顿了几
秒,说我们聊一下computer vision吧,又没找到共同语言!哥没直接作过computer
vision的,勉强跟他讨论了一会。白哥看哥很吃力,问哥还有别的什么经验,找一个共
通的话题聊(很nice,赞一个!)。哥说语音方面的应用作过一些。白哥想了一想说,
我们还是聊图像吧(我晕)!又聊了一会图像,然后白哥出了一道coding的题,很简单
。不过当时哥已经觉得这次挂掉了,coding的题也没答好。面完之后哥觉得很郁闷,因
为觉得没有发挥出自己的水平,明显在聊computer vision的时候,哥应该和他聊一聊
computer vision用到的方法了,这方面哥还是有一定研究的,结果太纠结于用什么
feature了,在这方面完全没有经验。哥被G家拒的时候都没觉得这么郁闷,因为G家面
试的时候我已经展现我的水平了,你问web server的问题,我就不应该会。不过几天后
竟然收到A家HR的信,要打电话谈一下onsite的安排,哥觉得很神奇。自我安慰一下,
可能是白哥没找道拒我的理由,就让我过了(谢一个!)。

onsite有五轮面试加一个一小时的presentation。心情很激动,套用一句歌词就是“我
一大中午早早的跑去上自习,心里琢磨着大学生活是多么美好啊”,终于让我展现我花
了四年的工作成果了。侃了一个小时,interviewer的问题主要集中在我的这些算法在
实际工程中能用的上吗,答曰虽然我没有把我这些算法用在实际的数据上,但试验室有
别人在用。而且哥通过两轮店面深深的体会到了找一个共通语言的重要性,所以特意加
了一页slide,讨论了一下这些理论和实际的联系。最后两页是哥的paper,密密麻麻15
篇,尤其自豪。一个interviewer问可不可以把这些paper给他们发一份,哥求之不得,
正愁没机会BSO呢。五轮面试里面,有一轮是coding,主要涉及DP和tree traversal。
剩下四轮都是ML相关的问题,其中第二轮,哥觉得谈的很爽,后来知道这个人是bar
raiser。从哥最近的research likelihood estimation和density estimation,谈到很
就以前做过的语音识别HMM。从detection谈到classification(Fisher linear
discriminant和logistic regression等)。哥给他分析logistic regression为啥好。
从batch algorithm谈到online algorithm。从statistical model谈到information
theory。总之天南海北瞎侃一气。最让我惊奇的是他居然问了我一个Fisher
information matrix相关的问题。FIM虽然在做estimation问题的性能分析中很有用,
但是有点太理论了,完全没料到工业界的人能知道这个,顿时对这位大牛的敬仰如滔滔
江水连绵不绝。总之这一天面的都很爽,(不过不能高兴的太早,G家的onsite,哥也
觉得面的很爽,最后还是没要哥),到最后一个面试的时候,完全不知道这是最后一个
,而且最后一共超了一个多小时。面完后,回旅馆换身衣服,去MIT转了一圈,满足一
下自己名校情节。

两天后的到口头offer,和HR打电话聊了一下,HR很含蓄的问俺有没有什么特别的东西
希望出现在offer上,俺表示没有,很高大上的说俺最关心以后做的工作有没有挑战性
。其实心里特害怕给的钱太少,因为哥特不擅长侃价。还好A家还是比较义气,出的
offer哥也比较满意,不需要去讲价。

总结一下G和A的面试,G家只问coding,A家问coding,ML和一些behavior questions。
Coding相关最基本的data structure和算法一定要弄明白,而且要会用。G家很强调big
O和用的内存大小等性能。面试时要和interviewer多交流,尤其是onsite,要自信的
和interviewer对视。(等会具体说一下信心的问题)。我觉得G家的HR给的建议很好,
把面试当作是一个code review,去和interviewer讨论。题目来了,不要急于去答,先
问一些问题,因为很有可能你原来的理解是不准的,而且通过这些问题给自己争取一些
时间去整理思路,有一些基本的问题,对大多数题目都是有效的,比如一些特殊情况(
可不可能是0,是负数),一些条件的方面的问题(数据量是不是很大)。这些问题面
试前自己就应该想一下,到时候冷场了,就那这些问题过渡,而且还能体现你思维的全
面性。答题的时候不要自己闷头狂写,体现自己的coding能力。应该边写边和
interviewer交流,说你的思路。现在我要做什么,实现什么功能。让interviewer一直
follow你的思路。很多interviewer这个时候就会给你一些提示了,你的思路有没有问
题,有没有更好的办法。G家onsite时,一个题目中的子问题,我想用A方案来解决,但
一开始思路还不成熟,在和interviewer讨论的过程中,他就一直在说另外的一个思路
。后来他告诉我,他就怕我走到A那个方案去,因为大部分人第一反应都是用A,所以他
拼命在提醒我。所以,不论你coding多牛,对这道题目有多了解,张开你的金口,肯定
有好处的。这个也应该在面试前练一练,一是很多老中英文都没好到象中文那样的程度
,而且大部分人编程的时候都希望能自己安静的思考一下,怕被别人打搅了思路(反正
我是这样的)。练一练吧,真的有用!还有就是和interviewer找到共同的语言也很重
要。提前上linkedin上看看他是做那个方向的,或者这个职位的job description,把
里面提到的一些东西提前准备一下。哥就是提前下了几篇computer vision的文章看了
看。有很多东西都是相通的,看了帮你和interviewer找到一个共同的topic,让
interviewer能更好的认识你的能力。

两家的interviewer都很nice,至少我接触到的是这样的,有老中,老白,老印。至少
都能做到客观。我觉得这样也就够了,大家不要希望老中一定要帮老中,能客观对待我
就很满意,如果能耐心的多给提示和机会,那我会非常感激!不要想老中就应该让老中
水果,没人有这个义务,而且也不应该这样做。提高自己的能力才是硬道理。

再说一下刷题的问题。这是一个热门话题,隔壁LZ被拍的好惨。首先我表示对隔壁LZ的
部分支持。在谈我的观点之前,先说一个人生道理,希望大家能好好想想,“我不同意
你的说法,但我誓死捍卫你说话的权利!”。你不同意她的观点没问题,不要人身攻击
。一方面喊老中要帮老中,一方面对自己同胞这么mean。人家只是说了一下自己的观点
,没有必要用一些过激,讽刺的语言。做事之前先学做人。再跑一下题,哥以前在国内
工作的时候,到了新组,有一个哥们水平还是不错的。但是任何人的设计都不可能是完
美的,coding review的时候哥给他的设计提意见,他每次都是不承认有问题,但是讨
论到最后都发现是真的有问题,或者没有哥提的好。不要把这种技术上的讨论马上就上
升到谁的能力强的问题上,他为了不显得自己技术差,每次都是先反驳,可是哥的习惯
是一般不说话,都是经过深思熟虑,有把握后再说的。别人给提意见,先虚心听听其中
有没有可取的地方,即使没有,也不要人身攻击,让人觉得你水平很低。后来这个哥们
发现哥的特点了,大家合作挺愉快的,还经常周末聚在一起玩三国杀。总之,希望大家
好好体会一下上面那句话,对你是有好处的。实在接受不了的人,就不劳您费心回贴了
,右上角有个叉叉,点一下就好。若您实在忍不住,要发泄一下,也没关系,我这人容
忍度比较高,大不了我不说了。

好了回到正题,我个人不赞同刷题,就象反对应试教育一样。我觉得更重要的是对能力
的培养。就拿做ML来讲,很多人就是把一些方法拿过来,run一下看看好不好用。我觉
得更重要的还是要问一下为什么,为什么好用或者不好用。这个方法背后的理论是什么
,对你理解这个方法还是很有用的。回头说说对G家最不满的地方(应该也是唯一一个
)。G家号称要考察能力,考察思维发展的过程。所以非常强调coding。一方面是公平
的,大家都考coding,另一方面也不公平,你不是CS专业的,没刷过题就是不行。哥ML
做了4年,虽不能说有所建树,至少也是知道些东西的。结果你们完全不关心,只问
coding。你可以刷leetcode,在几个月能就能提高coding。可是ML相关的一些数学需要
几年的刻苦学习才能有一定的效果。 coding能不能完全体现基本能力,考察一下这个
人以前做过的事情,是不是能更全面的体现他的能力。我觉得这些还是需要探讨的。

但是反过来说,为什么我是部分支持隔壁LZ。应试教育不好,大家都喊了几十年了,但
没人能拿出更好的方案。同样,G家的出发点是好的,但在那么短的时间里要考察一个
人的能力也是很难的。我个人认为interviewer问的问题,一是应该广,二是应该深。
所以我对A家那个bar raiser的面试就很认可。广,我说什么问题他都能跟我讨论下去
。深,很多问题他会问一些细节的问题,看看我到底是不是真的理解。但这样对
interviewer的要求很高。估计不是每个人都能做到的。所以,要找SDE的人,根据你自
己的情况,适当刷一下,至少先把店面过了。但不应该为了刷题而刷题,搞明白那些方
法,会灵活运用他们就差不多了。没必要非要成为coding达人。我感觉interviewer并
不太在乎你能不能直接给我最好的答案。想申scientist的人更是一样,不会coding是
不行的,但是只会coding更是万万不行的。静下心来把你的专业好好搞搞。

再谈一个自信的问题。很多人说找工作找的很郁闷,投了N封简历,根本没人回映。这
里我希望大家对自己还是应该有些自信。有点站着说话不腰痛的感觉,找到了,现在说
好听的。其实找的时候有时也觉得挺郁闷的。我向Siemens投了简历,那个职位特别符
合我的背景,结果人家根本没搭理我。向F家投简历,一开始好久没回信,过了一个多
月,给回了封信,问我还有没有兴趣,赶紧回信说有啊,哥还opening。结果人家又不
理了。好奇怪,那你问我干啥呢?不过从头到尾,哥都没有失掉自信。自信来源于哪?
没有理由的自信是自大。自信应该来源于自己长期的努力,通过自己过去取得的成绩培
养起来的。只要自己在过去做的好,相信自己在将来也会做的不错!现在的困难只是暂
时的。没必要因为现在的困难来否定自己的能力,那是自悲。哥15篇水不是白灌的,你
不要我,一是这个职位不适合哥,还有哥没碰上伯乐。希望大家拿捏好自信,自大和自
悲之间的关系。通过自己长期的努力培养起自己的自信,然后不要轻易失去它。一个小
tip去争取一个面试的机会?可以在网上或认识的人里找内推,还可以临找工作前去开
一个会。尤其是那种比较大型的,很多大公司都会派人去招人的。这样认识的
recruiter,很多至少会给一个面试的机会的。我的G和A的面试都是这么来的。

好了,写了一堆废话,希望大家能去其糟粕,取其精华。最后祝愿大家都能心想事成!


--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 130.]

http://www.mitbbs.com/article_t/JobHunting/32771773.html

No comments:

Post a Comment