2022 求職心得
由於我 2021 年剛畢業時發懶不想當兵前先找工作,於是就拖延到 2022/02 當完兵後才開始找工作,不料這個舉動同時成為了我的危機也是轉機。
詳細找的公司與摘要可以參考 這篇。
BTW 敝司 (Meta) 最近重新開缺了,如果有看到有興趣的職缺,歡迎準備英文姓名、email、CV,可以找我 reference,另外我會希望能跟您約個 con-call 認識一下~ 🤗
背景
- 畢業於國立陽明交通大學資訊科學與工程研究所,研究所研究方向在於行動網路。另外大學時由於有資工系計中工作,擔任網路組組長,對傳統網路和故障排除也略知一二。
- GPA 並不高,大學部 3 出頭,研究所勉強超過 3.5。
- 大一到大三有與隊友參與 ACM-ICPC 的競賽,算是在這類題目上有所著墨。不過話說回來,已經三年沒碰東西也差不多歸零了。
- 2021 年七月研究所畢業,由於疫情緩招,在家蹲了約兩個月,大概九月才入伍,四個月兵後,二月退伍。
- 退伍後主要花時間在刷題,另由於面試 SRE 相關職缺,有對作業系統相關知識做一些複習。
履歷
見 calee_cv.pdf,感謝朋友幫忙修改。對不同公司會加以調整,基本做成 1 page。 我是使用 sb2nov/resume 的 latex 模板。
- 如果可以,請對數字上做琢磨,與其籠統地表示你建置了什麼服務,更應該表示這個服務產生的影響範圍。
- 有些公司會把履歷印出來,所以如果真的很想讓主管知道的連結不要只用超連結而是把完整網址列出。
- 嘗試使用 STAR (situation, task, action, result) 方式撰寫,避免使用 we 而是使用 I。
- GPA 好了話放上 GPA,如果有表現突出的課程可以寫 selected course
- 基本上寫在履歷上的內容就是在暗示 interviewer 問你其中的細節,所以放上自己熟的而不是所有有碰過的專案。
- 課外專案沒有也沒關係,放上你做過的課程專案,所以請偶爾選一些有整學期專案的課。
- Skill 上可以盡可能地多寫關鍵字,兩個原因:1. 有些 career 系統用關鍵字 filter,沒寫就會沒有 match。2. recruiter 有可能不一定看得懂,但你多寫有機會讓他們覺得你有料讓你至少走到下個階段 (interview)。
- 另外蠻有趣的是我沒有寫 cover letter,其實並不是我有自信,反而是年少無知看到 optional 覺得不用填就還真的沒去請教前輩要不要寫了 Orz
尋找職缺
了解自己
- 對未來想走的 career path 的想像
- 可出國 vs 不可出國
- 對領域有興趣 vs 想快退休
- 了解對不同種類壓力的耐受程度
- 安穩的工作 vs 想裁就裁員的工作
- 希望工作自主性高 vs 希望更多時候是可以有人帶
- 產品的 life cycle
- work life balance / 加班 / 工時
- 希望假多一點 vs 假期可以都換成工資
- 對薪資的追求
- 希望年資到就可以進到對應薪資 vs 需要自己爭取,薪資成長與個人能力相關
- 新創 vs 中小公司 vs 大公司
- 股票 / 本薪 / 分紅 / 績效獎金 / 簽約金
看 Job Description
- JD 是各個職缺在開出來時描述這個職缺需要的技能以及工作上會處理的事務
- 通常會列出 Basic Requirements / Prefered Requirements / About the jobs,並不是需要全部都會才能投,通常你只要會其中幾項就有機會申請
- 常見的查詢方式可以在 LinkedIn 或 104 上看
- 又或者直接搜尋 XXX 公司 + careers,比較大的公司都會有自己的 careers site 羅列需要的職缺,例如: careers.google.com / www.metacareers.com / www.amazon.jobs…
- 其實蠻建議學生可以提早開始研究 JD,一來可以開始形塑對 career path 的想像,二來也可以針對想進入的領域鑽研,甚至著手學習 Requirements 要求的相關技能,我也是在找工作看 JD 時才慢慢形塑出我想像中想要的 career path
了解公司
- 直接在網路上尋找公司相關訊息,了解這家公司的產品 / 獲利方式 / 財報
- 直接問在公司工作的朋友
- 從 LinkedIn 上在公司內工作並與你有所連結 (ex. 校友) 寄信詢問
- Meta 甚至還有專門 Meta Connection 讓你直接與公司員工交流
尋找,建立人脈 & Reference
管道
- 找以前認識的朋友/同學
- 在自己的 Facebook / IG / Twitter / LinkedIn 發文請認識的朋友或朋友的朋友或朋友的朋友的朋友…幫忙介紹
- 多參加各種 conference / meetup 認識新朋友,在台灣尤其推 COSCUP / HITCON 兩個我以前會去的大拜拜,PyCon, RubyCon, MobiCon 沒去過不熟,不過應該都很不錯
- 在 LinkedIn 尋找 target 公司的校友/台灣人/類似經驗的人/相關部門
- 在 Facebook 上找在地社團群組 (如果是投國外公司) 直接 po 文
- 一畝三分地找 (我沒做過不確定好不好)
- 找有部落格,寄信詢問版主有沒有機會內推他的公司
- 平常就與 Head hunter keep in touch,有 HH 來信/LinkedIn 私訊時都多少回個現在沒有積極在找,但是希望 keep in touch in the future
建議內容
- 有禮貌 (無庸置疑)
- 不要害怕詢問,通常大家其實都跟你一樣很願意做這個舉手之勞的幫忙
- 保持開放的態度,有問到是賺到,沒問到也沒差
- 準備你的(中英文)姓名,聯絡信箱,CV,第三人稱的自我介紹 (有些公司內推要寫你認識的這個人是怎麼樣的人),興趣跟擅長的領域,想要投遞的職缺,並且可能的話 con-call 一個口頭的自我介紹
- 我個人首推用 email,因為 LinkedIn 不一定每個人都天天看。也可以鼓起勇氣用 messager 不過如果有前兩個先用
- 如果你好奇為什麼前輩們會幫陌生人,我自己覺得有幾個原因 1. 認識新朋友,尤其是在國外工作交友圈有時候會漸漸有點侷限,偶爾能認識新人也是蠻開心的 2. 內推有內推獎金,何樂不為 3. 增加影響力,尤其是越往資深走,個人的技術能力會邊際效益遞減,而對團隊的影響力則是需要增加。如果你有進我們公司,也許未來我有機會請你的 team 幫忙比較好說話 4. 對人脈的投資,同樣前輩們也需要建立人脈,就像 HH 一樣,有人主動找我當然樂得輕鬆,如果我未來要跳槽也許就換我找你 5. 個人成就感 6. 飲水思源的傳承,過去前輩幫我,現在行有餘力我也可以幫後進
評估薪資
- 跟認識的朋友打聽
- 大概了解目前股價
- 上 levels.fyi / glassdoor / 一畝三分地 查詢
- 可能有畢業生會想問薪水應該在找工作站多大比例,當然每個人可能不同,但根據 ptt 前輩們的心得,應該算重要但不要放在第一順位
- 我自己會說如果你不排斥的公司夠多,底線可以先放在整包 100,再根據面試的心得 (自己在人才市場的狀況) 做調整,所以絕對不要只面試一間公司
- 薪資物價比,我自己看下來覺得其實除了美國可以給 Global Pay (XD) 之外,大部分不管歐美還是台日、新加坡都還是給 local pay,更甚至如果想存錢,難保說待在台灣其實更好存錢,去了解房租物價稅收會比只看到稅前薪水的數字還來的有意義,另外一個評估方法可以用國民平均收入與之倍數來評估
外商面試流程
首先當然每家公司會不太一樣,不同的職位對面試的需求也不同,不過對工程師職缺應該多還是大同小異分為 Online Assessment (OA)、Phone Interview 與 (Virtual) Onsite Interview,名稱可能會有所不同但階段還是類似。
履歷: 這個階段最主要要讓你的履歷通過 HR 之手,讓 HR 覺得你是直得進到面試流程的人,有時候這個階段反而會是面試裡最關鍵的部分,尤其是對準備很充分的人,所以要如何撰寫一份亮眼的履歷其實還蠻重要的 (尤其對不太重視 promote 自己的華人工程師)。
Online Assessment: 線上考試,會給你一些題組,可能是一些選擇題,也可能是幾個 coding 題,亦或是混合,請你自己規劃時間,在自己的閒暇之餘開題於規定的時間內撰寫,通常也不會抓作弊,有些公司可能會要螢幕與人臉錄影。這個階段很常是做最基本 coding / 背景知識的檢查,只用來刷掉真的不是工程背景的人,所以題目通常不會太難。
Phone Interview: 電話面試,但我還真不知道有沒有公司現在還真的用電話,應該都是 con-call 了吧 XD。常見的是一題 coding interview,題目難度介於 OA 與 Onsite。當然還是因公司而異,也有遇到這關就是面系統/背景知識,亦或者混合。
Onsite Interview: 雖然在海外求職或疫情期間的我們,這個階段與 Phone Interview 的形式沒有太大的差別,但聽說在疫情前的美國學生是可以在這個階段拿到公司發的機票旅館,直接飛到當地參加面試並瞭解公司 (感覺好爽 XD)。這個階段也許對小公司來說只有一輪,不過對 Big tech. 應該都超過一輪面試,以 M/G 來說是四到六輪 (畢業生 4 場,社招 6 場)。在這個階段會因為你的職缺混合不同形式的面試,通常至少有 Coding Interview 與 Behavioral Interview,對於更高階的工程師可能還會參入 System Design Interview,或是跟你要進入的 team 全員磨合面試。走到這個階段時,並不會因為其中一兩次的狀態不好就停止面試,而是會讓你全部走完再來透過 interviewer 的 feedback 做綜合評估,因此聽說有一點表現不好的容錯範圍。
Hiring Committee: 這個階段可能通常跟你沒有關係了,公司會透過 Onsite Interview 面試官寫的 feedback 去評估要不要錄用你。直得一提的是當你表現沒那麼突出,在比較 baseline 的狀態下,recruiter 可能會再跟你聯絡提供一些有利資料,最常見的就是成績單與內推信,所以雖說成績可能不是重點,但在這個時候確實還是有可能是讓你能跨過檻的關鍵。
準備方法
Coding interview
我的準備方法
- 剛退伍時透過 Study Plan 把手感練回來,一開始速度真的很慢,每天就一兩題
- 後來知道有 daily challenge 後,也會開始每天寫 daily
- 開始配合 weekily contest 來了解自己在 leetcode 大概狀態
- 後來訂閱 premium 後會寫 Interview -> Online Assessment,對我來說 1. 強迫我坐下來兩個小時想三題,也因此開始有碰到 hard (不然以前都直接跳過 hard 2.OA 寫完會出報告,大概評估你對不同主題的熟悉程度,以及你目前對面試 FAANG 還有多少程度差別
- 參考網路文章後,透過 neetcode.io 這個網站,把 Blind 75 沒寫的補完,寫完 B75 後有開始碰 NeetCode 150,不過截至目前還沒全部寫完。
- 每題解完後會去看 solution 看看有沒有其他解法,另外也會點進排名看速度最快的人怎麼寫,我比較不會看 discussion,雖然可能可以看到很棒的解法或解釋,但我覺得時間 CP 值偏低,官方 Solution 就夠了,除非沒有才會去看 most voted discussion
- 每周固定與朋友 Mock Interview,大該一周四次
- 後來大概一天可以解到六到八題,如果 easy 多一點也許有機會十題
建議準備方法
- 直接在 LeetCode 網頁上寫題目,並且不要開 Auto completion 來練習面試時沒有環境的狀況
- 直接寫 Blind 75,每題設定時間在 20-30 分鐘內,寫不出來直接看解答,並透過 favorite list 記錄起來,等刷完一輪再回來重寫沒成功在時間內解出來的,如果還是無法繼續勾起來下次再回來直到都能在時限內解出來
- 理由: 剛開始刷題時很多時候是連需要的資料結構都沒有夠熟,在怎麼花時間想也很難想出來,直接看解答了解資料結構後刷完一輪再回來檢視有沒有把這個結構學起來比較有效率
- 跟 daily,保持刷提的手感,並且不像是 B75 一開始大概就知道要用哪種資料結構
- 每周跟 weekily contest,用來大概了解自己在什麼程度,也可以逼你在兩個小時內要坐到寫出最後一題 (通常是比較水的 hard)
- 如果有買 premium 了話偶爾可以寫 Interview -> Online Assessment,可以透過報告多少估算自己目前位置
- 面試前一兩個禮拜針對要面試的公司刷最近常考題
- Mock Interview,這很重要,至少要練到流程熟悉 (流程可以參考 這篇),最好找同時要一起轉職 / 找工作的戰友互相練習,偶爾跟不同人練可以聽取不同的意見,這邊真的要特別特別感謝我的朋友與貴人,願意在工作之餘,還空出時間陪我一周四天的 Mock Interview。
- 另外附上 我的 LeetCode 帳號,在面試 Google 時大概 300 題上下,但其實很多人沒刷多少題,或刷比我多的大有人在,所以這僅僅只是參考就好
Premium 不一定要買,被鎖的 Solution 可以看 Discussion 或上網找,公司常考題一樣可以看 Discussion 或上網抓,不過如果要密集刷題,panding 煩人程度 + Solution 的時間 CP 值 + OA 的統計數據我最終還是有買
LeetCode Premium 的 Interview -> Assessment 報告
Behavioral interview
- Behavioral interview 並非技術性面試,而是會詢問你在團隊合作、工作文化、多元思想等問題。常見的題目可能是如何處理衝突、如何處理時間管理、你的優缺點、過去的經驗等,可以使用 STAR (situation, task, action, result) 的技巧回答
- Behavioral interview 反而是我比較不知道怎麼準備的部分,我主要是使用 Behavior Question 題目的蒐集 這份請朋友問我,在問答的過程中去發想每個情境可以使用的經驗,並且我朋友也會提供給我一些 feedback
- 比較特別的是 Amazon,通常其他公司 Behavioral 只會有一場,不過 Amazon 會有四場的 loop interview,並且會強調他希望的 Amazon 14 leadership principles,四場每場各 1hr,一樣會希望是透過 STAR 的形式回答
System interview / OS interview
- 由於我蠻多工作是面 SRE 相關的職缺,所以會被問到類似的問題,如果是一般 SWE 應該不會有
- Meta 對 New Grade 的問題主要偏向 OS 的問題,像是 booting process, virtual memory, IO, …,另外可能會問實際上那些指令 / 操做對應到這些概念上
- 有些時候會問你過去對系統的經驗,或是 troubleshooting 的能力
System Design interview
- System Design Interview 在 new grade 或 entry level 的職缺比較不太會被問到
- 如果是標準的 system design interview 我自己是沒有很好的準備,所以也因此在 Booking 的面試中箭落馬,不過如果要我重新準備,我會推薦看 The System Design Primer,並且惡補 YouTube 上別人分享的 system design interview 問與與回答
時間規劃
時間規劃上要掌握兩個原則,1. 盡可能同時拿到 offer 2. 不想去的先面試,當作面試練習。這兩個原則有時是蠻互相矛盾的,所以還是需要自己取捨。
首先第二點應該很好理解,我自己的經驗也確實是越多次正式面試,後面的面試會越不緊張,Mock Interview 做再多次可能都沒有這樣的效果。再來就是要同時拿到 offer,其實也不難理解是為了 compete offer,首先通常越大的公司需要的 interview 流程越久,而越小的公司可能就越快,當然還是需要事前打聽一下比較好,了解大概的面試時間長度後,再根據其去調整丟履歷的時間,像是面完 Google 一面時丟可以兩個禮拜跑完的公司,當然其中還要考慮投出履歷到 recruiter 聯絡你可能還多少會有一些時間差,這部分可能就需要看你有沒有內推/打聽最近這家公司大概速度多快等。
另外再差不多都面完等 offer 的時候,在一到兩個禮拜間結果會出來,如果超過兩個禮拜 recruiter 還沒聯絡你請務必寫信去確認,很高機會是他可能忘記了,當然也可能公司內部有其他異動,但提醒一下絕不會吃虧,而且也不要擔心會被 recruiter 嫌煩,recruiter 大部分的 performance 就是透過收到優秀的人才 (沒錯就是你) 來的。
另外如果已經有想去的公司開獎了,也可以透過 email 來詢問結果是否出來 (~催 recruiter~),不過最好先想清楚這個時間是不是你想要開獎的時間,有時候催完開獎後,又發現想等另外一個還沒開獎的會比較尷尬。通常你寄信予 recruiter 表示手上已經有不錯的 offer,希望可以加快速度,recruiter 都會願意幫你快一點跟主管談。
最後是拖,當你拿到口頭 accept 後,recruiter 通常會要求你在一定的時間內回他,標準是一個禮拜,比較雞掰的有三天,反正絕對不要當下回覆他,可以說你需要跟家人朋友討論,最少拖過一個假日,說你要跟朋友討論可是你的好朋友假日才有空。通常因為你更想去的公司還沒開獎或有辦法幫你做更好 compete 的還沒出來,這時候可以馬上寄信給還沒出來的公司表示已經有 offer 如果可以希望他們快一點。盡可能的手上拿到愈多的 offer。
談薪
新鮮人相對會不好談薪水,但在怎麼難都還是建議一定要問,談出好的薪水不但可以讓接下來的工作可以拿比較好的薪水,同時也是你在跳到下一家公司時,談薪水的底氣。然而很多同學可能會怕談薪水是否顯示自己貪心而無法拿到 offer,對於這點有太多前輩的經驗告訴我們不會了,反而需要比較擔心的是無法談到好的 offer。
首先我們要了解談薪水最主要是跟 recruiter 談而非直接跟主管談,然而你的 offer 是由面試你的人 and/or 主管給的,所以其實 offer 沒那麼容易被 recruiter 拿掉,另外聽說在部分公司 recruiter 的 performance 就是招攬人才的數量,其次才是可以用比較 fair 的薪水招到人,因此就算你喊太高,最多就是跟你表明無法給,同時如果你無法接受待遇,相信 recruiter 還是會盡量幫你爭取。
流程上 recruiter 會跟你確認期望待遇,再去跟主管與 HR 部門相互協商出最終的待遇。想當然爾公司會希望出價(相對)低而員工會希望高,通常比起跟公司喊高,跟面試者喊低會比較簡單,但若面試者不能接受,recruiter 應該還是會向內部提出詢問。舉我自己的例子,其中一間公司一開始就有表明畢業生新人不能 compete,但由於一些誤會,讓 recruiter 以為我還是需要 compete 不然無法接受,當時 recruiter 還是有詢問我的預期以及表示會向內部討論,不過後來我沒有把握住機會就是另一個悲傷的故事了。
有些公司制度上就是畢業生無法談,有規定好的 range,這時候還是可以透過問問看是否有 sign on bonus (簽約金) 來提高價碼。舉個例子,當初我朋友就有建議我可以跟 recruiter 表示如果給 sign on bonus 可以馬上答應並拒絕掉其他家公司。
至於要怎麼談出好的 offer,其實目前我也不是很了解,不過可以確定的是談薪水就是透過誠實但資訊不對等來談,recruiter 有自己公司內部的狀況與了解追蹤市場行情的資訊,而你也有了解自己狀況與目前手上 offer 狀況。至於新人有什麼優勢呢? 最簡單的便是前面講的,一定要投多家公司,透過 compete offer 的狀態來談出好的薪水。以我的例子來說,背景比我漂亮的朋友當初由於沒有 compete,所以只拿到公司的 base,但有 compete 的我是拿到 1.2 倍,而且後來還有再往上談的機會。
何時才算準備好
我會認為永遠沒有準備好的一天,看過各種 ACM / Conference 大神就都會覺得自己還有所不足,更何況我覺得台灣人可能因為教育的緣故,多少容易有 冒牌者症候群。但我們能做的就是提高自己的機率,而最簡單的做法就是不要害怕,這次沒上下次繼續投。其實就算沒有上,公司也不會像成績單有紀錄黑點,六個月後再投一次又是重來的狀況,請不要為此而擔心。所以我可能會建議,在想要投這些科技公司時,就先在日曆上寫好哪時候投,時間到了不管準備的怎麼樣都勇敢的上吧,因為我相信屆時你還是會覺得還沒準備好,可是永遠拖下去你就永遠沒有機會啊。
如果真要說要怎麼衡量,我會認為把 Blind 75 做完 (每題都在 30 內解完) 基本上代表你的基礎功已經夠了,需要會的資料結構演算法都 ok 了,剩下的就是遇到題目時,可以想到適用哪一種資料結構,因此這時候我認為已經可以投了,並同時開始刷公司題增加對這個公司常考的題目的熟悉。
另外如果有在跟 LeetCode 的 weekly contest,每次比賽 ranking 低於 2000 應該也可以是一個標準,有或是有訂閱 Premium 可以透過 Interview -> Assessment 來自我衡量,不過這些都只是參考用。
我個人的經驗是在 Google Onsite 三場面試中,有兩場是 Medium 而另一場是 hard,我認為身為平常人,能做的就是把 Medium 把握好,hard 就只能隨緣了。另外在 cracking the coding interview 裡面也有講到,其實遇到 hard 不一定運氣比較差,因為你不會寫,別人也不會寫,如果可以表現出你的推導能力,讓面試官認為你是有潛力或多給你一些時間就能解出來,也許你就已經在候選人中脫穎而出了。
最後試圖讓大家放心的是,Onsite Interview 的三場 coding interview 據說可以有一場的失手,算是面試時給的一個容錯,所以不要因為有一場沒有講好就影響到接下來的面試窩。
Reference
- Cracking the Coding Interview
- 美國科技公司如何設計招聘流程
- levels.fyi
- glassdoor
- 一亩三分地
- LeetCode 付費版在坑錢? Is LeetCode Premium Worth It in 2021?
- 軟體工程師的修煉與成長
- 星箭廣播 163 集——工程師怎麼在團隊中打造「技術願景」?也談非管理職的職涯路徑選擇(ft. vgod)
- 面試問答準備心得之考前猜題
- Behavior Question 題目的蒐集
- Netflix at Velocity 2015: Linux Performance Tools
- The System Design Primer
- System design interview 的流程架構是什麼? 應該要怎麼準備和進行?
- 如何準備行為面試|BQ Interview Prep
- 如何談薪水Like A Pro
- 2022 New Grad 後疫情時代找工作
- Shopee, Amazon Ring, SiFive, Foodpanda 面試經驗
- 面試人員心得分享
- 普通人的海外求職指南
- 軟體職缺準備心得
- 我們怎麼看待自己|冒牌者症候群 6-1
- Tips for negotiating your salary (from an ex-FAANG recruiter)