“错误代码”面试是向受访者显示一小段“错误代码”,并要求其纠正或指出错误的地方。我在进行这些采访时遇到了麻烦,因为我花了一些时间来阅读代码,弄清楚代码的作用并指出缺陷。在有时间压力的情况下,我倾向于停滞不前,我发现代码“应该”起作用,即使它不起作用。
什么是处理这种采访的好方法,更广泛地讲,有什么好的技巧可以快速阅读和理解代码?
“错误代码”面试是向受访者显示一小段“错误代码”,并要求其纠正或指出错误的地方。我在进行这些采访时遇到了麻烦,因为我花了一些时间来阅读代码,弄清楚代码的作用并指出缺陷。在有时间压力的情况下,我倾向于停滞不前,我发现代码“应该”起作用,即使它不起作用。
什么是处理这种采访的好方法,更广泛地讲,有什么好的技巧可以快速阅读和理解代码?
Answers:
错误的代码访问(如果正确完成)应该向您显示以下代码:
using
在需要时不使用C#中的语句,或使用ArrayList
代替List<T>
)ref
和out
参数太多?)有一个心理检查清单,您应该仔细检查一下上面的每个要点。如果您不能看代码而不能这样做,那就是改进的地方。无论您声称自己精通哪种语言,都应该能够查看一段代码并指出这四种错误。
我最近在博客上写了一段展示了所有这些问题的代码,它应该可以帮助您经历相同的思维过程。
Ayende 的《罪恶之薪》系列更加深入。
List<T>
其中包含null
元素...)
我从来没有在这样的采访,但是当我试图做好工作棘手的一段代码,我可以怀疑的是不好的,我有时会悄悄地自言自语。我发现发声有时可以帮助解决问题。同样在面试中,您可以尝试以图表或铅笔和笔迹追踪执行的步骤。这曾经在学校为我工作,有时仍在工作中。YMMV,当然...
我认为从“调试”开始是一个不错的起点(如果您看不到任何明显的东西)。除非立即发现可能的问题,否则一个好的开始是列出一小部分测试值。好的值是“快乐路径”(正常)值,“零”或“空”值,空值,很小的值(1个字符的字符串,整数1等),很大或很长的值值和特定于类型的“奇怪”值(例如,字符串的Unicode字符,整数的负数等)。在这里提到,通常您将使用这些值来编写单元测试来测试代码,而只运行那些代码来验证功能就不会感到无所顾忌。
首先介绍您的快乐路径值。对于加法函数,您可以从3或4开始。检查每行是否存在拼写错误和逻辑错误,并在运行时跟踪局部变量的值。希望您会发现一些错误。完成幸福的道路后,您将对代码有更好的了解,并希望自己不会感到不知所措-像这样说:“现在,我对代码的工作有了更好的了解,我然后退后一步,看看它。”然后这样做-寻找与您将做的事情不同的事情(错误的设计决策,命名错误的变量,调查可能的错误等)。
如果那没法让您走到前面,或者您觉得自己已经无话可说了,请返回测试值列表,然后重新进行测试,找到可能会引起问题的新值。
这至少会帮助您前进。
如果您觉得做笔试的压力不大,请拉出笔记本,开始做笔记。在采访中,我抽出一个笔记本,开始草拟笔记,这是我思考过程的一部分。拥有笔记本和笔会让您看起来井井有条。您可能会写下一些要查找的要点,语法,逻辑错误,数据类型不匹配,局部变量的值(列表可能会因您获得的代码类型而异,我的复杂SQL列表会与在处理过程中得到的不是以数据为中心的一段代码的人不同),等等。一旦您编写了其中一些代码,便开始寻找它们。这样,即使您没有在面试官想要继续之前找到所有问题,他/她也将能够看到您要检查的事情的列表。如果您事先创建了可能要查找的内容的清单,那么您将对知道计划要查找的内容感到更加自信。通常,这些问题更多地是关于如何找到错误而不是实际找到所有错误。
可能有两个问题:
这可能是一次“压力面试” http://en.wikipedia.org/wiki/Job_interview#Stress。采访者试图查看您如何应对压力,因为他们的工作环境如此。
要么
您可能会感到压力重重。在这种情况下,您将不得不处理这种压力,例如自省,看看如何保持冷静。