2022北美找工作 Experienced Hire — Data Engineer Part 2

Joe Liang
15 min readDec 24, 2021

--

Part 1(連結在此)分享了Data Engineer求職的前期準備、面試過程
Part 2將接著分享一些實戰經驗、拿到Offer後的談判、找工作的心態

實際 EP Data Engineer面試分享

主要分享Disney、Packable的完整面試流程

Disney — Lead Data Engineer

Walt Disney 旗下很多子公司,主要分為三塊:
1. Disney Parks, Experiences and Products(DPEP)專門負責全球迪士尼樂園、飯店、網路商店
2. Disney Media & Entertainment Distribution(DMED)負責串流影音服務如Disney+、Hulu
3. Content Groups 負責Studio Contents(Marvel, Pixar),Entertainment Contents(ABC news, National Geographic), Sports Contents(ESPN)。

我起初是對運動資訊的平台有興趣,但ESPN的Recruiter表示短期內我投的team不會開Senior缺。不過DPEP有幾個新team有可能接觸ESPN data,問我要不要試試,我答應後Recruiter幫我轉到DPEP,聊過才得知工作內容會有機會整合各子公司的客戶資料,認為蠻有趣的,就決定跑面試流程。

1. Recruiter Phone Call — 30 mins
起初我是投Senior Data Engineer,自介後Recruiter按照CV問了一個Project做的事情,用什麼Programming,再問Leadership Experience。接著他開始講這個Team在做什麼,這個缺想找的是幾年工作經驗的人,需要會什麼skill,確認一下我的工作狀況及意願之,就說可以幫我約Hiring Manager聊看看。

2. Hiring Manager Video Screen — 50 mins
自介,問2個Project的貢獻以及Follow-up Questions後,Hiring Manager開始介紹Team的工作內容,強調需要Design ETL Pipeline、Migrate data to cloud。後面問幾個Cloud services的使用經驗,再給一個情境問How do you use one simple script for 20PB size of data。最後給的Feedback還算正面。他表示除了Senior Data Engineer 也會考慮看看能否適任 Lead Data Engineer,他會先跟主管討論一下要不要把我放到Final Round。

結束面談的當下我蠻意外的,畢竟Lead Data Engineer的JD是要求8+ years of work experience,我目前的工作經驗年數不到8年,所以申請時完全沒有考慮Lead position。但反正Hiring Manager說過如果有到Final Round其實也都是一樣的面試,看表現才會決定能否升上去,所以就沒想太多,過了一週沒消息想說涼了,結果兩週後通知有進Final Round。

3. Final Round (5 rounds,4.5 hours in total)
1 Live Coding — 60 mins
面試官是位Senior Software Engineer,丟一題我覺得是Leetcode Easy Level的題目,有關array + sorting不會太難,被問怎麼優化時我還有卡住,但面試官人很好給了一點提示後我有想出答案,因此這一關算是通過,後續問一些Python、SQL,都不會太難,有刷題並有持續練習Python、SQL的話不會有什麼問題。

1 System Design — 60 mins
有牽涉到公司隱私所以不方便透露細節,但大致上就是給一些Customer data,Product data跟Business Requirements,請我設計一個Cloud Infrastructure including end-to-end ETL pipelines。我在跟他確認需求的細節時,面試官希望我設計Streaming Processing,我坦白跟他說我比較多實務經驗是Batch Processing,Cloud也是對Batch比較熟悉,問他能否設計Batch,面試官先反問是否完全沒有處理Streaming data的經驗,我回答學校專案有碰過但僅有概念,他就表示ok如果設計完還有時間再問相關的Conceptual Questions,結果後來因為時間不夠也沒問到。我的設計是參考我在美國新創做的專案當基礎,Batch processing on Cloud platform我有實務經驗,說法也練習過不少次,所以在Naïve Design跟各環節Detail自認為都回答得還可以,除了中間被問到怎麼寫API讓資料整合變得更有效率,我沒有太多API開發經驗就答得不太好,面試官也很乾脆分享了他的答案,表示有概念就好,最後時間到了也沒繼續讓我問問題。

2 Technical Questions + Leadership — 1st part 30 mins / 2nd part 60 mins
1st part有一位面試官,主要問Database,ETL的問題,Database主要是問公司的Customer Data會從多個系統接進來,會用什麼DB,為什麼這樣選,怎麼讓分析Team使用;ETL就純問有沒有實務經驗,這一關要瞭解常用的Database,比較Structured / Unstructured data,以及ETL的基本概念。2nd part有兩個人,一個主要問有沒有SDLC的開發上線經驗,另一個問Leadership Experience,SDLC我就講以前的工作從開發到上線的整段流程,Leadership則是被問到很多情境題,像是你要怎麼跟其他Stakeholders解釋Technical terms,若你的team沒有辦法準時完成交付的任務,你要怎麼跟其他Team解釋並協調。這幾個問題我覺得蠻有趣的,運氣很好的是我那時剛好有面試Google Technical Program Manager,所以對於類似的問題我有準備1–2 examples回答。整體覺得還算順,不過因為到這裡已經3個多小時,腦袋開始不太靈活,所以回答問題有時會卡住。

1 (Director) Background + BQ — 30mins
最後一關是對一位Director of Data Operation,也是Hiring Manager的主管,面到這裡我已經累到不行了,很有趣的是,我自介完他問了1個project的經驗之後,就沒有再問了,後面的時間他都在介紹他對於這個Team的期待以及Short-Term Goal,坦白說我腦子也有點跟不上,所幸原訂是1 hour 的面試但在30mins的時候他就準備收尾,問我有沒有問題,最後說了一句:明年他對這個部門有很多期待,希望有機會你可以來一起共事,為Disney創造更多價值,這句話讓我印象蠻深刻,有感受到他的熱忱也對於這個Team有不錯的印象,然後就提早結束了。

整體感受&結果
蠻好的,面試官不太刁難而且也不吝分享自身經驗跟想法,Final Round過了2–3天,在感恩節放假的前一天,Recruiter打電話說經過公司商討後,主管覺得面試表現有達到Lead position期待,決定發Lead Data Engineer Offer。

Packable — Lead Data Engineer

Packable是一間電子商務公司,做代理國際品牌銷售,導入智慧零售的概念以提高業績及顧客終身價值,Data Team主要是運用大數據分析,AI技術來預測進出貨狀況以及產品趨勢。一開始是Recruiter透過學校徵才平台找到我,聊完工作內容之後覺得跟我在美國新創做的專案很類似並有更大的規模,加上Data Team當時缺一位同時有地端雲端經驗的Lead,除了工作經驗年數稍嫌不足之外,各方面條件都蠻符合,我對於零售業也有興趣,所以決定投看看。

1. Recruiter Phone Call — 30 mins
自介,與我分享該Team工作內容,由於我在美國待的新創公司也是零售業,工作專案與經驗蠻符合該職缺的需求,雖然是希望找7年以上工作經驗的人,但他有意願幫我跟主管談看看,經過幾天後,公司決定讓我跑Lead Date Engineer的面試流程。

2. Hiring Manager Phone Call — 30 mins
自介,主要問我CV列出來的Skills如Hadoop、Spark、Python、SQL、Cloud Engineering等,與我分享工作內容的細節,最後問我有什麼問題,然後說會跟主管討論看看要不要往後送。

3. Online Assessment — 120 mins
一週後,發了OA來,第一次看到OA被安排在Hiring Manager Interview後面,還蠻特別的,主要考SQL、PySpark、Hadoop。SQL考Subquery、Join table、Groupby、Conditions(Case when、Where…); PySpark給一個List with Key-Value pairs,要求用RDD處理重複Key的資料及排序,這邊用map、reduceByKey、sortByKey functions以及自定義Lambda functions就好,練習過Spark程式就不會太難。 Hadoop就問 HDFS、MapReduce基本概念,沒有寫code。整體來說只要了解常用的SQL、PySpark function,並有練習code就能應付大部分的題目,我是有把常用的function整理成note並且網路上找題目練習,實際考的時候我就在電腦前看自己的note,找相對應的筆記做題,題目還是蠻多的,整個做完時間差不多也到了。

4. Final Round (5 rounds,4 hours in total)
1 System Design — 60 mins
給多張retail data table,1個已開發預測模型跟1個已開發Python function,要我設計一個Cloud Infrastructure & Data Pipelines,更新各供應商進出貨資料以及新商品的模型結果。確認好需求後,由於這些資料跟我在新創公司處理的資料很類似,所以我很快有些想法,我結合以前工作用到的地端Workflow並用AWS設計,原則上我對於ML Model的分析需求都是先設計一個Data Warehouse獨立於Operational DB,以不影響現有的營運需求為主,讓Data team連線Data Warehouse去跑一些較複雜的SQL Query 及模型訓練,設計沒有對錯,你絕對可以提出你認為更好的方式來設計並討論。最後我提到Data Visualization來設計一個Dashboard呈現更新的資料,相較把資料更新到DB讓User去撈,面試官感覺更喜歡視覺化的方式,整體還算順利。

2 Live Coding + Technical Questions + Leadership — 1st part 60 mins / 2nd part 60 mins
1st part有兩個面試官,問以前從開發到上線的經驗,看到這邊不曉得你有沒有發現,EP的面試真的很喜歡問SDLC的實務經驗然後再問Follow-up Questions,所以準備好Stories真的非常重要,面試官喜歡聽你講從與Stakeholders了解需求,到程式上線及維運的整段流程。2nd part有四個人,問雲端實務經驗,讓我比較市面上服務的差異,比如問說怎麼選定要用Redshift or Snowflake,Lambda or AWS Batch,EC2 or On-premised DB,接著有一個TPM主要問Leadership的經驗,面試準備到這邊,這幾個題目都是有準備過並練習不少次了,回答自認還算順暢。

1 (Chief) Background + BQ — 30 mins
面試官是一位Chief of Data Science,自介之後,問很多Leadership經驗跟情境題,像是你要怎麼帶Data Engineering team with cross functional teams一同完成任務,以前當Project Leader遇過最大的困難,怎麼解決,如何評估一個專案要不要做,Scope要多大,評估的Priority是什麼。面試官感覺很忙碌,講話很快,剩最後五分鐘他快速講一下對於這個Position的期待,時間到了就很快離開,感受還不錯,看得出來是一位對零售業有經驗且聰明俐落的領導。

整體感受&結果
還不錯,除了不太懂為何只用OA來考Coding Skills而不是Live Coding,遇到的面試官人也都蠻熱情,Final後過了一週,Recruiter打電話來說公司決定給Offer。

幸福了,然後呢?

拿到了Offer,表示最難的已經過了,接下來是Negotiation,這裡是爭取更好package的最佳機會,對EP來說這個環節比NP重要很多。EP談package的空間遠大於NP,NP通常package相對比較固定,畢竟對公司來講NP主要是給剛踏入社會的畢業生。當然你也可以跟公司妥協直接簽下去結束整個旅程,但如果已經是投EP不跟HR談判一波蠻可惜的。

以我的例子來說我有跟A公司談判Annual Base Salary,透過Compete Offer最後比原本多30K,也有跟B公司談判整個Annual Package最後整包多45K。另外,關於談判項目,首要當然是salary,但其他也還有很多可以談判,像是Job task,Location,Relocation fee,Sign-on Bonus,Stock,Vacation,我當時連Onboard Date都拿來談判。但我必須強調,談判的拿捏非常重要,不是什麼都可以拿來談,要衡量自己的籌碼,並時刻看對方的回應來判斷出手力道,如果你有自己的一套方法那很好,若沒有經驗也沒關係就從現在開始累積,在這邊我推薦Haseeb的一篇文章給大家,我覺得寫得挺好的,我在談判的2–3週不斷反覆地看這篇文章拿來運用,也歡迎讀者聯繫我一起交流Negotiation的方法。

Haseeb Qureshi
Ten Rules for Negotiating a Job Offer

在這邊也簡單列出幾個談判重點,供參考:
-拿到Offer後,就可以把漁網拿出來撒了,搜刮Offer來互相Compete
-拿到Offer後,時間最重要,獲得越長時間做決定,談判空間就越大
-將Recruiter當作自己的戰友,他不是敵人,你簽了對他也有好處,打好關係
-除了薪資外還有很多可以談,談判時不是要你拿出氣勢蓋過Recruiter,而是要跟他一起找到彼此可接受的平衡點,過程中要保持禮貌
-談判期間不要太久,可抓2–3週,談得差不多就趕快給決定不要再Bullshit

找工作的心態

最後分享一下心路歷程,我從準備面試到確定Offer大概四個月,整段旅程真的非常艱辛,準備各種面試、刷題、投缺、接電話、面試、被拒絕/進下一關,是一種不斷掉入深淵,還要掙扎的爬回地面,再被打下去的無限迴圈。EP常是一個蘿蔔一個坑,沒有像NP會有Program讓學生可以現在面試明年畢業後的工作,EP很即時,面試時常常是找立即可以上工的人。

我的Master Program要唸三個學期,大多身邊的同學都是投NP,第一年找實習,拿到Return Offer,保底再決定最後一個學期要不要繼續找其他工作。另一方面,投EP只能從最後一個學期開始投履歷面試,跟NP走的路是完全不同,我在第一年唸書的時候想過很久到底要找實習還是最後一學期直接找工作,找實習做NP無疑是相對壓力小的道路,很多公司不太承認海外工作經驗,所以從頭開始累積在美國工作的經驗是很常見的事。但我覺得如果走這條路,當拿到Return Offer後心態會很容易鬆掉,就很難逼出自己的極限短期衝刺。另外,若目標跟以前工作一樣是做Data Engineering,自己真的要再次從NP開始嗎?最後決定直接找工作的最大推力是一句前輩的話:

Return Offer聽起來很甜,但不要浪費自己多年的工作經驗

這是在我準備找工作的時候,一位台灣工作多年去美國留學找工作的前輩給我的一句話。既然是要走同樣的領域,何不妨給自己一個機會挑戰看看EP,如果失敗了也是很好的經驗,大不了就重頭開始投NP,於是下好離手,開啟這段旅程。

整段過程我覺得壓力挺大的,學校課業已經很重還要刷題投履歷,每天關在房間裡面,準備之餘還得消化被拒絕的負面情緒,被拒絕的感覺真的超差的,面試表現很爛或者被有興趣的公司拒絕時都有種信心崩壞的感覺,每一次奮力掙扎說服自己有自信,但隔天又會被打到谷底。一開始我幾乎每一場Live Coding都會卡住,程式寫不出來跟面試官僵在那邊的感覺非常尷尬且赤裸,關掉Zoom的當下都會很崩潰,不斷問自己怎麼這麼廢,印象深刻是有一個禮拜所有Application無消無息,手上的面試都在同一個時間被拒絕,做不了任何事情,跑去躺床一整天,懷疑自己的人生。

但崩壞的感覺久了也終究會習慣,對於被拒絕開始慢慢無感,常常去回想當初選擇直接找工作的原因還是挺重要的,後半段的旅途,當我每次崩潰時就會回去看前輩說的那句話,再接著問自己:短短幾個月的奮鬥如果可以換到好的EP,不浪費自己過去幾年工作經驗的話,何不繼續試看看,再撐個一週再說吧!最後兩個月的策略是:最小化花在學業的心力,最大化時間來安排模擬面試及練程式練Stories。印象最深刻的事是每天晚上睡前的放風時間,這段時間是拿來貫徹Fake it until you make it的自我催眠時刻,走出去社區外面,看著天空,檢討今天有哪些做得不錯的以及要改進的地方,再幻想著幾個月後拿到Offer的爽感,重新建立自信,告訴自己明天回到這個地方的時候,要比前一天的自己再更進步一點點,催眠完畢後再上樓睡覺。

謝謝大家的收看如果這篇文章有給你一點點幫助,我會覺得很開心,有任何問題歡迎加我的LinkedIn聯繫,祝大家求職順利!

--

--