《前言》
虽然之前有在 Oversea_Job 版分享过类似的心得文,
但由于那篇比较像是杂谈,所以想说稍微整理一下内容再分享到这个版上。
希望能够帮助到那些以后想要应征的人~
《背景介绍》
113电资学士班(已停招),目前以交换学生的身份在东京读书。
大学时期除了当了一学期的TA跟在中研院实习之外,并没有特别的经历。
由于暂时没有升研究所的打算,加上从以前就一直很向往在海外工作,
于是我就趁在日本交换的期间试着找看看这里的工作。
《准备》
由于我锁定的都是SWE的职缺,
我从下定决心要找工作开始每天都会用闲暇的时间刷Leetcode,
两个多月以来大概刷了130题(27% Easy、60% Medium、13% Hard)。
不得不说勤刷Leetcode对于大部分公司的coding test确实有很大帮助,
我也是在刷题时顺便复习Data Structure跟Algorithm。
在收到Google onsite interview的邀约之前其实我有被不少公司在
coding test的关卡刷掉。虽然不知道是因为自己本身coding能力不足,
还是自己的背景跟公司不符,我依然抱着全力以赴的精神去面对每个机会。
《流程》
0. 投履历(3/22)
某天无意间看到日本Google有在征SWE new grad后,
我就请在台湾的朋友帮我扫描大学的成绩单,然后连同履历一并寄出去。
1. Online Assessment(4/18)
履历寄出去隔了一周后recruiter联络了我,
并且邀请我在指定的时间参加online assessment。
测验的内容出乎意料的容易,一共考了两题难度Leetcode Easy-Medium的题目
(Optimization Problem跟All Pairs Shortest Path)。
一共有120分钟的时间可以完成。
2. Phone Interview(5/13)
隔了一周recruiter来信告知通过OA,
同时Recruiting Coordinator A联络我并跟我约好phone interview的时间。
在phone interview时interviewer一共问了三个题组,时间大约为45分钟。
一题字串处理题、一题Pre-order Traversal实作题跟一个观念题
- Why should we increase the capacity of a dynamic array exponentially ?
- Why not linearly?
前两题因为勤刷题的关系我很快地就解出来,
第三题虽然当下我没有立即回答出来,
但在interviewer的引导下我完成了基本的数学推导,并给了差强人意的答案。
3. Onsite Interviews(5/24)
phone interview完隔天我收到了onsite interviews的邀请。
由于我目前就住在日本,我跟recruiter要求想在Tokyo office进行onsite。
Recruiter答应了要求,并透过Recruiting Coordinator B跟我约了onsite的日期。
onsite当天遇到第一个interviewer时,
我很好奇的问了他一下是不是要签NDA之类的文件,
结果他表示“我从来没有听说过有这东西耶!”。
虽然想在这里透露面试题目的细节,不过为了公平起见我还是点到为止就好。
- Interviewer A 考了Parenthesis Matching相关的题目
- Interviewer B 要我实作出一个能在graph(2D Array)上画直线的Function
- Interviewer C 考了一个Breadth-First-Search on 2D Array的应用题
- Interviewer D 考了Greedy Algorithm里经典的Scheduling Problem
当天一共有四场45分钟的interview,全程都是以英文进行。
而在第二场跟第三场之间有一个短暂的lunch meeting让你跟现役googler聊天。
每场interview的一开始interviewer会先跟你讲一下题目的specification,
接着会有一段时间让你跟interviewer讨论你解题的思维。
如果interviewer认为你的解法可行(尽管不一定是最佳解),
他会请你先把code打在Chromebook上或写在白板上,接着跟你讨论你写的code。
以下是几个常被问到的问题:
- Time Complexity?
- Space Complexity?
- 你觉得你的code可以处理 edge cases吗?
- 你觉得有哪些input可能会让你程式crash?
(例如return (y/x) 而使用者输入x = 0, y=5)
- 你觉得有更好的解法吗?
如果你的答案已经是最佳解的话,
interviewer这时可能会出一些follow-up question考验你;
如果你的答案还有改善的空间的话,interviewer会适时地引导你走向更好的解法,
然后要求你把不同的解法写下来并且比较两者。
这次面试题目的难度大致都在Leetcode Medium-Hard,
其中第四题我因为很快就提出最佳解,
follow-up的难度一口气被提升到Hard,当场直接被考倒。
综合我在onsite的心得,
我认为比起卯起来自己解题目,更重要的是把你的想法传达给interviewer,
并且适时的跟interviewer交流想法。
大部分的interviewer都会积极的跟你沟通,但不幸的我还是有遇到
爱理不理的interviewer把场面搞得很冷,只能说沟通真的很重要。
4. Hiring Committee(6/7)
Onsite完隔了几天,我主动写信给recruiter想询问onsite的结果。
结果得知我的feedback是positeve的,而他也决定把我的申请转到HC。
同时recruiter也要求我提供最新的履历、成绩单、competing offer等,
并询问我有没有对哪个team特别有兴趣。
在lunch meeting时陪我吃饭的人有提到一点他们team的资讯,
而刚好他们在做的东西跟我的背景有一些关联,所以我就表示想加入那个team。
由于我有跟recruiter说明我已经有拿到其他公司的offer,
他答应他会尽快处理我的申请。
recruiter在6/3通知我他已经把我的package寄出去,并在6/7通知我通过HC。
5. Team Match(6/19)
在Team Match的阶段我原本以为recruiter会帮我安排跟team manager聊天的机会,
没想到recruiter隔了一周告诉我我想进的team对我的也有兴趣,
所以就把我的申请推向了最后一关。
我有听说不同的office在team match时有时会有不同的流程,
也有可能是因为我competing offer的deadline快到了,
recruiter帮我省略了一些部分(?
虽然team match的阶段跟我想像的有些出入,
不过能match到自己想进的team真的是还蛮开心的。
6. Offer Review(6/28)
最后的offer review真的就是漫长的等待啊~
虽然recruiter答应我会在我competing offer的deadline前把一切处理完,
没想到居然刚好压在deadline前5小时通知我的offer被approved...
当然offer review的阶段因为是北美的team在负责,会有一些delay也是难免的。
感谢recruiter能在时间内把一切都处理好,
也很感谢另一间给我offer的公司前愿意等待我一个多月(我大概延了3次deadline)。
《总结与心得》
能走到这里完全是意料之外(感谢主!)
在被很多公司刷掉拿到第一个offer时,我其实已经决定要去那间公司。
没想到结局居然来个大逆转,只能说不到最后千万不要放弃!
与其他的SWE求职者相比我的履历其实还蛮平庸的,
没参加过任何竞赛、也没有企业实习的经验,
大学时我几乎都专注在课业上跟大三时当助教。
能挺过这么多面试真的要感谢那些热心栽培我们的教授!
这次的求职经验也让我体会到即使没有很丰富的背景,
只要能把基础学问顾好(特别是Data Structure跟Algorithm!)
以及拥有无比的热诚,终究是能找到自己的天下。
当然进到公司只是个开始,日后还有很多要学习的地方,
我也期许自己在进到公司前能够持续精进自己。
“人生有梦,筑梦踏实”
与大家共勉之