微软Interview的秘密

Robert’s MetaMask
2008年2月26日
cover


本文是“跟我一起来加入微软欧洲开发中心”的后续文章之一,如果您是一位优秀而富有经验的软件人才,能讲流利的英语,并且愿意暂时离开中国来参加我们欧洲的开发中心,那么我们最近正好有一些职位空缺,这对热爱软件技术的开发者来说可能是一个不错的机会。

当然本文并不可能透露真正的秘密,只是考虑到国内很多朋友对我们招聘、面试的过程不太了解而写一篇文章介绍一下。其实,这里所写的招聘过程并非微软独有,在国外很多软件企业都是类似的。相对而言,中国的大多数公司在招聘软件人才的时候,实在太太太不够严格了(当然可能存在客观困难),希望这篇文章不但能对应聘者有帮助,也能对招聘者有帮助。

面试游击战

Joe on software的Guerrilla Guide to Interviewing是我非常推崇的一篇关于面试的文章,可惜我读的时候已经有些太晚了。 🙂  不过亡羊补牢,为时不晚。如果您有机会读到这里,我强烈建议您立刻先放下本文,去读Joe的文章先。

这篇文章我没有找到中文版,也不知道是这些方法在中国不太适用(你很可能用这个方法结果一个人也招不到,不过这比找到不合适的人要强很多),还是没有足够多人认同其价值。

微软Interview基本过程

微软developer的Interview基本包括这些部分:

  • Coding test / 编码测试
  • Phone screen /电话面试
  • Onsite interview /面试

Microsoft 内不同的group可能有不同的面试过程,但基本上是大同小异的,在微软作为SDE, 参加interview和编程序一样是一项基本工作,谁都得干,我们内部有专门的培训以便让大家能有效地参加招聘的活动。

Coding test

Coding test是参加我们group的必由之路,如果你不能编写正确有效的代码,我想微软不会适合您的事业发展。对我们team而言,即使非常senior的position, 甚至今后未必以coding作为日常工作的position也必须通过coding test.

Coding test的题目不难(至少我觉得不难 :P), 我认为只要读好大学一年级,或者真正喜写程序并且有实际经验就能通过。不过实际情况是,coding test放倒了惊人比例的人。 在来microsoft之前,我过去招聘人的时候也一定要考coding test, 我经典的题目是写一个wc(words count), 过去n年里这个简单的题目淘汰了98%的人,节省了大量的时间和精力。一般投递Microsoft职位的人已经在HR那里经过了一次screen, 所以coding test 通过率不会像我过去的经历那么夸张,但也绝对是令人惊讶的比例。

coding test不能通过,一定就over了。因为后续interview要花费大量人力物力,所以coding test是一个重要的把关手段。

我建议每个来面试我们的人花适当的时间复习一些基本的数据结构和算法,并不需要很复杂的,只是让自己恢复到一个状态。 

Phone screen

通过了coding test, 通常会被安排电话面试,往往会有多轮电话面试,但根据各人情况而可能很不相同。 Phone screen的面试内容比较广泛,可能包括对相关经历和技术的核实,但基本上可以肯定是,你会被考coding question 和design question. 

电话里怎么考coding? 当然借助IM工具这要容易一些,不过如果没有这样的经历,并且不是真正的hard core coder, 这恐怕有些困难。 

回忆我的phone interview, 我以为就是有人和我随便聊聊,准备了一肚子的英文腹稿准备大坎特坎一番,结果对方第一句话就是“Hey, are you ready to write some code over the phone?”, 我几乎晕倒… 好在coding恐怕是我最擅长的事情,所以一阵短暂的慌乱过后对我并没有构成问题。

说实话phone interview中不会出什么难题,只是如果不习惯,加上语言沟通会对面试者构成比较大的压力。我有这些建议:

  • 如果没有理解问题,请interviewer重复直到你理解。要知道interview的时候,如果被interview的人没有听懂我的问题,我会更着急,一定希望尽量让对方理解问题本身。 因此,一定不要稀里糊涂地回答问题,勇于开口提问;
  • 如果你自己认为理解了问题,复述问题,请interviewer确认你的理解和他的理解是一致的; 这我相信是一个技巧,复述问题加深了你的理解,给你争取了更多时间;
  • 尽快反馈,你有了多少想法就尽快告诉interviewer, 你有了部分代码,就给部分代码。 原因很简单,interviewer被长时间晾在电话那头是很难受的,而且你不断反馈其实就能获得更多interviewer的提示,对正确解答有帮助;
  • 如果你在interview的时候可以有internet, 在预约前就安装并给出你的IM,这样可以在IM帮助下让沟通更容易。

Onsite

看到一些海外求职的BBS上很多人都比较担心onsite interview, 不过我觉得onsite其实是最容易的,因为onsite interview您有机会得到更多的信息,从而获得更多提示,而且onsite interview过程互动性更好。

不过我们team的一些onsite interview是远程通过IM, Video conference来进行的,来自中国的candidate, 由于visa的原因很可能是video conference为主,这将是一个比较严峻的挑战。 一般情况下,onsite interview会有连续的多轮,一个接着一个进行,对candidate来说一般是一整天时间。

onsite interview基本上主要内容还是coding和design, 由于microsoft的interview一般都没有题库,因此每个人有自己的问题。靠在网络上搜索”Microsoft interview questions”的结果除了有练习作用外基本上没有任何帮助, 不过如果您在interview之后发布这些问题到网络上,除了可能让你失去可能的offer外,对自己和别人都没有太大帮助。

Onsite interview肯定会有一些紧张的,我有一些建议:

  • 同上,总是首先澄清问题和复述问题
  • 充分聆听interviewer给的提示,onsite interview往往是个互动过程,interviewer往往愿意参与和你讨论(如同一起工作一样),讨论而得出最终的结论是很好的interview表现,因此并不需要苛求自己在听完问题就直接搞定。
  • 遇到困难可以请求提示和帮助,不要愣在那里,或者自己乱写东西浪费时间;
  • 每行你写出来的代码都反映了你的编码水平、习惯、风格,因此不要在白板上写很糟糕的代码,即使是你的草稿;

Offer?

一般来说,Microsoft会比较快给出offer,不会让人等得花儿也谢了,但我们不会当场给offer, 每个interviewer都有自己对interview的独立评价,在结论出来之前,没有人知道结果。 

如果您进入了onsite这轮,那么您已经离offer很近了,毕竟大多数人都在coding test, phone screen中被淘汰了,所以一定要在onsite中尽量发挥好,完成漂亮的最后一击。一般情况下Microsoft并非采用传说中的一票否决(要所有人都给hire recommendation), 但毫无疑问,你要尽量让大多数人给你hire 的评价才可能最终获得offer. 

Reference check

这个专门针对中国的朋友而写,因为reference check在中国从来不备重视,但我们的每个hire在interview通过后都必须有reference check。reference check 需要若干个您过去的直接经理对你给出评价(一般是电话),注意必须是你的直接经理,您的同事、朋友不能给你提供reference, 如果过去你是freelancer或者没有经理,那么你的直接客户、大学导师可能是reference check的对象。 

Reference check体系在西方公司是非常普遍采用的,这确保了每个人事业发展的连贯性,也让人对自己职业生涯中每个过程都变得有其历史意义,很可惜这套体系在中国一直没有能发展起来。

希望上面的介绍让您对如何应聘我们的职位有一个基本的了解,如果看完后觉得这不过是小菜一碟可以自信应付,那么赶紧来这里看看有没有适合您的职位吧:

http://joinmicrosofteurope.com

我相信本文对正在招聘的人也许也会有一些意义,然而由于目前中国的实际情况,我不知道对于startup而言采用类似的方法是否导致一个人也找不到,不过无数的血泪教训告诉我们,招不恰当的人带来的损失是巨大的,对一些追求质量、技术、创新软件团体而言,宁可招不到人也比招凑合着用的人要强N倍,中国传统的“人多力量大”的说法在软件工程中是个荒谬的神话。

* 本文版权没有,欢迎转载,请连同招聘广告一起转载。


(via https://web.archive.org/web/20081009084141/http://robertmao.com/archives/591