Before Reading
这篇文章紧跟上一篇文章,主要通过作者自身经历和理解,论述如何进行求职的前期准备和实战。同样,此文将包含极强的采样误差和主观感情色彩,希望读者理解。
Hard Skill, Soft Skill
此文的每一章节都将分为两个部分叙述,分别是Hard Skill(可以量化的部分)和Soft Skill(无法量化或很难量化的部分)。
虽然因为大多数公司都把公司文化拔高到了一个不应该的高度,甚至有把公司文化道德化的倾向,导致我非常反感宣传公司文化的行为。但是我也不得不承认,有的公司文化,如果你抛却它忽悠员工的部分,它可以是非常有用的尺子,用来指导你和他人的工作。这里我推荐Amazon的Leadership Principles。这里面有一些莫名其妙的自大狂玩意儿(比如Are Right, A Lot),但是其他可以主观实施和控制的部分,是许多顶级公司对员工共同的要求,可以用来指导自己准备求职过程的方方面面。
举个小例子,许多人提到了日本总体环境佛系,想准备什么东西都没有人做。其他人都不做,你觉得这是对的,你去做了,这就是"Have backbones","Bias for Action"和"Think Big"。如果你能够影响、组织起其他人跟你一起做,这就是"Earn Trust", "Ownership"和"Hire and Develop the Best"。听起来很傻,但是这是一个优秀的码农应有的素质,也是你在简历中可以,甚至说是应该体现的素质,在面试的时候,这也是非常好的话题。
Information Hunter
Drowning in information, starving for knowledge.
就职的第一步,是获得信息,包括招聘信息,宣讲会,招聘时间表,过去问,具体公司的招聘流程,招聘时间线,招聘流程。虽然大多数日企都服从经团联的安排,一般从毕业前一年的3月开始招聘,但是码农的Dream Company普遍是不管的。这也导致码农就活的战线会拉的非常的长,以我个人的经验而言,我从投出第一份简历到拿到目前最好的offer (Amazon SDE),中间间隔了8个月,而Indeed 和Google都还在流程中。在如此长期的战线中,如何尽可能及时准确地获得信息就成了一大难题。
Hard
招聘信息最直接、及时、准确的来源肯定是各大公司官网。提前锁定自己心仪公司的网站,设置Job Alert,并且定期查看是最万无一失的方法(点名批评Microsoft, college 招聘页面曾经完全down掉了两个月之久)。
除了各大公司的招聘官网,一下这些网站都有能够较为即使准确地获得招聘信息(包括招聘会和招聘投递信息):
アカリク;
リクナビ(注意这个网站是分年度的,要选择自己对应的毕业年度);
外資就活;
CareerCross;
LinkedIn
Soft
建立你的信息网络。找到那些和你想法类似的人,主动和他们建立联系和共享信息。(Tip:收获信息的最好方式是主动提供信息)
如何找到这些人?上同一门课认识的人,留学生群,参加招聘会结识的人。只要你主动地说Hi,主动地分享你有的信息,那么信息网络的建成只不过是水到渠成了。
Resumes
了解到了招聘岗位之后,我们就要开始投递了。投递的第一步就是准备自己的简历。不要等到临投前一天才开始写简历,今天就开始写。写简历是一个不停地改进的过程,也是审视自己的不足的过程。日本留学一个不太好的部分就是,因为实习机会太少,而周围很多人都是每天吃喝玩乐,很多学生凑不出一整页的简历。如果你也是其中一员,那么抓紧时间,多做一些项目,做一些实习,打一些比赛,发一些论文,无论如何也要凑出一整页简历来。
虽然许多日企是给一个entry sheet让你填,但是填的内容和你的简历内容大同小异。而且top tier 的公司基本都是要直接收CV。
建议去一亩三分地看看如何准备和写简历。
Hard
哪些东西可以写进简历:教育经历,实习项目,开源项目,自己的side project,比赛项目,等等。
简历最好用中英日文各写一份,这样在复制粘贴到entry sheet的时候不用重复写(很多公司的ES在提交之后就不能看到了,我一开始不知道,至少写了3遍实习项目的日文版)。
虽说每份简历在投递前最好是有针对性的修改,但是对于大部分根本写不满一页的学生来说,有时间想简历怎么编,不如赶紧再去做个项目。对于能够写出一页半简历的同学来说,可以在每次投递前针对自己投递的岗位删掉一些不太契合这一岗位的项目的细节,始终保持简历上有所有的项目,重点项目重点说,而且简历长度刚好一页。
推荐通过LinkedIn初步编写自己的简历,还可以在LinkedIn上查看、学习其他人是如何编写自己的项目经历的。在出最终简历的时候,推荐使用超级简历,跟着它的引导调整自己简历的内容和排版。
Soft
同一个项目用不同的说法写出来,效果是完全不一样的。要针对性的表达你在项目中的作用。同时,为了能够在项目中有东西可说,应当在做项目之前和做项目中就想好它会在我的简历中怎样展现出来,一边意识到简历一边推进项目有奇效。
同时我发现有的转行的同学,误认为项目就是在GitHub 上找个开源项目实现一下,或者就是上了某个网课,做了课设作业。不是说这些就不行,而是这些项目缺乏区分度,不能体现你作为candidate拥有的竞争力。
相对于课设,实习经历,比赛经历和对开源社区的贡献就明显有更强的竞争力,这些经历可以说是实际工作的预演,是采用了某种技术解决了某个实际问题的过程。好消息是日本有这些经历的人真的不多,坏消息是还是比好的岗位数量多得多的。
Online Assessment
Hard
普遍是编码测试,建议在C++, Java和 Python中至少弄懂一门语言。如果你只会Python,那建议还是要学一学C++或者Java,因为Amazon东京 OA 只许用C++或者Java。
Soft
没有,即使有,也很弱智。我还没见过招码农还要求做SPI的公司。
Interviews
面试是整个招聘流程中最大的大头,而且top tier的面试强度是非常高的,Amazon一上午面4轮,Google听说也是一天面4轮。虽然一般认为面试并不能在如此短的时间里体现一个人的水平和性格,但是面试总归是比简历靠谱的。准备美资互联网公司的方法也十分简单和直接,相当多早就有志于此的朋友可能对于他们考察方法早已烂熟于胸,但是也要考虑到很多日本的留学生根本没有关注过这方面的情况,我还是决定写一写具体的面试内容和准备方法。
推荐参考书目:《剑指offer》和《Cracking the Coding Interview》。前者是中文编写,篇幅更短小,适合完全没有外企面试经验的同学熟悉面试流程和面试重点。后者是英文编写,更详细,篇幅更长,适合有一定准备的同学阅读,熟悉一些术语的英语说法和更多面试中的细节。
推荐论坛:一亩三分地。不仅有最新最全面经,还有装逼,打脸,互怼,感情生活,北美猥琐男等愉悦身心的顶级资讯,实乃居家旅行,刷题拿offer必备网站。
建议找一两个朋友定期互相做mock interview,可以习惯一边说话一边写代码,同时习惯在白板上写代码,还可以互相给feedback来提升面试过程的表现。
Hard Skill
Top tier公司都是要白板编程的,有的公司除了白板编程之外还有一些Behavior Question(BQ).白板编程主要考察算法和数据结构,new grad偶尔会问一些简单的 OOD(Object Oriented Design)问题。
算法和数据结构
究竟是我刷了题,还是题刷了我?
刷题进公司一直是一个充满争议的话题,但是不得不承认,想要进top tier公司,对于大部分人来说,刷题是最有效的途径。这里给出我的刷题记录以供参考(我本人没有任何算法竞赛的经验)。
对于没有竞赛基础的同学来说,在刚开始刷题的时候会感受到痛苦,这是十分正常的,事实上,大部分人在做到150题左右,就会开始量变到质变。
在刷了一定数量的题之后,如果想要知道自己大概是个什么水平,可以参加 Leetcode 每周的周赛,日本时间周日早上11:30至13:00。周赛是个很好的检验自己水平的地方,同时也是个获得自信的好地方,因为大多数参赛选手实在是菜的可怕。
注意:并不是说刷到这个数才能进这些公司,实际上我是刷了大量的无用功的,因为我刷到一半有点刷上瘾了,觉得做这些算法题是一件很快乐的事,没事干做两道,还因此荒废了研究。。。现在我觉得 leetcode 没太大意思,又跑去做 Hackerrank 玩,纯粹是出于个人兴趣才做了这么多。
OOD
《Cracking the Coding Interview》和一亩三分地里有很多OOD的例子,但是实话实说,遇到做过的才会,遇到没做过的还是挺蒙的。。。好在OOD并没有一个标准答案,你只要和面试官探讨出一个make sense的方案就行了。
Behavior Questions
Amazon一定会有BQ,面试之前照着Leadership Principles准备一些小故事。Google有可能有BQ,但是概率实在是很低。
Soft Skill
不同公司会对面试官进行不同的训练,要求他们重视候选人的某些方面。但是总的来说,大多数面试官评价候选者的一个很重要标准是,他是否愿意和候选者作为同事共事。因此面试很大程度上,是模拟你和面试官在工作中共同解决一个问题,想象他是你的一个同事,抱着和同事交流的心态和态度去沟通,比较容易做到不卑不亢。
自信
我自己有幸有过当面试官的经验,后来和许多其他的工程师聊的时候,发现大多数工程师都或多或少当过面试官。所以面试官其实很有可能就是一个普通的码农,面试的时候完全没有害怕的必要。
其次,不自信在面试的时候绝对是红灯信号,背后的理由也很简单:如果你自己都不相信自己可以胜任这份工作,那么你如何说服你的面试官相信你?
当然也要注意分清自信和自负的区别。你可以是一个geek,对自己的技术充满自信,但你不能是一个jerk,目空一切,一碰就炸,没人想要和jerk共事。如果你可以笑着和面试官讲一个你以前的经历中犯过的错,就像谈论自己小时候的一段逸闻一样,那么你已经展露出了充分的自信。当然,你也要记得讲自己是如何处理这个错的,获得了怎样的效果,毕竟这还是在面试中。
交流能力
许多面试题都是模糊的,不明确的,并不是因为这个题有问题,而是面试官有意考察你在工作中的沟通能力。在听到一个问题之后,尽可能的问出一切你认为可能的问题,包括但不限于:输入是否遵循某种pattern(例如一个数组是否是排好序的数组),如何处理非法的输入(包括空的输入和会overflow的输入),如果要实现多个互相影响的功能,那么他们被调用的次数分别是怎样的(这会严重影响你对于整个类的设计)。
同时,在整个思考过程中,尽量做到think aloud,把你的任何一点想法都说出来和面试官讨论,如果面试官没有提出异议,那说明你的思路是没有大的问题。同样,如果面试官明确表达了不同意,不要在自己的思路上纠结。谁对谁错不一定,但是面试官会认为你不能听取他人意见,沟通能力差。
有些朋友表达了对自己语言能力的担忧,我认为其实对于大部分人来说,对英语水平的担忧完全是杞人忧天。语言只是交流的工具,只要达到了可以沟通的水平就可以了。Google Tokyo Search Team在 tech talk上开玩笑地说"The official language here is non-native English"。如果在沟通过程中有没听明白的部分,完全可以"I beg your pardon"或者自己复述一遍面试官的话,询问自己是否理解正确了。
与公司文化的契合程度
许多公司会挑选契合公司文化的雇员,有的公司明确的给出了公司文化的要求,而有的公司隐藏的很深。面试的时候,面试者可以大概感受到公司的氛围。
我个人的建议是,不要在面试的时候过度的伪装自己,因为求职是一个双向选择的过程,如果你去到了一个你无法适应的工作环境中,你的接下来几年都会相当的痛苦:你清醒的时间里大约有一半都在工作上,而你却不喜欢它。
但是也有一些技巧可以帮助你扬长避短,体现你符合公司文化,或者说展现你的优势。例如,大多数情况下,合作项目中总会有那么几个摸鱼侠。如果你是个好好先生,容忍了摸鱼侠的存在,那么你就可以着重表达自己“Earn Trust”的部分,你的组员都相信你,或者说,至少你们没有撕破脸。如果你无法忍受摸鱼侠,和他们大吵一架并且把他们赶走了,你可以着重表达自己“Hire and Develop the Best”和“Insist on the Highest Standard”。当然你要注意自己的表达,不要让自己听起来像个自负的jerk。
最后
找工作是一个小马过河的问题,最后的最后,我依旧想要强调,这两篇文章仅仅代表我个人的经验和看法,完全不保证客观性,准确性和及时性。这两篇文章仅作抛砖引玉,希望能给各位学弟学妹提供一点点微小的帮助,同时也希望其他看到这篇博客,有自己想法的朋友,也能够通过各种渠道发声。After all, the community is you and me and everyone.