现在的位置: 首页 > 综合 > 正文

开发工程师的面试

2013年02月21日 ⁄ 综合 ⁄ 共 1672字 ⁄ 字号 评论关闭

开发人员的工作,主要就是围绕着软件开发的各个阶段,设计,编程,测试,调试等。理所当然,开发人员的面试,就是针对考核这几方面的能力。

(1)编程。有句话说微软的面试不写程序就不是微软面试了。没错,对于开发人员的面试这是真的。编程就是考你的基本功。

如果你的手已经生硬,多年没有写过一行代码,开发人员的面试一定搞砸。“能写程序”(can code)是从大学毕业生一直到架构师,开发部主管都要过硬技术。平时多写程序是唯一的准备应付策略。取巧的人一般会被问得很尴尬。

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

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

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

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

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

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

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

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

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

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

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

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

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

                                                                                    --摘自《微软360度》

 

抱歉!评论已关闭.