← Blog← 博客

Notes on the Industry Job Search行业求职笔记

For most of my PhD, the job search in my mind was like a sorting hat : senior PhD students would disappear (for several months), then emerge with their fates decided. Even as my close friends began graduating and getting jobs, I knew little about what they were going through apart from the occasional proof of life. When it was finally my turn, I found the process to be far more demanding than I had imagined, and felt like I was learning the rules of the game while playing it.在我大部分博士期间,求职在我脑海中就像分院帽:高级博士生会消失(几个月),然后带着已决定的命运出现。即使我的亲密朋友开始毕业并找到工作,我也几乎不了解他们的经历,偶尔只能看到一点点生活的痕迹。当轮到我时,我发现过程远比想象中更苛刻,感觉自己在玩游戏的同时还在学习游戏规则。

In retrospect, a lot of my experiences were universal and many of the things I learned along the way now feel like common knowledge. I’m writing this post to share one data point for how the journey can look and hopefully make the job search a little less mysterious for someone in my shoes not too long ago.回顾过去,我的许多经历是普遍的,许多我在路上学到的东西现在已经是常识。我写这篇文章是想分享一个数据点,展示求职之路可能的样子,并希望能让和我当初处境相似的人对求职的神秘感稍有减轻。

A bit of background on me. I applied for Research Scientist / Member of Technical Staff roles at the end of my 6-year PhD in NLP at the University of Washington. I’ve been in school my whole life, and would have loved to be a PhD student forever except that my advisors eventually nudged me to move on. I spent most of my PhD not thinking much about what I would do afterwards, and I was compelled more by working on fun ideas than anything else. This led to a lot of pivoting, but fortunately I managed to keep a consistent thread in my last two years (on tokenization!) because it coincided quite a bit with having fun, and I think establishing an area of expertise helped me stand out in the job search.一点背景介绍。我在华盛顿大学完成 6 年 NLP 博士后,申请了研究科学家/技术员工岗位。我一生都在上学,原本想永远做博士生,只是导师们最终催我继续前进。博士期间我大多不考虑毕业后做什么,更多是被有趣的想法驱动。这导致了很多转向,但幸运的是在最后两年我保持了一条一致的主线(分词!),因为这恰好与我的兴趣相吻合,我认为建立专业领域帮助我在求职中脱颖而出。

My timeline我的时间线

The figure below shows my job search timeline (inspired by Nathan Lambert’s post), showing interviews as gray icons and outcomes as colored circles. Note ghosted means the recruiter never informed me about an outcome or next steps, and withdrawn means I politely told the company I was no longer interested after receiving some offers I was excited about. In total, I interviewed at 11 companies over 57 interviews. Not pictured are 46 additional recruiter calls and 16 post-offer chats, plus myriad informal networking conversations leading up to the search.下图展示了我的求职时间线(灵感来源于 Nathan Lambert 的帖子),灰色图标代表面试,彩色圆圈代表结果。注:ghosted 表示招聘者从未告知结果或后续步骤,withdrawn 表示在收到一些让我兴奋的 offer 后,我礼貌地告诉公司我不再感兴趣。总计,我在 57 场面试中面试了 11 家公司。图中未显示的还有 46 次招聘电话、16 次 offer 后的聊天,以及大量在求职前的非正式网络交流。

Job search timeline

Company order. I decided when to begin each interview process through some combination of whether I felt ready, pressure from the company, how quickly I expected them to move, how excited I was about them, and less-deliberate factors like procrastination. The common wisdom here is to use a few companies for practice, then time the other processes so that all offers are received at roughly the same time for negotiation purposes. While I think this is roughly right in spirit, there are a few considerations I would add.公司顺序。我决定何时开始每个面试流程,是基于我是否准备好、公司压力、他们的进度预期、我对公司的兴趣程度以及一些不太理性的因素如拖延。常见的做法是先用几家公司练手,然后让其他流程的时间错开,使所有 offer 大致同时到达,以便谈判。虽然我认为这种精神大致正确,但我会补充一些考虑因素。

  • Practice interviews are helpful, but also recognize that your stamina is finite — be careful not to burn out by the time you get to places you really care about!练习面试有帮助,但也要认识到你的精力是有限的——别在真正关心的公司面前把自己烧垮!
  • There are external factors to timing that are worth taking into account, such as whether the company has headcount and which teams are actively hiring, and this can matter more than your preparation. You can gain some insight into this through your friends and recruiters.还有一些外部因素值得考虑,比如公司是否有招聘名额、哪些团队在积极招聘,这往往比你的准备更重要。你可以通过朋友和招聘者获取这些信息。
  • Deadlines come with a lot of flexibility, so offer timing does not have to be very precise. Recruiters recognize you have other processes to finish, and there are various tricks to delay the offer and decision. That being said, there are notorious exceptions (so-called “exploding” offers), so it is important to investigate how much time candidates are usually given to sign.截止日期有很大弹性,所以 offer 的时间不必非常精确。招聘者知道你还有其他流程要完成,并且有各种技巧可以延迟 offer 和决定。不过,也有著名的例外(所谓的“爆炸” offer),因此了解候选人通常有多少时间签约很重要。

Getting the first interview. To state the obvious: try to do good work during the PhD, make friends, and collaborate a lot! To get that first interview, sometimes you need to have someone inside the company vouching for you. You can set yourself up for success early on by being social at conferences, collaborating widely, and attending networking events (of course this part doesn’t come easily to everyone — certainly not for me — so take care of your own energy and comfort levels too). During the job search, reach out to people you know (or don’t know) and ask about opportunities. In fact, a big part of the job search is reconnecting with people who you may not have talked to in years — this is okay, expected, and turns out to be a wonderful side effect of the process.获得第一场面试。显而易见的建议是:在博士期间做好工作,交朋友,广泛合作!要得到第一场面试,有时需要公司内部有人为你背书。你可以通过在会议上社交、广泛合作、参加社交活动来为成功奠定基础(当然这对每个人都不容易——对我来说更是如此——所以也要照顾好自己的精力和舒适度)。求职期间,主动联系认识或不认识的人,询问机会。事实上,求职的很大一部分是重新联系多年未谈话的朋友——这很正常,也是一种很好的副作用。

Interview types面试类型

I would say there were roughly the following categories of interviews. Overall, technical skills and knowledge are evaluated much more than research experience, though the latter probably gets you the interview in the first place.我大致可以把面试分为以下几类。总体而言,技术技能和知识的评估远高于研究经验,后者通常是让你获得面试的关键。

ML coding. This was by far the most common. These questions may ask you to implement a given architecture, a decoding strategy, a traditional ML algorithm, or sometimes way more creative things. Being fluent in PyTorch is a must; in rare cases I was asked to use only numpy, for instance when writing the backwards pass from scratch, but I was not expected to be familiar with the numpy syntax.机器学习编码。这是最常见的。这类问题可能要求你实现给定的模型结构、解码策略、传统机器学习算法,或更具创意的任务。熟练使用 PyTorch 是必须的;极少情况下我被要求只用 numpy,例如从头实现反向传播,但并不要求熟悉 numpy 语法。

General coding. Basically LeetCode, sometimes with some extra flavor. It’s good to build strong foundations here because the concepts often show up in ML coding interviews, too.通用编码。基本上是 LeetCode,有时会加点额外的口味。打好基础很重要,因为这些概念也常出现在机器学习编码面试中。

Technical discussion. These interviews do not involve coding but are very much technical. Sometimes, the interview is an extended discussion around one topic, such as how you would design experiments to answer a particular research question or accomplish a particular goal. The interviewer will generally press you on your design choices and ask you to comment on some hypothetical results and design follow-up experiments. In other cases, the interview consisted of a list of rapid-fire questions (What are some different ways of encoding positional information? What is 5D parallelism? What is the difference between PPO and GRPO?), and the goal was to signal that I knew my stuff. The former type of interview tests how you think, whereas the latter checks your breadth of knowledge on the field.技术讨论。这类面试不涉及编码,但非常技术化。有时面试是围绕一个主题的深入讨论,例如你会如何设计实验来回答特定的研究问题或实现特定目标。面试官会追问你的设计选择,并让你对假设结果进行评论并设计后续实验。另一些情况下,面试是快速提问(比如:位置编码有哪些方式?什么是 5D 并行?PPO 与 GRPO 的区别是什么?),目的是确认你对该领域的了解。前者考察你的思考方式,后者检验你的知识广度。

Research discussion. These are the kinds of conversations we practiced most in our PhD. The interviewer generally asks you to start by telling them about a past project, and the rest of the discussion flows from there. They might also ask questions about other papers on your CV. When preparing for these kinds of discussions, it’s useful to take a step back and think about why you chose to work on the things you did, insights and opinions you’ve developed along the way, and what you view as promising future directions. I also tailored my research pitch depending on the role; interviewers are tired, so hitting the right keywords makes it easier for them to believe that your profile is relevant.研究讨论。这类对话是我们在博士期间最常练习的。面试官通常让你先介绍一个过去的项目,随后讨论自然展开。他们也可能问你简历上的其他论文。准备这类讨论时,最好退一步思考:为什么选择这些工作,你在过程中得到的洞见和观点,以及你认为有前景的未来方向。我也会根据岗位调整我的研究推介;面试官已经很疲惫,使用正确的关键词可以让他们更容易相信你的背景相关。

Behavioral. These are totally textbook behavioral interviews, apart from the occasional question about AI safety or societal impacts. Enumerate memorable stories from your PhD and map them onto the common behavioral questions so that during the interview, you can retrieve the right anecdotes instantly. I failed my first behavioral interview because I went into it thinking I’m obviously well-“behaved,” and came up blank on excruciatingly simple questions. Trust me, it is uniquely painful to try to reconstruct hazy memories at the same time as delivering them in an interview, only for the interviewer to say at the end, “You didn’t answer the question.”行为面试。这完全是教材式的行为面试,偶尔会出现关于 AI 安全或社会影响的问题。把你在博士期间的精彩故事对应到常见的行为问题上,这样在面试时可以立刻调出合适的案例。我第一次行为面试失败,因为我以为自己显然“行为良好”,结果在极其简单的问题上答不上来。相信我,同时回忆模糊记忆并在面试中表达出来的痛苦是独一无二的,面试官最后会说:“你没有回答问题”。

Math. Some companies have a math interview, ranging from fun logic puzzles to serious mathematical derivations with pen and paper. I would recommend brushing up on probability, linear algebra, and calculus.数学。有些公司会有数学面试,范围从有趣的逻辑谜题到严肃的笔算推导。我建议复习概率、线性代数和微积分。

Job talk. There is some variation in what the job talk looks like, but compared to an academic one, it tends to be a bit shorter and focused on a single paper or direction. My job talk was all about tokenizers; I spent most of the time on a first-author work and then covered a few second-author and ongoing works briefly, as fortunately they tied together very nicely.工作演讲。工作演讲的形式会有差异,但相较于学术报告,它通常更短,聚焦于单篇论文或一个方向。我的工作演讲全部关于分词器;我主要讲了第一作者的工作,然后简要提及了几篇第二作者和正在进行的工作,幸运的是它们之间衔接得很好。

Preparation准备工作

There is truly no better use of your time than studying for interviews. For me, the experience was very much like being back in undergrad: I took notes (see my LLM notes, which I worked on continuously throughout the process, and my math notes, which was all for a single fateful interview), drew diagrams, did practice problems, and spent entire days in coffee shops making sure I understood fundamental ML concepts inside-and-out. Technical interviews are hard, and the skills being tested require dedicated effort to develop outside of doing research. For me and for most people I talked to, the job search is a full-time job.没有比为面试学习更好的时间利用了。对我而言,这段经历很像回到本科:我记笔记(见我的 LLM 笔记,整个过程持续更新,还有为一次关键面试准备的数学笔记),画图,做练习题,整天在咖啡店里确保自己对基础机器学习概念了然于胸。技术面试很难,所考察的技能需要在科研之外专门投入时间来培养。对我和我交谈的大多数人来说,求职本身就是一份全职工作。

I started my process by watching all the lectures from Stanford’s Language Modeling from Scratch course, which is helpful for illustrating the breadth of topics I needed to learn and helped me organize many scattered concepts in my brain into one coherent picture of the field. After covering the basics, I spent the rest of my time deep-diving concepts one at a time by reading relevant blog posts & papers, talking to ChatGPT & Claude a lot, and practicing implementing things from scratch. Homework 1 is crucial: implementing / debugging a transformer comes up so often in interviews that it will pay off massively to turn it into muscle memory and really isn’t worth losing points on. Make sure you are practicing coding with AI assistance completely off to mimic interview settings (you will underestimate your reliance otherwise)!我先把斯坦福的《从零开始的语言建模》课程全部视频看完,这帮助我了解需要学习的主题广度,并把脑中散乱的概念组织成一幅连贯的全景图。打好基础后,我把剩余时间投入到一次性深入学习每个概念——阅读相关博客和论文,频繁与 ChatGPT 与 Claude 对话,并从零实现相关内容。作业 1 至关重要:实现/调试 transformer 在面试中出现频率极高,形成肌肉记忆收益巨大,绝对不值得因失分而放弃。确保在完全关闭 AI 辅助的情况下练习编码,以模拟真实面试环境(否则会低估自己的依赖程度)。

I found that each interview is unique and can benefit from a little — sometimes a lot — of dedicated preparation. You can usually build an intuitive understanding of an interview’s scope from the provided description, the topics that the company is interested in, hints from the recruiter, and the reputation of the company. When I was in the thick of interviewing, I found that I was constantly swapping information in and out of my brain so that the most relevant knowledge for a particular interview would be fresh. The best way I can describe it is: each interview is a slightly different math or CS class, you never went to lectures, and now you have ~3 days to cram for the midterm.我发现每场面试都是独特的,可能需要一点——甚至很多——专门的准备。通常可以从提供的描述、公司感兴趣的主题、招聘者的提示以及公司的声誉中直观判断面试范围。当我正处于面试高峰时,我不断在大脑中切换信息,以便让针对特定面试的最相关知识保持新鲜。最好的比喻是:每场面试都是稍有不同的数学或计算机课,你从未上过课,现在只有约 3 天时间来临时抱佛脚。

Day of interview. Perhaps it is because I am getting old, but nothing beats getting enough sleep the night before the interview. I made the mistake of doing my first technical interview on 2 hours of sleep after cramming all the intricacies of LLM inference into my brain — none of the last-minute knowledge came up, and I ended up spending 10 minutes on an off-by-one error because my gears were barely turning. After the interview, remember to record some notes, which will be helpful for your future studying and reflection.面试当天。也许是因为我老了,但没有什么能比面试前一晚充足的睡眠更重要。我曾在只睡了两小时、把所有 LLM 推理细节硬塞进脑子后进行第一次技术面试——临场时没有用到任何临时抱佛脚的知识,结果因为一个 off-by-one 错误卡了 10 分钟,因为大脑几乎没有转动。面试结束后,记得记录一些笔记,这对以后复习和反思很有帮助。

Side benefits. Studying carried enormous side benefits for me. Having a wider breadth of knowledge directly improved my confidence as a researcher. I became more secure in conversations because I was less worried about gaps in my knowledge being exposed, and no longer felt compelled to hide them when they came up. I truly believe that if I had done some of this studying earlier in my PhD, it would have expanded the space of problems I might be able to think about and have ideas in, and certainly the number of conversations I would have sought out. Amazingly, I also found that studying made me enormously more effective at my ongoing project. I was able to have technical ideas that I never would have been able to access before and do more technical work, which was thrilling.副作用。学习为我带来了巨大的副收益。更广的知识面直接提升了我作为研究者的自信。因为不再担心知识漏洞被暴露,我在对话中更从容,也不再觉得必须隐藏这些漏洞。我真心相信,如果我在博士早期就进行这些学习,我能够思考和产生想法的问题空间会更大,交流的次数也会更多。令人惊讶的是,学习还让我在正在进行的项目上效率大幅提升。我能够提出以前根本想不到的技术想法,完成更多技术工作,这让我非常激动。

Negotiation谈判

I was shocked to learn that the work is not nearly done after you receive your offers. Instead, there is a (potentially extended) period of time for you to learn more about your options and negotiate your offers. It involves many conversations with potential future teammates / managers, lunch visits, and recruiter calls. At this stage I was managing an overwhelming amount of communication, and there were always emails I was guilty of not responding to.我震惊地发现,收到 offer 后工作远未结束。相反,你还有一段(可能延长的)时间来进一步了解选项并进行谈判。这期间会有许多与潜在未来团队成员/经理的交流、午餐拜访以及招聘者的电话。那时我要处理大量沟通,常常有邮件我因为忙碌而未能及时回复。

The truth is that negotiating is hard. Nothing in our PhD prepared us for this, and unlike interviews, this part cannot be conquered by studying. Compared to recruiters, you are outmatched in both knowledge of the market and the skill of negotiation, and everyone you talk to wants something different from you. You may be thinking, “I would be happy with my offer and make a decision independently of compensation!”, and indeed it’s great to know your own values! But you’d be doing yourself a disservice if you didn’t negotiate. Initial offers leave room for negotiation by design; recruiters often explicitly invited me to play the game by saying things like, “I don’t expect you to take our first offer.” Putting in energy here for a few weeks can, literally, be equivalent to years of work at the initial offer.事实是,谈判很难。我们的博士训练并未为此做准备,而且不同于面试,这部分无法通过学习来征服。相较于招聘者,你在市场了解和谈判技巧上都处于劣势,而每个对话对象都有不同的需求。你可能会想,“我对我的 offer 已经很满意,完全可以不考虑薪酬就决定!”的确,了解自己的价值观很重要!但如果不谈判,就是对自己不负责任。初始 offer 本身就留有谈判空间;招聘者常会明确邀请我参与谈判,例如说:“我不指望你接受我们的第一份报价”。在这里投入几周的精力,实际上相当于在初始报价上多赚了数年的工资。

It is really crucial at this stage to lean on your friends for the know-how of interacting with recruiters and for more data points to help calibrate your asks. Before every recruiter call, I wrote down what I was willing and not willing to share, along with quotes I could recite verbatim. In the post-offer stage, I would anticipate questions they might ask and points they might make, and carefully construct responses that I could deliver comfortably while still advocating for myself. Though time-consuming, it is really worthwhile to be deliberate about every aspect of the process.在这个阶段,向朋友请教与招聘者互动的技巧以及获取更多数据点来校准你的要求非常关键。每次招聘电话前,我都会写下自己愿意和不愿意透露的信息,以及可以逐字背诵的报价。进入 offer 后阶段,我会预想他们可能会问的问题和提出的观点,仔细构思能够舒适表达且仍能为自己争取利益的回答。虽然耗时,但对过程的每个细节都保持审慎真的很值得。

Concluding words结语

In this blog post I focused on the concrete parts of the job search, but in reality a huge part of my personal experience was managing all the emotions that come with being on the market. There is a lot of social perception to navigate: it is not a good feeling to compare yourself to your peers, everyone has opinions on where you should or shouldn’t go, and people become unusually invested in how your life is going. I also found it stressful navigating a huge decision space with incomplete information, where small choices with no right or wrong answers (like who to contact when) have an outsized impact. Frankly, I was stressed, miserable, and not functioning in other parts of my life for several months. Hopefully you find more joy, but if not, just know that you are not alone.在这篇博客中,我聚焦于求职的具体环节,但实际上,我个人经历中很大一部分是管理在求职市场上的情绪。需要处理大量的社会认知:与同龄人比较并不舒服,大家都有对你去向的看法,甚至有人对你的生活进展异常关心。我也发现,在信息不完整的情况下做出大量决策会让人压力山大,很多看似无关紧要的小选择(比如该联系谁)会产生超出预期的影响。说实话,我曾数月感到压力、痛苦,生活的其他方面几乎失去功能。希望你能找到更多快乐,如果没有,也请记住,你并不孤单。

I’ve been hurtling towards the end of my PhD for months, and now at the end of it all, I’m immensely sad to leave this chapter of my life behind. The PhD is such a special time, where our only job is to have good ideas and execute them, to learn and grow as researchers, without worrying about imminently securing a real job. So while I hope this post helps you mentally prepare for the future (and I certainly recognize how distracting industry forces are today), I also hope that you can cherish your PhD for the unique time that it is. These goals may be complementary, after all — I consistently found that I did my best work when I was having fun and chasing the questions my mind would not lay to rest.我已经在博士的最后几个月里奔波不止,如今一切结束,我对离开这段人生章节感到无比悲伤。博士是一段特殊的时光,我们唯一的工作就是产生好点子并付诸实践,作为研究者学习成长,而不必担心立刻找一份正式工作。因此,我希望这篇文章能帮助你为未来做好心理准备(我也深知如今行业的诱惑有多大),更希望你能珍惜博士这段独一无二的时光。毕竟,这两个目标是可以互补的——我始终发现,当我玩得开心、追逐那些让我难以释怀的问题时,我的工作质量最高。


Appendix: learning resources附录:学习资源