[更新Google Intern Interview 过程解释]
感谢很多朋友来信。鉴于大家都很关心Google Intern的过程,我来详细的说说吧。Google intern interview的过程好像和以前不太一样了,目前在发正式offer前,需要经历2轮电话interview,然后会进入一个candidate pool,由manager来挑选,这个过程叫host bidding.
1. 电话interview: 都是google的开发人员来面的,所以比MS的HR难。当然从另一个方面来说,因为开发人员更容易理解你的code,你更容易和他们沟通。每个人大约2道题。其中一个人两个都是算法。另一个就会问一道概念题(当然,是很多小概念),一道算法。面完后,他们把feedback发给HR,如果两个人对你的评价都是positive,那么恭喜,你进入candidate pool 了。一般这个要等待1天到几周不等。
2.我电面是用google doc, 每次写一点儿要保存,有些麻烦。尤其是你要加个外层循环,需要把每一行都缩进,很麻烦。我个人不建议先在IDE里写,因为这是个interactive的过程,Interviewer需要看到你写程序的过程,而不光光是结果。至于打开好多reference,一边写一边看一边查,Interviewer是不容易注意到的。但我当时挺紧张,虽然打开了很多东西,但都没有顾的上看。别忘了,你要一直不停的说话,你总不能一边查网上的题,一边说“现在我在google上搜索一下这个题目”,哈哈。
3. 我听一位师兄说,以前google只要你过了phone interview 就会给intern offer。 但最近几年,可能改革了,一定要先把你match到一个project才能发offer。HR的解释是,以前出现过极个别的情况,就是intern进了pool,但是没有manager愿意带他,那岂不是很尴尬吗?当然,这种情况极为少见。
4. host bidding 是,一定一定要把你简历里做过的每个东西都想的很熟。manager一定是看到你某个经历和他的project match才面你的,可能会面到非常细致。另外,请参见我host biding2, 有些manager是会问概念题的。
5. host bidding 的时间问题。我只能就我的情况来说说,我是tech interview是12月16日,17日进了pool,18日面的第一个host。直到过了假期,1月7号了,manager还没给HR feedback。HR说,一般这种情况就是manager想再面面别人。由于那时已经又有好几个manager bid我了,就给我1月15号安排了一个。本来谈的挺好,但第三个manager坚持要面我,于是20号又安排了一个。21号拿到口头offer. 给我的感觉是,如果你做过的project很多,可能会有很多人面你,由于他们也会等更好的人,所以可能会拖很久。
另外,关于微软,我只有一些猜测。我申请时是SDE/SDET,但最后只给我面SDET。onsite时问了一下周围的申请者,发现名校的硕士同学们大都是SDE,哈哈,惭愧。SDE的题目应该比SDET难吧,因为SDET的题目确实不难了。另外,题都答对了,也不一定能拿Offer,还要看manager是不是nice,是不是喜欢你。
贴一下我Microsoft (MS, fulltime), Google (GG, intern), 和Facebook(FB, intern
)的面试题吧。
前一段时间一直忙着找工作,实习和全职都找,面了上面的3个公司。一直以来从
mitbbs收获很多。感谢小尾羊,长牙羊,asuran等大牛的面经,笔记。 在此奉上我的
面经,希望对后来人有帮助。
背景: 非名校Computer Engineering PhD, 小公司实习一次。
结局: get GG summer intern, get MS SDET fulltime, get rejected by FB.
心得:版上的大牛们都有很多面试准备的经验和心得了,我就说一些对我帮助比较大的
地方吧。
1.公司和申请者的skill set match很重要。我托朋友refer我申请Amazon和Yahoo, 甚
至Epic,连面试的机会都没有。我觉得就是我没有具备他们需要的skill set。所以,如
果你没有拿到一些公司的面试,请不要灰心,更好的,更适合的公司会在后面等着你。
2.面试时主动要题做有时会有好效果。在我两次Google Phone interview时,第一个题
目都没有答好。当然,第二个题目做的都不错。到了我提问的时候,我就直接说让他们
再给我出一道technical question, 因为我对自己的算法还是有信心的。于是,面试官
都很仁慈的再让我做了一道题。我觉得就是因为我这道”讨来的题”做的不错,所以最
后面试官对我的评价都是”quite positive”。
3.最好能在手上有其他公司offer或者面试机会的时候申请面试。大部分公司的HR在面
试时都会问你有没有其他的deadline,表面上是为了能让你在deadline之前得到答复,
其实也是看你这个人是否别的公司也想要。所以建议大家为了保险起见,先从小公司面
起,一是积累经验,二是拿上几个offer这样大公司更愿意要你。当然,公司一般也会
为了能让你在deadline前得到答案,加速处理你的case。
最后,感谢我的老婆和岳母大人。为了能让我安心找工作,她们付出了很多的辛劳。在此表示由衷的敬意!:>
好了,闲话少说,奉上面经, 祝大家早日找到理想的工作!:
Microsoft
Interview 1 (phone interview)
1. What's your most challenging problem in your projects? (I try to use
the STAR principle: situation, task, action, result.)
2. If you can go back in time, what would you do better?
3. What's your preference for the positions in MS? (testing or developer)
4. What's your experience in testing?
5. What's a binary search tree?
6. Suppose you are going to explain this concept to a 5 year old girl,
how are you going to explain it?
7. How to test a calculator (mouse/chair/glasses/whatever)?
8. How to get an applicant's telephone number if you know: First name,
last name, school, email address? (Pressure question, he will push you for
more answers. Prepare for at least 10 solutions)
9. What's the use of binary search tree?
Onsite Interview (SDET in live team)
Summary of questions:
1. Sort 0,1 bit array. Use partition and count.
2. let me give test cases for one of her GUI applications.
3. Given a movie star relation (co-star in one movie) database, given a
most popular star (say A), then find the distance of other star to A. BFS.
4. How to convert an integer array to byte array? How to test elevator?
5. How do you feel about today’s interview, how much things do you learn.
Google
Interview 1
1. Implement a code to do wildcast string matching.
e.g. source: readme.txt, query: *.txt, should return true.
2. check whether a Sudoku is valid. 9*9 matrix, and each row, column and 3*3
cell only contain unique integers (in range [1,9]) or empty.
3. Find intersection of two sorted array A, B.
All above questions need to write detailed codes, check input, and handle
special cases. Need to provide time/space complexity.
Interview 2
1. Lots of compiler stuff which I know nothing.
2. Check whether a binary tree is a binary search tree.
Need to write detailed codes, time/space complexity, any improvements?
3. Sampling of incoming integers, then return one sample with equal
probability.
Time/space complexity, how to prove you are right?
Interview 3
(Host bidding 1)
1. Ask general description of my related projects.
2. Give a general description of his potential project.
3. discuss about some implementation details.
Interview 4
(Host bidding 2)
He has really exciting project and match my background perfectly, many
technical questions though, unexpected. The lesson here is that expecting
technical questions even in host bidding interviews.
1. Describe in detail of your previous related project. (Android, Google
API, PhD research)
2. The major advantages and disadvantages of following languages: C++,
Python, Java. (He asked for at least 3 disadvantages for each language, if
you can only give two, he will continue to let you think).
3. What’s the difference between C# and Java, why you choose C# in one
of your project?
4. Consider you are constructing a system for data synchronization, what
problem will you face, and how you solve it? (I did not do well on this
question, since for my understanding, the data synchronization is normally
among process, or among different users, like the one in source code version
control (Git/repo). I finally understand after 15 mins, he wants to know
about multi-threads synchronization. :< )
5. What is mutex, semaphore, deadlock? Give examples of them. (That’s
when I finally realize what he wants to know about synchronization, just the
classic stuff.)
Interview 5 (Host bidding 3)
The interview runs very smoothly. He basically just talked about which
experiences I have.
Facebook:
First phone screen.
1. Tell me about your self, your PhD research, what do you want to do in
facebook.
2. What’s your applications/projects in Garmin?
3. Do you use facebook a lot? What do you normally do in using it.
4. Binary search, complexity.
5. Bubble sort, best case complexity.
6. Guess a number in a given range, say 1000. (still Binary search).
7. When will java destruct object. (automatic garbage collection for
unused object that no reference points to it, finalize() method)
8. Java stuff: how to avoid other programmer from changing the function.
(Final keyword)
9. What is the transient keyword.
Second Phone Interview.
1. Describe your background, and what you are seeking for. Then he tell
me I am not a good fit for his team, and want to recommend me to the other
team. He even didn’t want to continue the interview. :<
2. How to use stacks to simulate queue. (do not use online tool, just
write and tell him. Use two stacks).
3. How to find the lowest common ancestor of a binary tree, node do NOT
have parent pointers. (Recursion, additional check for the case when nodes
are not in the tree, or only one node is in the tree.) Use collabedit.com,
really awesome tool.
Third Phone Interview.
1. The project they are working on.
2. The projects I was working in research and internship, all resume stuff.
3. Given a linked list, say A->B->C, print it in reversed order. Time &
space analysis. What if I want the original list not changed? How about
multithreads call this functions simultaneously?