Overseas Rabbit | 海外兔

从上海到东京,历时半年的海外求职记

家好,我是 Lance,本科毕业后在上海担任了五年的软件工程师,十月份刚加入日本 PayPay 的担任软件工程师。(采访者注:如需 PayPay 内推(无需日语)可联系 QQ 690131642,合适的话我们会引荐)


“可以简单介绍下你的专业背景吗?”

我在 2017 年毕业于一家普通本科的电子工程专业。在上海的两家公司一共工作了五年时间。在上一家公司,我主要使用 Golang 进行物联网(IOT)设备的分布式数据库集群管理工作。

“你是什么时候开始准备海外求职的?当初如何选择合适自己工作的国家或地区?”

在今年春季的时候,我开始搜集相关资料以及准备简历。同时我也在考托福,计划如果找不到合适的海外工作就出国留学,算是留一条后路。我记得第一封简历投出去的时候是在四月底,那时候我就完全进入状态了。选择前往工作的国家的话,我比较看重工作压力。众所周知,国内的工作压力是相当大的。虽然我上一家公司没有加班,但开会、写报告和周报等事务性工作都很耗精力。写代码本身并不痛苦,痛苦的是写代码之外的那些东西。因此我在寻找新的工作机会时,我的首要条件是找到一个工作压力较小的环境。我考虑过的地区包括西班牙和北欧国家,比如芬兰和瑞典,因为它们以 Work–life Balance 闻名。在亚洲方面,尽管我一开始有考虑新加坡,但从朋友那里了解到工作压力同样很大,所以我只向几家公司投递了简历。最终,我决定将目光转向了日本,希望那里能找到一个更适合我的工作环境。

““你大概投了多少简历,拿到了多少面试?在投简历的过程中,工作签证是个比较关键的问题吗?”

我总共投递了大约 500 家公司的简历,其中大约有 10 家公司收到了面试邀请,最终进入技术面试的有 4 家。在简历投递策略上,我采取的是广撒网的方法。前期我还会针对不同岗位对简历进行微调,但到中后期,只要是技术岗我都会投递。如果一家公司有三个技术岗位,我会选择最匹配的那个投递

对于签证要求较为严格的国家,比如英国,我注意到大多数公司会在其网站上明确标注是否提供工作签证由于我的简历上标明我的工作地点是上海,公司通常会默认我没有签证。有时候,招聘人员会询问我是否持有工作签证,如果我没有,那么有可能会直接拒绝。而对于德国、西班牙、荷兰等国家,默认都是支持工作签证的。根据我的经验,这些国家的公司不会因为工作签证问题卡你。有些公司可能会因为你不会当地语言(如德语)而卡你,因为除了柏林和阿姆斯特丹地区外,其他地区的英语普及率并不是非常高。但是,他们不会因为签证问题拒绝你,因为这几个国家想给你工作签证非常容易。

“你有用一些工具来记录简历投递的进度吗?”

在求职过程的初期,我采用 Notion 来跟踪我申请的职位。记了二三百个后,由于数量太多,我就没有继续记了。而且获得面试的公司很少,我自己都能够记住进度了,所以就不再使用 Notion。此外,我还使用 Seedtable这个网站,它是一个提供欧洲公司信息的平台。在这个网站上,你可以找到很多欧洲公司的名字,而且还按照国家和行业进行了分类。在找工作时,这个网站对我帮助很大,因为要不然我根本不知道欧洲有哪些公司。当我了解到某个公司名字后,我会直接访问该公司的官网,查看是否有合适的岗位。如果有的话,我就会投递简历。这样一来我可以更有针对性地投递职位,提高求职的效率。

“你有加入一些海外求职群吗?”

没有,首先,求职本身是一个令人焦虑的过程,我担心加入这样的群组可能会更加焦虑。其次,求职群里的信息质量鱼龙混杂。在寻找海外公司的工作时,我们需要特别注意的一点是避免投递到诈骗公司,一般可以通过查看公司的官方网站或者 LinkedIn 来进行核实。此外,还可以搜索一下这个公司是否有相关的从业人员,以便进一步了解公司的情况。虽然在求职过程中可能会进行海量投递,但这并不意味着可以完全不做信息筛选。一定要擦亮双眼,确保自己投递的公司是值得信赖的。


一定要擦亮双眼,确保自己投递的公司是值得信赖的。

“你是如何准备面试的?”

面试准备主要包括四个方向:算法、系统设计、八股文以及英语能力的提升。

对于算法,我是跟着你们一起学习的,另外我推荐 Wisdompeak 的 Leetcode 分类列表,他将所有题目都进行分类整理,我按照他的列表刷题,感觉效果很好。遇到不会的题目,我可以迅速找到类似题目。我之前每周花三四个小时在算法上,总共刷了约 500 题。但至今 Leetcode 周赛第三题仍不能百分百做出。直到现在算法依然是我的痛点,遇到不熟悉的题目,比较难想到最优解。在德国的一些稍大型公司的面试中基本都要写算法,我感觉自己在这方面还有提升的空间。

系统设计方面,你们的课程给我很多帮助,然后我看了 Grokking the System Design Interview 在线课程,它涵盖了几乎所有面试考点,虽然讲解得不深入,但能覆盖 80% 面试知识点。其次,我关注了一些 YouTube 频道和公司技术博客,例如 Scott ShiTwitter Engineering 以及 MIT 6.824: Distributed System 。第三,我特别喜欢 Designing Data-Intensive Applications 这本书,因为我在上一家公司担任基础架构工程师,所以工作内容和书中内容高度契合,包括高可用性、一致性等,这本书对我帮助很大,我大概看了三遍。另外还有要注意的是,系统设计一定要练好画图,我记得有一场系统设计的面试,面试官用的那个工具已经预定好一些组件,和我平时练习的情况不一样,导致画图耽误了一点时间。后来我花了点时间专门练习系统设计的画图,感觉对面试挺有帮助的。

八股文方面,国内工程师多多少少都会有准备,我觉得最有用的是面经高频题。从我的面试经验看,无论日本还是欧洲,将里面整理好的八股文答上来就足够了。而且在准备过程中,你也会了解到一些相关的知识点,不会只局限在一道问题里面。国外也不太会问像 ZooKeeper 之类的冷门中间件,他们比较关注网络、系统设计、数据库设计等领域,我遇到的八股文面试中最难的问题就是问 B+ 树叶子节点的存储内容,需要了解 B+ 树的索引结构才能回答,但是这题放在国内基本就是入门级别。

在英语方面,我是偏向输入型的,听和阅读都没有问题。阅读国外书籍、网站和论文都非常轻松。也可以轻松理解技术类播客和 YouTube 视频。然而写作和口语能力较弱,有点像哑巴英语。为了应对面试,我主要通过 ChatGPT 来进行英语准备。因为我的目标主要是为了应试,而不是掌握英语。所以我将英语分成几个方面,然后为每个方面准备相关的英语概念。例如,在八股文部分,有一二三四这些分类,比如 B+ 树,说我会准备好关于 B+ 树的英语表达。用英语解释 B+ 树的概念,并将文稿交给 ChatGPT,再让 ChatGPT 帮我纠正其中的表达错误。算法方面的英语我是通过 YouTube 视频来看其他人如何用英语讲解题目来学习的。例如,我会找一个博主讲解 Two Sum 这类非常简单的,自己完全能写的题目,观察他们如何用英语讲解思路。还有我会学习一些专门的英语表达,比如滑动指针、窗口以及如何迭代数组等。在系统设计方面,由于中文环境不太考这个,所以英文资料反而难度最小。无论是观看 YouTube 视频还是学习 Grokking the System Design 网站,它们都是全英文的,只要按照上面的学习就可以了。这样的准备方法对我来说非常有效。

“可以分享下你的面试过程吗?”

我一共面试了四家公司。第一家是 Sennder,我是直接通过官网投递简历的,这是一家位于欧洲的物流领域的独角兽公司,技术团队规模大约有 500 人。首先进行的是一轮 HR 面试,内容包括简单介绍自己,为什么选择他们公司、团队冲突时的处理方式以及如何解决错误等问题。接下来是三轮技术面试,每轮之间隔一到两个星期。第一轮技术面试是面向对象设计(OOD),题目类似于设计一个简化版的物流系统,该系统需要从司机端收集数据,通过 AWS API 进行筛选后存入数据库,并提供一个 dashboard 供用户进行分类查询。第二轮技术面试是系统设计,类似于爬虫系统,但也与他们公司的物流业务相关。第三轮技术面试是由其他团队的 manager 进行的,主题是行为问题(BQ)掺杂一些技术问题。例如如何判断一个系统是否正常运行,系统突然变慢了应该怎么办,以及别的团队突然来找你说你的 API 出错了应该怎么处理等。面试结束后,HR 和我聊了大约 15 分钟,告诉我综合考虑后没有通过面试。他们没有明确告诉我是哪一轮出了问题,因为他们的面试是平行进行的,面试官之间不会共享信息。但我个人觉得最后一轮面试回答得非常不好,因为我之前没有遇到过那样的问题。

“从这次面试中你有学到什么吗?或者有观察到自己哪些地方没有准备好,要怎样去改善?”

参加这家公司的面试对我有很大的帮助。首先,这是我第一次与欧洲的面试官进行面试,我发现我的思路与他们有些不同。在第一轮面向对象设计(OOD)面试时,我感觉我的设计与面试官的期望不同,我完全是按照国内的方式来的。当我询问他我的设计是否符合他的要求时,他指出我做了过度设计(Over engineering),考虑得太过细节和复杂。因为我考虑了系统的可扩展性和伸缩性,以便将来添加更多子系统时能够容易扩展。这在国内通常被看作是优点,但面试官却表示他仅仅需要一个简单的系统。这次经历让我认识到,在回答问题时,我需要调整自己的思路,直接针对面试官的问题回答,避免不必要的发挥。

系统设计我觉得表现得不够好。首先,我需要在口语表达上加强练习,因为我在表述一些概念时不够清晰。面试官提到了一些常见的 failure ,但我对这些词汇不太熟悉。虽然我可以用其他方式描述这些问题,但这样会耗费更多时间。另外我在审题方面没有做得足够仔细。面试官指出我在设计中忽略了一个重要的点,即 dashboard 需要根据司机维度来整理。我在设计时完全忘记了这个要求,导致我的答案更像是爬虫或时序存储的解决方案。与我平时的面试练习不同,像我们平时面的话,比如说设计 Youtube,你要通过提问来收集需求,但是这次面试官给了我一大段英文背景材料,包括数据量、AWS 和司机端的简单图示以及错误代码。这些信息可能源自他们的实际生产环境,所以细节也比较多。由于我没有仔细审题,面试官对我的回答并不满意。所以在后面的面试中,我会更加注意系统设计审题。我会把所有的功能需求写在一起,并在设计过程中提及这些需求。这次面试让我认识到,即使面试官已经提供了详细的文档,我仍然需要把功能需求细化并记录下来。否则我无法记住所有要点,也很难从大量英文中快速找到重点。在最后一轮面试中,我遇到了一些偏技术的 BQ,我之前没有准备过所以回答得比较差。总之,这次面试对我有很多启发,让我在以后的面试中能够做得更好。

“面试的时候有限制面试语言以及编程语言吗?”

我的所有面试都是使用英语进行面试的,包括 PayPay 也没有要求日语,编程语言的话,面试官并不特别关注。在面试过程中,他们可能会询问一些关于编程语言的特性,例如 Golang 的特点或者背后的设计机制,垃圾回收等方面的问题。你可以根据自己所熟悉的编程语言来回答这些问题。在我现在入职的 PayPay,主要使用的编程语言是 Java,和我之前的编程语言都不一样。

“第一次面试没通过之后,你接下来有改变你的策略吗?”

在我的面试准备中,我意识到几个关键的改进点。首先,我需要加强时间上的把控,比如使用计时器来确保自己在回答问题时不会超过规定的时间限制。其次,对于系统设计的准备,我采取了将常见系统抽象化的策略。以 YouTube 为例,我会识别并提炼出其核心功能,因为在实际面试中,可能会遇到类似的系统,只是背景和场景发生了变化。例如,从数据源拉取数据,其实就是爬虫功能。观看视频的功能也可以将视频转换成大文件。通过这种方式,我可以将功能模糊化,不必专注于任何一个具体的系统。这种方法将帮助我在未来面试中遇到相似问题时,能够更加灵活和有效地处理。

“接下来面试的公司是?”

第二家是一家德国的小型创业公司 Everphone,技术团队大约 100人,我的面试体验并不太好。他们要求我在一周内完成一个 take home 作业。作业内容并不难,需要编写一个 Web API,这个 API 根据他们提供的数据,例如张三喜欢喝酒、李四喜欢看书等为每个人分配礼物。如果一个礼物已经被分配给了某个人,其他人就不能再获得这个礼物。第一轮技术面试的时候面试官针对作业进行提问。首先,他让我讲解代码,这个其实还好,但他没有给出任何反馈,接下来他问我在遇到大流量时应该如何应对,我从数据库、中间站和网络扩展等方面进行了回答。但他表示不想要这个方面的回答。当我询问他想要什么解决方案时,他提出可以在选礼物之前可以进行预先分配。我觉得这可能是一个思路,但是根据作业的要求,我感觉礼物应该遵循先到先得的原则。总体来说我觉得我和面试官的沟通不太顺畅,他没有明确表达自己的预期。我本来想从网络和架构等方面回答问题,但他却想要一些巧招,我完全没有从这个角度考虑过。尽管如此,我还是被安排了第二轮的 manager 面试,面试主题是一些常规 BQ 问题和简历上的内容。虽然我觉得回答得不是很好,但最后他给了我口头 Offer,并表示下周一我应该能收到正式的 Offer。然而却没有后续,我发邮件也联系不上他们。接下来的第三家公司是 Zalando,但由于我算法题没有做出来,所以直接被淘汰了。

最后就是我现在入职的 PayPay,第一轮 HR 面是在 5 月底,随后在 6 月初进行了第一轮技术面试,主要涉及数据库和网络的基本概念。6 月底我收到了通知,告知我已经通过了第一轮。接下来在同一天预约了第二轮和第三轮面试,第二轮面试的 40 分钟主要是问一些八股文问题,主要结合我的简历来提问,而且回答一个问题后,面试官会继续问 follow up 问题,这和国内的面试有点相似。例如他会问用 Redis 做缓存时如何保持数据库一致性?项目用的是什么数据库?冷热备份如何处理?并且根据我的回答继续提问。八股文结束后的 20 分钟是一道 CodeSignal 的算法题,但我没有做出来,最后只给出了暴力解法。第三轮面试的前 20 分钟同样是针对简历的八股文问题,我提到了自己在数据仓库方面的工作经验,面试官根据这个询问了关于热门时序数据处理、提高时序数据查询性能以及使用特殊数据结构进行存储的问题。我感觉这次沟通相当顺畅,可能是因为他们有一定的技术水平或者在提问前做了充分的准备。即使我对某个问题不太了解,他们也知道如何引导我。例如,他们会问我是否考虑过使用特殊的数据结构,当我提出 GeoHash 时,他们会进一步询问我是否考虑过使用 Google 的 S2 算法,并给出建议,让整个面试过程感觉舒适而有指导性。之后的 40 分钟是关于支付系统的系统设计环节,涉及支付系统和扫码转账等。通过这两轮面试之后,最后一轮是与 manager 的 BQ 面试,面试前的一周我就只准备这个方向。我觉得 BQ 回答得还可以,但是并没有收到什么反馈,具体情况也不是很清楚。从第一轮面试到收到 Offer,整个过程大约花了两个多月。

“拿到 Offer 之后就开始准备入职了吗?”

成功通过面试之后,我收到了日本公司的内定通知,但在正式发放offer之前,还有一个背景调查的环节。由于他们是一家金融公司所以对我的职业背景有严格要求。直到九月份,我递交了大量材料,他们才确认我的背景调查能够通过。在这个过程中,我花费了大量精力寻找相关材料。直到公司确定我能够通过背景调查之前,我一直在参加其他公司的面试。公司为我预计的入职日期是 11 月 16 日,并且告知我签证的审批需要日本方面的批准,因此预留了大约四个月的时间以防万一。然而我实际上在 10 月份就入职了。

“薪资方面和你国内比怎么样?”

跟我国内公司比的话会高一些,但是比不上欧洲那边。据我所知,日本的税负大概是 20%,因为我还没有拿到第一笔工资,还不是很清楚。

“从上海到东京,公司有协助你完成整个入职流程吗?”

PayPay 的专业程度体现在它与一家专业的 relocation 公司合作。这家 relocation 公司非常专业,几乎能解决你能想到的所有问题。这也是我觉得 PayPay 比较好的原因之一。从被录用之后,所有前往日本的准备和抵达后的事宜都由他们负责,包括帮助新员工在日本开设银行账户。即便你不会日语,他们有专人陪同前往银行提供服务,确保开户流程顺利进行。此外,他们还会安排接机和住宿。公司安排的公寓设施齐全,连日常生活必需品如餐具和厨具都一应俱全,你可以在这里住上一个半月,以帮助你更好地适应刚到日本时的生活。尽管薪资相对较低,但公司在其他方面的周全考虑和为员工提供的全面服务,让人觉得非常贴心。此外,公司还提供了 90 万日元的搬家费用。

“你第一次来到日本,感觉日本生活方面和上海有什么区别吗?”

在生活方面,最不习惯的当然是不懂日语。到处都感觉像个文盲,如果既不会说日语也不会英语,那就更难应对了。此外,饮食也是一个挑战。我并不太习惯日本的食物,比如咖喱和酱汤我个人并不是很喜欢。虽然寿司和一些高级的米其林餐厅非常美味,但是也不能天天吃那些。不过在东京生活,有很多方面是非常方便的。我之前在上海生活,已经非常便利了,但东京还是有所不同。上海的便利主要体现在发达的公共交通和方便的网购。而东京的便利之处在于它的公共交通同样非常发达,另外还有很多超市和购物场所。自从来到东京,我从未在网上购物过,因为线下购物完全能满足我的需求。这里主要用亚马逊和乐天市场购物,但我一次都没用过。此外,日本的房屋设施也很好。至少他们出租的房子都是经过翻新的,住起来会比较舒适。我觉得这一点非常棒。

“你刚入职 PayPay 感觉怎么样?”

我最喜欢的一点是只要员工在日本境内就可以全远程办公,入职时,人力资源部的同事明确告诉我,如果我不想去公司办公室,我可以完全远程工作。当然如果愿意去的话,公司的办公地点位于东京市中心,很漂亮而且周边环境非常优美。其次支付类的软件对代码质量要求是比较高的,公司的流程也相对规范。因为任何线上 bug 都可能引发严重的后果,因此公司对此非常谨慎。还有值得一提的是在培训中,人力资源部门特别强调了下班后必须关闭电脑的规定,这是许多国内公司难以做到的。如果员工不关闭电脑,这将被视为加班,公司必须支付额外的加班费。公司还规定,每月的加班时间必须控制在 40 小时以内,不然可能会被审查。年假方面,虽然在日本 14 天年假和 5 天带薪假可能并不算多,但这是入职就有的福利。而且我们公司实行的是强制休假制度,人力资源部在入职培训时也提到了这一点,公司会强制要求员工至少休掉 5 天年假。

“未来三年你会觉得你一直待在日本吗?还是说你有未来的规划吗?”

我目前倾向于继续在日本工作,除非出现特别有吸引力的机会。如果欧洲有更好的职业发展机会的话,我也会愿意过去,对于像我这样的性格,欧洲可能会感到更舒适。以荷兰为例,那里的年假有30天,那我肯定更开心。

“如果重新来一次的话有哪些能做的更好的地方,例如有些公司可以不用投的,或者说有些面试是可以不用准备,你怎么去平衡这个投入的时间以及回报。”

在准备面试时,特别是面对面向对象设计(OOD)的部分,因为我面试的频率不高,而且 OOD 出现的频率也很低,所以我倾向于在面试前一周再花时间准备。算法对于我的薪资和等级评定有着直接的影响,在与 PayPay 的招聘人员讨论职位级别和薪资时,他们指出我的算法能力不符合他们的标准。他们的工程师有三个级别,第三级别是 Senior 职位,我是属于第二级别,如果有机会重新准备的话,我会选择花更多时间在算法上,算法我一直不开窍。学了就忘,忘了再学,这让我非常痛苦。另一方面,我可能不会对 HR 面试抱有太多期望。在面试欧洲公司的时候,我大概有六七个公司到了 HR 面试阶段,但真正能进入到技术面试的并不多。所以针对 HR 面试去花太多时间来准备 BQ 问题可能有点浪费时间。所以我可能不会这里投入过多精力。至于 take home 作业部分,在当前就业市场并不乐观的情况下肯定也需要去尝试投一下,但是我不喜欢这种形式的作业,因为它会占用很多时间,而且可能并没有结果,之前有一家公司做完 take home 就没有反馈了。而像是 Evernote 的第一个作业我也投入了大量的时间与精力,包括编写代码、设置服务、添加注释、编写测试用例到部署都参与了。虽然作业指明不要花费超过四个小时在这个项目中,但实际上,我发现这几乎是不可能的。稍微复杂一点的问题,一个周末的时间可能都不够用。


一旦简历准备好就立即开始投递。投递的过程中学习是最快的,否则可能会陷入一种学得很慢的状态,今天学一点,明天学一点,所以一定要尽早行动。

“你有什么建议给一些现在想要欧洲或者去日本工作的一些工程师吗?”

我认为关键是要积极投递简历,我刚开始准备求职的时候会比较怠惰,打算准备好英语、算法和系统设计这些方面才开始投,所以拖到四月底才开始投递简历。现在我觉得因为越早开始,就越有可能抓住更多机会,也能更快地进入备战状态。包括我也对身边的朋友说,一旦简历准备好就立即开始投递。投递的过程中学习是最快的,否则可能会陷入一种学得很慢的状态,今天学一点,明天学一点,所以一定要尽早行动。我在刚开始投简历的时候市场状况并不好,许多公司都在招聘冻结期,很难获得面试机会。随着时间推移市场慢慢。一些知名外企,例如苹果和亚马逊都重新开放招聘,所以到后面机会是慢慢变多的,持续不断地投递简历,做好长期战斗的准备是必要的,因为面试间隔可能会很长。像我自己就投递了五六百份简历,最终只得到了 4 家公司的面试机会。投递简历之后的第一个面试可能要等上十几天甚才会来。在这段等待时间里,你会发现自己的学习速度比之前快了许多。

其次是不要过分担忧自己的能力不足,我之前也会陷入这种想法,觉得自己的履历不够好看,无论是学历还是工作背景在外面可能没人听说过。不像其他候选人可能来自知名公司就不会有这个担心。但即使像我这样的履历也有机会成功。所以,我觉得机会是很多的,不要太过担忧自己的能力不足。

对于那些想要出国工作的人,我建议不要觉得自己的履历太差,而选择进入派遣公司或外包公司。这些公司可能工资较低,对职业发展前景不利,同时可能在保险缴纳方面也存在不足。我建议大家先尝试投递日本的正规公司,现在有许多正规公司招聘外国人,日本的正规公司招聘信息可以看看领英和官网,也可以浏览 TokyoDev 这个网站。包括 PayPay 现在每个月都入职一批人,很多都是海外的人才,日本人可能只占 10%。而且在软件开发岗位对日语完全没有要求,我之前也不了解 PayPay 这家公司,可能因为日本互联网公司在海外市场的知名度通常不高。PayPay 的招聘广告在欧洲可以看到,但在国内却几乎看不到。