不管你喜欢还是讨厌,编码练习都是软件工程面试的重要组成部分
在面试软件工程师职位时,通常会有人递上一支白板笔,并要求他解决一些任意问题:
“编写一个函数来确定给定字符串中的字母是否可以重新排列以形成回文。”
“实现记忆功能。”
“如何对包含最多 100,000 个随机生成的整数的数组进行排序?”
作为一名面试官,我曾经非常讨厌白板问题。在陌生人面前理解并解决一个看似毫无意义或晦涩难懂的问题,这种压力足以让任何人感到焦虑。作为一名软件工程师,我永远不会在日常工作中真正写出合并排序程序,所以这又有什么意义呢?
现在,当我坐在电话的另一端进行采访时,我开始意识到这种形式的优点。事实上,观察一个人30分钟的代码编写,比你问他们一百个理论问题更能让你了解他们。
在实践中,面试中结合理论问题和编程练习非常重要。现在,我们先来分析一下为什么白板问题如此重要。
白板面试的优点
当你观察候选人代码时,你可以观察到许多技能和属性:
-
候选人是否会先问一些澄清问题,以便更好地理解问题?还是会立即开始编写代码?
-
候选人一开始会思考一些需要解决的测试用例吗?他们只考虑最理想的路径吗?还是也会考虑哪些地方可能出错?
-
候选人如何组织他们的代码?他们的变量和函数命名清晰吗?
-
他们使用什么样的语法?例如,在 JavaScript 中,他们使用的是 ES6+ 还是 ES5?他们会使用循环
for
,还是使用数组辅助方法,例如map
、forEach
或reduce
? -
如果候选人遇到困难,他们会如何反应?他们会感到沮丧吗?他们会僵住吗?他们会寻求帮助吗?他们会向你解释他们的理由吗?
-
候选人对你温和的鼓励和其他反馈有什么反应?他们是感到厌烦,还是乐于接受你的帮助?
-
候选人能优化他们的解决方案吗?如果他们一开始就采用蛮力破解的方法,他们能想出更高效的方法吗?
-
候选人能否指出自己方法中的缺陷?他们是否愿意承认自己不知道的事情?
白板面试的缺点
尽管白板面试有诸多好处,但它仍然存在一些缺点。
反对在面试中使用白板问题有两种主流观点:
-
白板面试实际上并不测试编码能力,而是测试焦虑程度。
-
白板面试有利于刚毕业的计算机科学专业的学生,他们对所学的所有算法都记忆犹新。
某种程度上,我同意这两点。不过,我认为这两个缺点都是可以弥补的。
焦虑
关于焦虑,面试官应该尽一切努力帮助面试者感到舒适。如果他们看起来很慌乱,要鼓励他们。向他们保证他们做得很好。让他们深呼吸几次。
你也可以通过家庭作业或在线评估来评估你的编程能力。使用这些方式,你确实会错过在他们编程时在场并指导他们的机会,但你仍然可以了解他们的编程风格。另一个缺点是,这两种方法很容易作弊。每个决定都有其利弊。
青睐应届毕业生
为了确保您的面试过程不会对那些具有非传统计算机科学背景的人或很久以前从大学毕业的人产生偏见,选择不需要特定算法或公式的专业知识的白板问题非常重要。
相反,选择一个更侧重于一般问题解决而不是重复数据结构和算法课程中的信息的问题。
理论问题
除了白板问题之外,问一些理论问题也很重要。对于前端软件工程师,你可以问他们关于事件委托、闭包、变量提升、this
关键字或调用堆栈工作原理的问题。
但问题是,所有这些问题都很容易在网上搜索到。任何人都能记住这些信息。作为一名面试官,你或许能分辨出面试官哪些是真材实料,哪些只是在背诵昨晚临时抱佛脚的内容,但并非总是如此。
只有当你看到某人编写代码时,你才能真正了解他们是否具备适合该工作的技能。
结论
不管你喜欢还是讨厌,白板面试问题都是面试过程中必不可少的一部分。
鏂囩珷鏉yu簮锛�https://dev.to/thawkin3/love-them-or-hate-them-coding-exercises-are-an-essential-part-of-software-engineering-interviews-3odd