Bas van Opheusden 的 OpenAI 面试经验分享

内容纲要

2025 年夏天,Bas van Opheusden 拿到了 OpenAI 的 offer。整个过程既紧张又充满小插曲,他的经验对那些想进大模型研究岗位的人非常有参考价值。


面试前的准备:理论与实战

Bas 的准备从理论到实战一环扣一环。

  • 理论学习:他先把官方模型说明文档(model cards)和开源 GPT 项目(GPT-OSS)翻了个遍,还看了斯坦福 CS324、MIT 深度学习公开课。数学、算法、Python 基础也没落下,Raschka 的《Python Machine Learning》系列成了他每天晚上的“枕边书”。

  • 实战练习:Bas 用 Karpathy 的 NanoGPT 搭建小项目,熟悉 Transformer、Tokenization 和 KV Cache 实现。他还让 ChatGPT 帮他生成练习题,有时自己改题加难度。

  • 编码训练:他刷了大量 LeetCode 中等题,目标是 30 分钟内稳定解出来。完成这些后,才开始做 GPT-4/deep research 生成的练习题。Bas 形容调试 Transformer 的过程像拆炸弹一样紧张:“每次 Tensor 形状出错,我都怀疑人生。”


面试流程与经验

Bas 的面试分为几个环节,每一环都值得注意。

招聘专员沟通

这是流程的第一步,专员会说明岗位、团队、薪资范围等。Bas 做了详细笔记,这让他后续回答“申请哪个角色”时不慌不忙。

招聘经理面试

招聘经理考察技能和团队协作潜力。Bas 提前查了经理的论文和研究方向,面试时能自然提起:“我看到您在 2023 年的论文中提到……”,让对方觉得他是真的关注研究内容,而不是套话。

编码面试

这是最紧张的环节,涵盖数据结构、算法、Transformer 调试等。Bas 发现重点不是写完美代码,而是展示解决问题的思路和思维逻辑。他在模拟练习中学会了在限时和压力下编程,甚至在白板上手写代码练习,像一次次小型演习。

  • 心理秘诀:面试官其实希望你成功。你展示思路、清楚沟通,比完美代码更重要。
  • 技巧:时间紧、问题多,解决一个就迅速跳到下一个;把问题拆解清楚,写下 TODO,方便后续修改。

行为面试

行为面试强调沟通和领导力。Bas 用 STAR(I) 方法讲真实案例,尤其强调“失败案例”很重要。比如他曾经低估项目工作量,差点赶不上 deadline,通宵加班最终客户满意度翻倍。他说:“面试官想看到你面对问题的处理方式,而不是完美履历。”


心态与生活策略

  • 作息和状态:面试前保证睡眠充足,整理桌面和设备。Bas 使用 Yeti Nano 麦克风、C922 Pro 摄像头、双屏显示器,并准备笔和纸,哪怕没用上,也让他安心。
  • 心态:紧张是正常的,把注意力放在展示自己的思路和解决问题能力上,比死盯代码更有效。
  • 练习环境:模拟限时、压力下编码,甚至白板手写代码,训练心理承受力。

内推与社交策略

Bas 也非常强调内部推荐的重要性:

  • 内推是进入大厂最快的途径。
  • 通过 GitHub、开源贡献、Hackathon 展示能力。
  • AI 行业有强烈的“pay-it-forward”文化:朋友帮你内推,你也会帮别人。

即便你没有直接推荐,也可能通过朋友的朋友建立联系。Bas 说,行业里的朋友关系往往比官方招聘渠道更有效。


Bas 的经历告诉我们,拿到 OpenAI offer 并非偶然:

  • 系统的理论学习 + 实战练习
  • 编码训练和心理训练
  • 行为面试案例准备(尤其是失败案例)
  • 内推和社交网络

每一个细节都不是空谈,而是实打实能影响结果的准备。Bas 的故事里有真实踩过的坑、心态变化和心理策略,比单纯建议更有指导价值。


Bas van Opheusden分享的经验原文

AI研究员 Bas van Opheusden 面试记录,2025 年 8 月 12 日

AI研究岗面试
作者:Bas van Opheusden, 2025年8月12日

几周前,我开始了一份在OpenAI的新工作。这份文件描述了我的面试过程、经验教训和给你的建议。如果你正在阅读这篇文章,我假设你正在找工作或考虑转行,并且至少对生成式AI和大型语言模型有一定的兴趣。如果你不是,我鼓励你查看openai.com,了解我们最新的研究。我听说gpt-5还不错 😉

保护好你的身心健康
面试压力很大,事关重大,有时,一个30分钟的谈话就可能极大地改变你的生活,无论是好是坏。当你最终熬过这一关,拿到一个或多个录用通知(offer)时,一切都将是值得的,但过程有时会很艰难。确保你有一个由朋友和家人组成的支持网络,不要低估精神压力加上熬夜可能对身体造成的影响。

每个人都希望你通过面试并签下offer
面试过程有时会让人感觉像是一场对抗,令人沮丧且不公。尽管如此,请记住,所有相关人员,包括你的推荐人、招聘官、面试官、招聘经理等等,都希望同样的事情发生:你通过面试并接受offer。通常,公司会努力为你创造成功的条件,任何其他结果对所有人来说都是一种损失。虽然我们扮演的角色不同,但这其实是一项团队运动。

失败是一个选项
在我的面试周期结束时,我收到了一堆拒信和3个offer。如果我只拿到2个或1个,我仍然会欣喜若狂。如果一个都没有,我会很伤心。我会在情感上崩溃,并且在一段时间内甚至很难考虑申请其他公司。但我最终会走出来,而且我肯定会在大约一年后重新申请OpenAI。我们都处于职业发展的上升轨道上,如果你在任何一家公司通过了哪怕一个阶段,他们通常都很乐意在一两年后与你重新联系。这在我自己和许多我认识的人身上都发生过。今年并不是我第一次申请OpenAI。

享受过程!
考虑到事关重大,这可能很难做到,但面试也很有趣。你能了解到很酷的新兴创业公司,你将有机会与你研究领域的世界级专家进行一对一的交流,你还会学到一大堆新技能。从某种程度上说,编程面试也挺有趣的。一种非常“第二类乐趣”(type-2 fun)的方式。

通用建议

尽早准备
任何花在准备求职面试上的时间,都可能是你一生中投资回报率最高的事情。我真希望我能更早开始。准备面试还有附带的好处:你能学到新技能,阅读论文,或者重温一些经典。通过模拟面试,你会得到诚实的反馈并能从宏观角度审视自己。我注意到,因为准备面试,我在上一份工作中的表现也更好了。从数量级上来说,我建议进行大约100小时的LeetCode练习,并花费同样多的时间阅读论文、更新知识(使用Deep Research!)以及与朋友交流。

没有非正式的交谈。
招聘官可能会邀请你与招聘经理聊聊,或者与团队共进午餐/晚餐,并把这些交流说成是“非正式的”,但这主要意味着没有正式的评分标准。你与任何公司或其代表的每一次互动,都是展示你品格、能力和热情(无论是积极还是消极的)的机会,这一点从最初的交谈直到你签署offer的那一天都成立。

和朋友一起练习
面试,尤其是编程面试,是很尴尬的。你需要在素未谋面的人的注视下,一边调试差一索引(off-by-one index)的错误,一边讲解你的思路。这还要求你在常规工作流程中不使用codex、copilot或任何LLM工具。你不会希望你的第一次经历就发生在高风险的面试中。尽可能多地和朋友一起练习,练习在时间压力下编程,选择一些烦人的问题,并让你的朋友假装不认识你。这会很尴尬,但这正是重点。学会拥抱这种尴尬。

简单技巧
面试过程旨在衡量你的能力和与公司的契合度,在某种程度上,你要么达标,要么不达标。然而,有许多小事可以做,来增加你成功的几率——而这样做也体现了你的努力和专业精神。

投资一套好的设备。 我买了一个Yeti Nano麦克风和一个C922 Pro网络摄像头。我有一个双屏设置,可以在通话时做笔记,并且我会移动视频通话窗口在屏幕上的位置,这样看起来我像是在进行眼神交流。我的房间光线充足,以防音频出问题,我手边还备有耳机。我会在每次面试前清理我的桌子,并准备好纸和笔。我只用过一次,但如果没有它们,我那次面试可能就失败了。

照顾好你的基本需求。 面试前一天早点睡觉。根据需要运行空气净化器、空调或空间加热器。面试前30分钟,出去散散步或和你的猫玩一会儿。确保你吃饱了,上过厕所,手边有水(我通常会备好水、咖啡、冰茶和康普茶)。如果你有背部或颈部问题,吃点艾德维尔(Advil)并做些伸展运动。

提早到。 如果你的面试是下午2点,请在1:55加入通话。你的面试官可能会在2:03左右出现。如果到2:05他们还没来,就联系(ping)你的招聘官(用一封预先写好的邮件),他们通常会在2:07左右出现。这是正常的。

确保你了解视频通话界面。 不同的公司可能使用Zoom、Google Meet、Microsoft Teams、Amazon Chime等。确保你知道如何共享屏幕或打开聊天窗口。同样,对于编程面试,要熟悉你将使用的工具。如果是Coderpad或Google Colab,你可能可以期待语法补全和高亮,但其他公司可能使用纯文本,有些甚至不允许执行代码。据报道,Meta将转向启用AI工具的面试。

确保你使用同一台电脑进行面试和练习。 如果你的工作涉及编写代码,并且你对工作笔记本电脑的设置和布局感到舒适,你可能会想用它来练习编程面试,但这会适得其反。当你在个人设备上进行真实面试时,你会感到不那么自在。

如何获得面试机会
想在大科技公司获得一个入门机会是很难的。他们会有招聘页面发布职位空缺,但通常应接不暇,直接申请的成功率很低。我通过内推或别人主动找上门的方式获得了更多成功。

做出好的工作,并让它为人所知。 发表论文并在会议上展示。发布带有演示和说明文档的GitHub仓库。参加社交活动和招聘会,在讲座上提出好问题,主动提出合作并贯彻到底。获得引用、GitHub星标、为开源项目做贡献、赢得黑客马拉松等。公司雇佣的招聘官和人才探子的工作就是发现杰出的人才,如果你持续做出好的工作,他们就会注意到。但你越能让他们轻松发现你,就越好。

获得内推。 最好的“敲门砖”是内部推荐。考虑到在Google、Meta、Apple、Amazon等公司工作的人数之多,你很可能在那里有朋友。向朋友或熟人请求内推是完全正常的。即使他们不能(因为大多数公司对个人可以发出的推荐数量有限制),我保证你会重燃一些旧日友谊,并被介绍给朋友的朋友,他们会很乐意认识你并分享建议。这里有一种很强的“薪火相传”(pay-it-forward)的文化。说到这里,如果你是我的朋友,我的私信是开放的。即使我们唯一的交集是8年前在佛蒙特州的一次滑雪旅行,此后就再也没聊过,你也是我的朋友。我们聊聊吧!OpenAI正在招聘哦 😉

拥有一个好的领英(LinkedIn)、简历和个人网页。 实际上我并没有全部这些,但维护一个领英个人资料是最有帮助的。如果你将“AI研究科学家 - 大型语言模型”列为你的职位头衔,你就会获得主动找上门的机会,其中会包括你从未听说过的很酷的创业公司。例如,我面试了Lila,他们非常出色,我强烈推荐大家去了解一下。

与招聘官的初次通话
大多数公司的第一步都会是与招聘官进行一次简短的“非正式”通话。他们会解释流程,告诉你招聘经理是谁以及他们所在的团队,对于初创公司,还会介绍公司的使命和战略。他们可能还会问你关于薪酬期望。在这次通话中,一定要做笔记!我当时没做,后来后悔了。这可能是最后一次有人向你解释组织架构和团队结构,我曾遇到过在2-3周后的编程面试中,有人问我申请什么职位而我却不知道的情况。

与招聘经理的交流
几乎每家公司在流程早期都会有招聘经理的筛选环节。这次通话后,招聘经理需要确信你具备他们所招聘职位所需的技能,并且他们个人会乐于在未来几年与你紧密合作。这里没有捷径或秘诀。你的招聘经理通常比你有经验,有很好的判断力,并且知道你所不知道的专有信息(例如,确切的职位描述)。然而,有几件事你可以做。

做好你的研究。 如果你被告知了招聘经理是谁,就在谷歌学术上查阅他们,阅读他们的论文,查看他们的推特,观看他们给出的讲座或演讲。你会了解是什么在驱动他们,而且人们通常喜欢你关注他们的内容。这不是什么社交工程的伎俩;提前投入精力去了解他们是真诚地展示你热情的一种方式。如果你将来有面试我的机会,提到这篇博客文章——我会欣喜若狂的!

保持真诚。 我讨厌别人告诉我“做你自己就好”。但我确实想强调保持真诚。如果你在面试中扮演一个虚构的自己,你的面试官会察觉到,而且是立刻。人类很擅长这类事情。我很幸运,我的个人性格和职业性格有些互补(花生酱先生(Mr. Peanutbutter)和屹耳(Eeyore)的混合体)。所以我可以说出“我想在OpenAI工作,因为OpenAI是世界上最酷的公司”这样的话,并且是真心实意的。如果这对你来说听起来不自然,就不要说,找一些适合你自己的话。

保持谦逊。 这一点很难。你有点陷入一种两难的境地,既想展示自己的能力,解释你选择的、你认为能很好反映你水平的过往工作,又不想显得过于自信。特别是,你的招聘经理可能掌握着他们不能分享的机密信息,一个像“根据你的研究,你认为扩展方案A还是B会效果更好”这样的问题,他们可能比你更清楚答案。

充满激情。 这一点我怎么强调都不过分。如果你将来面试我,我很有可能会问你“谈谈你自己,为什么想在OpenAI工作,以及这个职位让你兴奋的地方是什么”。你应该预料到这个问题,准备一个引人入胜的答案,并且这个答案必须是真诚的。这可能很难,因为你可能同时申请多个地方,而只有一个能是世界上最酷的公司。但如果你做一些灵魂拷问,你会发现很多公司都有让你真正充满激情的地方。例如,这些对我来说也是真实的陈述:“我在2018年在Facebook现实实验室的实习是我最快乐的时光,我希望能重现那种体验”以及“我现在正用我的Google Pixel手机的热点,在Google Chrome浏览器里写一篇Google文档。我从12岁起就想在Google工作了。”

你几乎像在推销自己一样,也在推销你现在的雇主
我很惊讶自己会如此频繁地被问及关于Imbue的问题,从我们的研究和技术方法一直到公司使命、商业计划、收入模式等等。我不确定为什么——尤其是我不能透露这些信息——但我的感觉是,一些面试官只是好奇,而另一些面试官可能会把你解释公司使命的能力视为能力的标志,把你当前选择的雇主视为判断力好坏的标志。无论如何,确保你练习过如何介绍你的公司,并能将你的日常技术工作与公司的总体目标联系起来。我想,这能展现领导力。

行为面试
大多数大型科技公司都有一种形式的领导力面试。亚马逊的“抬杆者”(Bar Raiser)和谷歌的“谷歌范儿”(Googleyness)面试是出了名的。通过准备和练习——大约10个小时可能就足够了——你可以在这些面试中取得优异成绩。有很多文章和视频可以观看,我没有太多要补充的。

确保准备好一些围绕大致主题的轶事,这样“告诉我一次你与经理意见不合的经历”和“告诉我一次你在没有直接负责权的情况下展现领导力的经历”可能都指向同一个故事。当我开始准备这些时,我意识到我拥有的故事比我最初想象的要多得多。使用STAR(I)格式,并尝试讲述那些你作为主角并最终力挽狂澜的故事:“我因为我们低估了工作量而未能按时完成任务。我与客户沟通,通宵赶工,最终我们为客户交付了双倍的价值!”

在我看来,这都有点表演性质,不过有一个建议是,为“告诉我一次你失败的经历”准备一个好的答案,因为“我从不失败”会被解读为要么是傲慢,要么是缺乏尝试。

编程面试
编程面试将占据你大部分的时间,成败往往在此一举。一个非常重要的概念是理解编程面试的心理学,并利用它来助你成功。面试的目标不是写出好的代码,或通过测试,或计算复杂度——而是让面试官对你作为未来同事产生积极的感觉。我甚至在几乎没写代码的情况下也通过了面试。

面试官希望你通过。 因为面试官是给你出题并评判你的人,你可能会假设这是一种对抗关系。事实恰恰相反:对面试官来说,最好的情况是你表现出色,他们可以写一份热情洋溢的推荐信,而看着候选人挣扎是最糟糕的。通常,他们会努力帮助你通过,你可以利用这一点。我偶尔会直截了当地问:“我希望通过这次面试。我能做些什么来实现这个目标?”,我至少有一次通过这种方式通过了本可能失败的面试。

开场白尽量简洁。 时间对你不利,开场闲聊是浪费时间。你应该准备一个简短的介绍,比如:“我叫Bas van Opheusden,我在研究团队负责安全与对齐的评估工作。”

当你解决了一个问题,就继续下一个! 人们有一种倾向,在某个问题上花费不必要的时间,但如果你正在进行多轮面试,尽快进入下一个问题是主要目标。你总可以在之后再做清理或交流。

练习在压力下编程。 编程和调试之所以困难,是因为你必须在脑中精确模拟机器逻辑。当有人在旁边看着,当你在计时,以及当那个人给你“帮助”时,这就更难了。你应该在与面试相同的条件下练习:在时间和压力的双重作用下。

准备白板编程面试。 有些公司会这样做。不知道为什么,但这是一项你应该准备的技能。练习在没有执行环境和没有语法高亮的情况下编程。这糟透了,但你会庆幸自己练习过。

练习Python。 大多数科技公司使用Python和PyTorch。有些公司会在面试中要求使用Python,有些则不会,但你的面试官很有可能最熟悉Python,他们能更好地帮助你。

需要准备的具体面试主题:

  • 调试Transformer。 这是一个经典问题,你会得到一个有问题的自注意力模块实现,并需要调试它。确保你练习过调试张量形状,并特别注意因果注意力掩码(causal attention mask)——那是最容易出错的地方。作为参考,可以看看nanoGPT。
  • Top-k/knn。 “挑选k个最大项”的问题在机器学习的多个地方都会出现,是一个很好的面试题,特别是因为解决方案(堆)不是你能临场想出来的。确保你知道什么是堆。
  • 实现BPE。 分词器(Tokenizer)是LLM中最糟糕的部分,无误地实现BPE是很棘手的。这个问题比较流行。
  • 从零开始实现反向传播。 实现一个基础版本的自动微分、链式法则等。有很多机会出现索引错误。
  • KV缓存(KV Cache)。 这本质上是构建一个矩阵,但如果你之前没见过,你可能会用一些复杂的方法。
  • 二分查找、回溯、迪杰斯特拉算法(Dijkstra),…

技巧:
我在面试中学到的一个技巧是策略性地使用待办事项(todo)。想象一下你正在写一个冒泡排序算法。它可能看起来像这样:

1 def bubble_sort(arr: list[int]) -> list[int]:
2     n = len(arr)
3     for i in range(n-1):
4         for j in range(n-i-1):  #待办:检查索引
5             if arr[j] < arr[j+1]:   #待办:是 < 还是 >?
6                 arr[j], arr[j+1] = arr[j+1], arr[j]

在实现这个时,你可能会想(或者你的面试官可能会问)这里到底是 n-i-1 还是别的什么。你可以含糊其辞地带过,或者当时就尝试解释清楚,但我的解决办法是留下待办事项,所以在第4行写上:#待办:检查索引,在第5行写上:#待 办:是 < 还是 >?。当你最终运行这段代码发现它错了(它以降序排序),在代码中明确留下待办事项可以让你将一次失败转化为一次胜利:“啊,是的,这正是我担心的。应该是 > 而不是 <。这说得通。好的,我现在删掉这个待办事项。”

留下待办事项的一个缺点是,当你遗漏了某些东西时,可能会让它变得更明显。例如,在一次面试中,我需要实现一篇论文中的一个方法,开始写了
X = torch.zeros([N,N]) #待办:检查是否应初始化为0?
然后就忘了这件事。那次面试我没通过…

使用断言(asserts)。 如果你“知道”代码中某一行的一个特定变量应该是排好序的,你可以写
assert all(x<=y for x,y in zip(arr, arr[1:])) #arr已排序
这可能帮助你记住这个事实,或者在该假设在某些边缘情况下不成立,或者你在上游代码中打错了字时捕捉到bug。你总可以在最后将它们注释掉或删除。

考虑重构问题。 我遇到过一个问题,因为我需要在一个按最近时间排序的日志中找到一个事件,我总是搞混。完全可以在代码开头写上 arr = arr[::-1] #现在arr是升序的

机器学习领域知识面试
你可能会被安排一个领域知识面试,或听起来类似的东西。这些面试内容差异很大,从考试风格的问答,到讨论你写过的一篇论文,再到“告诉我你正在做什么”。

准备好回答考试类问题。 了解基础知识!你的面试可能会以“描述监督学习和非监督学习的区别”或“什么是线性回归”开始。你需要能够简洁准确地回答这些问题。确保你也了解最前沿的或最近的发展。例如,如何训练一个具有1000万上下文长度的模型?GSPO与GRPO/PPO相比如何?什么是(有毒的)人格向量(persona vectors)?一些面试官喜欢问历史性问题,比如“说出Vaswani, 2017年提出的架构与GPT-OSS-120B架构之间的三个主要质的区别”。

使用ChatGPT来准备。 或者如果你非要用的话,也可以用Claude/Gemini。但我从o3,特别是从Deep Research那里获得了非常有用的学习指南、论文链接和摘要。如果你大致知道你在找什么,这些工具非常有用。

准备一个演讲。 有些公司可能会要求你做一个演讲,但即使不要求的公司也可能会让你讨论一些以前的工作,而通过幻灯片来讲解远比空谈要好。

准备好讨论你当前的工作。 你可能会被问到你当前的项目,你应该能够解释目标、你的方法、你进行到了哪一步、接下来的步骤以及你最终如何看待它在产品中的整合。这可能会很尴尬,因为你可能会被问到你不知道答案的问题(因为它是经验性的,你还没有数据),或者你的面试官可能与你有不同的直觉。或者他们可能已经知道你的方法行不通,但因为是机密信息所以不能告诉你……

谈判
当我开始申请时,我的心智模型是,在进行面试后,你会在50-75%的地方被拒绝,得到一些offer,比较它们,谈判,然后做出决定。遗憾的是,事情不是这样运作的。在你通过正式的几轮面试并接到招聘官的祝贺电话后,第二个面试过程开始了。此时,公司已经确定你达到了他们的技术门槛并且文化上契合。但他们不知道他们有多想要你,你有多想为他们工作,以及他们应该付你多少钱。我不知道这个世界的存在,而且我对此的接触仍然有限,但它几乎同等重要。我能给你的建议相当有限。

不要只关注薪酬。 我们是机器学习研究员,当我们看到一个数字,且越高越好时,我们的本能是去爬山(hill-climb)。你确实可以这么做。但不要让数字分散你对影响你生活质量的其他所有事情的注意力:你的团队、使命、地点、公司文化、食物(这个是真的)。是的,钱是好东西,但不要为了钱牺牲幸福——那完全违背了钱的意义。

一些招聘官会耍些不光彩的手段。 我遇到过有公司给出极短的截止日期、撤回offer、对我玩消失,或者“不小心”拖到另一个截止日期过后才发出offer。尽量把所有事情都以书面形式记录下来(这本身可能就需要谈判),并且不要以为你在谈判方面比你的对手更擅长。你一生中只会做几次这种事,他们每天都在做。

你拥有的一个重要资源是你的招聘经理。 他们想雇用你,并可以在内部为你争取。你可以要求与他们交流,见见团队的其他成员,或者在压力解除后再去参观一下办公室。但记住,没有非正式的面试!

决定
总会有一个时刻,你必须真正决定你想用你的生活做什么。如果OpenAI给了你offer,你应该接受,在这里工作真的超爽 😉 如果没有,那就去那家能让你每次走进前门时都面带微笑的公司工作吧。

最后的想法
面试是艰难且充满压力的,但也是一项你可以掌握的技能。我希望以上的一些内容能在你的旅程中帮助到你,也希望我们能有机会共事。如果你对我的某些工作、生成式AI领域或OpenAI这家公司感兴趣,请联系我。祝你好运!

Leave a Comment

您的电子邮箱地址不会被公开。 必填项已用*标注

close
arrow_upward