Coding面试中出现bug, 是否还能拿到offer?

v2-f721f781265d57829f2846aa425b30e2_b.gif


撰文|Helen & Jenny
专栏|九章算法


在面试中,我们常常强调要努力做到 bug free。然而事实上,即使是最顶尖的软件工程师,也很难在面试中一次性做到 bug free。


因此,在面试中,面试官并不会因为你的代码出现了bug就挂掉你的面试。他们往往更注重考查你:

是否能够意识到有bug

是否知道如何识别和修正bug。


1.面试中哪些 bug 是致命的,哪些是无关痛痒的?


v2-480dcbbb73a231ca3ad64667cd204ab0_b.gif


在面试过程中,面试者的 code 实际上就是个示例,面试官以此考察面试者的编程能力。每个人在coding过程中都难免出现 bug,面试官会根据你的出现的 bug 判断你在编程能力上的短板。有些短板,可能是致命的,直接让你fail 掉面试;而有些短板,则是不伤大雅、无关痛痒的。


1.或许无关痛痒的bug

例如这段java代码:


v2-e3df64a781593ae30ddfa4dd25940235_b.jpg


此代码有一个“大” bug,在第2行中,应该写 add,而不是 insert。如果面试者写出了这样的代码,代码就跑不过。


但面试官并不会吹毛求疵,他们不会因此拒绝面试者。他们可能甚至不会注意到这个bug。这对于他们只是一个代码示例,他们可以通过这个代码推测:面试者可能不会使用内置的链表类。这一点,面试官有可能根本不 care。


2. 可能毁掉面试的致命bug

示例1:

v2-e666ac6e1e4affa0894dcf59bb298aed_b.jpg


这段代码就有一些问题:

1.如果数组为空,此程序将在第2行崩溃。

2.for循环开始于i=0,但没有必要,应该在i=1开始。

3.for循环的循环条件为数组长度,每次都要提取数组长度,增加步骤。

4.第4行的逻辑不好


在这么简单的代码中就出现了有四个错误,会让面试官很担心。他会得出结论,面试者虽然会写代码,但面试者是不是不常写代码(因为问题3)。而且连这样一个基础的for循环程序也写不好,会让面试官对面试者的能力表示很担忧。

示例2:

以下是面试中的一个真实代码:


v2-ad322bdac782b73d37ca18cb17931d40_b.jpg


这段代码就不仅仅是粗心的问题了。它根本毫无意义,看到这个,面试官肯定会默默地给面试者打一个很低很低的分。


但是,如果面试者很容易就发现并修复了这些错误,bug 所产生的减分会减少。

2.面试中如何识别和修复你的bug?


几乎所有的面试者在 coding 面试中都会出现 bug,但是如果他们能过快速发现并修复这些 bug,并不会影响面试官对他们的评分。因此,学会识别和修复 bug,是非常重要的技能。

许多面试者在发现一个错误时会慌了手脚。他们通过一个特定的测试发现其中有一个 bug,便回想着快速地修复bug。修复后最好的结果就是可以顺利通过测试题,但是万一没有通过,那也会很尴尬。


示例:

例如此代码:在字符串B中查找字符串S


v2-bc4a64cec4b27ea278f282c2e10f617c_b.jpg


你注意到bug了吗?

乍一看,代码基本上是正确的。

但是面试者在用了一个测试数据 s=“xyz”和b #ERROR! bug,面试者会发现这个 for 循环始终没有执行。如果面试者觉得这个 bug 只会发生在两个字符串长度相等时候,然后去判断他们是否相等,这样显然是不合理的。for循环处理的是枚举有可能的起始位置,那么有可能的起始位置是 0 ~ b.length() - s.length(),那么枚举的边界条件应当是 i <= b.length() - s.length() 或者 i < b.length() - s.length() + 1, 这才是这个bug的关键所在。在发现bug的时候要找出本质原因,而不是通过if打补丁的方式,这样有可能会新增更多的 bug。

面试官一般不太关心这个 bug 的存在,bug 的存在比你做了一个不良的修复要好的多。不良修复并没有修正问题, 他们还增加了不必要的代码,从而出现了最坏情况:不但没有修复好 bug,还引入了新的 bug。


所以,当你发现 bug,一定要先仔细思考思考,再进行修复!

3.题目都做出来了,却还是挂掉面试?


有些面试者在面试过程中自我感觉liang良好,但却收到了拒信。他们或许很惊讶,自己写的代码“完全正确”怎么会被拒呢?但他们没有认识到,仅仅有正确度(做出题目)通常是不够的。

事实上,正确度只是面试官在评估你的代码的一部分。在面试过程中,面试官考察的能力是方方面面的,可能考察的你技术知识、代码风格、模块能力、严谨能力等。虽然你在一个题目上做到了“bug free”,但如果你在coding过程中不小心暴露了你薄弱的分析能力和 coding 技能,那也是逃不过面试官的“火眼金睛”的。


4.小结 - Coding 面试出现 bug 不要慌


v2-bd5fb42fca278b07f230a7111f55d455_b.gif


综上,没必要过多纠结于coding面试中出现的bug,程序中体现出思维逻辑才是关键所在。在coding面试时要充满信心,不要在发现bug时手忙脚乱直接修改,而应仔细思考原因再修复。沉着冷静方能体现一名面试者真正的能力。


推荐阅读

Coding 面试如何与面试官沟通?
如何准备 Coding Interview?


欢迎关注我的微信公众号:九章算法(ninechapter)。

精英程序员交流社区,定期发布面试题、面试技巧、求职信息等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值