上一篇分享了我在 COVID-19 期間拿到 Google 、FB、Microsoft Offer 的經驗。 這篇則會談到我如何準備面試和薪資談判。
面試 — Leetcode
我個人建議是千萬不要盲目的從第一題開始寫,因為每一題並不等價。有些題目是經典中的經典,有些則是太偏頗。以下是我的寫題目經驗分享:
1. https://leetcode.com/list/xoqag3yj/ 這個是在 Blind 這個論壇有個 FB 工程師整理出來的。很多人非常推,我個人也非常推。 這個清單集合大部分的經典題目。可以把它想成是基礎題目,很多其他題目都是由這些題 目衍伸出去的。
2. https://www.programcreek.com/2013/08/leetcode-problem-classification/ 這個就有點像是上面的擴充板,我個人也非常喜歡。這個清單也會依照不同的主題分類讓 你想要一次大量練習某個主題的經典題時很方便。我會建議裡面的 Dynamic Programming 可以先跳過。
3. 上面兩個假如你都寫完的話(其實上面兩個寫完也很夠了)。我個人會建議可以花錢買 一下 Leetcode Premium 然後開始寫 Amazon、 FB、 Uber、 Microsoft 的題目。Google 則是建議不要寫,有跟 Amazon、 FB、 Uber、 Microsoft 重複就沒差。Google 的題目很多太變態,要用一些很奇特的解法,但是真的面試時其實也不是很常遇到。
刷題 Tips | 規律練習
千萬千萬不要背題目,你要背的是後面的演算法和思考模式。 背題目無法長久的。我平常沒在找工作時,一個星期可能也會很悠閒寫個兩三題,就是看看一些解法想一下,主要是隨時保持一定的手感,以防跳槽時不會感覺從零開始。
這次準備在職跳槽的作息如以下:
週間:
上班前花一小時寫個一兩題
9:00 ~ 5:30 上班
6:00 ~ 10:00 專心準備面試
10:00 ~ 11:00 休息看 YouTube /聽音樂 /跟寵物玩 (週五是一下班就休息)
週末:
10:00 ~ 18:00 不間斷的準備面試
18:00 之後就休息
這樣子的日子我過了大約三個月吧。期間真的很像是在準備聯考,但我知道我不是天才,所以我只能用時間和更認真的態度去準備。
我有一個像下面的記錄表,記錄著我寫過什麼題目。此表的用途是讓自己更了解這個題目我寫過幾次,該題是不是比較弱的地方。還有寫題目時,我習慣今天寫題目時看一下昨天的題目,想一下如何解。週日看一下整個星期的題目,每個月最後一天看一下該月最不熟的題目。題目都會被記錄在表上,所以你也可以馬上知道自己該題目的熟悉程度。
Photo Credit: Bill Cheng
面試 — System Design
1. Grokking the System Design Interview 這個是一個付費的資源。沒有很貴我也覺得很值得。主要就是把幾個比較經典的題目拿出 來討論,但是千萬不要只讀這個,因為他探討的非常表面,你需要更深入去研究每個一個 系統,不然面試時很容易被看破。
2. https://github.com/donnemartin/system-design-primer 這個也是一個很棒的資源,也是把一些經典的題目拿出來討論,比上面更深入,所以會建 議搭配上面一起用效果會很好。
3. Conference Talks 這些演講我真的受益良多,都是各大公司經驗談。看這些演講時,細節就不用真的去專研 ,主要是了解他背後的架構和哲學。我挑的這些都是這些公司早期如何應付大流量的 Refactor 經驗談。這些都是面試很愛討論的
Instagram: https://youtu.be/hnpzNAPiC0E
Slack: https://youtu.be/WE9c9AZe-DY
Reddit: https://youtu.be/nUcO7n4hek4
Twitter: https://youtu.be/WEgCjwyXvwc
Dropbox: https://youtu.be/PE4gwstWhmc
Zuck 的 Memcache 演講: https://youtu.be/UH7wkvcf0ys
4. Classic Papers 有空加減讀
1. The Google File System 2. Dynamo: Amazon’s Highly Available Key-value Store 3. Bigtable: A Distributed Storage System for Structured Data 4. The Chubby lock service for loosely-coupled distributed systems 5. Scaling Distributed machine Learning with the Parameter Server 6. Spanner: Google’s Globally-Distributed Database
5. DDIA 聖經(Designing Data-Intensive Application)
不要直接拿來啃,會非常崩潰。請把他當工具書,遇到比較不了解的系統再去翻這本。
我本身就有 SRE 的經驗,公司內部的系統大約有個概念,所以準備起來也比較上手。L4(有經驗但還未到資深工程師)的 System Design 的大架構其實就是 Front End-> Load Balancer -> Internal Proxy -> Middleware -> Cache -> Storage/Database/CDN 等等。中間變化很多,細節也很多,所以就看個人想要鑽研到什麼程度,但大架構一定要理解,這樣才比較好討論。
個人建議一定要找一個比較了解系統的人幫你 mock interview 和實際把圖畫出來,不然真正面試時會非常卡。
面試 — Don’t hate the player, hate the game.
現在很多人非常看不起刷題這件事情,覺得進這些公司的都是靠背題等等的。其實你站在公司角度思考,這種刷題文化有以下好處:
1. 公司有一定的衡量尺又不會有歧視問題
2. 找到 ACMer 大神的機會很高
有人會說會打競賽的人和真的寫業界的東西差這麼多。這邊我就要跟你說這些人是天才,業界那些東西對他們來說算什麼。我遇到的 ACMer 都是一堆神人,公司內部的系統都他們架起來,寫出來的 Code 也非常漂亮。
這樣子篩選出來工程師可能真的會有漏網之魚,但是公司寧願錯放 100 個人也不要找到一個地雷。假如有人真的超認真把題目全部寫完也背起來,其實這種人對公司而言也算正面。因為收他進來公司,他會很認真把每一件事情做好。
我本人也不是很喜歡現行的面試方法,但是美國軟體大公司奉行這套標準,我們無法改,想要進去就要照他們的遊戲規則。他們覺得這是最好的方法,我們只能配合玩。
談薪水
談薪水文章很多了,所以下面我就講一下個人薪資談判的準備和實戰經驗。
薪資資訊網站
1. Levels.fyi 就是一個匿名的薪水申報網站。美國軟體大公司的整包薪水和職等在上面都寫得很清楚。
2. Blind 是一個匿名的論壇。上面會有各式各樣的方向文章,分享內部八卦、分享薪資、分 享如何準備面試。但因為匿名所以裡面的文化有點太金錢主義,所以不要盡信每個東西。
3. 一畝三分地 就大家比較熟的中國論壇
4. H1B Salary Database 可以看到每個公司幫 H1B 的員工申報的薪水。請注意這裡的薪水是只列底薪。所以想要談底薪的話,這個網站非常有幫助。
了解自己的錄取職等
每個公司都有自己的薪水級距,知道自己的職等的級距再談會容易許多(Levels.fyi 上面寫得很清楚)
Google L3, FB E3, MS 59 ~ 60:大多是新人或是小於兩三年經驗的
Google L4, FB E4, MS 61 ~ 62:這個區間是給已經有幾年經驗但還未到資深
Google L5, FB E5, MS 63 ~ 64:Senior Engineer(再更上面就是另一個境界了)
談薪水注意事項
1. 千萬不要先開價, 這是定錨效應。 談判的藝術就在這裡,你永遠不知道公司認為你的價值在哪裏。假如你今天開了一個低於行情價的數字,公司肯定不會給你更高的。
2. 談薪水在美國是非常正常的 ,只要你不是獅子大開口(例如行情價約是 100k 年薪,你給他開個 200k 這樣。 ),什麼都可以談的,也不會你談就把你 Offer 撤掉。公司都花了這麼多時間和金錢在面試你,肯定不想就這樣放棄。
3. 想盡辦法要到 email 上的數字。 很多公司都要你有證據才願意 Compete。
4. 最後一步——攤牌。 假如發現已經談不上去,最後一張牌就是直接跟 Recruiter 說:只要給我 XXX 薪水,我現在馬上簽。Recruiter 聽到這句的時候都會想辦法幫你搞到那個數字,因為代表你已經攤牌了,沒有什麼好談的了。
薪資談判實戰經驗分享
我 Offer 順序是這樣子:Facebook -> Google -> Microsoft
起初 Recruiter 一直要我給數字。我的答覆一律:這個職位資訊比較少,所以我真的無法 開出一個數字。真的不好意思啊。最後 Recruiter 也發現我不願意講,他們就先開數字。 我也沒有跟他們談,因為當時 Google 已經選到組而且我比較想去 Google。我個人道義上不想要讓公司進到 Bidding War, 因為之前有聽說過兩敗俱傷加上又耗時。
跟 FB 一樣一直要我開價碼。我答復也一樣:我人現在在德州,我不太了解非德州的行情 ,所以我真的無法開出一個數字。真的不好意思啊。我知道 Google 是出了名假如你沒有其他他認可的 Offer 他會開個很低的數字 ,所以我有特別跟 Recruiter 講我有 FB 和 Microsoft 的 Offer 在談。果不其然,第一個給出來的價碼偏低。我也是好聲好氣的說謝謝,但是可否給我更高,因為我覺得有點低,假如有簽約金那更好。注意!我並沒有給數字,雖然我心裡已經有一個數字。Recruiter 說他回去問問 Compensation Team。過了一天他回來給我第二次數字。數字已經很接近我的預期了,所以我就直接攤牌說你們能給我 1.1 *(我預期的薪水)我就馬上簽。當天 Recruiter 就回來給我 1.05 *(預期的薪水)我也就馬上簽約了。
當時 FB 已經知道數字了,而且我很確定 Microsoft 不太可能給到那個數字,所以我就直接給他 FB 的數字,想試試看定錨效應是不是真的。果然給出來的數字還比較低,只用簽約金衝上下去。 Recruiter 跟我一直講微軟福利多好,還問我有沒有養寵物,可以在 relocation package 裡面幫忙分擔運寵物的費用。一般你聽到公司跟你談的不是薪水而是其他事情時,應該就要知道這是他們的極限了。
總結
看很多人都說 CS 末班車要開走,其實我覺得要開走其實還很早。現在難的是在如何上車 ,再加上疫情讓公司變得保守起來。全世界都知道美國軟體業爆炸性成長,所以來美國讀書的學生也跟著爆炸性成長。美國各大學也發現了這個趨勢所以開始瘋狂開名額讓學生來讀,舉我學校德州農工來講,我 2014 年來只有三個碩博士學生,到了近幾年都快十個有時候甚至超過。學生數量變多了,但公司的缺額並沒有跟上學生數量的成長,導致工作好像變難找。對新人來說的確變難了,但對有經驗的人來說沒什麼差。
最後祝福各位不管在求職還是求學的路上都能順利,等到自己成功的那天也不要忘記幫助未來想出國讀書找工作的台灣人。
本文獲 Bill Cheng 授權刊登,並同意 Meet.jobs 編寫前言,未經原作者同意,不得轉載。原文出處 我如何在 COVID 期間拿到 Google, FB, Microsoft 三個 Offer (Part 3) 。
延伸閱讀
【求職攻略】錄取 Viasat、Indeed |台灣軟體工程師多家美國企業面試心得分享
【求職攻略】台灣軟體工程師如何在 COVID-19 期間一舉錄取 Google、Facebook 和 Microsoft?(上)