小熊猫的 2019 年末跳槽流水账

小熊猫的 2019 年末跳槽流水账

 
这是2019 年年末离开北京时的跳槽面试记录,原文发在朋友圈,两年后重看仍有不少趣味。也增加了当时原本打算终止,实际却坚持面完的 Amazon 后续故事。如果你正在考虑换岗找工作,希望可以对你有帮助。
💡
后来最终加入了微软互联网工程院,找一张苏州的照片当题图吧。

聊点儿背景

普通背景,读研时候方向是分布式存储,工作前基本上没有什么像样的 Machine Learning 项目经验,在果壳做了四年算法岗,零零散散做过一些搜索和推荐的项目。不太能接受业务驱动式加班,我必须要有足够的时间留给自己做技术积累和思考,所以外企是首选。当然如果能顺势避开北京这让我烦恼的气候,那就更好不过了。
其实国内的算法岗不太能直接对应上外企岗位,从工作内容上来说,大体上有两个岗可以尝试:
  1. Machine Learning 方向的 Software Engineer,或者是干脆叫 Machine Learning Engineer。通常放在 Engineering 团队。
  1. Machine Learning 方向的 Data Scientist,也有的公司会用诸如 Applied Scientist 这样的 title 来与其他方向的 Data Scientist 进行区分。倘若 title 不写明,也一定能从 JD 里面看出来,例如 Machine Learning 方向一定对工程有要求,也会提及一些相关的 PyTorch/TF/Sklearn 这种工具链。大部分放在 Data Science 团队,有的也放在 Engineering 团队。
两者工作内容上差别不是太大,后者一般写生产环境代码少一些,论文读得多一些,不过应该都不会有发论文的 KPI,这两个也是我主要申请的职位。其他还有一些相关的岗,例如 Machine Learning 方向的 Research Scientist,不过一般 Reseach Scientist 职位都需要比较扎实的学术背景(或者博士学位),所以我也就无缘了。
两个岗随缘申请,首选 Data Scientist,没空位就申 Machine Learning Engineer。不过这样混申不太明智,考核偏重不同给我面试和准备都带来了很多困难,后面会有聊到。

一些结果

各家公司职级难以对标,有些大厂的 title 会跨多个小级别,所以职位前面的职级都去掉了,只写了最基础的 job title。
结果
公司
地点
职位
Offer
Agoda
曼谷
Machine Learning Engineer & Data Scientist
Offer
Amazon AI Lab
上海
Applied Scientist
Offer
Facebook
伦敦
Data Scientist
Offer
Microsoft
苏州
Data and Applied Scientist
Offer
Tubi TV
北京
Machine Learning Engineer
Reject 面挂
Booking
上海
Data Scientist - Inference
Reject 面挂
Google
东京
Software Engineer - Machine Learning
Reject 面挂
LinkedIn
北京
Software Engineer - Machine Learning
Reject 面挂
Mercari
东京
Software Engineer - Machine Learning
Reject 面挂
Grab
北京
Data Scientist
Reject 默拒
Spotify
斯德哥尔摩
Data Scientist
Reject 默拒
Pornhub
蒙特利尔
Data Scientist
Reject 默拒
Twitter
新加坡
Machine Learning Engineer
Other
Apple
北京
Siri Machine Learning Engineer
Other
LINE
东京
データサイエンティスト
Other
Shopee
新加坡
Data Scientist
如你所见,当时算法岗整体市场还算好,拿到的面试机会还是挺多的。不过自己表现一般,挂掉了不少,好在费了一番气力之后,手里还是有几个可选的栖身之所。

各家流水账

Agoda

Agoda 网申的岗位是 Senior Data Scientist,预期工作内容可能是酒店的动态定价。总体流程比较快,投完简历后第二天就收到了第一轮视频面的安排,和其他家不太一样,上来第一轮面试官就是 Head of Data Science,目测是快 60 岁的以色列大叔,90 年代初的数学 PhD。全程没有问太多技术的问题,聊聊项目,讨论了两个推荐领域的 business case,考核了一些 AB 测试的基本原则,口音很适应。
第二轮电面是一个芬兰大哥,英语不太好的样子,不过还好能听懂我说的什么。查了下 LinkedIn,在 Google 待了七八年后去了 Agoda,简单说说项目和经验后就开始正式写代码,一些描述统计指标的 pure Python 实现,然后一道 medium+ 难度的题,一些时间复杂度的 follow up。
总的来说还算顺利,两天后收到 HR 邮件邀请去曼谷 onsite,不过隔天 HR 又发来邮件说 Machine Leaning Engineer Team 的 Hiring Manager 也看上我了,问我愿不愿意 onsite 加试一下 Machine Learning Engineer 岗(内部抢人?)。心想反正都要去一趟曼谷,也就无所谓了,随便你折腾吧。中间遇到自己的护照快要过期所以不得不推迟一周时间,拿到新护照后 HR 很快帮忙定好了来回的机票,酒店以及其他打车费餐费签证费报销事宜。由于临时又加了一个岗,onsite 就变成了六轮,HR 怕我太累把面试分成了两天进行,一天四轮,一天两轮,也希望能给我多一些时间在曼谷逛逛玩玩,还是很贴心的。
Onsite 过程总的来说还算顺利,虽然到曼谷落地时已是晚上九点,不过 Agoda 非常贴心地安排了专车接送到酒店(第一次看到有人举着我名字的牌子还是很兴奋的)。由于事先拿到了 onsite 六轮面试官的 title,基本上可以确定第一天的四轮都是比较硬核的 coding 面,所以回酒店游了一会儿泳就早早睡下。第二天中午随便吃了点零食直接上战(刑)场。Agoda Office 在曼谷市中心的一个超大商场的写字楼里,周边环境非常现代,办公环境也很好,虽然我没有去过陆家嘴金融中心,但是我想应该跟那个差不多。
Onsite 的前两轮流程相似,都是项目经验和 medium 左右难度的白板,不过可能是我题目做得太快了,第一轮剩下不少时间讨论了线上分布式场景的 corner case,第二轮又给我加了一道 hard...第三轮的面试官是先前视频二面的那位芬兰大哥,上了一个点击排序的 business case,讨论一下解决方案,优化思路,和性能瓶颈之类。第四轮面试官可能看我累了,没有 coding 也没有讨论 case,问了一些古典概率和矩阵理论的内容。
由于第一天四轮感觉都还挺好,再加上想到第二天两轮应该都是聊聊天,傍晚面试结束后就开始在曼谷乱吃乱逛,玩到半夜醉醺醺的才回酒店。第二天上午在附近的博物馆逛逛,给几个推友写了几张明信片。中午回酒店稍作休息后就再次回到办公室面试。
本以为两轮都是聊天,结果第一轮的大老板简单聊了两句后,就开始面硬核数学。期间被要求完整推导线性回归的解析解,凸函数证明,解释 KKT 条件的充分必要性,从香农熵开始推 KL 散度和 JS 散度。整个过程中抠得非常细,例如线性回归推导会具体问矩阵求导的细节,从极大似然估计角度解释 L1 比 L2 正则化具备更强的鲁棒性(这个我也没想过,我大体上就是解释一下 L1 的拉普拉斯函数比 L2 的高斯函数有更大的截尾,也不知道对不对),推朴素 SVM 的时候会顺带问拉格朗日对偶问题的强弱对偶性,Slater 约束准则什么的,整场面试边说边写搞了一个半小时,体力消耗超过我想象。所幸都是一些统计学习派的基础,磕磕绊绊都写出来了,换做考贝叶斯派那些变分推断,蒙特卡洛积分什么的我估计是吃不消的。
这一轮结束后累得不行,跟 HR 要了一个 15 分钟的 break,跑楼下抽了两根烟回血。
第二轮的大老板是先前视频面的以色列大叔,终于回到熟悉的聊天环节。问了问团队管理合作方面的经验,也聊了聊曼谷生活方面的内容。全部结束后 HR 送了我一些 Agoda 的纪念品,也谈了谈搬家费和 Agoda 提供的异地搬家服务。
一身轻松后吃了一晚上街边摊,吃烤鱼的时候旁边坐着一只脸上长着直角坐标系的玳瑁猫,印象深刻。
第二天照例 Agoda 安排了专车送我去机场,流程舒适。
脸上有坐标系的猫
脸上有坐标系的猫
左下角那个饼蛮好吃的
左下角那个饼蛮好吃的
notion image
notion image
notion image
离开曼谷回北京后躺了两天去苏州面完了微软,重新回北京没几天等到了 Offer,两个岗随便选,现金和股票给得都不错,问了一个原先在曼谷开民宿的老同事,她称之为可以过上“帝王般”的生活……
Agoda 面试内容涵盖面非常广,前后一共面了我 8 轮,LeetCode 形式的 coding,基础的 Machine Learning 数学理论,推断统计,矩阵理论,最优化理论,business case 可谓面面俱到,不过也有可能是我同时面两个岗位的原因吧。团队规模不算小,工程团队有 1000+,Data Science 团队有 60+。multi-culture 也确实是扎扎实实写在骨子里的,这么多面试官没有两个来自同一个国家,整个办公室也没看到几个亚裔面孔,这厂子为了员工搬家弄身份估计花了不少钱。

Amazon AI Lab

收到亚麻 HR 电话的时候我甚至想不起来我是什么时候投的简历,查了一下邮件竟然有一个月之久。
是 AWS 在上海新搞的团队,之前看李沐发消息说在上海建团队做图神经网络框架,估计就是这个没跑了。HR 速度极慢,一会儿上海的 HR 给我发邮件,一会儿北京的 HR 给我打电话,到现在也不知道哪个 HR 在管我。第一轮视频面的面试官是韩国人,在首尔的 AWS 工作,上来打了个招呼后 xjb 聊了十分钟朴赞郁,快速适应了一下面试官的口音。面试比较特别,不愧是 AI Lab,面试内容和其他家的 Data Scientist 完全不同。盯着简历里面 Deep Learning 的问题问到底,卷积神经究竟捕捉到什么特征,各类 word embedding 的训练方法和 inference 优劣,面试官考古一般把朴素的LM,Word2vec,ELMO,GPT-1,GPT-2,BERT,还有现在各种各样的 BERT 变种全问了一遍,由于简历里还有一个早年做的用 DeepSpeech2 实现的语音识别,问了半天的语音频谱,包络线,CTC Loss 什么的。最后的 coding session 也很特别,不是 LeetCode 类型的编程题,而是 pure Python 手写一个全连接神经网络,再改成 RNN 类。
后面的面试官全部都请假过圣诞过元旦了,基本上要等到过春节才会有人面试我。。。WTF
2019 年末年写这篇面经的时候 Amazon 的面试尚未结束,其实原本也不打算继续,不过后来休息了几天发现状态好了一点索性继续面了下去。以下为补充内容。
AWS 的流程慢到令人发指,电面结束之后无论如何也催不出结果,期间我甚至求助一个以前在亚麻当 HR 的猎头朋友帮我去找她的前同事问反馈,着实令人尴尬。大概是在第一轮电面三个星期之后,我终于接到了视频 Loop 面试的安排,那会儿我甚至连微软的背调都快要走完了。
视频 Loop 面试被拆在三天进行,一共六轮。
第一轮那会儿刚刚过完元旦,时任 AWS 上海 AI Lab 院长的张峥教授面的我(也是面试岗位的汇报老板),张峥也是果壳的老朋友,在科学松鼠会写了很多文章。对我在果壳做的事情很感兴趣,也和我聊了聊很多往事,具体任务考核倒是不太难,一个常见推荐系统的 business case,一些团队管理方面的问题。
第二,三轮被放在几天之后,都是 Amazon 北京的工程师,并不来自 AWS 团队。两三道 LeetCode Medium,一道没见过却也感觉有些熟悉的 Hard 题,一些普通解法,顺便拉拉家常。
第四,五,六轮放到了更后几天,两位 Applied Scientist,一位老板。彼时已经口头接受了微软的 Offer,每天都在变卖家当离开北京,几乎忙到不可开交,同时还在昼夜颠倒报复性地玩死亡搁浅,结果面试那天意外地发了高烧。连续三轮面试只坚持了两轮,最后一位老板面实在是有些坚持不下去,只能临时取消。题目倒不是很难,还是考核 Business case,不过更偏学术一些,讨论了不少近几年 EMNLP 和 AAAI 上的好文章,问了不少多模态融合,语言特征提取方面的问题。两位面试官对我知识储备大大称赞,可能也是得益于之前那些私活。
变卖家产离开北京
变卖家产离开北京
之后又陷入了无论如何都催不出消息的尴尬期,我也不像之前那么焦虑了,毕竟好赖有微软保底,也已经达成当初的目标,离开北京,不加班。
在我已经几乎通过了微软背调的时候终于等来了新的面试安排,连续两轮来自总部的两位 Deep Learning 架构师面试。具体内容我记不清了,当时已经完全没心思再去准备面试,也没有什么特别之处,依稀记得有讨论视频融合和文本迁移学习的问题。
接着便又陷入漫长的等待之中,只是没想到前脚刚踏进微软,后脚便收到了 HR 的 Offer 电话。
对方甚至提出让我毁约微软,亚麻可以提供违约金的报销(如果有的话),也和张峥老师打了很久的盛情微信电话。我除了抱歉之外没有办法再说别的,战线拉得太长,持续一个半月的九轮面试对面试官和候选人都是巨大的消耗,耗掉的不仅是我的精力和时间,更是雇佣我的机会。
除了流程进度太久,HR 效率奇低之外其实并没有太多槽点,面试官都很专业,薪资也是给的很好,也是我所有面试 offer 中给的最高的一家。在没有任何讨价还价的情况下现金部分就已经有 90w,L6 的评级对彼时只有四年半工作经验的我来说应该是很好了。

Facebook(Meta)

FB 的总体体验感觉非常一般,速度奇慢,好在 HR 还算专业,每轮面试需要做的准备和大体内容都会提前发给我。第一轮简单聊聊项目,一些 ML 的基础概念,某道 medium 的 LeetCode 原题,这次学乖了佯装自己没做过。过了两天后 HR 问我什么时候有空来伦敦 onsite,不是我不想去伦敦免费玩一圈,就你们这速度等签证下来估计元宵节都过完了,直接要了全程视频面。
四轮视频面集中在一天,前两轮都是统计指标的 pure Python 实现,coding session 一道 medium 难度左右的题,基本也没有太多形式上的不同。第三轮不太一样,面试官对我早些年的在果壳做过的 antispam 项目很感兴趣,聊了非常多柔性字符串匹配的问题,聊了一些领域常用的数据结构,后缀数组,AC 自动机这些,也扯了一些后缀仙人掌这种竞赛中比较常见的数据结构,随后是问了 Tree-based model 的一些细节,由于这部分我只对 XGBoost 比较熟,所以基本上用 XGBoost 举例了,损失项加了二阶泰勒展开这样,自定义函数要保证一阶和二阶可导,自有的并行库 Rabit 是怎么做的 balabala。最后一面大老板基本就是 behavior question,也顺便聊了聊湾区和伦敦的生活,面试官亚裔面孔,看着像 ABC,应该是湾区过去的。
元旦前天天玩命催,终于催来了 offer,应该也不算 low ball,查了查 glassdoor 只能说欧洲的薪水惨不忍睹。伦敦也谈不上太喜欢,要是阿姆斯特丹我肯定就从了。

Microsoft

Microsoft 在苏州的互联网工程院可能是招人比较猛,反馈极快。投完第二天 HR 就开始联系安排电面。接到 HR 电话的时候正准备第二天去 Booking onsite,希望往后放一放,不过 HR 还是倾向早点安排,于是只得放在 Booking onsite 期间了。
在酒店电面其实比较忐忑,生怕网络出问题,幸运的是当时 Booking 给我定的静安大酒店网速蛮不错。第一轮电面也比较容易,和面试官(也是我现在很好的朋友)讨论了一些 business case,一些 Machine Learning 的基础知识,完全没有 coding session。反馈也很快,隔一个工作日就收到 onsite 通知(收到邮件的时候刚刚踏上去 Agoda 曼谷 onsite 的飞机),由于当时未来一周基本都在曼谷,所以去苏州的 onsite 就只能安排在曼谷之行回来之后了。不得不说虹桥机场还是挺方便的,不用出机场走一小会儿就是火车站,到苏州基本上随买随走。
由于在去苏州的前一天收到了 Booking 的拒信,所以整个 onsite 流程是以近乎崩溃的心态开始的,在从虹桥火车站去苏州的路上,一度累得不想再继续。折腾回酒店住下后,yaya 安慰了我半天放平心态,想着还是出去好好去吃一顿吧,就算是水面试,吃几顿松鼠桂鱼大螃蟹这一趟也不算白跑,吃完吨吨吨了大半瓶黄酒,直接睡到第二天快中午。中午在酒店楼下的便利店随便买了个饭团就去面试了,办公楼内外都挺漂亮,附近环境也是好得没话说,软爸爸就是爸爸。由于临时时间有一点变动,我只得在会议室先稍作休息。
前三轮面试官都在 Redmond 所以全是视频面试,第一轮(面试官其实是现在的老板)还算容易,聊了聊项目就开始做题,题倒是不难,目测 medium 中档,但奈何我 follow up 没跟上,只给了基础解法,虽然面试官疯狂提示二项式定理,但是我可能还是太笨了一直没想到怎么套二项式定理。第二轮讨论了很多项目的细节,最后剩五分钟的时候我本以为这轮就不做题了,轻松水过去,结果面试官还是掏出了一道,名曰很简单的题。题目比较典型,确定是 LeetCode 某道题的改编,以及我无比确定原题是 hard 难度。虽然我没有完完整整做过原题,不过边想边写边优化,还是给了一个动态规划的答案。虽然后来找到原题看了答案最好解法是线段树,但毕竟我只有五分钟思考时间...第三轮面试官终于是专职 Machine Learning 的了,未做题,全程考核 Machine Learning 的细节,基础知识,调参细节,应用工具,期间讨论了很多原来 MSRA 何恺明组的论文里的细节,最后讨论了一些 LDA 里面的一些细节部分,吉布斯采样,蒙特卡洛模拟,转移矩阵物理意义之类的,这一轮感觉是表现最好的一场(可能是因为不用写代码)。最后一轮的大老板面是全程中文,开场轻松,聊聊过去的上学工作,还有微软的生活什么的,这一轮我本以为也不需要写代码了,结果临结束前十分钟又掏了一道题,名曰走流程。题倒是不难,普通的递归题,不过递归出口倒是有点 tricky,当时其实也有一点体力不支,所以想了好一会儿。面试官在微软工作了二十多年,工程经验及其丰富,写完题后,问了许许多多的 corner case,存储方案,可预见的性能瓶颈等等。很多领域自己未涉及过,答得一点儿底也没有,看似我自圆其说,实则 xjb 胡说八道。不过结束时候,面试官好像还挺满意,笑着对我说:“不错,挺好!scientist 能把代码写这样已经很好了,平时多看论文,多做实验,工作时候需要什么数据给工程师提需求就可以了“(挠头)。
从微软出来的时候天已然全黑,结束后又大吃一顿松鼠桂鱼,顺便吨吨吨。第二天一大早到苏州火车站准备返京,刚安检就接到 HR 给 Offer 的电话,速度也真是够快的,自然就一路欣喜,同来时心境对比强烈。
吃松鼠
吃松鼠
notion image
notion image
微软互联网工程院的整体面试体验还是非常不错的,考核面也比较广,传统 coding 考察比较多,期间聊了聊工作日内容也比较喜欢。回北京后谈完了具体 offer,package 总体来说也比较满意,比我在北京的预期还要高一些,更何况是在苏州。

Tubi TV

Tubi TV 是湾区的一个小厂,最早有印象是看到前 CTO 陈天的 blog 说要在北京建办公室,不过那会儿也没太注意,直到后来看过一次 Chang She 在 PyData 做的一次 pandas 分享,发现这位 pandas 的 co-author 竟然也在 Tubi TV 工作,这一下次引起我对这个公司的兴趣,北京 Office 在望京租的 WeWork。业务类型是和视频生产方签约提供免费视频点播,类似免费的 Netflix,靠广告盈利。属于我比较认可的商业模式,可见的财报也是一片大好,目测上市指日可待(实际上在我面试的四个月后被福克斯收购)。
HR 反馈神速,下午四点在系统里投完简历,六点就给我打了电话安排面试。第一轮电面是一个在国内的工程师,一些交叉验证方面的问题,一些贝叶斯派简单的推导。随后顺利安排 onsite,前两轮都是和湾区面试官面试,第一轮 coding session 不是 LeetCode 类型,而是快速用熟悉的 Machine Learning 库写 baseline model 并解释,做得不是太好,scipy 个别稀疏矩阵的 API 我有点忘记了,临时查文档发现网实在是太慢了,匆匆伪代码结束。第二轮问一些视频推荐搜索领域的 business case 和团队管理方面的问题。第三轮是北京 Office 的一位面试官,一些 Machine Learning Metrics 的 pure Python 实现,比较容易,这也是我当面试官的时候比较爱考的内容,合格的算法工程师对 model metrics 和产品角度 KPI 的理解都是一定要到位的。这三轮也都是中文,湾区的两位面试官也都是中国人。
Onsite 的三轮结束后安排一周后的两轮老板面,一位是 Chang She,也是前面提到的 Tubi 的 VP of Eng.,Chang 是 pandas co-author,我是 pandas contributor,就开源社区文化谈笑风生了一番。吐槽一些 API 的不合理之处,Chang 谈了谈计划中的一些 feature 也希望以后一起贡献,聊得可谓十分愉快。第二位是北京 Office 的 lead,闲扯了一些 behavior 和团队管理协作方面的问题。
整个面试过程倒是蛮舒适的,看得出公司工程师文化很浓厚,后端服务是 Elixir 和 Scala。和 Chang 聊了很久,感觉项目真的没有太多技术包袱,DevOps 朝着全脚本化实施,听说还开发了高并发的转码工具,听起来是视频可以直接分段转码后再拼接。印象中这些技术都在 Netflix 有,只是没想到 Tubi 这么小的团队却也可以做到,若不是工程师文化贯彻到底,必定团队有天才工程师,当然更有可能是两者兼备。

Apple

Apple 流程非常非常慢,没有电话,HR 直接用私人手机号给我发的 iMessage(挠头),随后邮件联系安排了 HR call,但是岗位比较奇怪,是 Siri Team 的 AI or Machine Learning Infra Engineer,不过当时也没纠结,觉得应该是 Siri Team 内部的叫法之类的。
notion image
随后安排了第一轮面试,面试官人还是非常不错的,这个组应该是和另外一个 NLP 组合作,岗位职责主要是 Machine Learning 相关的基础建设工作,问询是否有 NLP 组的 HC,表示暂时还是没有,只得作罢。其他就不能透露了,Apple 把隐私看得很重,北京 Office 在我万万没有想到的地方,听说最近新搬了办公室,也是在一个奇葩的地方。

LINE

严格意义上不知具体的岗位职责,和 HR 聊了很久,表示 Machine Learning Engineer 或者 Data Scientist 都合适,不过 ML Engineer 暂时没有HC,Data Scientist 需要日语能力,询问日语情况。我当然是没有的,再次作罢。
notion image
至此东京的三家厂(Google Tokyo, Mercari, LINE Corp)全军覆没,比较遗憾没能拿到一张去东京面试(玩)的机票。

Shopee

新加坡和深圳都有 Office,跟 HR 打了几通电话,新加坡英语不太适应,处于费力才能听懂的状态。面试前问我意向薪水,盲给了 10k~15k 新币月薪,回我 on the high side,然后就没理我了。

Booking

坦白来说,Booking 一直是我最想去的公司。靠谱且喜欢的业务,非常具备规模的团队,multi-culture DNA,又是在阿姆斯特丹这种 dream city(虽然这次申的是上海 Office)。
整个面试流程简洁清晰,HR 会明确告诉还有几轮,以及每一轮大体的考核目的。投完简历后一周收到 OA,一些统计和 Machine Learning 基础概念题,假设检验考得多,统计看得比较重。提交 OA 通过后第二天收到 HR 的电话联系安排和总部的视频面,由于荷兰时差,第一轮视频面被安排在某一个晚上。
Booking 的 Data Scientist 岗每轮都是同时有两位面试官,口音比较重,不过总得来说还好。没有 coding,问项目还是挺深入的,留出一半时间考 business case,完完整整了考察问题抽象,验证思路,反馈调整等等,非常看重 hands-on experience。头一回遇到这样的面试有点不太适应,当时的 business case 是一个奇怪的发优惠券的例子,我没想到比较好的解决方案,当分类问题来做了,感觉答得不是太好。不过很快 HR 联系得到反馈还不错,很快会安排下一轮去上海 onsite,同时也留了一份 business case 的作业,不过不算严格意义上的 take home challenage,因为并没有给我脱敏数据,大概讨论方案,一些伪代码就可以了。由于中间 HR 休假耽误了几天,不过随后很快就帮忙定好了来回的机票和酒店。
中间出了一个小的乌龙插曲,明明已经收到了机酒安排,却又被误发了拒信。
onsite 安排非常顺利,住在静安大酒店,步行七八分钟就可以到 Booking 的上海 Office。第一天到上海后约了若干推友面基吃饭,随后回酒店和若干(男)推友玩了会马里奥派对。Booking 的这场面试算是第一场异地旅行面,这次喝酒吃饭也算是开了个好头。
notion image
第二天上午在酒店面完了微软的电面,中午匆匆吃了点东西后联系 Booking HR 去办公室,这轮的面试官是汇报的老板,也是上海 Office 的产品 Lead,聊得非常头圆,对职位的期待和要求也是无比满意,data driven,非常强的 A/B test,基础建设完善。虽然 Booking 中国目前还没有专职 Machine Learning 的 Data Scientist,不过对我这种一直以来都是自我驱动的人来说 work individually 未尝不是一件好事。下午踏出越洋广场的写字楼,走在南京西路上的时候异常开心,this's exactly what I fucking want...
由于 onsite 另外两轮都是阿姆斯特丹的面试官,所以傍晚吃了点东西就不瞎逛了,老老实实回酒店等待晚上面试。第一轮依旧是两位面试官男女混合双打,这回口音稍好一些,讨论一下先前留给我的 case,解释得还不错,面试官对几种图像的 pretrained 模型和一些 CV 子领域的 STOA 方案有比较深入地考核,也有聊一些比较新的 CVPR 2019 一些论文。
第二轮继续是两位面试官男男双打,是一个新的完整的搜索产品 case,问题极其复杂,只能先给一堆假设才能定方案,讨论了许多边界问题和 business sense 相关的问题,非常多的产品经理角度的问题。面试官对方案中的具体实施细节也考核得非常全面,例如只要我说了 pointwise,就会继续挖 pairwise,listwise 并解释对应评估指标的数学意义和物理意义。最后和面试官一些假设检验和 p-value 上产生了一些分歧,虽然我一直强力解释统计意义,前提假设,面试官并不买账,最后草草收场。不过既然面完,也就懒得再去想了。
忘记带游戏机,也就只能在静安寺附近夜游。十一月的上海一点也不冷,不过附近也没什么太好玩的,随便喝了杯就回酒店睡觉了。第二天一大早和 Yoyo 随便瞎溜达两圈,吃了生煎后接近中午就回去收拾东西,在细雨绵绵中找了个咖啡馆候机回京,毕竟回北京后在家躺一天就得出发去曼谷。
整个面试体验其实还是非常好的,安排速度比较快,Booking 上海的 Office 非常漂亮,静安寺道路宽敞,干净明亮。阿姆斯特丹也是 dream city,transfer 过去应该不算困难,总部的 26 年假和申根签证估计能轻松地玩遍欧洲。只是还是没有通过面试,后来和 HR 有聊过反馈,果然是跪在了最后一轮。

Google

Google 随缘申了东京 Office,速度比较慢,每一轮安排都很慢,这一点和亚麻倒是很像。第一轮电面面试官日本人,寒暄式地问了一下简历项目后就直接上题,题倒是不难,follow up 也很容易想到,算是秒了。隔天安排第二轮,面试官是个俄罗斯人,估计在美国待过很久,听起来近乎 native speaker。这回连个寒暄都没有,上来就做题。题面非常长,规则复杂,一时半会儿想不到更好的解法,只能用朴素的递归和剪枝,面试官一直不满意希望有更好的解法,但是又明确不能给提示,直接跪。
整体面试体验一般,速度比较慢,不问简历,没有考核到任何 Machine Learning 相关的知识(或者是我还没有走到那一步)。感觉是 Google 实在太大了,不论怎样简历和背景的人在 Google 都可以找到自己合适的位置,那么靠题筛选出聪明人 or 刻苦的人其实也是没问题的。

LinkedIn

LinkedIn 北京团队不是太大,一开始是投的 Data Scientist 岗,不过因为反馈需要更倾向统计背景的候选人,所以没能得到面试机会。中间相隔大约若干星期,HR 联系终于有 Machine Learning Engineer 岗位可以试试,很快安排第一轮视频面。
第一轮的面试官在 LinkedIn 美国待了蛮久,聊了很久在我在果壳早年做的 antispam 工作,本来应该还有一些 Machine Learning 的基础知识考核,不过应该是之前聊项目已经表现得足够好了,直接进入 coding session。题并不难,和面试官沟通了一下思路之后就开始写了,坦白来说,这确实是遇到的 coding 题目中最简单的一道,几乎不需要任何 fancy 的操作和算法。实在是不清楚那天下午是因为肚子太饿或是房间太闷热,脑袋持续短路,状态也极差,导致最为简单的逻辑判断一直写不明白。面试官也很着急,我自己磨磨唧唧了快半个小时也没能写完整,结束之后真是气愤又懊恼。
第二天 HR 反馈果然是挂掉,这是自己遇到的第一个我认为面试官很好,考核合理,却完完全全是因为自己没调整好状态,掉以轻心而挂掉的面试。虽然 LinkedIn 并不算是多想去的公司,但这次挂掉的面试依旧是给了我敲响警钟。如果感觉不适,还是应该立即停下来休息,万万不可带着疲惫的状态浪费面试机会。

Mercari

Mercari 是东京的一家做二手商品买卖的公司,湾区和东京都有 Office,业务上比较像日本的闲鱼。最早对这家公司有印象是在 Kaggle 上参加过它们举办的二手商品估价的算法竞赛,技术实力非常靠谱。HR 效率不错,投完两三个工作日后就联系安排了第一轮面试。不过第一轮面试并不是视频或者电话,是一份线下的 coding 任务。大体上是完成一个图像领域的 Python 工具包,收到面试题后简直大喜过望,毕竟我在果壳工作四年造的轮子比干的活还多。于是开开心心地写了一个周末,写好单元测试和 demo,交完五天后告诉我没过。
我真的觉得自己的轮子写得很好。
搞不懂。

Grab

Grab 投的新加坡总部的 Data Scientist,看 JD 业务应该是外卖推荐。HR 反馈迅速,很快安排了第一轮电面。第一轮男男双打,两个面试官都是国内的本科,随后在坡县读完博士后留在坡县工作的。一位面试官问了非常多 Elasticsearch 的问题,性能瓶颈,服务部署,以及一些 Golang 的问题,不知道的还以为我面的是 DevOps,感觉像刚拿到我的简历随便问一些自己了解的名词。随后 coding session 另一位面试官随便给了一个 hard 原题,随后两位直接 mute 了麦克风在那嘻嘻哈哈,我本想跟面试官一起讨论一下方案,存储复杂度优化之类,但是发现他并没有在看我。约莫十分钟后面试官问我做完否,答曰做完,于是面试就结束了,甚至没有任何讨论部分。
面试体验稀烂,只有 HR 还算热情,也是我迄今为止所有参与过的面试中体验最差的一次。
两位面试官字里行间时刻都在透露着“我们都是来新加坡读博士才留在这里的天之骄子,你小子也配吗”的傲慢,作为候选人我觉得自己在面试过程中甚至没有得到最基本的尊重。

随便一点总结

整个面试过程充满了不安和焦虑,白天要工作,只得用周末和晚上的时间进行复习,没有时间打游戏,没有时间打比赛看 paper 看开源项目,没有时间做饭做甜点,没有时间弹琴画画,我甚至连打扫房间的时间也没有。战线拉得过长给自己带来的持续焦虑换来的是只能是摄入更多的酒精和尼古丁,我无时无刻不在期盼着这一切能早点结束,揣着一个 offer 后离开北京,重新回到正常的生活轨迹。
如果在职建议好好挑,争取一次到位,如果打算多一些选择,应当早些辞职。
Data Scientist 并不是一个 well-defined postion,这也是最开始提到的混申的不便之处。就面试来说,很难做出有针对性的面试准备。从各家的面试经验来看,无论是内容还是考核方法上或多或少都有些差别。反观各家 Software Engineer 岗位,基本上只要刷题就可以满足大多数需求,准备起来自然也是简单直白。虽说时间都是要花的,但时间安排也会更加合理,进度可控,心里有数。而不是像我,普通的工程岗 LeetCode,算法岗的 paper 细节,Machine Learning 基础理论部分的数学推导,Business Case 工程落地的经验,准备起来盲目又费力。
我觉得这种考核方式的差异与各家对 Data Scientist 的需求定位的不同是分不开的,对于像 Agoda,Booking,Tubi TV 这种岗位需求落地明确的公司,用 business case 去考核候选人的工程经验和业务直觉非常合适,而像 Google,Microsoft 这种体量的公司,它们已经大到对 Machine Learning 的需求反倒不太明确,或者说需求几乎多到遍地都是,它们则会更在乎候选人基础的工程素养。
在果壳呆了四年,我几乎没有做过让我觉得特别有成就感的项目,只有一些照葫芦画瓢的经验。所幸的是在几乎没有太多业务压力的情况下,我有足够的时间去想清楚算法背后的数学原理。我有时候甚至在想,我真的要离开这里吗,在这儿可以继续每天快乐地读论文,写开源项目,除了这令人懊恼的北京,我是不是真的要走呢。离职前的一周,我每天下午都会接一杯咖啡放在桌上,就这么静静地闻着香气,直到它冷掉。倘若以后还能闻着这香味,必定是还能想起这段时光的吧。
我在饮水机边接水的时候仔细打量每位同事,那些曾经熟识的疲惫的开心的脸,那些亲切的却稍纵即逝的面容,在我注视的每个瞬间,是那么自然与永恒。

原文记录于 2020 年 1 月 1 日,北京