小弟是菜鸟工程师,一直以来从这个版上得到很多资讯。取之社会、用之社会。
现在正在某A牌半导体厂当RD,当初在美国读书的时候就在这里实习。虽然拿到了return offer,但因为疫情+自己犯蠢,违反了国际学生的工作规定,害自己丢了学生签证只能离
开美国。还好公司帮我大力乔,让我回台湾工作一年然后拿L1-B回美,现在正在办绿卡。
因此我对老东家很感谢,也没有跳槽的想法。但是好的工程师应该要持续精进,了解自己在
市场上的定位。因此我三不五时会投一些履历出去,训练自己面试的能力。
我现在的工作是曝光机(lithography)的自动化设计,主要撰写LabVIEW:一种功能特殊
的图像控制程式语言、C++用来开发图像处理函式库。视工作需求也会用到Python与E
mbedded C。从赴美读书以来就养成每天(几乎啦)刷题的习惯,目前约1000题。
由于本身没有美国或其他地方的居留权,所以申请的都是台湾的职位。年初的时候收到
Google还有其他数家公司的面试邀请,但只有Google有跑完整个面试流程,因此写出来在
这里跟各位分享。关于考题部分,因为有签保密条款,所以不方便详细透漏,还请见谅。
# HR contact #1
Google meet、30 min、中文
过履历关之后,Google会指派一个HR来联系你,他会是你的对口人员,你之后的整个面试
流程都会由他来安排,有任何问题就直接找他(你原则上不会得到面试官的联络资讯)。
我的HR是一个上海site的小姐姐。简单的自介之后,HR首先是从你的履历和job
application帮你选择面试的方向。以我自己而例,HR给了我general SWE track和
embedded system track两个选择:前者考general coding;后者除了考coding(应该是C
)外还会问一些firmware domain knowledge。
我选general SWE track,接着HR问我要写什么语言?基本上常见的语言都可以,但他建
议写C++,因为台湾硬件部门多,写C++的面试者在team match时比较容易被雀屏中选。然
而我选Python,毕竟人生苦短,战士有选择战场的权利。HR也提到:如果面试到一半想换
个语言来写,也是可以的。
敲定细节之后就排第一次phone interview的时间:给你一个表单,让你选几个有空的
time slot来排面试。总之就这样进入正式的面试流程。
# Phone interview - coding
Google meet、45 min、不限语言(中、英)
这里你会收到两个连结,第一是google meet、第二是interview board,就是一个特化用
来写程式的文件档,没有侦错跟执行的功能,完全就是纸上谈兵。由此可见,Google的
coding interview要的不是求职者写出完美无bug的程式,而是考验你是否能够把想法用
程式码的形式表达出来,并确保面试官能够理解,而面试官本身也要理解求职者的思路,
而非只求结果正确。这种面试的形式对两边来说都很有挑战性。
沟通上的话,如果没有限定讲英文的话就是随便,只要两造能够通就行,要说台语也可以
。这一轮面试中,虽然面试官也是台湾人,为了刷存在感我还是全程讲英文啦。
考题的部分,因为有签保密条款所以不方便透漏细节。第一题用排序法就可以简单的解出
来,很经典的leetcode问题。
面试官说好,那follow-up。我用两个priority queue解出来的,时间复杂度O(nlog(n))。
不知道有没有更好的解法。面试官说还不错,这样就行了。最后发问时间,聊了一下,面
试官简单的介绍了自己的职位,是Chrome OS部门的工程师。
# HR contact #2
Google meet、30 min、中文
然后过了大概一个月吧,上次那位上海小姐姐又来联络我,说我phone interview表现不
错,进入下一阶段onsite。这里会有四关:3*coding & 1*behavorial,并且尊重我的安
排:可以分四天做,也可以一天全部面完。大部分人是分两天来面。
有朋友面的是embedded track,只有三关tech/coding interview,没有behavorial,不
确定原因为何。
# Onsite interview #1 - coding
Google meet、45 min、中文
Onsite第一关,是一个Chrome OS部门的工程师,台湾人。
题目是给你一个graph,问你说拿掉其中一个node会有什么变化,那follow-up就是问你如
果multiple query的话要怎么改善时间复杂度。这种multiple query的follow-up几乎可以
用在每一种题型中,可以算是定番了。
这题比较特别的是,面试官只有画出graph,用来解释题义,并没有定义input datatype的
格式、还有整个程式码的架构,所以这个部份我要自己假设一个出来,这部分花了一点时
间。题目本身应该是easy-medium的难度而已,但我写出来的时间复杂度是O(n),不确定
是不是最佳解。但面试官似乎没有什么意见。
# Onsite interview #2 - behavioral
Google meet、45 min、中文
顾名思义就是问你各种情境题,让你回答这样。题库在网络上面都很多了,而且变化不大
,在此不多赘述。
我认为最需要注意的是,这里面试官期待的是你讲出工作中实际遇到的情境,而不是什么
惊天地泣鬼神的故事。例如问你说有没有遇过其他同事跟你意见不同的时候?你怎么处理
?你就讲说例如你要做一个专案,你认为一定要至少5个device才能达成性能需求,但你
同事认为只要3个就够,那你们就怎么样去乔这样,总之就是要讲这种无聊但实际的经验。
好加在面试官也是工程师,所以可以跟你进行一些技术性的讨论。
我一开始没有理解到面试官的需求,所以一直不自觉的把话题引导到我的人生观阿,待人
处事的态度之类的,然后就会被面试官打断,说讲你实际发生过的经历就好,不用扯到太
抽象的层面。他知道像这样的讨论会很枯燥,很难进行,但他必须要听到实际的故事细节
才能对面试者做评价,没办法,请我理解。
从视讯背景可以看的出来面试官也在WFH,所以我们彼此分享了一下家中工作室的布置,
我也介绍了一下自己现在的工作内容,对方说你做lithography喔,酷喔。
# Onsite interview #3 - coding
Google meet、45 min、英文
Onsite第二关,面试官是一个来自国外的大姊,目前在台北工作。
第一题很简单,就是给我一个array,问我满足某条件的subarray在哪里。follow-up不免
俗地问multiple query,做起来满简单的,没什么问题。
但接下来还有一个follow-up就是,如果我可以改掉array中某些element的值,那答案会
变怎样?这里我稍微打结了一下,跟面试官废话了一会,打转了一圈才勉强想出那个关键
字:sliding window,面试官说好,这时时间剩大概只剩10分钟,面试官叫我就写个大概
就好,不用写出bug free code也没关系,我就照办了。
感想是,第一题跟第二题都很简单,但是花了点时间在定义问题、确认边界条件、写出架
构和解释程式码的正确性,这也是为什么写到第三题时,已经剩不多时间了。在打程式比
赛的时候,完成时间只跟个人能力有关:你越强就写得越快;面试则并非如此。
面试官很亲切,有开镜头跟我视讯对话,全程也保持笑容,在我思考问题的时候也没有甚
么催促,最后也很详细地解答我的问题。最重要的是,问题的难度由浅入深,安排得很恰
当,不会一开始就搞不清楚题义而无法进行。虽然我的表现未臻完美,但对我而言是个非
常好的面试体验。
# Onsite interview #4 - coding
Google meet、45 min、英文
这次面试官是台湾人,但因应要求所以全程用英文讲。
第一题:一个array of int,在哪个位置会有最佳解?这里我很简单的用stack解。面试
官接着问我follow-up:如果有范围限制呢?我就把stack改成deque并且分析了两种资料
结构的实作差异、以及在操作上的时间复杂度。
到这里为止都还满顺利的,总共只用掉了20几分钟,算是超乎预期。面试官说不然我们再
来玩一题如何?我说好阿,来吧!然后面试官花了点时间找了下一题给我做。这一题有点
吓著了我:
总之就是一种扑克牌的规则:给你一组牌,要怎么打才会有最高的分数。后面有一个
follow-up就是如果可以抽换牌面的话要换哪几张。这题麻烦的地方是:在你loop到每一
张牌的时候,你没有办法去做一个greedy algo来求得整体的最佳解。由于时间的关系,面
试官叫我写出第一题的大概思路就好。
感想是加考的那一题真的有挑战性,尤其是那个follow-up应该有hard难度。如果没有面试
官正确的引导,很容易会浪费掉很多时间。还好不是一开始就考我这题,不然我的表现应
该会有点惨。
# HR contact #3
然后过了大概快一个月,HR寄信给我说onsite表现不错,但是最近人事重整,需要再等更
多的时间才能给结果,不知道是不是某种安慰信的概念。目前的进度就卡在这边。
有这样的结果,也算是对自己过往努力的一种肯定。反正我这边就是继续做好现在工作,
享受生活这样。几点心得分享:
* 我运气不错,没有被考到太刁钻问题。除了最后一关那题有hard之外,其他顶多medium
。无论是申请国外学校、面试找工作、搞定身分问题、还有往后数十年的职涯中,运气都
是最重要的。因此,一时的成败都算不上什么。意气风发的时候要心怀感激,更不能因此
嘲笑失落的人。
* 承上,刷题的时候,确保自己对medium等级的题型有把握度就好了,hard就不用太强求
。反倒是要加强自己沟通的能力:要能够定义问题和程式架构、能够解释自己的思路、而
且要一边写一边用英文表达。这在面试过程中非常重要,有时候甚至比有没有写出最佳解
更重要,但仅仅靠刷题是练不到的,必须要额外练习。
* 景气真的豪惨阿,之前明明每间公司都招了那么多人,然后薪水各个上看20万镁和300
万台票,然后现在风云变色,说不招就不招了。呼应第一点,果然运气还是最重要的呢。
以上跟大家分享,希望各位不嫌弃,能抛砖引玉就更好了,谢谢。