个人以为,Coding是SDE面试中决定成败最重要的一部分,当然也是因人而异,如果算法不过关,当碰到一个问题,算法都没搞明白,那Coding再好也是没用的。那如何准备Coding面试呢?我结合个人经验和网上一些好的介绍,做个总结。
首先我们要明白的是面试中面试官期望看到应聘者体现什么样的能力。Coding类的问题,往往不会太复杂,因为太复杂的问题不论多熟练,对于面试官和应聘者都很难在短时间里避免错误(应聘者容易写出有错误的代码,面试官会误判),所以,短小精悍的题目是比较受青睐的。既然一般都是短小精悍的题目,那应聘者的能力也就只能在这些小题目上体现出来了,根据我的经验,这些能力包括:
- 用某种语言实现时,对于语言的知识掌握是不是够好,比如,面试官出了个题目,要应聘者定义一个函数来实现某一个功能,这时这个函数的声明式就会是考察的一部分,比如如何错误处理:是抛出异常还是返回错误代码;传入的参数的形式是怎样的,用指针还是引用,需要const吗,为什么要这样做;返回的数据是如何返回的,为什么这样做;
- 使用某种语言或者伪码实现一个算法,这时涉及到各种语言基本要素,比如循环,判断,或者递归等等;
- 测试能力,因为一个好的developer知道如何测试他写的程序,所以在coding完成后,往往都会要求应聘者测试一下这个程序,而这里要求的测试能力跟我们另外一篇文章中testing类问题并不太一样,这里的测试更侧重于单元测试或者Component测试,而另外那篇文章更侧重于产品测试。
这些能力都是需要积累的,不是一朝一夕突击复习出来的,但是在面试之前还是需要总结,毕竟平时写的时候,往往没有要求在限定时间内完成,而设计测试用例。所以,要搞好Coding 面试,最重要的就是面试前要多练习,而且要按照面试的标准练习,也就是在你说“做完了”时,代码里不能有任何错误。
记住,最重要的就是高标准练习!!
除了平时的积累,面试前的准备,还在面试的时候还有若干注意事项(下面是摘自www.palantir.com):http://www.cnblogs.com/whyandinside/archive/2012/10/28/2743261.html
如何才能保证写的代码没有问题呢?
1. 在写代码时要非常清楚地搞明白循环和递归的结束条件,以及算法的逻辑;
2. 在写代码前使用的simple case对算法进行验证;在写代码后使用simple case和更多case对代码进行验证;
这两点都是非常重要的,在写之前考虑清楚,把90%的问题解决掉,那最后使用case验证时再解决掉10%,才能保证没有错误,而如果过度依赖用case检查,就容易出问题;