登录
  • #求职(非面经)

# ‌‌‍‍‌‍‍‌‍‍‌‌‌‌‌‍‍‍‍‍‌‌‌‌‌‌‍‍‌‌‍‍CS PhD Quit 找工总结 — 柳暗花明又一村

一亩三分地匿名243
5062
44
前情提要

形而上学,不行退学。LZ在一个很不错的学校读CS PhD二年级,导师是领域大牛。这学期开始导师性情突变,加上本来就有一些科研方向不和,各种原因和导师闹掰。好在闹掰的事情发生在九月底,虽说当时还在纠结是转学,找新导师,还是找工作,不过手没闲着一直在刷题。最后也因为别的路都不太顺利,决定下海工作啦。

这次找了SDE和MLE,当MS NG去找的,结果我我还是比较满意的。此贴对于NG,early career (< 1yoe), SDE/MLE可能都有所帮助。

简历

LZ本科和PhD都在北美读的,之前在大厂实习过。

Resume总共四个部分从上到下 分别是:

- Education (bachelor, master)

- Skills (programming languages, frameworks, tools)

- Industry experience (实习经历)

- Research experience (publication and research interests)

SDE岗位的面试官基本只关心Industry experience,MLE会关心 Industry experience 和 Research experience。我并没有针对每个公司重新写简历,对于刚工作的人来说可能不需要太match, 但更多要展现自己的能力。

这个简历结构从结果来看是没问题的, 找MLE NG的同学可以参考

我九月底才开始投第一波简历,对于秋招是非常晚的。到十月中旬有点慌又投了第二波简历。两次总共投了20份不到。由于之前实习经历丰富,有些不招ng的公司,我也头铁投了1yoe的社招岗位,当然就被拒的比较惨了。

后面看来这个简历投的数量其实是不太够的,千万不要学我!!

准备

准备内容总共分成三大块:传统算法题(leetcode), ML /Stats 相关问题, system design (面了好几家)

有些公司 (quora, stripe) 会有一些practical题和debug题,基本无法准备,比较看临场发挥和平时项目代码的积累。

刷题

LZ几年前大概刷过100题,用cpp刷的,这会儿改用python,天下武功,唯快不破。

暑假的时候我为了找实习有一搭没一搭的刷了100题,不过刷得比较随意,刷过算过并没有吃透。和导师闹掰后花了两个礼拜看完了 Leetcode101(changgy.com), 里面的所有习题都认真做了,算是上了门道。之后每天都会做每日一题,保证吃透并且会做每日一题的相关题目。碰到不会做的题会看ytb花花酱和Happy Coding的视频。

LZ一开始很想去Linkedin,所以L家还没开始面试的时候就开始刷Tag题,总共一百多道题,又用了差不多一个月刷完。

之后就没有刻意做题了,面试之前几天会看面经收集一些题目,十几题一个公司的样子,在LC上做并且吃透。

面试之前我还会把常见的数据结构和算法默写一遍:bfs, dfs, topological sort, quick select, union find, fenwick tree (真的考过) 非常有用,面试的时候完全不慌了

作为学生,又要上课,又要科研,还要面对系里的破事儿..其实刷题时间比较有限,我第一个月每周末花一整天时间 ,工作日每天晚上花2-3h。等我刷通了LC101以后,每周有两三个工作日刷2-3h, 周末花半天时间(4-5h) 。到面Google为止这一轮刷题总共做了350题左右,~70hard,~220medium。其实刷到200题的时候,就已经很有感觉了,后面更多的是为单独的面试做准备。300的题量认真刷肯定是够了的,所以地里同学不用慌张,关键是做会了,而不是做多少题。做会的意思是,同一道题不借助辅助可以在20min内写出来无bug,相同类型的题目也要有大概思路。

在所有面试开始之前可以Mock几次,此处感谢npy帮我mock。适应一下面试环境,练习边说边写和给别人解释自己的Code。我一般是按照Block解释,然后会说清楚一个Block的side effect (e.g., 代码出这个block的时候变量一定具备某些性质)做完题心里dry run一下最简单的tc,再说我做好了,避免比较愚蠢的错误。

Debug算我踩过的坑,好在是mock的时候发现的能及时查漏补缺。日常写代码我习惯用pdb辅助,用lc的时候我喜欢用平台的断点功能。但在实际面试中不太能用。一方面锻炼自己bug free和肉眼debug能力,另一方面后来做lc的时候会尽量只print,来模拟面试环境。但是日常写代码我还是强推ide break points和pdb,这有助于提高程序员的效率,stripe就会专门考察这个部分。

ML/Stats

我总共用了三个材料:西瓜书,统计机器学习和动手深度学习V2。

Classical ML: 前两本书足够了,我是交叉着看的。西瓜书比较基础适合第一遍看,统计机器学习比较理论,复习的时候我会看这个。对于重要的模型,建议拿一张白纸边写板书边教别人,这样非常有助于理解模型的motivation和推导过程。npy那段时间正好想学ML,我就给他讲了svm,logistic regression等,真的是很好的练习!

DL: 动手深度学习(d2l.ai)是很好的课程,此处感谢AWS DL团队和李沐。b站的v2视频我挑了一些过去自己理解不够深入的内容看了一下,比如dropout。虽然常用,但我确实不知道why dropout works,但这个经常被问到。李沐的课也会提一下前沿的理论成果,面试的时候也提一下显得自己高大上有木有。

重要的论文,哪怕是不搞这块的也要知道Big idea,我还被问过transformer的复杂度。李沐开了一个讲论文系列就讲的非常好,我会一直追踪。

某些特定的职位会问RL, IRL之类的问题,不会就是不会,提前准备也来不及。但面试的时候要举一反三,面试官给你解释完要有自己的思考进行反馈。

Stats: 模型的概率视角解释也会经常被问到,比如需要用概率的视角解释logistic regression,还包括linear regression有哪些概率统计的假设,L1/L2相当于什么prior等等。这些真的就靠积累了,我觉得很多blog都不会讲这些,但上面这些题我都被问过

还会问一些概统结合计算的题目。比如bayes theorem的应用,还有数据规模很大的时候怎么计算某些分布的性质。我自己没有刻意去准备,主要靠面经。如果概统基础不太好的话,建议先快速复习下基础知识 (e.g., sample variance vs variance 之类的被问过)

复习完以上这些95%的面试应该能秒了。

ML System Design

这个对NG太难了,但没办法他考了我们就得上。我快速的看了educative.io 上的Machine learning system design,但我不推荐这个!!快面完的时候才发现Grokking the machine learning interview, 这个讲的更好,我就看了一点都就去面了。

有些偏重于system的问题我完全没有准备,靠平时积累,不过亲测问的都不难。

面试过程基本知道啥说啥,不知道就说”不确定但我觉得..” 总之说不确定的东西之前最好都提一句 I don’t know a lot about xxx, but I think… because…

NG虽然没有什么实际经验,也可以通过已经有的知识进行合理的推测,所以面试的时候脑子一定要一直转,一直说。面Pin的时候有一轮SD就被表扬说你没有经验居然能猜到我们Pin是怎么做的,主要是面试官提示的好,然后get了hint继续想就解决了。

总体来讲对NG, early career 求职者,SD要求应该不会太高。

面试

第一波投的简历按照大概时间顺序总结如下

FB (SDE, NG) 简历拒…多少年来从没过过他家的简历关 可能是我上了黑名单了。 后来听朋友说可以换个人内推重新投,我当时傻傻的拒了就拒了。

Snap (SDE, 1yoe) 简历拒

Stripe (SDE, NG) 海投

OA -> Phone -> VO (coding + bug squash + integration) -> Manager -> 告知waitlist -> 三礼拜后 Offer

WL三礼拜没有被抛弃,感恩,最后因为地理位置因素无奈只好放弃。

Tusimple (SDE, NG) 海投

OA -> Phone -> reject

题做出来莫名其妙被挂,面试官水平有待提高,对编程语言的理解好像不太够

Databricks (SDE, NG) OA 没做好凉了。那天状态特别不好,刚和导师吵了一架去做OA,结果死磕一道题把时间浪费了。后来知道可以换个邮箱再做一次,我当时傻傻的拒了就拒了again。

Quora (SDE, ML, NG) 海投

当时SDE和SDE, ML都投了,ML的先被捞起来了

OA -> Phone 1 (coding) -> Phone 2 (ml system design) -> VO (coding + python practical 给一个代码库加feature + ml theory 给一篇文章implement当中一个算法 + ml practical 给一个模型找出为什么performance不好 + manager chat) -> offer

面试体验非常独特考察范围非常广,不谈公司前景我个人觉得工程师的水平还是在线的,每个人都会own很多东西。我当时面试发挥很好,所以包给了接近L4的,而且多给了我一个星期考虑,感恩。

Nuro (SDE, Autonomy, NG) 内推

OA -> Phone (coding) -> VO (coding + system coding + ml + bq) -> Manager -> offer

Nuro是我很看好的自动驾驶startup, 考察范围比较广,可以看出公司用的ML技术还是比较前沿的。自认为面试发挥不好而且和他家的ML research没什么重叠的经历,但最后feedback说very positive,看来NG的MLE更多还是看基础知识掌握和快速学习的能力。HM在HR通知pass之前就在linkedin上提前和我聊了几句,体验非常不错,感恩。

Linkedin (SDE, ML) 内推

这个是社招岗位,一开始L家不让我面因为我明年六月才能入职,不过后来找了内推我的大哥argue了一下就进流程了

Phone (ml coding) -> VO (coding + Manager chat其中有system design + ml system design + ml 快问快答 + data coding侧重大规模数据的处理) -> manager chat * 3 -> offer

Linkedin面试比较格式化,刷够面经,碰到的面试官人好加上没被备胎应该问题不大。对于NG可能过简历关比较麻烦。另外L家的ML system design我觉得很难,最后feedback这轮也只有avg。内推的大哥从一开始给HM发我简历求捞,到面试指导一路帮我,感恩。

Google (SDE, early career) 内推

OA -> HR prep call -> VO -> 大概率过

感恩节的时候已经麻木了,天天打Switch,面之前总共大概看了10道面经题,gg的面试variance太大,一切都是命。感恩节后第一天面,题目不是很难,不过代码量很大,面试过程挺考察写代码的熟练程度的。用offer催过以后HR非常迅速,感恩。

Timeline如下:11/29 vo -> 12/1 通知feedback收集好送hc -> 12/3 通知feedback very positive 先 gmatch,收集了competing offer 并且说下周一出hc结果

还有几个投了默拒的, pinterest (SDE, NG), Google X (SDE), Waymo (MLE), Netflix (SDE, NG)

Waymo可惜了,其实NG的岗位还是很有机会的可惜投晚了,我投的MLE是社招岗位不理我情理之中。Google X同理。

Netflix 第一次招NG,是Core engineering招,Bar应该非常高就是啦。

Pinerest见下文。

下面是第二波投的

Pinterest (MLE, masters) 海投

感谢Linkedin的推荐算法,让我和这个岗位相遇。这个岗位是今年第一次增设,而且十月才挂出来。

OA -> Manager * 2 后面那个跳过了因为前面的feedback很好 -> VO (coding * 2 + ML * 2 + pin lab manager) -> 当天晚上通知过vo 开始team match -> manager chat * 4 -> offer

P家VO之前以已经拿到了好几个offer了,而且要期末考试了没空准备,直接裸上。Coding 比较简单,标准lc medium。system design有两轮,有一轮比较侧重System的内容,会考察 Cache,Scalability,Latency,DB Schema 结合 ML application 的应用,另一轮SD重点考察 ML的内容,到最后已经不是 System Design,变成 “Describe XXX to me”。不知道这是普遍的现象还是只有我碰到的,总之感觉P家ML员工啥都要懂。

VO的Manager轮烙印面试官是pin lab的大佬,直接给我问懵了,发现自己确实技艺不精,他算是所有manager chat里水平最高的一个,问问题一针见血,而且对ML/DL理解非常深。最后这个pin lab大佬没要我,还是挺fair的。当时很累肚子疼,而且我已经从学术界出来了,想发展更多的business sense,去pin lab有些本末倒置了(反正人家也不要我) 。

由于有offer催,VO结束3h通知过,开始 Team Match,P家HR真的神速中的神速,一天给我打N个电话+约N个 team meeting,所有call之前都会邮件告知context,面试完feedback非常及时,感谢hr小姐姐!

Doordash DSML 海投脆拒,应该是投的时候人已经够多了

Adobe MLE 海投脆拒。

Dropbox 海投 没回我

选offer

求网友建议 主要纠结L&P

总结

除去 hr negotiation,找工环节告一段落。人生无常,曾经我只想去名校读博,读博不顺很烦心,不断努力,柳暗花明,世界之大,我能发光发热的地方很多。未来我对自己的愿景是model能力向ML scientist看齐,engineer能力和backend engineer 看齐。感谢npy三个月不离不弃照顾,最后希望自己能顺利拿到ms,学术界就此别过。祝读者朋友也找到自己满意的工作!
44条回复
热度排序

发表回复