按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
?专业知识类问题。根据应聘人的经历,提问者可能对感兴趣的技术问题进行发问,比如“请谈一谈你的这项关于图像处理的课程设计。这个项目解决了什么问题?用到了什么算法?你的算法比现有的做法有什么改进?”。这类问题主要考察应聘人的专业知识。微软面试不会过于强调需要死记硬背的细节,而是更强调对技术的理解程度。比如微软面试里通常不会问“在IP包里目的地址是第几个域?”,但是有可能问“为什么TCP要使用3向握手协议?”;不会问“在Windows上应该用哪个API向线程池提交一个任务?”而有可能问“在什么情况下你会选择用线程池?”。对于应届毕业生,微软招聘通常不会过于强调某一方面的专业知识,比如数据库或网络知识,而是更注重对计算机学科的基础知识的掌握。
?编程类问题。对软件设计工程师,一个必不可少的面试环节是编程问题。应聘人会被要求在白板上用30分钟左右的时间写一段小程序。这类问题考的是基本编程能力和解决问题的能力。对于应届毕业生来说,这些程序往往是关于基本数据结构和算法的。比如一道很常见的问题是“写一个函数把一个链表倒过来”。面试者不光要看这个程序是否正确,还要评估应聘人解决问题的能力,思路是否清晰和考虑问题是否全面。写完程序后,应聘人通常会被要求检查错误,分析算法的复杂度并举出其他的可能做法。
?设计类问题。在白板上写程序可以考察对小程序的设计能力,但是更进一步,应聘人可能被要求对一些更复杂软件问题阐述自己的设计。比如“怎样设计一个编译器来支持调试器的断点功能?”。这类问题往往要求口述回答并辅以框图或简单的伪代码。
?智力题。以前微软员工曾经流行用一些脑筋急转弯类的智力题进行面试,比如“怎样移动富士山?”,“美国有多少辆汽车?”,或“怎样用一架天平最快的在9个相同的铁球里找出偏重的一个?”。因特网上也有很多对这类问题的收集。但是近年来微软公司已经停止使用这些问题面试,原因是它们和微软的工作不直接相关。现在来申请微软工作的人不必再担心被问到这些让人挠头的古怪问题了。
电子书 分享网站
一道微软面试的智力测验题
——王志峰
微软在面试中使用智力测验题是业界众所周知的。在外界不仅流传着很多微软使用的趣题、难题和怪题,还有很多与解题和答案有关的有趣的小故事。我就亲身经历过一个。
故事发生在我加入微软之前,在得克萨斯州奥斯丁戴尔计算机公司总部工作期间。有一天,我同组的一位女同事不知从哪儿得到一个智力测验题,她很神秘地告诉我说,这题是最近微软面试中刚刚出现的。具说微软内部员工平均解题时间是5分钟以内,外界高手的平均水平是15分钟,而外界一般人员很多根本解不出答案,不管给多少时间。这位女同事说她已想了很久了也没有结果,于是让我试试。我通常对智力测验题不感兴趣,但听她说得那么玄乎,又被她一激,于是拿来题目认认真真解了一把,结果5分钟内解出了答案,让她连说佩服。到这里故事讲了一半。在讲故事的后半部分前,我先得把题目和答案给大家讲解一下:
题目是这样的:有四个人(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分钟
可见这题的关键是在于你能否突破那个显而易见的思维定势,发现不易发现的更有效的方法,甚至有时还要敢于违背那个明显的规则。
那好,我们再回到故事的后半段。那个女同事在惊叹佩服之余,又突然想
要再找位高手试一试。于是想到了她的男朋友。她男朋友是德州大学物理系博士毕业,当时在奥斯丁的摩托罗拉分部作芯片设计工作。女同事当即拿起电话把题目告诉了她的男朋友。结果还不到两分钟她男朋友就打回电话,说已解除答案,时间是19分钟。当场我们都笑了,告诉他答案不对,应该时间更短,让他再想一想。挂上电话后又过了10多分钟,她男朋友的电话又响了。这一次我们以为他做出了正确答案,没想到他不仅没有做出正确答案,反而振振有词地说,19分钟是绝对的最短时间,他已用数学方法理论上证明了这一结论!我们听了一愣,然后是狂笑不止。
不同分工不同侧重的面试
可想而知,在微软,即使是同样级别的技术工程师,不同职位的面试会有不同的要求和侧重点。以下我们以项目经理、测试人员和开发人员为例加以说明。
项目经理的面试
在微软的产品小组里,往往有三个角色。除了大家熟悉的开发工程师和测试工程师外,还有一个有“微软特色”的角色,叫做项目经理(PM,ProgramManager)。不少读者可能对PM不是很熟悉,或者有一定误解。也许是因为PM本身是一个很不公平的称谓,因为他们既不写程序(program),又不管理(manage)人员,却被称为ProgramManager。一个有趣的说法是:PM的职责是做软件开发中除了写程序和测试之外的所有事情。虽然有些言过其实,不过,确有一些道理。一个PM在不同的产品阶段,责任是不同的。比如,在一个产品开发循环还未开始时,PM的任务是做客户需求分析,然后设计出该版本的蓝图;当产品开发循环开始了以后,PM的工作是把想法以及要求清清楚楚地写下来,交给开发工程师去完成;在产品开发循环中间,PM要不停地与开发和测试人员交流,随时对计划进行修改,以确保按时完成。在产品开发循环接近尾声时,PM又开始参与下一个版本的设计。
由于PM相对工程师而言,人数比较少,PM面试的经历也往往被较少提起。而且,PM面试的题目,也往往与工程师面试的题目大相径庭。希望我的一些PM面试的经历,能够对大家有所启发。
PM的问题一般分为两类,一类是设计问题,一类是情景问题。下面我就根据自己的经验,对上述两个问题简单地分析一下。
设计问题一般范围比较广,很多时候格式是“请你为XXX设计一个XXX”。比如说,请为盲人设计一个微波炉,请为老人设计一台电冰箱,请为小朋友设计一部手机,等等。这些问题主要考察应聘者的需要分析,创造设计能力以及优先级安排的能力。这类题目看似简单,每个人都能上来说两句,不过面试官却有自己的一套标准判断答案的好坏。不过什么样的想法是好的呢?这个问题就比较难回答了。还是用我经历过的一个例子来讲讲吧。有一次面试,我记得�