分节阅读 21(1 / 1)

ncode)是从大学毕业生一直到架构师,开发部主管都要过硬技术。平时多写程序是唯一的准备应付策略。取巧的人一般会被问得很尴尬。

但这里不是考你的死记硬背的功夫,例如告诉我一个win32api的具体调用方式,或者是如何使用atl或mfc里的一个类。更有可能的编程问题则会是涉及字符串操作,链表操作,二分查找,位操作等等这些不需要特定领域知识的东西。至于编程语言,一般人常用的是c/c++,不过你愿意用什么都行,java,c#,伪代码(pseduo-code)都可以。

这里我想特别的说,要注意白板编程(whiteboardcoding)的练习。所谓白板编程,就是直接在纸上或者是黑板/白板上写出程序。看似简单,实际上是很能磨炼能力的。有时候你觉得自己心里面想清楚了,实际上往纸上一写发现完全不是那么一回事。

(2)设计。这也是开发人员面试中必考的分析问题和解决问题的能力。事实上没有什么可以特别准备的。“数据结构/算法”在大学念好了,平时用得多了,这就不是一个问题了。

同编程一样,着重的也是面试者活学活用的能力。在互联网上可找到许多微软面试编程/设计的问题,很多这些问题都没有单一答案。提问者希望面试者通过思考找到最佳算法,而不是只会死记硬背。例如,会延伸问题来验证面试者的优化能力,就像我前面举出的素数的那个考题中展示的样子。

特别的,微软的算法问题一般十分重视优化:运行最快,用最少内存等等。最好的准备是在日常工作中多问自己几次:“这可以更快更好吗?”日子久了,优化就变成自然的本能。微软的很多开发人员都有这种本能。这也是开发队伍引以为豪,一直相传的素质。当然了,如果你问我既然这样,为什么windowsvista在我的256m内存的机器上还跑得这么慢的话,本人拒绝回答。(玩笑,玩笑,嘿嘿)

(3)测试。开发人员也要管测试?没错,正如测试人员需要懂编程一样,开发人员也要具备基本的测试程序的能力。

开发人员是自身程序的第一个测试者:单元测试(unittesting),就是开发人员来做的。可不是写好了程序,往测试组一丢就行了。想一下,如果测试组在你的不足50行的函数里一口气发现七八个问题的话,他们的工作量倒是上去了,你的面子可就不那么好看了,不是吗?

所以往往开发人员的面试中会有这种情况,让你写出一段程序,然后看你会不会做最基本的测试。当然了,测试不会是开发人员面试的重点,但也必须是准备的一个方面。

(4)调试。从已有程序中判断问题所在,调出错误代码的功夫,是每个有志于开发工作的诸位,必不可少的能力。设想一下,如果测试组发现了问题,也许压根不是你的代码的事,对不起,身为开发人员一份子,你的责任就是要找出症结所在。

所以往往我会在面试者写出一段程序后,看他或她能否发现自己刚写的那段代码中,有没有什么错误或考虑不周的地方。也许,我会直接给出一段有错误的代码,让面试者看看。如果一时没有发现,我会稍许提示。不过我要是心里嘀咕,老兄,这么明显的内存溢出,怎么就看不到呢?那么最终的评价,肯定要有所折扣了。:)

最好的准备,就是平时的实践。写好一段程序,先别急着测试或运行,闭上眼睛想一想,心里走一遍逻辑,看有没有一眼可以发现的错误。

开发工程师的面试(2)

(5)其他。这里主要指其他的软能力,例如交流,团队合作,工作热情等等。这里就不具体说了。

稍许小结一下,就像前面面试故事中提到的,不仅仅要知其然,而且要知其所以然。死记硬背不行,真正掌握,会活学活用才是关键。

微软面试指南

3.7.1面试前后

知己知彼,百战不殆。面试也是如此。怎样才能做到知己知彼呢?知己就是认识自己。首先你自己要明确在今后的几年内你自己到底想要做什么?你的奋斗目标是什么?你有什么优点,什么缺点?你怎样才能通过学习和练习来弥补你的不足之处。知彼意味着了解对方。了解对方有很多含义。从大方面说,是招聘公司的情况。从外部看,是公司的主要产品,强烈的竞争对手,关键的客户对象和今后的战略目标。从内部看,是公司的企业文化,员工特点。从小方面说,是具体招聘团队的情况。我们来看面试前、面试当天和面试后的注意事项:

1.面试前

个人简历是找工作的起始点,也是面试的基点。写好个人简历是非常重要的,因为这是你首次向面试人介绍你自己。微软每天都可能收到成千上万的简历,人事部门首先是通过很快地浏览简历作初步筛选。面试人以你的个人简历来审视你的能力和未来的潜力。个人简历要清晰地表达两点:你自己的过去和你今后想要做的。一般在面试中,总会有人问及以前做过的事。

注意事项之一是工作经验的长短。很多人或多或少地认为工作经验越长越好。尤其对于工作时间不太长的人(小于5年),工作经验的确很重要。致使有些人便勉强地给自己凑时间(包括我自己)。研究生的时间,出国准备的时间或者有些不相关的工作经验都写上。在简历的开头写上带有水分的xx年工作经验。其实这也是相对的。工作经验是很重要,但是工作经验不是一个简单的数字。工作经验意味着对所在工作领域的了解。工作经验体现出分析问题和解决问题的熟练程度。在面试过程中,我经常听到这样的评论:问题解决得还不错,但是对于一个xx年经验的人来说,……如果此人在这么多年里仍然停留在初级阶段,说明此人没有发展潜力。在这方面,主要是权衡合格和潜力。我看到很多应聘者缺乏技术细节。许多人花过多的时间描述自己参加的项目,但是没有突出自己在项目里做的事。没有提到自己在项目中解决的问题。

注意事项二是把自己的简历与招聘单位和要求联系起来。从招聘人(interviewer)或招聘团队的角度想一想,有哪些工作经验可以利用上,有哪些地方还有些欠缺。不过不要因为要求的技能没有每一条符合就不敢申请,因为很多情况下,招聘的职位写出来的要求并不是每一项都符合的人才能申请或才能被考虑。

初步筛选过程是应聘者了解招聘团队的好机会。通常应聘者有机会向招聘组了解情况,你应有所准备。你可以问一问主要关心的是什么?目前最重要的项目是什么?问一问与你通话的人他(她)现在最关心的是什么?记住你的目的是尽可能了解情况,但是也要注意分寸。通常第一次与你联系的是微软人事部门。对招聘团队有一定的了解之后,你就可以有目的地为面试做些准备。

面试当天

面试前休息好是至关重要的。你在与人事部门联系安排旅行事宜时,一定要确认在面试之前你有足够的休息时间。我见过很多的例子,由于各种原因,被面试的人凌晨三点左右才到达住宿旅馆。没有几个小时休息就要去参加面试。我觉得在面试中不能发挥自己的最好水平是一件很遗憾的事。第一招聘人不会因你没有休息好而降低录用标准。其次面试中与你谈话的人通常都是你将来的同事和领导,他们对你今后的成长都有或多或少的影响。从另一个角度说,安排旅行事宜的人,倒不会与你的未来有多大关系,所以你一定要确认你有足够的休息时间。

面试人通常都有准备好的问题。这些问题往往都有一些转弯抹角之处。你首先要认真听。如果有不太清楚的地方,一定要问清楚。问问题不是一件坏事。

3.面试后

如果面试顺利通过,微软人事部门会与你联系并通知你录用结果。如果面试没有通过,你应向人事部询问面试结论。通常人事部门会告诉你,哪些地方你在面试中表现得不够满意。你可以在今后的面试中引以为鉴。或者可以在今后的工作中注意开发你的不足之处,由此增加下一次面试成功的几率。即使面试不成功,你还可以打听一下招聘团队看有没有合同工的机会。

如果你面试成功,我在这里向你祝贺。总的说来,通过面试的人要比没通过面试的人要少得多。而且并不是所有合格的人都可以通过面试。

面试通过以后,理论上你可以和人事部门商讨录用合同。录用合同会告诉你薪水报酬。这包括基本工资和公司股票。在特殊情形下,还可以加上录用奖金。我想要说的是应聘者应有长远的眼光,不要过分计较初起的工薪和待遇。今后的路还长,初期的报酬对一个有长远发展志向的人不会有特别大的影响。你若干年后的工资和待遇、你的奋斗的关系远远大于初期的录用合同。微软中有很多的副总裁都是从实习生(intern)开始的。

面试后的另外一件事是为你以后的工作做好准备。你可以与招聘经理(hiringmanager)联系,问问你可以做哪些准备工作。有什么书要读一读或什么软件要熟悉的。你可以有机会看一看相关工业界的竞争状况,哪些新技术新思维对你今后的工作可能有影响。这样会使你的工作有一个好的开端。

态度与举止

不少人可能不注意态度与举止,但微软的面试官是很注意这方面的细节的。以下几点建议大家注意:

(1)要诚实。对于自己的经历和技能,有一说一,有二说二,不要夸大。因为面试官都是有经验的专业人士,虚言妄语是很难瞒得过他们的。如果说一个应聘人在简历上不写他熟练使用com,微软决不会因此而轻看他;但是如果他说在com方面有10年的经历,面试者可能就会深入追问com的技术细节。如果不是真金,自然经不起火炼。

(2)要自信。不管遇到什么样的面试官和什么样的面试题,都要始终保持自信。自信不仅可以使自己保持在最佳状态,也是面试所考察的一项重要素质。

(3)要自始至终集中精力。有的应聘者答完一两个问题,自我感觉答得很好就觉得胜券在握;或者有几个问题答得不好就心情灰暗,影响发挥。这都是不可取的。面试的过程中几名面试官会互相通气调整提问方向。如果一个人被问的问题很难,可能是因为面试官觉得他水平比较高,所以提高了面试的难度;反之如果问题太容易,可能说明面试官对应聘者的期望不高。所以应聘人不应该以前面的面试效果臆测面试的最终结果,而要集中精力,回答好眼前的问题。

(4)直视面试官。我见过不少面试者,特别是亚洲人,不习惯直视面试官的眼睛,或被面试官直视时,会很快看别处或脸红,或变得不自在。这些举止容易被忽略,但其实会使面试官怀疑你讲的话是否诚实可信,是否有足够自信,是否有交流沟通困难等。

(5)要做好写程序的准备。在我们面试过的pm,测试和开发应聘者中,有不少人显然没有预料到会被要求写程序。有的人觉得自己都博士毕业了,发表了很多论文,怎么还会让他写链表操作这样简单的代码?结果很多基本的程序结构也做不好。也有些人没有在白板上写代码的经验,程序前涂后改,最后连自己都看不清楚。这都影响了面试的效果。所以建议大家在准备面试的时候一定要练习一下在限定时间内在纸上写一些简单的小程序。前面说过,编程类问题不只是考编程技巧。更重要的是看解决问题的能力。所以在动手写代码之前,应聘人最好将思路整理清楚并向面试官解释一下自己的想法。最后就算程序没写出来或者有错误,也要向面试官展示出自己考虑问题的过程。写完程序后并不等于问题结束。检查一遍错误是良好的习惯。同时,对每一个问题,都要考虑到算法的复杂度和不同的解决方案。

正确对待难题

碰到难题或没固定答案的问题你该怎么办?正确对待就是不慌张、不急于回答、不会时也不要轻易放弃。不要影响你接下去的面试时间和答题。有时候面试官们通过这类问题来看看你碰到这一类定义模糊的要求或难题时,你是否不知所措、惊慌失措,是否还能保持清醒的思路。特别是对应征项目管理的职位,可能性更大。对项目管理人员为例,最重要的是你要知道这类问题主要是考察你的逻辑和思路、对项目管理的理解、是否能够将项目管理中的各种指南来帮助自己指导对各种模糊性问题的解答,这些问题就没什么可怕的,因为绝大多数这些公司都是主要看你的个人素质而非绝对经验。所以显现和强调自己的热情、信心、善于从多方面考虑和寻找答案来解答问题、团队合作精神、善于学习、有良好的沟通本领等等,比经验更重要。你应该准备一些个人经历和