主题:微软面试杂谈
holly2008
[专家分:0] 发布于 2008-09-24 18:02:00
您想知道微软面人内幕吗?
写程序真的没有意思?
为什么许多微软的员工乐此不疲?
微软面试杂谈:http://www.cnblogs.com/bvbook/archive/2008/09/19/1293888.html
回复列表 (共1个回复)
沙发
holly2008 [专家分:0] 发布于 2008-12-01 15:36:00
典型面试《摘自《编程之美——微软面试杂谈》
备注:在本文中,应聘者(英文为:candidate, interviewee)指应聘公司职位的学生或其他社会人士;面试者(英文为:interviewer)指公司里进行招聘和面试的人员。
Q:经理,您好。我就开门见山,您能否分享一下当年您第一次去面试的故事?
A:好,大学毕业后,我进入了学校“产业办”开的公司。有一天,一家美国公司(我们姑且叫它H公司)要来招人,这是我的第一次面试。那个公司的代表和我寒暄之后,递给我一道题目,题目大意是“写一个函数,返回一个数组中所有元素被第一个元素除的结果”。我当时还问了一些问题,以确保理解无误,所谓clarification是也。那位面试者简单地解释了一下,然后就在电脑上敲敲打打,也不理我了。我想这也不难,如何能显示我的功力呢?于是我就把循环倒着写 for (i=n; i>=0; i--),因为我当时看到一本Unix书上是这么写的。
代码大概是这样的:
void DivArray(int * pArray, int size)
{
for (int i = size-1; i >= 0; i--)
{
pArray[i] /= pArray[0];
}
}
写完之后,他看了看就问我,你为什么要这么写循环?如果不这么写可以么?我说,也可以呀。他问了两遍,如果正着写循环会出现什么问题。我想,能有啥问题?就把循环正着写。噢,原来陷阱在这里!你知道这个陷阱是什么吗?
Q:让我想一想,知道了,如果循环从数组的第一个元素开始,并且不用其他变量的话,在循环的第一步,第一个元素就变成了1,然后再用它去除以其他元素,就不符合题目要求了。
A:对,同时还有另一个陷阱——看看你是否会检查除数为零的情况,以及对参数的检查,等等。
Q:这不是很简单么?一会儿就写完了。
A: 面试题大多数不难,但是通过观察应聘者写程序的实际过程,面试者可以看出应聘者的思维、分析、编程能力。面试者一般还会有后面几招留着。比如,如果你要测试刚才写的这个函数,你的测试用例有多少?或者改变一些条件,能否做得出来?
Q:很多人说,面试是一个不公平的游戏,因为信息不对称。比如:面试者知道问题的答案,而应聘者不知道,面试者知道今年公司要招几个人,而应聘者不知道。
A:但是,应聘者手头有几个Offer,面试者也不知道。应聘者是否喜欢公司提供的职位和薪酬,面试者也不知道。一方面,应聘者在“求”职,另一方面,面试者也在“求”才。面试也是一个增进双方互相了解的有效途径。
既然扯到了“信息不对称”,我再讲一个我的故事,当年H公司来我校面试的时候,我对H公司的了解仅限于H公司捐赠给我们计算机系的一个有些过时的小型机系统。我想,这个H公司是不是还有一些新东西?那时候还没有互联网,于是我就托人借了几本原版的Byte杂志来看,那是很厚的一本杂志,非常多的广告,看了半天,夹在杂志中的小广告掉了一地。我只看到杂志对H公司新出的一个桌面管理软件“NewWave”的评价,我琢磨了半天,大概搞懂了这是一个什么东西,市场上还有什么竞争对手,等等。
过了两天,面试开始了,对方端坐在沙发里问“你对我们H公司有何了解?”我先说了H公司的小型机系统,然后说,“By the way,我还了解了NewWave”。于是我把看到的东西复述了一下。没想到对方坐直了身子,说这个NewWave就是他曾经领导的项目。于是我就根据杂志上的描述问,“您怎么看某某竞争产品?”他很兴奋地跟我谈了NewWave 是如何的领先,等等。后来我们又聊了不少相关的东西。
最后所有人面试结束之后,我们的领导说,美方觉得我很突出,知道不少东西,包括NewWave,口语也很好。领导就要求我给所有人都介绍一下NewWave,我只好把看到的东西又复述了一次。不久,H公司过来面试的另一个经理不解地对我们领导说:“为什么你们这么多人知道NewWave?”
前不久,我在面试的时候问一位同学,“你对微软亚洲研究院有什么了解?”他说,“没啥了解,昨天打电话叫我来面试,我就来了……”对于这样的同学,信息的确是非常不对称,那他吃亏也是难免的了。还有一位在面试中发挥得很不好的同学跟我说,他特地没有做任何准备,因为他想显示他的“raw talent”……
Q:关于Test(测试)的职位,有没有一些典型的题目呢?
A:有哇,典型的题目如给你一支笔,让你说说你如何测试——据说要测试12个方面;再比如判断一个三角形的特性(直角、钝角、锐角、等腰)——据说有20多个测试用例,这是要考察大家思考问题的全面程度和逻辑分析能力(测试用例见4.8节“三角形测试用例”)。
Q:网上有些非常流行的问题,都号称是从大公司流传出去的,是真的么?
A:对,是有一些题目比较常见,例如“下水道的井盖为什么是圆的”,还有一个问题一度非常流行,据说早期应聘PM(Program Manager程序经理)职位的应聘者大多曾碰到这个题目:
房间里有三盏灯,屋外有三个开关,分别控制这三盏灯,只有进入房间,才能看到哪一个电灯是亮的。请问如何只进入房间一次,就能指明哪一个开关控制哪一个灯?
传说在晚上,微软一些会议室的灯忽明忽灭,那就是一些还没有搞懂的同事们在实地钻研。
Q:我大概了解了Dev/PM/Test 这三种工作的典型面试题,那么这些题目的答案别人都知道了,还怎么面试呢?
A:对,会有不少题目流传出去,这本来无妨。但是一些人知道答案之后,就开始背诵,或者原封不动地拿它去面试应聘者,忘了“知道答案”和“能做一个好员工”的关系。知道了题目的答案,就能做一个好的开发人员、项目经理,或者销售经理么?一个极端的情况会是:公司里每一个人都知道哪盏灯是由哪一个开关控制的,如何测试三角形的类别等,但是这个公司真能从此开发出更好的软件么?
一句话:关键不在于答案,而在于思考问题的方法,这也是我们没有“题库”的原因。
我来回复