去年面試google時recruiter問要走一般SWE流程還是embedded
當下覺得很難選,上網找又很少embedded SWE面試資訊
事後想想不如自己寫一個吧
板橋辦公室新啟用應該也有些embedded SWE缺吧,面試進來可以把座位填滿XD
主要關注在embedded SWE面起來有什麼差,以及準備過程
不會提到問了什麼題目
======== 背景 ========
一線IC設計廠5年經驗,然後轉戰新創
之前面過兩次google
第一次leetcode刷了大概40題,面到onsite被HC reject
第二次刷了大概300題,onsite不夠好沒送HC
(HC = hiring committee 一個會議決定這個人是否通過,詳情不是很清楚)
======== recruiter 接觸 ========
recruiter直接透過email來詢問,大概是因為之前有面過吧
我回覆有點忙幾個月之後再說,就陸續信件往返了幾個月
想說來面看看,recruiter也有大概說明面試流程
我當時的理解是這樣:
phone interview => (virtual) onsite => team match => 談判跟錄取
事後回來看也是這樣
======== phone interview 準備 ========
recruiter 給的資訊來看這邊general SWE跟embedded SWE沒差
另外先前不知道看哪篇文章說刷題分門別類刷比較有效率
這次嘗試此方法來熟悉一些類別,的確很有效,尤其是找回記憶特別有效
熟悉的方法:
針對要熟悉的類別 (leetcode有幫題目分門別類)
先刷該分類的easy,刷了幾題確定基礎能寫出來
再去刷mid,刷到10~15min能AC就差不多了
分類就array, tree, linklist, DP之類的,常見的資料結構跟演算法都刷一刷
這邊弄完大概一百出頭題
======== phone interview ========
題目大概在leetcode easy~mid之間,follow up有到hard我只有口述想法
面起來感覺的確跟embedded無關
另外題目完全沒看過但很有趣
======== onsite interview 準備 ========
過了幾天recruiter說通過了並轉介給另一個recruiter
先聊了一下並有問說我想要走general SWE流程還是embedded SWE流程
當時得到的資訊是說走 embedded SWE會有一些關是domain interview
面完通過之後team match主要會跟需要embedded SWE的主管談
(這邊印象模糊,不太確定是不是這個時候得到的資訊)
最後可以拿到offer的話job title也會是SWE
當時覺得很難選(所以有了這篇文章)
我選了 embedded SWE 流程,然後recruiter信件給了我一些資料跟說明
有提到面試包含domain interview / general SWE interview
/ system design interview / soft skill interview(?)
資料裡面有提到embedded domain大概要準備哪些知識
列的超多,但大概七八成就是OS課本裡面那些章節
我準備這些知識的步驟是這樣
1. 先上網查相關知識有個概念
最好是能找到一些大學OS網站的投影片看一看概念比較全
2. 想一下它們跟之前工作做過的project有什麼關聯
或是實際上在linux寫kernel driver or user space program怎麼用這些知識
3. 上網搜尋Linux怎麼實作這些知識(或直接看code)
或是各家硬體怎麼運用這些知識
例如我可能想知道Linux怎排程的,或是CPU cache有什麼實作技巧/各層多大之類
4. 試想如果我來面試別人,針對這些知識怎麼問問題
列出這些問題的中英文跟我擬好的回答
(因為我有排到非台灣site的面試官所以英文變更重要)
當時是弄了很久,擬了大概三四十題吧(有些抄網路上的),最後被問得不多但還是有用
我不確定有沒有更好的準備方法
刷題部分我是分類刷一刷後隨機刷
有看 cracking the code interview 我覺得幫助算大
裡面的trick都看過,但就當整理複習
快到面試的時候大概想了一下如果我是面試官我針對embedded SWE會問啥
針對這種問題去刷 (array / bitwise之類的)
面試前看了一下大概三百出頭題 (包含phone interview前刷的)
======== virtual onsite interview ========
因為不能講題目,列點列出一些經驗
* domain interview 寫白板題的時間還是佔不少
寫完對面有問我一些,跟題目有關的 OS 或 embedded 相關問題
然後題目的包裝我感覺都比較像是日常工作會遇到的問題
(幫總統規劃飛去各州演講的最短路徑我感覺就不像是日常工作會遇到的問題XD)
有這樣的題目包裝,蠻容易延伸問 embedded 相關知識
* general SWE interview 那關,對方應該還是知道你是面embedded SWE
我被問到的題目我感覺還是有embedded相關,但不知道是不是general case
* system design 也是 embedded 相關,一樣要花時間寫code
* coding難度(體感),一半的關卡有問到leetcode hard,至少都有問到mid
沒有一題是網路上有看過的
* 有一關軟實力,細節有點忘了,就問一些日常跟同事工作相處的經驗
======== misc ========
* team match 就是了解一下 team 也讓主管了解你
可以趁機問一下部門技術線或風氣之類的
之後如果你要去主管也要你,就再往下走
* 在任何一個stage收到recruiter的信約時間說要short talk / small chat
我認為都沒有正面或負面的意思
有收到reject消息過,也有收到pass往下一關消息過
電話接了才知道
* 整個面完我感覺embedded SWE需要更多一點 embedded or OS 相關知識
但沒有被問到很瘋狂的演算法問題
整體面試差異比想像中小,沒有因為是面embedded就很少code很多知識問答
(只能說我的經驗是這樣,不確定是不是普遍現象)
再讓我選一次我還是選擇走embedded SWE流程
因為跟之前工作有強相關準備起來還是比較有底
* 不用全部都面的超好也有機會上
我virtual onsite有幾關事後知道自己有些地方講錯,還好還是有過HC
* virtual onsite都遠端,我是分幾天面,也有排到非上班時間面
(我排到有幾場是一大早,所以就有猜測到是不同時區面了)
======== 刷題心得 ========
刷題我是leetcode另外開一個session刷,最後寫了三百出頭題
刷的時候卡十分鐘就看討論,看完不寫,書籤起來,隔天寫
寫的出來也一定看討論,看有沒有更好寫法,有更好寫法就比照前面步驟隔天寫
有時候寫完會發現,上次準備面試的自己,也有寫過這題
回去看以前自己的寫法,常常完全看不懂
才有感覺程式的可讀性很重要,前一次大概是太注意刷很多題沒管coding style
這樣是不行的會炸開
但有些hard看完解法之後覺得解法太專一只能用在這題,我就會擺著不管他
有可能你之後真的一輩子沒看過這種解法了,就自然忘記吧
但也有可能又在其他hard看到這種思路
看過兩三次有點印象的話,那我還是會花時間吸收(仔細看懂+寫個兩題)
也因此學了一些思路
刷到面試前我hard大概可以解掉六成
另外刷到一半有體悟,刷題大概要鍛鍊兩個部分
其一是寫程式速度跟穩定性,各種基礎工具寫的越熟速度越穩
例如某題你可能一看就知道是array binary search
寫的不熟會卡一些奇怪的地方,right index要指哪裡,要不要加一之類的
寫的熟你可以很快寫出來,甚至直接呼API看面試官有沒有叫你要自己實作
另個例子是寫tree traversal就會想說recursion截止條件是要怎樣
是要傳進來node是null截止還是node的child是null就不往下繼續呼叫
卡一些奇怪的地方,多想幾分鐘,就比較吃虧
其二則是用什麼資料結構跟演算法解題,也是一般比較會被注重的地方
二很重要,整關炸開通常是二沒想到
但是一也很重要,一做得好,暖身題或題組第一題可以快速解決
等於是幫後面的難題爭取思考時間,也有更多餘力注意corner case之類的細節
另外有空的話找人幫mock interview會有很大幫助
習慣時間壓力是一個點,有人幫你看,你的解釋是否能容易被聽懂,也是重要
要不然就多面幾家練習也行(?)
======== 總結 / take away ========
* 體感來說,選embedded SWE面試,會被問一些 OS / embedded 相關問題
白板題比較像日常工作會碰到的問題,然後借助題目延伸問相關知識
跟general SWE 面試沒有差到太多
* 面embedded SWE 進來就是掛SWE
* google 還在招人
祝大家2021都能快樂工作囉