CS fresh Ph.D.,做的bioinfo research,没有相关工作经验,暑假毕业,找工作两个月终于拿到了offer,一直在这个版上潜水,得到了很多帮助,现在也可以回馈一下了。我是文科的本科,半路出家做CS,知道自己不是牛人,一点经验,主要是为了回报在这里所获得的,也鼓励一下还在奋斗的兄弟姐妹们。
虽然是文科出身,文笔却不怎么样,想到哪儿写到哪儿了,请大家将就看看。
先说经历。2月份,一个毕了业去motorola工作的师兄打电话告诉了我一个jobopening,北加的一个IT大公司(称其为A吧),愿意帮我refer。当时我还没开始找工作,一点准备也没有,赶紧写简历,发给师兄。师兄说我写的简历没法看,要帮我改改。这一改就成了他帮我写简历了,拿来一看,的确比我的强多了。这个简历成了我的第一份简历,后来又经历了好几个朋友的修改完善,就漂亮多了。师兄refer了我以后,A公司的HR很快给我打了电话,简单聊了一下,约好了电话面试的时间。我找到这个版,恶补面试基本知识,复习C++。电话面试出奇的顺利,问了data structure, C++,一些简单的brain teaser,聊的相当愉快,面试我的哥们儿后来都开始向我抱怨公司了,这一抱怨就超了一个小时的limit,我也不用费劲想问什么问题了。一个星期后收到on site的邀请,一下子就安排到了3月底。期间继续复习C++。 On site可就惨了。几个工程师轮番轰炸,有brain teaser,有coding,有class design,group leader还出了几个现实问题让我提解决建议。我觉得我答得最糟糕的是class design,他们非常注重class的接口设计,不停的指出我写的接口有问题,要加const呀,要不要friend呀,要不要virtual呀,而且几乎每个人都出了这样的题。平时在学校写程序,只要能运行就行了,数据拿出来了就完了,谁想过这些呀,连const和inheritance也是面试之前恶补的呢。知道完蛋了。(虽然我没太想做software engineer,后来收到据信的时候还是有点难过的。)从3月中起,开始正式找工作了。因为平时还很忙,要做TA,RA,还上了老板这学期开的一门课,所以只好每个周末投简历。开始的时候只想找bioinfo相关的,opening不多,沾点边的就都投,基本上每周能投出去20份的样子。过了两星期,没什么太大反映,有点急了,就也开始投IT相关的了。这一下子回应就多起来了,但也没什么很合适的。几个公司第一次电话就再没回音了,有不对口的,有不提供H1的,都没上升到phone interview的高度。还有一个东部IT小公司很有兴趣,phone interview了,又作了一套编程题,都要onsite interview了,谈到待遇问题,和我的理想差距太大,只好厚着脸皮说bye bye了。一下了就4月底了,这时候有点沮丧了,突然来了两个大公司的绣球。B公司,中部小城,bio相关大公司,百年老店,专业对口。C公司,加州,IT新秀,我也很向往。两个公司同时开始了面试的程序。一轮一轮的phone interview过了后,定好了前后脚的on site interview。
先说B公司的on site。几小时的飞机折腾,再加上时差,几乎没睡什么觉,脸都绿了。
从7点半开始一天见了11个人,上到部门的大头,下到干活的小弟,从分子生物学家到生化学家到计算机科学家。70%都有个scientist title。一个个谈下来,后来我都不知道自己在说什么了。他们问的可就五花八门,什么都有了。大头门注重的是我的整体水平,反应和生物学知识。问了不少我做了什么research,用了什么方法,考了我的遗传生物学知识,还关注了我和生物学家之间collaborate的程度和方式。每个头都问我未来5年中的职业计划。一个中头把我作的project的网页都打印了出来,拿着一点一点的问,这个tool是做什么的,那个pipeline是怎么回事。还询问我们是怎么样作documentation的,用的什么工具。其实我哪有什么认真的document过,只好临场发挥,把我想象的应该document的东西交待了一遍,看来他还满意。小弟们问的就实际多了。有问我的research的,有的人对我写的software感兴趣,追问细节,问为什么用这个算法不用那个。碰到一个喜欢suffix tree的,认为我应该用suffix tree解决我的问题,幸好我想到过这个,于是又用了好长时间和他讨论为什么没法用,还讨论了一下suffix tree的好处和弱点。有个生物学家感兴趣我简历里一篇生物论文,想让我详细解释一下,我只好老实说我不懂,我只在这个project里做计算方面的support,他也表示理解。还有一个tough guy,像是个欧洲人,一个大帅哥,可一点笑容没有,追问我为什么要转专业,我说我喜欢CS,就追问我为什么喜欢,什么时候喜欢上的,因为什么喜欢的,一定要详细具体。我说我喜欢编程,又问我为什么要搞bioinfo,还让我解释我以前的文科专业和CS有什么不同。我说话的时候他就用他那双湛蓝的大眼睛盯着我,要在几年前我肯定就吓慌了,但这几年跟着我老板,也锻炼出来了,我老板也爱用他的大眼睛盯我,所以这会儿我也不怕,他盯我我也回盯他。他让我说说为什么觉得自己合适这个职位,我就blabla说我的background多么多么fit,说我多么喜欢,然后总结一句话,I’m the perfect guy you are looking for。然后他有半分钟没说话,就盯着我,我也盯着他。于是他就笑了,结束了我们的谈话,说很希望我能加入之类的话。这期间也有我放松的时候。面试中间一个印度人,非常有亲和力,总是笑咪咪的,上来先聊天,说他也是和我一个大学系统毕业的,又在哪里哪里做了postdoc,说我们学校附近有什么好玩的地方,我毕业前一定要去。让我放松了不少,发挥的就比较好。感觉很不错,他们喜欢我都表现出来了,HM总结时说他听到很多positive feedback。
我也很喜欢这个公司和这个职位,心里说就给我这个职位吧,当然也告诫自己不要报太大希望,以免失望太大。回来后照着本版前辈的教导发了thank you letter给每个面试官,有回的有不回的,回的人都十分热情,也说了good luck,看来说good luck并不exactly等于你没戏了,嘻嘻。一个多星期后就给了offer。
再说同时期C公司的on site。当时见了6个工程师,其中一个陪吃饭。问的全是算法问题,有的要写code,有的要pseudo-code。也问了些我的research。没什么可说的,我把这些问题列在下面的问题篇。要提的是一个印度GG,他是最后一个面试我的,我们聊的还不错,他就把面试时间从1小时延长到1个半小时了。我觉得他是我能拿到offer的决定人物。期间他问到我一个问题,给一个dictionary和一个password generator,
怎样设计算法避免generate出来的password出现在dictionary里。这没什么多说的,一定是hash了。我说完了以后,就又加了一句,说如果dictionary在增长,用bloom filter会更好。他一下子很感兴趣,我就给他说了说bloom filter,结果我说错了一个地方,他一眼就看出来了,给我指出后,我们的话题就转入讨论bloom filter产生false positive的概率和universal hashing了。从这时我看出他对我感兴趣了,就找机会跟他谈了我的research。他问我是否还有别的面试,我老实说有,当然也强调C公司在我的top list上。他表示理解,说他当年也是同时面3家大公司,都拿了offer,是他现在的manager说服他来这里。能感觉出他很牛,不是在吹牛,我只有佩服的份了。后来C公司在我拿到B公司的offer后3天也给了我offer。
现在谈谈感想,这时候我有点思维奔越,逻辑不清了,大家自己清理思路吧。首先我觉的脸皮厚,自信心(没有也要装出很有自信的样子)很重要。我碰到不会的问题都会向人家要hint。适当的玩笑也可以调节气氛,总之别觉得自己被羞辱了,尽力表现自己。
英语口语也帮了我不少。我平时爱说话,老公老嘲笑我语法问题多,一会儿没动词,一会儿乱用介词。但我都不在乎,只管把意思表达出来。回答问题的技巧也很重要,碰到不会的问题,就讲讲自己的理解,拉点别的相关问题说说。碰到会的,专精的问题,要大大的发挥,如果对方有兴趣的样子,就多说些,再拉点相关问题也说说。B公司一个大头考我什么是central dogma,我答完了以后顺便说了说我上了些什么什么课,参加过什么什么培训班,对这些知识都很了解(其实心里在打鼓),又逬给他一堆生物术语,拍胸脯保证自己和生物学家合作没问题,他就再不考我生物知识了。C公司有的算法问题不难,我也借机发挥了一下,一下给几个算法,一一分析它们的时间复杂度,空间复杂度,优缺点。这就要说说做TA的好处了。我做了几个学期的本科算法课的TA,经常给学生讲解著名算法,分析复杂度。面试的时候也象给学生讲课一样的讲解,效果不错。再有呢就是注意一下自己team player的形象。B公司好几个人都问到这些research都是你一个人的contribution吗?我才不相信他们真想知道这个呢,就想给我个套子钻,我才不上当呢。当然说这是整个team的功劳呀,我在哪些哪些工作中起了主要作用。再有呢就是要显示自己的热情,你喜欢你就说嘛,你不说我怎么知道你喜欢呢。我总是强调自己的passion,说这是我的dream position,在聊天的过程中和thank you letter里多用一些very impressed,incredibly positive environment,knowledgeable and nice people。不要吝啬自己的赞美,你要是听别人说喜欢你所在的公司,喜欢你们的project和team,你也会很高兴的。再再有呢,对自己简历的修改也很重要,我的简历是在不停的改,学校的consultant帮忙改,朋友们帮忙改,自己也在改。对B,C公司我投的是不同版本的简历,都是根据职位改过的。对自己的工作的总结提炼也很重要。自己的research是自己几年的积累,不可能几句话就给别人讲清楚。针对你的听众和他的反应,要调整讲解的深度,一般我就讲一下我要解决的是什么问题,然后说明我解决的很好(不好他也不知道),如果碰到专业人士才讲具体算法。这样保持了自己的神秘感,别人觉得你的research很牛呢,而且也不至于太具体而boring。再再再有呢,面试前如果能要一个面试人员的安排,google一下他们的paper,看看他们都做什么,面试的时候也多一个话题。我在出发前一天得到B公司的名单(C公司不给我),就看了一整天他们的paper和patent。对一个我感兴趣的research的主人提了他的作品,问了问题,表示了佩服。他很惊讶,问我怎么知道他的工作的,我也老实承认我昨天得到了面试人员list,google过了,并请他原谅我google了他。他看起来很高兴,还说我flatter了他。我赶紧真诚表示是想学习,不是想flatter。关于问面试官的问题,我用了本版前辈们教导的基本问题,比如你为什么选择这个公司呀,为什么这个部门呀,你的工作中有什么challenge呀,本部门在公司中是什么地位什么功能呀(这个对大头问),你怎么evaluate我的表现呀,team里是怎么样的cooperation呀(这两个问team leader)。我还加了些自己的问题针对特定的人和情况。基本上我就想象明天要来上班了,我想了解些什么。这样就能问出些有点特别有点针对性的问题了,B公司有个面试我的人让我提问,结果被我问得,开玩笑说怎么感觉像是他自己在面试呢。
最后也是最重要的呢就是人脉了。每个人都多少有点自己的人脉,但咱们很多人都不好意思麻烦别人。我开始也是,后来明白其实你觉得是很麻烦人的事对别人来说也许不是什么大事,即使是不小的事,朋友们还会很高兴能帮到你的。我在去面试的飞机上和邻座聊天谈到我在找工作的事,她听说了我的经历后还给我留了地址说愿意帮我refer去yahoo。连陌生人尚且愿意帮忙,何况自己的朋友呢。我在这两个月中得到了朋友们的很多帮助,虽然没有得到更多refer,但他们的帮助对我拿到offer也是很重要的。在motorola的师兄不仅帮我refer,还帮我写了我的第一份简历,直接揭开了我找工作的序幕。他告诉我要把我的文科经历写上,说反正不会hurt,要我把我的GPA写上,说有的公司还是会看的。结果是真的,B公司的HM就说对我感兴趣不仅是因为我的背景match,还因为看到我是一个quick learner,我的专业跨度这么大,还学得不错,所以就给我打电话试试。我在oracle的朋友帮我改简历,建议我写上我的几个与IT职位相关的课程project,还答应我有合适机会帮我refer去oracle工作。ebay的朋友给我讲她当年的面试经历,告诉我要准备些什么注意些什么。我去北加面试A公司的时候,一对朋友还带着女儿去接我的飞机,请我吃饭。在Wisconsin Madison的朋友在我面试B公司前帮我分析面试人员名单,哪个人是作决定的人,哪些人是大头,哪些是小弟,帮我确定自己的形象,是当偶像派还是实力派。我在broadcom的朋友更牛了,就是我的军师啊,每次我面试完他都帮我分析面试官为什么要问这个问题,想从我这里知道什么,我说了什么以后他为什么这么反应,我什么地方做的对什么地方不对,拿到onsite进入下一轮或是offer的可能有多少,下次要注意些什么。这些朋友们都是在用他们的工作经验来指点我应该怎么表现出professional的形象,让我受益匪浅,上面谈的感想有些是从跟他们的谈话中总结出来的,也没注明出处,在此表示感谢。也要感谢我老公,他是个大牛,可惜和我不是一个专业,没法给我更多的帮助,可是平时他对我点点滴滴的“
教诲”也深入我心了。我要说生我者父母也,教我者老公也。
最后呢,对女同胞们说一点小tip,咱们女工程师在男工程师占主导的领域里还是占一点点小便宜的。我这些面试中见的面试官都是男的,他们不知不觉的就会对我们降一点点(只一点点哦)要求的。我的军师告诉我说要打扮的漂漂亮亮的,当然不要花技招展,要赏心悦目。说男女两个candidate,如果能干一样的活,他们会愿意招那个漂亮M
M。(他今天晚上要跪主板了。)女同胞们好好占这个小便宜吧,咱们也该弥补一下在别的地方吃的性别亏了。
老公说我太唠叨了,好,不说了,下面是面试问题篇。这里面包括了我碰到的phone interview和on site interview的问题,太概念性的我都没列。也没分开各个公司,没什么顺序,想到哪儿写哪儿,也有可能有漏了的,也有可能有记错了的。大家别太过追究。
1. 设计一个大富翁游戏,你要怎么写class。
2. 一个integer乘以7,不许用乘法怎么做。
3. 一个9X9的棋盘,有多少个square?nXn呢?
4. 找longest palindrome。算法,复杂度分析。
5. 什么时候要pass by reference,什么时候by value。
6. 要不要用multiple inheritance,为什么。
7. 有些人debate在java中compiler比C++的高效,你认为他们的论据是什么?
8. C++里fstream class的destructor会自动close一个文件,这是不是一个goodpractice,为什么?
9. 设计一个画图软件,会有一些circle, rectangular, square, etc. 可能会要画出这些图,可能会rescale这些图,怎么写class。
10. 设计一个string class,要有copy constructor,常用的operatoroverloading,写code。
11. java中的hard reference和soft reference都有什么用,如果给你这些功能,你能设计出什么东西来。
12. 下面的程序想打印20遍hello,但是有错,你把它改好,但只许动一个字符。
int n = 20;for( int i = 0; i < n;="" i--="" )cout=""><>
13. 一个array里从1-999的integer,只有一个重复的,要找出它来,不管时间空间,几种办法?
14. 写程序实现Newton Square Root algorithm。
15. 一个singly linked list,不许改node成员,查有没有cycle,如果有,
cycle有多长,cycle的头离list的头有多远。
16. 只用stack(可以用多个)实现MinStack,也就是除了stack本身的功能外还要能return the minimum key in the stack,但是任何操作必须都是constant time。
17. 一个unsorted integer array,一个integer w,问array里有没有两个integer之和等于w,怎么找,要是想知道有几对这样的pair呢?
18. 给一个dictionary和一个password generator,怎么检查generator生成的password是否在dictionary里面。如果在手机上怎么作。(受memory的限制)
19. 一个屋子,问多少个一分硬币能把它装滿。
20. 让你写C++的garbage collector,你怎么写,有些什么办法。
21. perl里面有些什么样的package可以用在database的implementation上。
22. 一个大楼,三个门五个窗,问看门老头儿的奶奶哪年死的。
哈哈,最后一题是开心。现在就想起来这么多。大家也别问我A,B,C公司都是什么了,我的朋友们肯定认出我了,就让我在不认识的朋友面前保留点神秘感吧,让我也假装一把牛人。其实我知道自己在找工作的过程中实在是很运气,朋友和老公也帮了不少忙。我的经历不一定对你有什么借鉴意义,但说出来也是对我从这里所获得的做一点点回报,如果能对哪怕一个人有点启发,也得其所哉。请大家不吝赐教。最后祝愿大家都早日拿到自己的dream position!
评论 (0)