微软招聘程序

 

坐上了面试官的位置——褚诚云

进入微软后面试别人

干了几年,媳妇熬成了婆婆,也有资格面试别人了。

先是实践电话面试,后来就正式面试。坐上了面试官的位置,也就意识到就像在教室里一样,台上台下的区别有多大。

就我感觉最重要的,面试最终就是要回答这样一个问题,我愿不愿意和这个人以后一起共事。为此,从见到面试者一开始,就开始了观察。不管是交流方面,还是展示出的对技术的强烈兴趣,都会导致面试中的印象分。

当然了,技术上的表现是最关键的。现在微软已经不考脑筋急转弯的题了。我个人喜欢的考题,是一种可以循序渐进,一直提问的问题。也是我了解到的许多其他人喜欢的方式。这种问题开始可以显得很简单,但是可以随着面试者的表现随时调整,引入更深入的技术讨论。 

面试前的准备工作

在微软,如果要想面试别人,必须通过人事部门针对面试过程的培训,以了解基本流程和面试的特别注意事项。哪些问题可以问,哪些问题不可以问。哪些不可以问的问题例如,年龄、宗教信仰、婚姻状况等有关个人隐私的问题。这里说,又不是找对象,谁会问这些问题?!不怕一万,就怕万一嘛。回想起当年自己找工作写第一封简历的时候还把出生年月日摆在上面,无语。

在面试前几天,人事部门会安排好具体的面试流程,并提供面试者的详细简历。一般来说,我最感兴趣的是上面以前做过什么有意思的项目,这样可以具体问一些更深入的问题。不过这里要特别指出的是,这并不是必需的。最看重的并不是面试者以前做过什么,而是其本身的能力。

开始面试

如果我并不是第一个面试官的话,这时候我就应该已经收到前面的面试官的反馈意见了,或者口头,或者通过电子邮件。如果他/她觉得被面试者有什么方面特别需要进一步了解的话,我也可以调整一下面试问题的侧重点。

其实,整个面试过程就是为了回答一个问题,我是否愿意和此人一起共事。决定这个问题的答案即包括面试者的技术能力,也包括其他方面,如是否对这个工作有足够的热情,是否有团队精神,等等。

好,说了这么多套话(自己都要烦了),那就举一个具体例子吧。

观察的过程从我在第一次见到面试者就开始了。当然了,不会特别在意着装,因为微软大多数人都不在乎这一点,尤其是技术部门。如果面试者显得有些紧张,我往往会建议是否要喝点什么,再加上几句今天天气哈哈哈的话,缓解一下情绪。都是过来人嘛。特别指出的,每次我都会问是否要先用洗手间。

因为有一次我刚把一位老兄带到办公室,他就很不好意思地说刚才喝水喝多了,一定要解决一下子。的确这是我的过失。所以从此以后我就特别注意这一点。

如果是午餐面试的话,我的原则是绝对不会在餐桌上问及技术问题。因为我自身有痛苦的回忆。J

一进办公室,第一件事是关门(不过不会放狗J),锁定机器并且把电话关闭,这是我认为对面试者应有的尊重。

面试刚开始,往往先作一个简单的自我介绍。然后开始问一些基本问题,如为什么对这个职位感兴趣。

不要觉得这个问题不重要。因为具体的知识往往不是最重要的,而对从事领域的热情更为关键。不会的东西可以学,但是没有学习的动力就麻烦了。特别的,微软面试的一个特点就是对面试者以往的工作背景问得不多,甚至很多时候并不特别在意以前的工作经历和这个职位是否相关,其根本原因就是认为不会的东西,学会了补上就可以了。

下面往往就切入面试的主要部分。对于软件开发人员职位来说,这一块就是编程了。

一般不会(至少我是这样)考特定的一个领域知识。举个例子,我绝对不会让面试者回答一个特定的Win32 API是干什么用的,或者用ATL写段程序。问题就是基本的数据结构/算法/编程语言。如果面试者说对C++不了解,没关系,JAVA也行。怎么,JAVA也不会,那pseudo-code也可以呀。

问题的方式往往采用由浅入深的方式。为了这本书,我忍痛贡献出自己最为得意的一个考题:

问题:写出一个函数,判断输入一个整数是否为素数

不难吧?当然了,如果你说不知道素数是什么,我就无语……好在我面试过程还从来没有遇到过这种情况。

如果你没写好函数的定义(declaration),确定输入输出参数类型,就迫不

及待开始写内部代码的话,我心里就要打个问号了。

好,代码在白板写好了。

这里就来了下一个问题,首先检查函数的基本逻辑是否正确。

其次,检查一下是否正确处理各种边界的情况,如0,1,2等等。

以上只是两个基本问题。好了,函数写完了,也处理了边界条件。

那下一个问题:如何提高它的效率?

这里可以有算法的改进,例如从测试的最大数字n/2变成n的平方根,每次循环的步长可以是2等等。

但是,如果效率还不够高,怎么办?

这里测试的就是是否可以灵活考虑使用各种其他的数据结构。例如如果分析输入范围只是0到1000,是否可以考虑hash table?事先计算素数表。如果面试者提到这一点,好,又一个问题:如何最快计算一个范围内的素数表——素数筛法?

但是,如果效率还不够高,怎么办?

是否可以考虑caching,如果函数输入有一定模式?caching的基本模式和算法?什么样的应用程序会如此密集使用素数判断?是否合理?

这就是我说的由浅入深的提问方式。当然了,不同的人有不同的面试方法,这里说的只是一个微软经常采用的方式。

还有一点,就是如果你对某个问题不知道答案的话,也许并没有关系,因为许多情况下,面试官并不指望你能回答出所有问题。就像上个问题中的素数筛法的算法。如果这样,你可以据实回答:“这方面我并不了解,我推测可能是如何如何…”但是,如果你要不懂装懂的话,那结果可能会得不偿失。

面试收尾

这里一定会留出几分钟的时间,让面试者提问,任何问题都可以。不管面

试者的表现如何,是否决定录用,都一定要尽心尽力回答。买卖不成仁义在。J 而且我自己也有若干次的面试失败经历,知道有很多因素会影响到面试表现。往往这次不行,下次说不定就过关了。在面试结束后,会把面试者带回到楼下的大厅里,然后我会通知下一位面试官,并附上我的评语。

内部换组,还要面试?

和对外招聘面试差不多!在微软这几年,我又有过三次正式的内部面试。从多媒体组,到反病毒组,到现在的SWI(Secure Windows Initiative)。每次面试都是4+1技术面试,问的问题和对外招聘面试一样形式。不过是自己解决中饭。在微软,鼓励人员的自由流动,这是我最为欣赏的一点。

每一次面试我都可以从面试官那里学到很多东西。有时候,觉得这个问题不错,下次我就改头换面去考别人了。看完我的面试经历,有什么感想?我想,只要你能和我一样,在第三次面试时候,轻装上阵,发挥出水平,就一定会成功!

后话

看完了我面试别人的过程,希望大家对微软的面试过程和方式有更多的了解。我自己的一个建议:就知识领域而言,基础(数据结构/算法)是最关键的。当然了,不排除有某位老兄,早上开车上班的路上吃了警察的一张罚单,决定要出ATL编程的考题的情况。如果你碰上了,可不要怪这里被我误导了。J

一道微软面试的智力测验题

题目是这样的:有四个人(A,B,C和D)要在一个月黑风高的夜里过一个很长的独木桥。桥只能一次乘载两个人,就是说每次最多两人同时过桥。过桥要用手电筒,而这四个人只有一只手电筒,也就是说两人共用这只手电筒过桥后,其中一人必须带着手电筒返回(没有其他方法),否则其他人就不能再过了。这四个人由于年龄和身体状况的差异,每个人过桥所需要的时间不同:A需要1分钟,B需要2分钟,C需要5分钟,D需要10分钟。由于共用一只手电筒的原因,当两人一同过桥时,过桥的时间是以其中慢的一人为准,比如A和C一起过桥要用5分钟。

现在问:要所有人过桥,最短要多少分钟,如何安排他们的过桥顺序?

这个问题看起来并不复杂,很容易入手,解题的策略也不难确定。既然手电筒要来回传递,根据能者多劳的原则,当然是尽量用最快的人来担此重任。因为A过桥最快,所以很快就会得出以下的答案:

第一步:A和B一起过桥,时间是2分钟

第二步:A带着手电筒返回,时间是1分钟

第三步:A和C一起过桥,时间是5分钟

第四步:A带着手电筒返回,时间是1分钟

第五步:A和D一起过桥,时间是10分钟

总共需要19分钟

这看起来安排很合理,但答案是错的。正确的答案是17分钟。看到这里不妨请读者思考一下如何得到这个答案。

其实解题的关键是你能否想到另一个更重要的策略,就是:要让走得最慢的人(C和D)一起过桥。请你根据这一原则再试试看。

以下是正确答案:

第一步:A和B一起过桥,时间是2分钟

第二步:A带着手电筒返回,时间是1分钟

第三步:C和D一起过桥,时间是10分钟

第四步:B带着手电筒返回,时间是2分钟

第五步:A和B一起过桥,时间是2分钟

总共需要17分钟

可见这题的关键是在于你能否突破那个显而易见的思维定势,发现不易发现的更有效的方法,甚至有时还要敢于违背那个明显的规则。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值