我必须在接下来的几个星期里采访一些C++候选人,作为公司最资深的程序员,我希望能够弄清楚这些人是否知道他们在做什么.
那么有人有任何建议吗?
我个人不喜欢被留在一个房间来填写一些C++问题,所以我宁愿做一个更复杂的测试,我可以跟访谈者谈谈他们的方法等等.也就是说他们是否得到正确的答案并不重要,因为他们如何处理我感兴趣的问题.我不在乎他们是否理解语言的模糊特征,但我确实关心他们对指针有很好的理解以及理解指针和引用之间的差异.我也很想知道他们如何处理给定问题的优化,因为在我看来,固态快速代码是必须的.
因此,我们将非常感谢您对这些方面的任何建议!
Dan*_*nas 21
我不会让他们写代码.相反,我会给他们一些代码片段进行审核.
例如,第一个是关于按合同设计:看看他们是否知道什么是先决条件,后置条件和不变量.做一些小错误,比如永远不会初始化一个整数字段,但断言它在不变量中是> = 0,看看他们是否发现了它们.
第二个是给他们bool contains(char * inString, char c).用一个简单的循环实现它.然后问是否有任何错误.当然,这里的代码不会在输入参数中检查nullinString(即使前一个问题谈到了前提条件!).此外,循环在字符0处结束.当然,候选人应该发现可能存在的问题,并坚持使用std::string而不是这个char *废话.这很重要,因为如果他们抱怨,你就会知道他们不会char *在新代码中添加自己的代码.
解决STL容器的另一种方法:给它们一个std::vector<int>和代码来搜索素数或计算奇数或其他东西.犯一些小错误.看看他们是否发现任何问题并且他们理解代码.询问在哪种情况下std::set会更好(当你要系统地搜索元素时,原始的入口顺序无关紧要.).
讨论一切,让他们想几分钟.捕捉他们所说的精髓.不要专注于"覆盖"(他们发现了多少东西),因为有些人可能会感到压力.听听他们实际说的话,看看它是否有意义.
我不同意在采访中编写代码.我永远不会要求任何人编写代码.我知道我的手写代码可能会在这种情况下吮吸.实际上,我很少被要求这样做,但是当我有,我没有被雇用.
我相信C++程序员需要的不仅仅是通用编程技能,因为......
在C++中,用脚射击自己更难,但是当你这样做时,你就会把你的整条腿吹掉.
编写无错误,可维护的C++代码比大多数语言对一些区域提出了更高的要求.
有一点我称之为"迂腐".你知道有些人一眼就能发现拼写错误吗?C++程序员需要能够在读取或编写代码时发现简单的错误(无论代码是否属于自己).依赖于"编译和测试"技术以摆脱简单错误的程序员与C++语言不兼容,因为这些错误并不总是导致C++中的立即失败.
C++程序员还需要熟悉低级别的东西.指针,内存分配器,阻塞,死锁.和"细节"C++问题,如多重继承和方法隐藏等,特别是如果他们需要维护其他人的代码.
最后,C++程序员需要能够编写易于其他人使用的代码.他们能设计得好吗?
前两个方面的一个很好的测试是"这是我从互联网上下载的一些C++代码.找到错误,找出不必要的位." (互联网上有许多非常糟糕的C++代码,并且由于对C++中如何"安全"的错误理解,程序员经常做不必要的事情.)
您可以使用更通用的面试问题测试的最后一个区域.
一些问题可以让您了解候选人:
关于STL容器,内存管理,切片等的一些简短练习(不超过10分钟)也是有用的.我允许他在有环境的电脑上做这件事.观察敏捷性非常重要.
“编写一个程序,该程序接收0..2 ^ 32-1范围内的3个整数,并验证它们是否表示三角形的有效边”。
这似乎是一个简单的问题。如果任意两条边的和大于第三条边,则认为输入有效。但是,一个好的程序员会遇到一些陷阱:
一个好的程序员必须面向细节。这个简单的练习将有助于检查他是否。