白板式采访在技术行业中无处不在。 对于那些不高兴的人,白板面试是一种在面试过程中要求候选人在白板,纸或计算机上解决技术问题的做法。 这种环境就像高压锅一样,甚至会使最胜任的工程师崩溃。
在本文中,我打算传递我通过白板面试获得的最佳建议。 请注意,我无意讨论白板面试的公平性或有效性,因为作为被访者,我们目前必须处理这些问题。
忠告:交流!
我收到并可以传达给您的最好的技术面试建议是交流,交流,交流! 这似乎是一条反高潮的建议,但我希望能够向您证明,这实际上是在面试前准备的最重要技能。
注意 :当我在本文的其余部分讨论示例时,它们将对软件工程产生偏见,因为这是我最熟悉的领域。 尽管存在这种偏见,您仍可以将这些技能应用到任何白板式采访中。
你是什么意思沟通?
假设您正在面试中,而您的面试官向您提出了一个白板问题。 您是否登上白板并狂热地开始解决问题?
没有!
这往往是每个人的本能,但这绝对不是正确的方法。 即使您认为自己理解问题,也应采取一些非常重要的步骤,然后再继续前进。
首先,重述问题
您了解他们要您做什么吗? 证明给我看。 为他们重提问题并寻求确认。 实际上,您可能会惊讶地发现自己没有完全理解他们的要求-也许这个问题与您过去完成的练习问题相似但不相同。 使用久经考验的fizz-buzz示例,您可以按如下方式重述该问题:
“因此,我想向您重申此问题,以确保我了解您要查找的内容。 我函数的唯一参数是整数。 我函数的唯一输出将是一个递增数组,该数组从数字1开始到输入数字结束。
如果数字是3的倍数,则输出将为`fizz`。 如果数字是5的倍数,则输出将是“嗡嗡声”。 但是,如果输出是3和5的倍数,则输出将为“ fizzbuzz”。 我的理解正确吗?”
面试应该给您肯定,或者您的理解不正确,它们会帮助您理解。 重述问题不会伤害到您,在任何情况下,这都表明您可以表达问题,并让您有时间在讨论时仔细考虑它。 此外,以这种方式开始讨论将有助于平息在尝试解决实际挑战时可能表现出来的某些神经。
询问边缘案例
现在还没有时间深入研究解决方案的编码。 考虑一下输入和预期输出,并考虑问题的潜在边缘情况。 询问他们。 在许多情况下,面试官甚至都没有考虑过极端情况,因此会有所作为。 太好了-它表明您具有分析能力,并将努力防止出现错误(由于边缘情况经常出现)。
让我们使用fizz-buzz示例。 成功解决问题后,询问边缘情况的有效方法如下:
“现在,我确认了对问题的理解,我想询问一些潜在的极端情况。 输入是否可能是数字以外的其他类型? 如果是这样,该函数应该做什么? 输入可以是0还是负数? 同样,如果是的话,该功能应该做什么?”
询问测试用例
这是免费的,您应该利用它。 只需问函数是否应该通过任何测试用例即可。 您的面试官可能希望您提出这个问题,因此可能有必要。 但是面试官也有可能没想到这个问题,而是会想“啊,这位候选人知道测试!”
编写伪代码并询问是否有意义
(编写伪代码并检查您的逻辑)
同样,您实际上并不想开始用实际的语言编写代码。 您会发现自己受困于尝试记住该语言的方法或其他特质,而不是尝试提出正确的逻辑。 相反,让您的面试官知道您将要开始编写伪代码,然后再填写实际代码。 (巧合的是,这也是编写实际代码的一种合理方法)。
这是关键:您可以询问您的伪代码对面试官是否有意义。 他们可能会成为不想“给您提示”的类型,但也可能他们会对您的思维方式更感兴趣,并希望与您讨论伪代码。 当我面试候选人时,我对后者更感兴趣–我们很少真正在真空中开发软件。
换句话说,在最坏的情况下,面试官会告诉您继续进行,而无需实际提供反馈。 在最好的情况下,访问员可能会指出您的伪代码中的逻辑缺陷,当您转换为实际代码时,这些缺陷将给您带来严重的好处。
超级红利 :如果您的伪代码看起来不错,但最终将其转换为实际代码时遇到困难,那么您实际上已经获得了很多积分! 当然,在一些精英公司中,除了功能代码之外,他们什么都不接受,但是对于许多大公司而言,仅仅能够通过伪代码进行推理就足够了。
与我们的fizz-buzz示例保持一致,假设我们想出了以下伪代码。 我们最终将用javascript编写代码,但现在一点也不重要了。
function fizzBuzz ( n ) {
// If n is not a number or not an integer greater
// than zero, return null
// create empty array to store output
// Loop through numbers from 1 to n
// If number modulo 3 is zero, add ‘fizz’
// to output array
// Else If number modulo 5 is zero,
// add ‘buzz’ to output array
// Else If number modulo 3 is zero and
// number modulo 5 is zero, add ‘fizzbuzz’
// to array
// Else add the number to the array
// return output array
}
在这一点上,您可能意识到您永远不会进入第三条“ else-if”语句。 另外,当您与访问员确认伪代码时,他们可能会免费(严重)为您提供伪代码。 在这种情况下,您可以重写伪代码以确保首先检查第三个条件:
function fizzBuzz ( n ) {
// If n is not a number or not an integer greater
// than zero, return null
// create empty array to store output
// Loop through numbers from 1 to n
// If number modulo 3 is zero and
// number modulo 5 is zero, add ‘fizzbuzz’
// to array
// Else If number modulo 3 is zero, add ‘fizz’
// to output array
// Else If number modulo 5 is zero,
// add ‘buzz’ to output array
// Else add the number to the array
// return output array
}
编写实际代码并询问它是否看起来不错
(最后开始编写代码)
现在,您应该将伪代码转换为实际代码。 您甚至不需要删除评论。 此时,您只需要插入适合您的语言的代码即可。如果您忘记了某些语法或方法名称,则应该可以向面试官询问这些信息而不会太过悲伤。 如果他们给您带来麻烦,请说您现在将其保留为伪代码。
function fizzBuzz ( n ) {
if ( isNaN (n) || ! Number .isInteger(n) || n < 1 ) return null ;
let output = [];
for ( let i = 1 ; i <= n; i++) {
if (i % 3 === 0 && i % 5 === 0 ) {
output.push(“fizzbuzz”);
} else if (i % 3 === 0 ) {
output.push(“fizz”);
} else if (i % 5 === 0 ) {
output.push(“buzz”);
} else {
output.push(i);
}
}
return output;
}
在这一点上,不要犹豫,问您的解决方案看起来是否不错! 如果不是这样,他们可能会提供一些改进建议。 所有这些交流都为您打分-如果您愿意客观地讨论改善工作的方式,那么您会变得清晰明了,并且工作起来更加轻松。
卡住? 请求帮忙!
(请求帮忙!)
如果您在途中遇到麻烦,寻求帮助并不违法。 只是通过对话表达出来。 例如:
“我有点卡在这里,你有什么小窍门向正确的方向推我吗?”
答案可能是“不,我想看看您是否可以自己从这里解决它”,但也很可能是“是”,并提供了有用的提示!
奖励:面试前沟通
面试之前,您应该有人力资源或面试联系人。 您是否好奇面试中是否会有编码部分? 问他们! 此外,您可以询问是否需要特别准备什么。 他们可能会给您一些提示,例如指定他们提问的语言,问题的数量,问题的样式(例如,开发算法与发现错误)。 他们可能会告诉您是要坐在电脑旁还是站在白板上,这些信息可能非常有用,您可以用来练习或至少进行心理准备。
我们都是人类
最重要的是,请记住我们都是人类。 您的面试官一直在您的位置,并且了解技术面试的压力。 您的面试官可能已经看到很多候选人大汗淋漓,但很少有人愿意公开讨论以对话方式讨论问题。 如果您能做到这一点,那么您的状况将会很好。
您的经历是什么?
您是否曾参加过一次沟通交流可以拯救您的技术面试? 您有相反的经历吗? 在评论中让我知道! 我希望知道您的经历。
From: https://hackernoon.com/the-best-whiteboard-interview-advice-i-ever-received-3ebbfa72e4a