生活雜談 | US Internship

Stanley Lin
15 min readDec 28, 2020

--

(實習過了半年才寫這篇XD)

很多人來美國唸書的其中一個原因不乏是找一個暫時的工作,
不管是擴展閱歷也罷,把學費賺回來也好,或是有更長遠在美國的規劃也不計其數。
雖然自己經驗也不算是太多,很多時候找工作/實習也只是運氣/時機成分>一切原則。

但還是分享一下個人經驗給大家參考,希望大家能少走一點冤枉路。

Step 1. 找工作

找工作應該是整個過程最痛苦跟冗長的一塊。

除了面試跟滿滿的題要刷之外,請務必做好會一直被系統刷掉的心理準備。在美國找工作不像在台灣一樣順遂,是很容易被拒絕跟無聲卡的。
心態真的很容易崩(包括我),但請務必相信總有希望的。

這很有可能只是系統自動把你的簡歷篩掉,所以儘可能在簡歷裡提及跟職位相近的關鍵字會比較吃香。

個人建議大公司(e.g. FLAG, FAANG)這些可以在九月初前都投遞完成比較好,相對比較有head count。
(當然時機這種事其實很難說,但通常早投會比較有希望)

下面用一些常見問題來講下自己的個人意見:
(再次聲明,這些純屬我的個人意見.參考就好XD)

Q > 小公司建議投嗎?
A > 投就對了。
拿到OA/面試就當作練習,拿到Offer再來(奢侈的)煩惱。但如果你非常確定你不喜歡某間公司也不用刻意投。
在美國是很難找工作的,數百家無聲秒拒都是有可能的。
比起懊悔自己浪費了機會,不如多投多希望。

Q > 需要先投小公司練手再投大公司嗎?
A > 個人認為不用刻意,投對時間總比晚投沒機會好。
每間公司的出題取向都不同。
像Google熱愛DP跟變形題,FB熱愛Data Structure,拿其他公司練手通常就是訓練你的表達能力,你在面試FLAG或FAANG還是要對他們的考古跟偏好去另做準備。
與其花很多時間練手,不如早點投開始加緊準備。
另外人類(至少我)就是一個沒看到面試不會認真準備特定公司的生物,所以早點投有面試還比較重要。

Q > 我覺得我還沒準備好,我需要先準備(e.g.刷100個X公司題目)再投嗎?A > 你永遠不會準備好。投就對了。
題庫只會變多,不會變少。你永遠不會準備好,所以投就對了。
(當然如果你是轉專業,還是先學會一個語言的基本資料結構(e.g. stack, hash map, queue, priority queue等等)跟語法再投。

Q > 找內推重要嗎?找不到內推怎麼辦?
A > 個人認為投的早比找內推還重要
以我個人的經驗,我有拿到OA/面試的公司都不是靠內推取得的面試機會。反而很多公司花時間去詢問內推但錯過了申請的時機就連OA都沒拿到。個人認為在9月中都還沒找到內推的話就可以先考慮直接海投了!

Q> 怎麼找內推?
A> 第一個方法是找你系上/學校的學長姐/朋友。這種最願意幫忙內推,也比較好開口跟詢問更多問題。
第二個方法可以看一些互助的專頁。e.g. 半路出家工程師、Mason校友。這些管道也有機會找到一些內推的機會,但請務必記得遵守他們的規定,跟務必記得禮貌!
第三個方法可以用LinkedIn去查看並遞送Invitation。有些人會直接表明自己願意內推,除非寫了不願意內推的之外都可以嘗試看看!

Step 2. OA, 面試準備與面試

因為我也只有面試一間公司,這部分我真的無法代表所有人。

面試軟體工程師通常會有這幾種類型的面試:

Online Assessment (OA)

OA是很多公司做第一輪篩選的測驗。雖然很多公司也是廣發OA但不面試人,但有得練習總比沒有好。
OA通常都是基本的coding題目,也有少數是選擇題或是邏輯題。
通常只要是不小的公司都會有考古題可以參考,可以看看一畝三分地或是Leetcode Discuss去做參考跟了解題型。
有準備總比沒有來得好囉。

一些有OA的範例公司:

  • Amazon (3輪OA)

OA 1: Java/C++ Debug題 — 給你一份code跟預期的task,去找code裡面邏輯上的錯誤
OA 2: 兩題coding
OA 3: Working simulation。考驗你在模擬回訊息跟處理專案時有沒有符合Amazon的企業文化 (Leadership Principles)

  • Quora
    3–4題coding。題庫極大,練完可能要一兩週XD
  • Google
    比較基本的coding題目2題。

Phone Interview

有些公司會有一關是用打電話的方式跟你溝通,但一樣會在Codepad上面去寫code。
基本上跟Video interview類似,只是你沒辦法看到對方,也不能用視訊去輔助溝通。另外一個就是HR也可能是Phone Interview去詢問你的基本背景(同時考驗你應答能力),也有可能會問你一些基本的SDE知識。

Video Interview

視訊面試,會在Codepad上面去寫code,會比較注重跟面試官的互動。

個人覺得最重要的有幾點:

  • 解題邏輯是否正確?
  • 題目理解是否正確?
  • 有沒有考慮使用者可能的input (edge cases)?
    比較極端的面試官甚至會故意不把題目講清楚,逼迫你一步一步去闡明需求。不要用「你以為」的需求去作答,很有可能寫完發現自己寫的不是面試官要的,就得不償失囉。
  • 是否能流暢表達自己的解法?
    最好在你寫一段code就解釋一下自己的想法,一方面讓面試官理解也可以偷偷確認面試官是否有疑慮XD
  • 考驗你能不能在最精簡的Time & Memory Complexity去解決問題
    能用Hash map但你用List of list就會扣分囉。在解題完成也務必闡述你的Time Complexity跟Memory Complexity是怎樣。

我覺得如果真的卡關,與其乾在那邊不如問問看他能不能給一些提示。如果能理解提示並解決問題也是很好的!

總歸而言,個人覺得就是刷題、刷題、再刷題。
有機會可以多跟朋友mock interview訓練表達能力,才不會面試會寫但不會表達。

找工作跟面試的階段,大多人都會遇到很多Reject或是面試失敗的過程。
這種事情完全正常,畢竟不是美國人,也不是一個英文母語的勢必會劣勢,更何況你是需要簽證的人。
除了努力還是努力,你不會是一個人,
請繼續相信你所有的努力總有一天會得到回報的。

個人經驗

以我個人的經驗,我投了將近200間公司的SDE, MLE, BA, DA, DS相關職位(這數字不算多喔)。

有拿到OA的大約20–30間(後來都拒絕,說沒Headcount),真正有看到人的面試只有一間(Amazon)。

履歷拒大多有50–60間,剩下都是無聲。

個人認為我最大的「錯誤」就是「想要做好萬全準備/找內推,再去投遞工作」而延後了投工作的時機。

我大概9月初開始找FLAG的內推,在9月底去做FLAG的內推投遞。同時也找了一些比較能找到內推的公司去試試看(Expedia, Spotify, Dropbox, etc)。

後來是很快收到F的履歷拒,AG無聲(但G好像是系統錯誤,我沒收到拒絕信但內推人那邊看到履歷拒),L說要等到11月底(然後也履歷拒)。
A後來也證明是系統問題,內推的系統似乎就是一個沒有人會處理的渠道,你要自己去Amazon University去做工作投遞才會有人處理。
這個渠道也不需要內推,我後來在10月中投大約兩週就收到了OA1。
之後就是每兩週會有一個OA,12月初完成所有OA,12月底約了1月初的面試,1月底收到過了但進Waitlist,直到3/12才收到正式Offer。

自己認識的朋友通常也是認為時機>內推,至於準備就是有基本的解題邏輯跟底子,收到面試的當下對症下藥去準備更重要。

作為這部分的結語,我建議大家8月中職位剛開就可以開始投遞大公司的職位,最晚8月底9月初投遞比較好。
如果有內推最好,但沒有的話時機>內推。

刷題時可以先把General高頻的刷一下,可以注重一下刷不同類型的題目(e.g. DP, BFS/DFS, …) 。收到面試邀約再去刷Leetcode公司別的題目,也可以看看Leetcode/一畝三分地的面經。

其他公司就是看到職缺,有興趣就投。
中小企業可能會到1, 2月才會開始處理queue裡面的candidate(first-in-first-out),但個人認為早投還是比較有希望,很少有公司會是stack的方式(last-in-first-out)去處理。

這些是我的個人想法,很多時候都只是運氣跟時機而已。

但大原則而言,希望大家能把握時機投工作,能走向以一個比較順遂的找工作歷程。

Part 3. 工作/實習

經過各種痛苦的過程,恭喜你找到實習/工作了!
每間公司都有不同的工作風格跟環境,我就簡單分享一下自己的工作歷程。

我今年的5/26 ~ 8/14 (12週)很幸運的在 Amazon 當Software Development Engineer Intern 的實習職位。
我被分配到的是Advertising — Machine Learning的後端職位,負責組內的一個side project。

通常比較多是Mentor/Manager assign明確的milestone,你只要跟著完成就好。
個人覺得自己的實習過程比較非典型,是要從Design到Implementation的一條龍過程(不過也學到比較多啦),參考看看就好。

基本上我的工作上拆分為四大塊:

Onboarding & SDE Bootcamp (第1週)

每間公司的有每間公司的企業文化,Amazon算是尤其注重這塊的公司。
Amazon有名的14條軍規都會在Onboarding的Process有個案討論跟影片去做介紹。其他就是一些Complaince跟領域專門的法規影片會需要去了解。

比較特別的是Amazon的SDE Bootcamp,裡面會介紹很多公司內部會使用的Framework跟Tools。
由於NDA這邊不多作介紹,但基本上可以透露的是大公司都會有自己的Version Control, Data Pipeline 跟 Deploy 的流程。

另外Amazon有安排Manager, Mentor 跟 Onboarding buddy三個輔助你實習過程的人。

Manager是你的主管,是主要掌握你有沒有Return Offer的人。在實習期間通常需要每週跟他Sync up 2–3次。他會是主要跟Bar Raiser溝通你是不是有Return Offer的人。

Mentor是你的…Mentor。他會負責回答你大多數的問題。理論上Mentor應該會跟你是相同職位(e.g. SDE的Mentor會是SDE),也大概理解你的Task跟Project Scope多大。他也會給予很多Feedback給Bar Raiser跟Manager。

Onboarding Buddy最主要是負責帶著你了解公司文化,跟融入小組內的人。通常會是組內稍微資淺的人。

無論是上述哪位,請務必、務必讓他知道你正在做什麼,未來打算做什麼,跟定期詢問自己有沒有在right track上。
不僅僅是為了Return offer,你很常會從他們那邊得知自己欠缺或誤解了什麼,你才能對症下藥去改進自己的能力。

System Design and Schedule Planning(第2–5週)

通常Intern分配到的Project通常是加既有系統的feature,比較少會需要設計一個系統,所以可以參考就好。

我的Project會需要設計一份系統,包括他的Data flow,使用的AWS Function,如何儲存資料等等都會需要設計。

在這過程我很常用draw.io一類的工具去話Architecture Graph,以及用UML去code sequence diagram。

這部分主要需要去做的是分析什麼可行,什麼不可行以及組內有什麼資源可以去重複利用。
之後需要跟組內的PM, manager跟mentor去討論需求,再去分類不同的Priority的Task。

Code Implementation(第6–11週)

我的Project最主要是用Java去實作。
很多都是內部的東西,所以我也不好多做敘述XD

在學校課程中比較少出現的概念是Code Review (CR)。
公司的code牽一髮動全身,除了基本的Unit test跟Integration Test之外,你會把你所有的code跟測試提交一個Code Review去交給組內其他的人審核,審核過後才會允許你把code submit的remote mainline / branch上。

Code Review是學習如何寫Clean Code的極佳途徑。

以我個人的經驗而言,在CR上就是SDEs可以最對症下藥的去給你建議的地方。
無論是邏輯上或是Coding Style上的建議都會恨直接地留在comment裡。你也能確保你已經完整的改進後他才會給你過CR。
這個階段會很挫折,但你也會更容易去理解業界的SDE都是怎麼去寫code。
個人覺得我mentor提到的SOLID原則是最容易去遵循跟設計的,有空的話可以多看看類似的東西,對實習會相當有幫助。

Wrapping Up (第12週)

最後一週大多數的時間都會花在wrap up整個project上。
包括Wrap up presentation,工作交接,內部wiki的撰寫,以及離職手續等等都會在這週完成。
通常Manager在這週也會告訴你是incline to offer或not-inclined to offer。

組內工作文化

我的小組算是比較新的小組,負責一個Product。
組裡面目前只有四個常駐組員- Manager, 3個SDE I (entry level)。
另外就是上面一個Product Manager, 一個Former Mentor SDE II, 跟我這個intern。
Amazon有個Two Pizza Team的文化,除非是巨大Product人數都不會太多,我的組目前也只有再招2個SDE II(III)的規劃。

組內是走Agile process,每兩週會有一個Sprint去釐清這兩週需要完成的主要目標(goal),依照每個組員的熟悉內容、能力去分配每個組員這兩週的工作內容。

每天會有Daily standup,主要是每個組員分享自己昨天做了什麼跟今天預計要做什麼。另外有什麼需要討論、告知的內容也會在這個時間分享。另外也會看一下我們Product的Dashboard,討論一些Metrics是不是正常。

整體而言組內還滿supportive,但滿強調自己去判斷當兩個組員有不同意見該如何去定奪要採納誰的意見/找個新解法的。
雖然很常還是會有SDE II > SDE I 話語權的情況,但當你能引用或想到新的解法,通常都還是可以去討論的(甚至是更好的)。

在實習過程中,偶爾也會遇到你的想法被拒絕,或是上層決定變化的情況。
除了心境調整之外,請務必思考詳盡地解決方案,用文字去做記錄去給所有人看,達成共識再繼續進行。
這些會省去很多誤解上的麻煩,也可以讓自己未來執行事務時有文件背書。

Return Offer (實習)

Return Offer是指在實習結束後,公司給你在畢業後回到公司繼續當同等的full-time職位。通常會有一些簽約獎金。

大家比較關心的是「我應該怎麼拿到Return Offer」?

通常而言,有良好的溝通能力、完備的domain skill、跟正確的工作態度是return offer的主要判斷條件。

通常每間公司也不同的標準,但一個比較共通的原則是「不斷去跟主管/mentor確認是不是on the right track」?
更直接點,你也可以直接問他你是不是incline to offer。

以我在Amazon的經驗,通常有順利的完成每個milestone,並且問主管跟Mentor “Am I doing the right thing / on the right track?“ 並詢問 “Is there anything to improve”,並去做相對應的改進就不會有大問題了。

付出努力跟時間,其他就是有沒有位子給你的問題而已。

通常Facebook, Amazon是給比較多Return offer的公司。
LinkedIn通常也給滿多,但今年是例外(COVID-19)。
Google通常Return只是跳過一輪面試,還是會需要面試後才能回公司做Full-time。

無論如何,固定性的去跟主管、Mentor確認並完成Assigned Task(甚至Beyond task)絕對是會讓你更incline to offer的。

結語

在美國找工作絕非一個輕鬆的過程,而且很容易招來別人的流言蜚語。
心態會很崩,但很多沒有經歷的人也會無法理解你在崩什麼。

這時候可以找找身邊同樣在找工作的朋友/學長姐,一起練mock討論題目,偶爾可以聊聊最近投的公司跟心路歷程什麼的。
記得自己不是一個人,持續努力並相信遲早有一天會找到的。

如果真的努力過了但真的沒找到其實也不是世界末日,運氣不好並不代表你不優秀。你付出的準備、努力絕對還是會幫助你未來的職涯發展的。

希望看到這篇的人能在找工作上獲得一些幫助,能在找工作的路上更順利一些。

Acknowledgement

以上純屬我個人見解,並不代表完全正確。有什麼不一樣的想法歡迎討論!

最後感謝一起陪我準備面試/mock的各位:Alvin Hou, Brain Ho, Iris Lin, Johnny Wang, Kevin Hsu, Ray Hsu, Shine Hsu, Tim Chou, Tim Liu, 以及很多人XD。
另外也很感謝一路上願意給建議跟幫忙內推的所有人,以及陪我度過很多低潮期的朋友們。

有什麼其他問題歡迎下方留言喔!

Just a coffee.
實習MVP: 咖啡。

--

--

Stanley Lin
Stanley Lin

Written by Stanley Lin

Taiwanese / Student / Cornell Tech CM’21 / NTUIM-b03

No responses yet