前端工程師美國跳槽面試經驗 (I)

Jie-Wei
Jie-Wei
Jun 7 · 10 min read

這篇文章的目的是對於面試過的七間公司十個組整理個人的面試經驗和觀察。文章以中文為主,但在無法翻譯或是通常不翻成中文、覺得中文無法到位的地方用英文描述。

踏入前端的很重要的原因之一是我喜歡看得到的、漂亮的東西。這張是去西雅圖參觀 Chihuly 拍的,也想表達前端是一種什麼都有的感覺。

背景

因為一些原因前陣子面試了一陣,第一個電話面試 3/1 到最後一關 onsite 5/25 共 8540 場面試,面試的職位都是前端相關的工作,關鍵字為 Front-End/Web/UI 。帶著一點心虛感我全部都是投三年或五年以上經驗的職缺,三年經驗字面上看起來有(台灣兩年灣區一年),至於實力有沒有到三年就試試看;五年經驗則是抱著投投看被打槍就…算了的想法。每間公司對職位的要求跟職稱不盡相同但大同小異。

這篇文章會提到:

  • 面試的公司/跟 Recruiter 的互動和感受
  • 面試面什麼
  • 面試流程 (所有問 Recruiter 都會得到的資訊)
  • 性別觀察

這篇文章不會提到:

  • NDA (non-disclosure agreement) 相關的面試題目
  • 其他 NDA 不能說的事情

面試的流程大概是 Recruitment → Interviews → Results

  • Recruitment* 投履歷 → Recruiter 聯絡 → Phone Screen
  • Interviews 電話面試 → Recruiter 聯絡 → 現場面試
  • Results 電話或信件通知結果 → 談薪水/要回饋(通常要不到)
  • 順序沒有一定,可能是自己找內推網站投也可能 Recruiter 直接寄信或 LinkedIn 聯絡再把 resume 給他。

Recruitment

Recruiter 管了所有除去在會議室或電話裡跟面試官們講話的過程,這些雜事和細節雖然不是最後會不會拿到 offer 的重點,但或多或少會影響到面試。

Recruiter

共接觸了 7 家公司共 19 個 recruiter ,其中包含 onsite 轉給其他的 recruiter 負責 ( onsite 可能會轉給一個或兩個統一負責的 recruiter,面試前會有 prep call 也會是他們跟你聯絡的,但若是每個 team 各自的 recruiter 就不會轉,像 Apple 就是每個組一個 recruiter 到底)。
一般而言會以為一間公司就是跟一個 recruiter 講話,但其實不是,每個公司的規則不同,通常學校會有 University Recruiter 處理,所以不管是內推、在公司網站或其他網站投,容易覺得是單一對口。但進入工作的世界後,還會有 LinkedIn 上找人,各種隨機狀況。所以其實還是看公司(這句好廢話)。

Process

以下整理過程:

  • Adobe:在公司網站投兩個職缺,兩個 recruiter 分別回我,前後時間不一致,第二個人回我時已經面完了第一個 team 的電話面試,所以面試也是兩個 team 各自進行。
  • Dropbox:在公司網站投一個職缺 A。電話面試完轉給另一個 recruiter ,在 onsite 前 prep 中才確認我要投的職缺是哪個,討論後說職缺 A 和 B 比較建議我選 A 。我這邊是滿臉問號,所以電話面試時是以為我面職缺 B 嗎。
  • Uber:在公司網站投完五秒後打開 LinkedIn 收到 recruiter 訊息:在這個 表格上填一下吧我們跳過前面直接排電面。(我: 好唷。)然後網路上投的後來收到拒信,這個表格填時根本不知道職缺,之後到了 onsite 現場才知道我在面的職位是 Senior Web Developer。
  • Microsoft:網路上投都沒有回音。然後一個 recruiter 在 LinkedIn 上傳訊息給我再幫我介紹 team ,介紹之後就是跟那個 team 的 recruiter 聯絡。感覺每個 team 都有自己專屬的 recruiter 。
  • Amazon:厚臉皮地請學妹幫忙內推(也先說了我大概不會去),recruiter 很快就回了非常有效率。但電面完無預警直接打來說要 onsite 不是很 ok 。Onsite 之後連後面的工作基本上就轉給另一個 recruiter 了。
  • Apple:有聯絡過的總共 6 個 team ,都是公司網站投,各 team 的 recruiter 會個別聯絡,也是跟各個 team 分別面試。感覺 hiring manager 也都是直接跟這些 recruiter 聯絡,一個 recruiter 負責一些 team 。而每個 recruiter 都各自為政,走的面試流程多少有差,有人要先問一些 behavior questions,有人不用電話面試就直接排面試。
  • Facebook:網路上投職位,過一陣子收到回音。Fb 有分投 team 的職缺跟一般職缺如 new grad,前端算是一般職缺但是 exeprienced role。

Takeaway

Recruiter 很多細節的地方都可以給一些不重大但重要的幫助,甚至問 “what can I expect from this interview” 也可以從 recruiter 那邊得到提示或對 onsite 面試有什麼建議,最後一關拿到 offer 過程也是跟 recruiter 議價。好的 recruiter 除了做事速度快,在很多方面也可以給你好的提示而不會真的告訴你什麼 (這就牽扯到談話用詞的藝術了)。

一個好的有經驗的 recruiter 會把大部分人會問的細節在你問之前就告訴你,但遇到這種人的機率我亂想了一下大概只有一半,其他就要靠自己問靠自己要資訊。我基本上一定會問對於面試我可以期待什麼,甚至直接問是不是 data structure/algorithms 來猜測會不會是 leetcode 類型。另外前端不一定有但是我還是會問有沒有 system design 問題。如果 recruiter 給一些模糊的答案我就會繼續回信追問,畢竟他們不會是面試關鍵所以不要不好意思,有一點不確定就問就對了。

其他也很明顯感受有些公司流程非常精確(Amazon/Microsoft),一確認要 下一步就相關資料都會一起寄。有些公司就只有信件説下一步,然後我就會想,呃你們有要出交通費嗎 (然後回信中就提到 It would be great if the company can cover the transportation fee)。秉持追問的精神,我覺得我至少爭取到了幾次面試的交通支出,這些都是灣區公司,所以他們也有你可能可以自己開車過去的打算,但還是有種你沒問他們就打算裝傻的氣氛。當然搭 share ride 還是比較不花力氣,而且都花整天時間去面試了還要自己出交通費不合理。


Interviews

來聊聊前端面試到底會問什麼吧。

前端面試範疇

前端很廣,前端的面試也很廣,從演算法到 UI 到網路 client/server 底層東西都可以問。中間過程一度覺得什麼都要準備要求太多了吧 murmur 了一下。但面試官們也知道 framework 一直在變所以通常不會考你怎麼用一個 framework (e.g. React, Angular…)。7 家公司 9 個組也只有 Apple 有一組問到 Angular,最近都沒寫也都沒複習就炸了。個人覺得問特定 framework 非常沒有識別度。以下根據我的面試經驗覺得面試可以大概歸納成四個類型。

1. 演算法資料結構 Leetcode

講到面試就會想到 leetcode ,我去年畢業找工作 AC 了 9x 題,這次來到 14x。但其實過程很慘,會看到一題完全沒印象想不出來發現一年前寫了AC 兩年前也寫了AC… 顯然就是當時沒有參透QQ。Leetcode 對我來說一直都是有拜有保佑但完全不保證,很飄移的東西。準備上我還是有 spreadsheet 記筆記講這題的關鍵點或容易掉的地方。
而這一系列面試下來最大感想是就算寫過一樣的,要真的熟到背出來 bug free 就很運氣,也很明顯不是當場想的,不如試著推倒然後用(自以為)很 clever 的方式向面試官要 hints ,像是問說你同意嗎這樣聽起來對嗎,這些話用中文打很彆扭但是講成英文其實非常自然。除了把 code 背出來,我相信面試官其實會更想看到你在討論過程中的邏輯跟溝通能力。Microsoft 是出名的幾乎都考古題,面之前明明就寫了許多,熟到某朋友去面試五題中的三題我都可以快速想到是 leetcode 哪一題,但這種情況下還可以自己面的時候五題都沒看過,全部都是當場想當場跟面試官討論出來的(後來發現有一題是寫過然後忘了)。
以上經驗但如果要給準備面試的建議還是努力寫一下吧,我其實密集準備也只有一兩個月,後面就相信自己(被打)。

2. UI 實作

就是在有限的時間內開全空白的 coderpad/jsfiddle 直接現場刻一個會動的東西,用到包含 html/css/js,可能搭配一些 api 使用,像是從 api 拿到資料排出來之類。建議就是 vanilla JS 要熟,一些 document Object 有的 function/selector 還有 event listener 之類的。平常就是寫前端工作的話,將各種 framework 特定 syntax 拔除,其實這類考題我覺得是最輕鬆最有自信的。

3. 前端知識

居然太常被搜尋連自動補完都猜到。

大部分人會想到 closure、promise、this 之類的,嗯沒錯這也算前端知識的一部分,但比起概念/單詞解釋/語法,我想講的是範圍更大的前端問題。這邊幾個網路上可以找到的例子(然後我真的在某家公司的電話面試 被問到)是描述打開瀏覽器輸入網址之後會發生什麼事。某一些人可能會說有工作過有好好工作的話這些問題都可以回答。Well, yes and no.

平常有好好工作但大部分時間關注的是開發的細節,就算這些東西有在電網導好好上過,但依稀的印象和非常熟的描述(因為剛複習完)講出來是可以差很多,前者就會被追問細節時空白,面試官講了之後腦中有「啊靠對是這樣」(這語氣應該只有我這樣),後面面試官就會頻頻點頭然後幫等下的 coding 問題先暖身了。

前端的奧秘就是在開發時可以亂寫一陣也會動,所以之前沒有好好讀書。過去欠的債都會討回來的,於是為了準備這部分讀了不少東西,也因為面試準備了一份 doc,消化吸收念的文件後後用自己的字打出來,畢竟面試也是你要解釋,不管是不是基本,有可能問到就記錄下來也方便自己複習。不獻醜就不列了,對前端有興趣看的人再問我。

4. 系統設計 System Design

這是我最焦慮的一個面試環節。
說真的在面之前要問什麼我真不確定要怎麼準備,之前面試都是剛畢業的身份不太會被問,工作上不知道幸運還是不幸,滿侷限的就沒有真的需要設計什麼跟後面系統太相關的大東西。另一方面「系統設計」的範圍也有點難界定,前端工作本身就雜,處處都可以「設計」。
舉個例子我們來設計一個辦公室訂飲料系統吧(絕不是 doordash),你要怎麼傳給其他人連結?用 email 的話信件內容要怎麼知道誰是誰?要不要登入?大家訂的東西要怎麼存?會不會有不同人寫同一份資料的狀況?如果有人訂飲料的時候在紐約有沒有什麼處理。真要說 UI 也可以跟系統設計結合的,要設計一個 web component 給別人用之類的。

總之我開了外掛問有經驗的老朋友說你會怎麼問這題,被丟給這個連結,乍看之下覺得滿有幫助,但老實說總共被問了五次好像都沒有真的提到這網頁中的 System Design 段落的東西。有問的公司是 Amazon、Uber、Microsoft、Apple、Apple。
結論是比較有效的準備方式還是跟朋友討論。幸運地就有個志不在前端但前端包羅萬象都十分會的好朋友在 UTC+8 的 No1 時區跟我講越洋 messenger 。


面試流程、結果跟雜談就下篇繼續吧。
打了很久,覺得文章有幫助請給我 clap 鼓勵一下~