Share this post on:

最近公司准备招新人,于是我有幸以招聘者的角度,去观察一个公司挑选程序员的过程。以前一直不大能把握到那些给面试者发题目要求其完成然后把代码发过去的公司是怎么考察这些代码的。特别是我试过几次自我感觉代码的算法和运行结果都很好,但代码发过去都石沉大海的经历。于是特别好奇那些公司究竟是怎么筛选的。通过这次经历,我终于大概了解了一个面试官的思维。

我参与的主要是代码审阅环节。面试者被要求在两个小时内在一台没有Internet access的laptop上完成四个问题。实际上面试者是不可能在两个小时时间里完成所有问题的,但完成所有问题也不是我们的主要要求。实际上,在评阅的时候,除了代码能不能被正确地编译执行,运行结果是否正确外,有没有comment,代码是否整洁,algorithm写得好不好,是否使用了面向对象的结构,都是考虑的因素。

我们team主要成员一起对所有面试者的代码进行了两次审阅。第一次时间很仓促,由于要赶着开会,我们平均对每一个人的代码只能投入5到6分钟的时间。在如此仓促的情况下,我们不能仔细斟酌每一个人的思维,也不能照顾到我们应当考虑的每一方面,因此我们主要看一下几点:多少道题能被正确执行,有没有comment,有没有error handling,是不是面向对象(class, method, packet),算法效率(多少个for loop),会不会用Java提供的基本方法(String.replace之类)。而其中能不能被正确执行占了很大因素。我们有一个candidate,做了三道题,但没有一道运行结果是正确的,而且代码撇上去也不像符合我们的其他要求,于是我们对他的印象就很差。相反,另一个candidate,虽然只做了一道题,但运行良好,符合我们上述要求,我们对他的印象就比较好。

第二次,是因为我们会议临时取消,有了很多时间,于是对所有人的代码重新进行了审阅。于是,除了上述的考虑外,我们对大部分代码,特别是那些没能成功运行的代码,重新审阅了一次。这时候,我们尝试fix那些代码,看程序不能运行是一个致命的错误还是只是小问题。对那些算法看上去不太好的程序,我们仔细看是否有可取之处。

经历了两次不同的审阅代码的过程,我发现了以下面试者在做代码面试时应当注意到事项:

1、注释十分重要。这不但显示了一个程序员的基本素质,而且这可以知道审阅者如何运行、理解你写的代码。例如,有的面试者无法让程序完全按要求运行,但写下注释说可以通过什么方法运行自己的程序。审阅者若能根据这些注释,知道怎么运行,怎么理解这些代码,那么对面试者的印象就会比较好。特别是在时间仓促的情况下,审阅者是没有时间自己去figure out要怎么理解、运行这些程序的。如果面试者思维与审阅者不一致,有没有恰当的注释提示,很可能被冤死。

2、质量胜于数量。漂亮地回答一个问题胜于半吊子地回答所有问题。如果所有问题都答得很难看,审阅者不但会怀疑面试者的才智和编程习惯,甚至可能会觉得是不是面试者的工作态度就是吊儿郎当。

3、记住error handling。有时良好的编程习惯比效率更重要。而error handling几乎是考察代码是必然会被考虑的因素。就算不够时间考虑所有异常,写个try catch总会吧?

4、养成面向对象的编程习惯。我们面的是Java,其他程序语言要求可能不同。但对于Java,即使是很简单的要求,也不要把程序写得像面向过程的语言。这包括:不要把程序放在default package,不要把所有代码放在一个方法里,可以的话尽量分不同的class(如把main/test放在单独的class)。

5、思考好算法再下笔。最基本的是,如果一个for loop能解决,就不要用两个for loop。在一个loop里面,尽量不要做无谓的工作。

当然,我们的on side代码面试是比较特殊的,可能和那些电面以后发代码给面试者要求其完成并把代码发过来的方法相似。很多公司的on side代码面试都不用上机,而是用笔写。这个时候注意点的重要程度就要改变一下。思维/算法在这种面试里面会更加重要,error handling也很重要,回答问题的效率也不能太低。而至于注释和面向对象在这里就稍微次要一些。

顺带提一下面试的其他环节,面试官都考虑些什么:

1、思维的敏捷程度。

2、当对简历上提及的问题不断深入时,面试者是否依然能对答如流(是真正知道这个问题还是仅仅为了漂亮和把这个东西写在简历上)。

3、交流能力。(说话多不多和是否把握要点)

Avatar Charlotte Guan

Author: Charlotte Guan

為求功名寒窗度,
迷途辛酸堪回首?
求學求職皆藉口,
只為識聞萬里游。
琴棋書畫皆嘗遍,
心夢隨緣自沉浮。
一朝見得伊人面,
四海八荒任去留。

Leave a Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.