评估编码技能现在已经成为技术招聘过程中不可或缺的一部分——你从不会编码的候选人那里获得的简历数量是压倒性的。我们知道简历不能很好地预测绩效,在大多数情况下,Github 活动也不是衡量开发人员技能的好方法。

在 Adaface,我们的主题专家通过仔细了解您的角色和要求来设计编码测试。我们与他们坐下来分解他们的流程,以设置符合工作要求的编码测试,以减少误报和误报。

如何设置编码测试?

在设置编码测试时,需要牢记两个重要部分:

  • 符合岗位要求的问题
  • 不会吓倒候选人的外形尺寸

问题

当今编码测试的最大问题是它们并不总是与角色的要求保持一致。 Android 开发人员不一定需要知道如何反转二叉树。或者他们可能会这样做。但关键是,如果您在该角色的编码测试中使用它,您应该非常慎重。

以下是一种思考编码测试应该做什么的方法:

即使他们无法解决/完全错误,您仍然可能雇用该人的问题在筛选阶段毫无意义,例如编码测试。

编码测试的想法是消除显然不适合该角色的候选人。我们发现最有用的方法是使用 2 个必须能够编写代码的问题,一个比另一个更容易,并为部分解决它的候选人提供一些怀疑的好处。这消除了基本上不会编码的候选人(相当多),然后您可以将其余部分带到最后一轮面试。

现在要决定那些必须能够编码的问题应该是什么,这是您首先需要回答的问题:

  1. 是否需要算法技能才能成功胜任该角色?换句话说:该角色是否专注于降低每个 API 的响应时间?简化数据以加快执行速度?更好的前端组件化以加快页面加载速度?如果这个答案是肯定的,那么——你需要什么水平的算法技能?基本的优化技能是否就足够了,还是您需要具有利基数据结构/算法的专业知识?
  2. 他们是否需要具有特定编程语言的经验,或者聪明的人可以在工作中掌握它?
  3. 他们需要快速发货还是更加细致和小心?

您对这些问题的回答决定了编码测试中的问题以及面对面面试中的问题。以下是几个示例问题(以及这些问题在编码测试中有意义的场景):

在数组中找到任何一个局部最小值

  • 检查候选人是否可以使用基本数据结构/基本优化并编写代码以涵盖多个边缘情况。
  • 反映在职工作:错误
  • 适用于:应届毕业生角色

调试代码以根据给定的约束验证或使一系列邮政编码无效

  • 检查候选人是否可以理解其他人编写的代码并使用多个循环/函数。
  • 反映在职工作:正确
  • 适用于:需要在现有代码库上工作的软件工程角色(适用于具有 1-3 年经验的候选人)

解析一系列日志并提取指标

  • 检查候选人是否能够理解数据格式、解析日志和计算指标
  • 反映在职工作:正确
  • 适用于:数据分析/后端角色

合并排序列表

  • 检查候选人是否可以有效地使用基本数据结构并考虑时间复杂度优化。
  • 反映在职工作:错误
  • 适用于:软件工程角色,专注于 API 或数据库级别的时间复杂度优化,适合 1-3 年经验的候选人

具有空间限制的数据流中的前 K 个候选者

  • 检查候选人是否可以有效地使用稍微高级的数据结构(如优先级队列)并使用约束。
  • 反映在职工作:正确
  • 适用于:具有 1-3 年经验的后端工程师,从事涉及系统设计的职位

寻找送货员到达客户的最短路径

  • 检查候选人是否可以有效地使用高级数据结构(如树/图)并使用高级算法。
  • 反映在职工作:正确
  • 适用于:算法设计角色(在 Uber 等公司)

PS:上面的部分旨在展示您应该问的问题类型,而不是确切的问题本身。其中一些太受欢迎了,因此将它们进行编码测试不是一个好主意。

构成因素

确定问题后,要记住的另一件事是外形。以下是有效的编码测试需要考虑的重要事项:

  1. 更短的评估(45-60 分钟),以确保工程师投入尽可能少的时间,同时仍足以给他们一个公平的机会。
  2. 易于阅读的问题,因为程序员应该花时间解决问题,而不是理解它。
  3. 粒度评分(相对于二元评分)。在 Adaface,我们通过对每个问题的提示来实现这一点🤓。
  4. 使用解析的输入工作样板代码,因为我们都花了太多时间卡在这里。
使用 Adaface 进行示例编码测试

在 Adaface,我们根据角色的期望设置了定制的编码测试。我们的机器人 Ada 回答他们关于角色/公司的问题,以交互方式引导他们完成每个技术问题,并创建一个记分卡供招聘经理在对话结束时查看。与我们交谈以了解更多信息。