众所周知,ChatGPT 已经彻底改变了人们的工作方式。它既能帮助小型企业自动化管理任务,又能为 Web 开发人员编写整个 React 组件,它的作用可以说怎么夸都不过分。
在 interviewing.io,我们一直在思考 ChatGPT 将给技术面试带来什么变化。一个很大的问题是:ChatGPT 会让面试作弊变得很简单吗? 在 TikTok 上的一个视频中,一名工程师让 ChatGPT 准确地回答面试官的问题:
人们最初对这类作弊软件的反应和预期完全一致:
-
Redditor 说,“众所周知,ChatGPT 是编码的终结。“
-
YouTuber 说,“软件工程已死,ChatGPT 杀死了它。”
-
X(之前的 Twitter)发出疑问,“ChatGPT 意味着编码面试的终结吗?”
ChatGPT 可以在面试过程中为人提供帮助,这似乎很明显,但我们想知道的是:
-
它能在多大程度上提供帮助?
-
作弊(并逃脱惩罚)有多容易?
-
使用 LeetCode 问题的公司需要对面试过程做出重大改变吗?
为了回答这些问题,我们招募了一些专业面试官和用户来进行作弊实验!下面,我们将分享我们发现的一切。稍微剧透一下,有一点你要知道:公司需要修改面试问题的类型,而且是马上!
实验准备
interviewing.io 是一个面向工程师的面试实践平台和招聘市场。工程师借助我们的平台来模拟面试。企业利用我们的平台招聘优秀的员工。我们的生态系统中有成千上万的专业面试官,也有成千上万的工程师使用我们的平台准备面试。
面试官
面试官来自我们的专业面试官池。他们被分成三组,每组问不同类型的问题。面试官不知道这个实验是关于 ChatGPT 或作弊的; 我们告诉他们,“这项研究的目的是了解面试官的决策随时间变化的趋势,尤其是在问标准和非标准面试题的时候。”
以下是 3 种问题类型:
-
LeetCode 原题: 面试官根据自己的判断直接从 LeetCode 中选取的题目,没有做任何修改。
例如:一字不差地问 LeetCode 上的 Sort Colors 问题。
-
改良 LeetCode 问题: 对从 LeetCode 上获得的问题做一些修改,虽然与原题类似,但也有明显的不同。
例如:对于上面的 Sort Colors 问题,将输入从 3 个整数 (0,1,2) 改为 4 个整数 (0,1,2,3)。
-
自定义问题: 所提的问题和网络上已有的任何问题之间都不存在直接的联系。
例如:给你一个日志文件,格式如下:- <username>: <text> - <contribution score> -
,你的任务是识别会话中代表参与度中值的用户。只考虑贡献分数大于 50% 的用户。假设这类用户的数量是奇数,那么你需要按贡献分数排序后找到位于中间的那个用户。对于下面的文件,正确的答案是 SyntaxSorcerer。
LOG FILE START
NullPointerNinja: "who's going to the event tomorrow night?" - 100%
LambdaLancer: "wat?" - 5%
NullPointerNinja: "the event which is on 123 avenue!" - 100%
SyntaxSorcerer: "I'm coming! I'll bring chips!" - 80%
SyntaxSorcerer: "and something to drink!" - 80%
LambdaLancer: "I can't make it" - 25%
LambdaLancer: "🙁" - 25%
LambdaLancer: "I really wanted to come too!" - 25%
BitwiseBard: "I'll be there!" - 25%
CodeMystic: "me too and I'll brink some dip" - 75%
LOG FILE END
更多关于问题类型和实验设计的信息,可以阅读面试官实验指南文档:https://docs.google.com/document/u/0/d/1UdWZHUQfeLR8oUiNY4JfwgES42HTlAQL5z_VfQJPPKk/edit
面试者
面试者来自我们的活跃用户池,我们邀请他们参加一个简短的调查。我们的选择标准如下:
-
在当下的市场上积极地找工作;
-
有 4 年以上的工作经验,正在申请高级职位;
-
他们对“ChatGPT 编码”的熟悉程度为中等或高等;
-
认为自己可以在面试中作弊而不被发现。
这种选法可以帮助我们选出那些可能会在面试中作弊的求职者。他们有这样做的动机,并且已经相当熟悉 ChatGPT 和编码面试。
我们告诉面试者,他们在面试中必须使用 ChatGPT,目的是测试他们使用 ChatGPT 作弊的能力。 他们还告诉他们,不要尝试凭借自己的技能通过面试,主要要依靠 ChatGPT。
我们总共进行了 37 场面试,其中 32 场有效(我们不得不去掉了 5 场,因为参与者没有按要求进行):
-
11 场采用“LeetCode 原题”
-
9 场采用“改良 LeetCode 问题”
-
12 场采用“自定义问题”
说明:因为我们平台允许匿名,所以我们的面试只有音频没有视频。匿名是为了帮用户创造一个安全空间,让他们可以快速失败并学习,而没有人会对他们做评判。对用户来说,这是件好事。但我们承认,没有采访视频会让我们的实验变得不那么真实。在真正的面试中,你会面对镜头,这让作弊变得更加困难——但并不能消除作弊。
面试结束后,面试官和面试者都要完成一份退场调查。我们问面试者在面试中使用 ChatGPT 时遇到的困难,而对于面试官,我们问他们对面试的担忧——我们想看看有多少面试官会将他们的面试标记为有问题,并报告他们怀疑存在作弊行为的面试。
后续调查:面试者问题
后续调查:面试官问题
我们不知道实验中会发生什么,但假如有一半作弊的求职者成功通过面试,那么对于我们行业来说,那将是一个很能说明问题的结果。
实验结果
在剔除了参与者没有按要求进行的面试后,我们得到了以下结果。我们的对照组是求职者在 interviewing.io 模拟面试中的表现,来自本次实验之外,通过人数占 53%。需要注意的是,我们平台上大多数的模拟面试采用的都是 LeetCode 风格的问题,这是有道理的,因为 FAANG 公司主要问的就是这些问题。我们一会儿再回来讨论这个问题。
与平台平均值和“自定义”问题相比,“原题”的通过率要高得多。“原题”和“改良”问题的差异无统计学意义。“自定义”问题的通过率明显低于其他任何一组。
回答原题,表现最好
不出所料,使用原题的那一组表现最好,73% 通过了面试。面试者反映,他们从 ChatGPT 得到了完美的解决方案。
以下是对这一组做面试后调查时得到的最值得注意的评论——我们认为它特别能说明许多面试官的想法:
应聘者之所以能够轻松回答这个问题,很难判断是因为他们真的很好,还是因为他们以前听说过这个问题。通常情况下,为了区分这两种情况,我会对问题做一两处修改。
通常情况下,为了获得更多的信息,面试官会跟进问一个改良过的问题。所以让我们看看采用“改良问题”的那一组,看看面试官是否真的通过对问题做一两处修改获得了更多的信息。
回答改良问题,要更多提示
请注意,这个组拿到的是一个标准的 LeetCode 问题,但他们用无法从网上直接找到的方式对其做了修改。也就是说,ChatGPT 不可能有这个问题的答案。因此,面试者更依赖于 ChatGPT 实际解决问题的能力,而不是它背诵 LeetCode 教程的能力。
不出所料,这一组的结果与“原题”组没有太大区别,67% 的求职者通过了面试。
事实证明,这种差异与“原题”组没有统计学上的显著差异,即“改良问题”和“原题”本质上是相同的。这个结果说明,ChatGPT 可以处理面试官对问题的微调,这种微调并不会给它带来多少麻烦。
然而,面试者确实也注意到,让 ChatGPT 解决经过修改的问题需要提供更多的提示。有一位面试者是这样说的:
回答直接来自 LeetCode 的问题完全没有问题。让 ChatGPT 回答一个不那么直接的 LeetCode 风格的后续问题难度会增加很多。
自定义问题,通过率最低
不出所料,“自定义”问题组的通过率最低, 只有 25% 的面试者通过。它在统计上不仅明显小于其他两个实验组,而且明显低于对照组! 当你问求职者完全自定义的问题时,他们的表现会比没有作弊(或被问到 LeetCode 风格的问题)时差!
需要说明的是,这个数值在最初计算时略高,在详细检查了自定义问题之后,我们发现了一个意料之外的问题。“企业应立即改变所提的问题!”一节说明了问题所在。
没有人被抓到作弊
在我们的实验中,面试官没有意识到面试者被要求作弊。上文说过,在每次面试后,我们会让面试官完成一项调查,他们必须描述自己对求职者的评估有多自信。
面试官对自己所做评估的正确性很有信心,72% 的人说他们对自己的招聘决定有信心。 一位面试官对面试者的表现非常之满意,以至于得出结论,应该邀请这些人成为平台的面试官!
求职者表现非常出色,并且非常了解功能强大的 Amazon L6 (Google L5) SWE……应该考虑让他们担任 interviewing.io 的面试官 / 导师。
仅仅经过一次面试就做出这样的判断,这可能过于自信了!
我们早就知道,工程师不善于评估自己的表现,所以当我们发现面试官也高估了自己所提问题的有效性时,也许也不应该感到惊讶。
有部分面试官(28%)对自己的招聘选择没有信心,我们问了他们原因。下面是原因的频次分布。
请注意:没有哪里提到作弊!
大多数面试官都具体说明了他们对招聘决定缺少信心的原因。问题通常包括解决方案次优、遗漏边缘情况、代码混乱或沟通糟糕。我们特意加入了一个“其他问题”类别,看看他们是否会表达对面试者作弊的担忧,虽然我们深入挖掘,但只发现了一些轻微的问题,比如“性格问题”和“他们需要加快编码速度”。
除了这个点出作弊的机会外,我们另外还有 3 次提示面试官指出其他他们担忧的问题,包括自由格式的文本框和几个选择题,其中的选项可以解释他们的担忧。
当 面试者因为不理解 ChatGPT 提供的回答而面试失败时,面试官会把面试者的奇怪行为和生硬回答归结为缺乏练习——而不是作弊。有一位面试官认为求职者解决问题的能力不错,但又评论说他们速度很慢,需要更仔细地考虑边缘情况。
“求职者似乎没有准备好回答任何 LeetCode 问题。”
“求职者的方法不够清晰,而且他们急于开始编码。”
“这位求职者甚至没有准备好解决 LeetCode 上最基本的编程问题。”
“总的来说,解决问题的能力不错,但应聘者需要在编码和识别关键边缘情况方面加快速度。”
那么,谁记录了对作弊的担忧?又有谁作弊被抓了呢?
事实是,没有一位面试官提到对求职者作弊的担忧。
我们惊讶地发现,面试官并没有怀疑他们作弊。有趣的是,面试者也很自信自己没有作弊。81% 的人表示不担心被发现,13% 的人认为面试官可能已经发现他们作弊,而令人惊讶的是,仅有 6% 的参与者认为面试官会怀疑他们作弊。
大部分面试者都确信他们作弊没有被发现。
有面试者担心被发现,面试官也确实在事后分析中给出了异常评价,但没有怀疑他们作弊。总而言之,大多数面试者认为他们作弊不会被发现——他们是对的!
企业应立即改变所提的问题
从这些结果中可以得出一个明显的结论,公司需要立即开始问自定义问题,否则他们将面临求职者在面试中作弊的严重风险(最终无法从面试中获得有用的信号)!
ChatGPT 已经淘汰了原题;依赖这些问题的人,他们的招聘过程只能听天由命了。招聘已经够棘手的了,哪有心思再担心作弊。如果你所在的公司原封不动地使用 LeetCode 的问题,那么请在内部分享下这篇文章!
使用自定义问题不仅是防止作弊的好方法,还可以过滤掉那些记住了一堆 LeetCode 解决方案的求职者(如你所见,自定义问题组的通过率明显低于对照组)。它还能有效地改善求职者的体验,让人们更愿意为你工作。不久前,我们做了一个分析,是什么造就了优秀的面试官。毫不奇怪,提出好问题是他们的一大特点,而我们评价最高的面试官往往是那些更乐于提出自定义问题的面试官!在我们的研究中,问题质量非常重要,它关系到求职者是否想在公司继续发展。这比公司的品牌实力还要重要许多。品牌实力在吸引求职者进入公司时是一个很重要的因素,但在面试过程中,相对于问题的质量来说就不那么重要了。
下面是来自求职者的一些说法:
“要是不仅仅是简单的算法问题会更好。”
“我喜欢这个问题——它采用了一个相对简单的算法问题(构建并遍历树),并增加了一些深度。我还喜欢面试官将问题与 [Redacted] 的实际产品联系起来,这让它看起来不像是一个玩具问题,而更像是一个实际问题的精简版。”
“这是我在这个网站上遇到的最喜欢的问题。这是仅有的几个似乎适用于现实生活的方法之一,它来自于一个真实的(或潜在的)业务挑战。它还很好地融合了复杂性、效率和阻塞等挑战。”
对于那些决定采用更个性化问题的公司来说,还有一个略显微妙的建议。你可能会把 LeetCode 的原题拿过来,然后做些修改。这很容易理解,因为这比从头开始提出问题要容易得多。遗憾的的是,这不起作用。
如前所述,我们在实验中发现,一个问题看起来像一个自定义问题并不意味着它就是一个自定义问题。问题可以看上去是自定义的,但实际上仍然与已有的 LeetCode 问题相同。在向求职者提问时,仅仅模糊一个已经存在的问题是不够的。 你需要确保问题的输入和输出都是唯一的,这样才能有效地防止 ChatGPT 识别它!
面试官问的问题是保密的,我们不能分享面试官在实验中使用的具体问题。不过,我们可以给你举个例子。下面是一个有这类严重缺陷的“自定义问题”,ChatGPT 很容易就能解答:
For her birthday, Mia received a mysterious box containing numbered cards
and a note saying, "Combine two cards that add up to 18 to unlock your gift!"
Help Mia find the right pair of cards to reveal her surprise.
Input: An array of integers (the numbers on the cards), and the target sum (18).
arr = [1, 3, 5, 10, 8], target = 18
Output: The indices of the two cards that add up to the target sum.
In this case, [3, 4] because index 3 and 4 add to 18 (10+8).
你发现问题了吗?虽然这个问题乍一看似乎是“自定义的”,但它的目标与流行的 TwoSum 问题相同:找到两个数字,它们的和等于给定的目标值。输入和输出都一样;这个问题唯一的“自定义”之处就是给问题加上了故事。既然与已知问题相同,那么对于输入和输出都与现有已知问题相同的问题,ChatGPT 表现良好也就不足为奇了——即使是为它们添加了一个独特的故事。
如何创建好的自定义问题
我们发现,对于提出好的原创问题,有一件事非常有用,就是在团队中创建一个共享文档,每当有人解决了他们认为有趣的问题时,无论问题多小,都快速记下,后续也无需补充完善这些笔记,但它们可以成为独特面试问题的种子,让求职者深入了解你公司的日常工作。把这些杂乱的种子变成面试问题需要思考和努力——你必须删去很多细节,提炼出问题的本质,使求职者不需要花很多时间去理解。你可能还得反复琢磨这些问题几次,才能把它们弄好——但回报也可能是巨大的。
需要说明的是,我们并不提倡从技术面试中删除数据结构和算法。DS&A 问题之所以名声不佳,是因为那些糟糕的、不敬业的面试官,也因为公司偷懒,重复使用 LeetCode 的问题,其中许多问题很糟糕,与他们的工作毫无关系。在好的面试官手中,这些问题会强而有力。如果你用上面的方法,就能够提出新的数据结构和算法问题,一些有实践基础并能吸引求职者、让他们对你所做的工作感到兴奋的问题。
这样,你也将推动我们的行业向前发展。背诵一堆 LeetCode 问题就能让求职者获得面试优势,这不好,也不能让作弊看起来像是面试的理性选择。解决的办法是雇主多做一些工作,提出更好的问题。让我们一起行动起来吧。
给求职者的真心话
好了,现在,所有正在积极找工作的人,请听好!是的,你的一部分同事现在会在面试中使用 ChatGPT 作弊,在那些使用 LeetCode 问题的公司(可悲的是,很多),这些同事会在短时间内取得优势。
现在,我们正处于一个临界状态,公司的流程还没有赶上现实的发展。他们很快就会完全放弃使用 LeetCode 原题(这对我们整个行业来说都是一个福音),或者回到现场(这将使作弊者在很大程度上不可能通过技术面试),或者两者兼而有之。
在本已艰难的环境下,我们会担心其他求职者作弊,这很糟糕,但凭良心,我们不能通过作弊来实现“公平竞争”。
此外,使用 ChatGPT 的面试者一致表示,在面试过程中使用 AI 使得整个面试过程困难了许多。
从下面这段视频中可以看到,一位面试者完美地回答了面试问题,但在分析时间复杂性时却磕磕绊绊。当面试者着急着慌地解释如何得出了错误的时间复杂度(ChatGPT 提供的答案)时,面试官都被整糊涂了。
在实验过程中没有人被抓到作弊,他们的摄像头是关闭的。但正如我们在视频中看到的那样,即使是对于熟练的求职者来说,作弊也仍然很困难。
撇开道德不谈,作弊很难,会造成压力,而且实施起来并不简单。相反,我们建议将这些努力投入到实践中,一旦公司改变了他们的面试流程(希望这很快就会发生),你就可以因此获益。最后,我们希望 ChatGPT 的出现将成为催化剂,推动行业的面试标准从苦练和记忆转变为真正地考察工程能力。
原文链接:
https://interviewing.io/blog/how-hard-is-it-to-cheat-with-chatgpt-in-technical-interviews