一哥们问我最后去哪了,我说东京 I 社,他这瞬间两眼发亮,作势这就要跪,边跪还边说:活菩萨,受我一拜。我一看,赶紧把他拉起来,连连摆手,不是那个 I 社啊。我们是做求职搜索引擎的那个,不做游戏,你这拜错人了。哥们很遗憾:你这 CS 科班四年学完了,不能为人民服务。我也只能摊摊手,图形学我可根本就没就敢选啊。
不过话说回来,我感觉大家对于我们 I 社的了解还是比较少的,毕竟 office 在国外。但其实 Tokyo office 是有专门对中国大陆的校招企划的。今年秋招我还投了 Google, hulu,以及我软的实习转正。但这三家的中文面经早就漫天飞了,感觉大家应该对他们的招聘流程已经很熟悉了。所以我主要分享一下我在 I 社的面试经历,附带详细介绍一下招聘流程。我 I 社最大的特点就是提供免费的东京三日游,包机票酒店签证。还有一个特别有意思的点就是,hulu 在中国有 office 而无业务,I 社则反之,在中国有业务却没有 office。
要说我也在机缘巧合之下才知道有这么回事的。我当时刚刚收到 Google 实习 hc 挂掉的消息,处在这个夏天只能无所事事的游荡的边缘。当时手里只剩下两个机会,今日头条和微软。恰好微软把我的面试安排在了头条的后天,所以面完头条后我决定去保研到中科院的学长那借宿一晚。赶巧在 I 社刚在中科院做完宣讲会,学长就去劝我投了一发,争取混个免费东京游。我当时处在今年的自信最低点,并没有报什么希望。现在回想起来那段时光还挺感概的,不过就不占这篇文章的篇幅了,咱们言归正传。
笔试
一开始是三轮的 online 笔试,在AtCoder上,不过处于保密的原因,题目并不在往期比赛里,是单独另开的私密比赛,不需要提前注册 atcoder 帐号,邮件会发。这时候还不需要投递简历,只需要简单报名即可,也就是说其实并没有背景审查,任何人都可以做这三场笔试。
三轮通过一轮就可以收到 move forward 的邮件了。题目比较水,基本是手速题。一道题没有通过也可以获得部分数据的分数,不知道错误提交有没有罚时,因为笔试过程中是看不见自己的 rank 的,只要最终能 AK 的话应该还是能比较稳的拿到面试机会。我错过了第一轮,第二轮用 python,一个小时多一点就 AK 了,不得不说,atcoder 的一个优点就是语言全,python 切题的手速优势还是很大的,不过性能劣势更大。我虽然第二轮就通过了,但还是做了第三轮,最后一题赛后和人对了是正解(反正他 C++ A 了),但我 python 有的数据就会 TLE,也有可能我哪写崩了或者其实 C++ 是卡过去的。
Case Interview
通过了笔试会被要求提交简历,需要按照他们要求的格式重新写一份,不能提交自己准备好的 pdf,这点有点略坑。然后会有一轮 hr 面,不刷人,其实也主要就是聊聊意向,毕竟需要毕业就去东京入职,WAP 还能在上海待两年。我对东京工作当然没意见啊,还方便圣地巡礼(雾,在第一次去东京之后,就暗暗发誓此生一定要有段时光在东京生活。之后 hr 姐姐会测试一下英语,由于这个是个突击电话,不提前约,因为本身也不用准备,结果我当时突然 Syntactical Semantics 这两单词就不知道怎么说了,也就会念个 lexical 了,这怎么用英语描述自己做过的编译器比写一个还难呢……hr 姐姐还很贴心的叮嘱了一下后面的技术都是英文面,准备一下。我心想没事,case 面就得刷下来,我应该是见不着技术面了。
接下来是一轮程序员非常少见的 Case interview,这轮就开始刷人了,感觉比较像管理、咨询行业的 Technical Interview,我们程序员更多的是在白板上写代码。邮件里会告诉你下一面是 Case interview,我知道以后赶紧就咨询了一下我商学院的同学,她给我讲完概念以后,扔给我一本《Case in Point》,书名不重要,这就是咨询行业的《CC189》。当时时间已经来不及系统培训了,而且我们是专业写代码的,又不是专业做咨询。再者说,我要是有能让人听我话的本事,何必退而求其次探索让机器听我话的学问。我猜测这轮面试应该也不会对我们要求太高,于是就把里面的所有 case 当 story 读了一遍,发现这玩意跟 leetcode 上的算法题一样,也是有套路的,基本还是澄清问题->归纳问题->提出解决方案->说明思路这一套。
这面是中文讨论思路,然后英文总结讨论,如果时间还有富裕,可能会被要求用英语讲一些算法,也有可能是我英语太菜了,面试官再给一次机会……不过这是最后一次对面是中国人的面试了。后来面完 onsite,和 hr 讨论过这轮面试,我说这个对于软件工程师还挺新颖的,hr 表示这轮面试除了考察英语,主要是看一下应聘者的思维方式和性格,比如看看你在压力下能否保持冷静,逻辑思维是否严密,言辞有条理、有依据否。
Skype Technical Interview
通过 Case interview 后,横亘在我和东京免费三日游之间就只有一轮 Skype 上的远程技术面了。我还特意问了一下是否需要日本 vpn,回复是不需要,但是实践证明是需要的……面试过程中我其实不太能听清对面的日本小哥再说什么,并不是口音的问题,他英语说的很好,一点都不像是日本人。运气比较好,赶上了一道挺简单的题目,python 几行秒之。尴尬的是这时候 skype 断了。小哥直接打字说咱就在#号后面聊吧,我心想这可救了我,一下子就不紧张了。follow up 我直接上了 re,于是后面的 follow up 就都没有了……后面再聊了一下 re 的原理和时间复杂度,python 里的 re 引擎肯定是有回溯的,最坏情况是指数的,这是为了支持一些扩展的 re 语法,实际上在 type-3 文法能力之外的,因此不能转化为狭义的 dfa。
我和学长正好是同时面,结束后和学长交流,学长一直纠结于面试官的 expected solution 最坏情况下渐进复杂度不是最优的,一开始一直在讨论另一种解法。因此觉得自己挂定了。我因为中间断线了,感觉也是已经凉了。学长还安慰我说,这轮面试基本上4进1,我这送你一个,再找两你就进了。我说咱也别谁保谁了,这情况看起来是咱两一起抬了一哥们去东京。
Onsite Technical Interview
等收到邮件我俩愣了,双双进入 onsite,不知道是建立在哪六位壮士的牺牲之上。能公费旅游当然开心了。
onsite 是在东京,I 社会为面试者订好机票酒店,然后报销办理签证的费用。至于东京内的交通和吃饭是不给报销的,只有面试当天会管一顿午饭。中间 hr 问我愿不愿意换到某天,由于那天在周中,我当时在微软实习,需要翘三天班,而本来的安排在周五,只需要翘两天班,所以就回绝了,后来才知道学长被安排那天,所以说好人是有好报的,然而这次我没有选择做一个好人。
结果很快就要偿还 rp 了,从北京走的那天起的太早可能着凉了,在飞机上睡着之后再醒来感觉嗓子起来了。到宾馆之后直奔超市买了两大盒果汁压嗓子。我面试的那天没有上机题,因此对于上机的过程不太了解,唯一知道的就是不上机也有可能拿到很好的 offer 的。和我一组的还有一个中科院的汉子和一个清华的妹子,I 订的酒店虽然很好不过可惜是双人间,当然妹子自然是单人间了。由于就我一个本科生,年龄比较小,大家一路还是蛮照顾我的。最关键的是,清华妹子居然会!日!语!我之前虽然来过日本但并不会日语,于是她荣升带路小姐姐,觅食之路一下简单很多。
第二天 hr 姐姐回来宾馆接我们,到了公司,我被分到了一间叫皮卡丘的会议室里……面试是三轮 back to back,强度还是比较大的,indeed 的题目也很有意思,都有一个工程背景,最终题目是一个将现实问题抽象化的算法问题。难度还是比较简单的,在理解题目之后很快就可以用 python 写出来。不过他们的 follow up 准备的非常充足,应该是无穷无尽的,因为第一面面试官在我做完两三个 follow up 之后已经表示我的表现非常好了,很少有人会做到这,但他手里依然还有很多 follow up。我一开始聊项目的时候还比较紧张,经常卡壳,后来聊上算法之后就忘了自己在说英语了。第二面有一个 follow up 是 MIT 的 introduction to algorithms 的原题,我当时脑海里就浮现出 Charles 睿智的脑门,还有他的招牌微笑。没想到虽然是大一学的,但还记得一些操作的英文的表达,因此道题我讲的格外流畅。第三面是 leetcode 原题,由于前面两题讨论的很充分,再加上要感冒,我当时已经感觉非常累了,索性直接就给出了最优解。一个小插曲就是在白板上 python 的缩进写的不太明显,面试官因此一开始以为我写错了,好在很快就解释清楚了,不过这也让我发现了 python 白板编程的一个劣势。
面试结束班长带我们参观东京 office。是像 facebook 那样开放式的,每个人都有升降桌,很酷,缺点嘛,也有,就是不方便我摸鱼划水 T^T。公司在惠比寿花园广场,从上面眺望时整个东京都一览无余,天气好时甚至能看到富士山。
花火大会
面试的时间刚好赶上了江户川花火大会,江户川是东京第二大的花火大会,仅仅比最著名的隅田川规模要小。然而这时候我已经很疲惫了,感觉衣服里面发冷,但最终还是觉得托着疲惫的身躯赶往篠崎站,好在面试的小伙伴愿意同行。出站后就看着不少穿着和服的妹子,不少还说着中文。到的时候已经开始了,在去的路上就能抬头看见花火,有一瞬间真的感觉自己走进了某部动漫里,不过错过了江户川的经典开场还是有些残念的。
接下来边抬头看烟花边向前挤,伴着花火爆裂的声音咳嗽不停,看着挥舞着荧光棒的人群,真希望自己也像他们一样精力充沛。看着空中爆炸的烟花和浓烟,很多事情并不存在完美之说,正如不存在不会产生烟雾的花火。但不完美并不代表一定就有遗憾,至少我很享受那三个小时的解题过程,无论结果如何我都可以说是无悔矣。
回去赶往胶囊酒店,当晚一直处在半梦半醒之中,浑身发冷缩成一团,回到北京后就大病一场。现在回想起来感觉真的很奇妙,不知道多少机缘巧合我才走到这里。兴亡谁人定,胜败岂无凭?如果我发烧早一天,那我怎么可能在面试官抛出问题时就给出思路,同时又注意到每句话里藏着的 corner case 呢?结果面试时只是嗓子起来了,面试官们也很谅解,甚至现在感觉那种要发烧的时候反应还更快一点。
离开时日本时手里还有不少日元,本想都在机场免税店花掉。但我就是莫名觉得,以后还会回来的,于是干脆带着口袋里的日元回了国。公司效率非常高,在他们刚刚结束休假(日本的孟兰盆节,其实就是我们的七月十五,鬼节)之后,我就得知了将会收到 offer 的消息。此时实习刚开始不久,各家的提前批基本上刚启动面试,于是我的秋招还没开始就已经结束,剩下的旅程就仿佛是一场先拿到通关宝物再开打的游戏了。在面 indeed 之前,那时的我前程是多么的灰暗啊,今天的自己却无法感同身受了,所以说,一个人的命运啊……