2020 資深前端工程師面試心得(4y, 100k+)

上次在台灣求職的時候是 2015 年 4 月,剛好是五年前的事,那時候的心得可以參考:[心得] 15家中小型公司、新創公司面試心得分享。先來講一下這次求職的原因好了,原本其實是想做自己的事,想試試看把教學當成正職來經營,但一段時間之後失敗了,因為自己心態上還沒有辦法調整成這樣,於是白天就多了很多時間。

就在此時,剛好看到某間公司在找人,看了職缺以後滿心動的,於是就投履歷了。後來想說既然都投了,不如就開始找工作吧。這次求職是佛系求職,沒找到工作也沒差,沒有面到理想的職缺就繼續邊耍廢邊做教學。講完求職的背景以後,底下會先講這次求職的管道,然後會有每間公司的面試心得以及總結。

如果有人好奇問說:「怎麼沒有寫到求職前的準備?」,因為這次是佛系求職,所以沒有任何準備,看面試考古題或是刷題什麼的都沒有。

標題的 4y 指的是我有四年工作經驗,100k+ 指的是月薪要求十萬台幣以上,想說寫清楚會對背景更清楚一點。先把這篇會提到的公司寫出來,方便大家決定要不要繼續看:

  1. AmazingTalker
  2. Hahow
  3. Shopline
  4. 財報狗
  5. 浪 Live
  6. 優訊 Unistar
  7. Shopback
  8. OneDegree

背景

這次求職我有直接對外公開期望待遇,要同時符合以下兩點:

  1. 月薪 10 萬新台幣以上
  2. 年薪 150 萬新台幣以上

這是底線,沒有到這個數字的基本上不會考慮。在看求職網上的薪水範圍時,我都直接看範圍的上界,只要有到我就覺得可以試試看。

想找的是資深前端工程師的職位,但如果有前端 team leader 或是相關的管理職也不排斥。產業沒有特別喜歡的,但比較不喜歡的是區塊鏈相關的公司(個人喜好問題,就是對這塊沒什麼興趣)。

求職管道

Image for post
Image for post
寫得清清楚楚,文章不會刪,想看履歷可以點進去

當然,這個 GitHub 的 Issue 會主動注意的人不多,所以會放這邊主要是當作 cover letter 那樣的東西,簡單介紹一下自己,主戰場是其實 Linkedin,因此也有在自己的 Linkedin 上面發文(大概 800 個 connections):

Image for post
Image for post
成效其實滿不錯的

Linkedin 的貼文有個比較好玩的資料可以看,可以看這些人都來自哪個公司、職位還有地區:

Image for post
Image for post
前幾名都是大公司,不意外,因為人多嘛

求職管道就這樣了,除了 Cakeresume 上主動投的三間,其他都是公司 HR 主動聯絡或者是獵人頭介紹的,還有一些是員工來推薦自己公司的職缺。

這次與獵人頭接觸的滿多,詳細心得可以參考:獵人頭觀察報告。接下來就直接進入主題:面試心得。

如果一個面試有面到一輪以上(例如說工程師聊完就直接換 HR 聊,而不是額外再約下一次面試)我就會標明一面 Round1、一面 Round2 等等,若是只有一次面試,我就會直接寫 Round1、Round2。

AmazingTalker

這就是我開頭說的那一間,原本沒有想找工作,看到這間職缺覺得不錯,薪資範圍也有到,所以就把履歷給 HR 了。

一面:HR

然後在這一關就被刷掉了,原因是對方說他們公司想找的人要能「把公司專案當成自己的創業項目」,需要那樣子的熱情,但對方覺得我做不太到(因為我還有自己的教學相關的副業要做)。

我也是真的做不到啦,而且我覺得我去哪一間公司都做不到,但我同時也認為就算做不到,也不會影響到我的工作表現。不過若是對方就是想找這樣的人,那就是我跟他們公司文化不太合,所以在第一關就結束也好。

結果

Hahow

原本 Hahow 其實沒有開前端工程師的缺,只開了一個 Tech Lead,雖然我覺得自己經歷不太符合,但跟朋友討論一下還是決定先投再說,投了以後 Hahow 的 co-founder 之一先來找我聊聊天。

零面:co-founder

也介紹了 Tech Lead 這個缺,開缺是因為前一個 Tech Lead 離職所以要補人,希望能找到比較有管理經驗的人,聽一聽之後我自己覺得能力還沒到所以就說希望能改面前端工程師。

結果

Shopline

其實 HR 已經是大概兩三個月前聯絡的,剛好在翻訊息才看到,就回訊息問了還有沒有開缺,發現還有就開始面試。

一面:技術面

  1. fizz buzz
  2. 求出兩個陣列的差集
  3. 費氏數列

第一題看到題目就知道想問什麼了,畢竟很經典。我習慣先寫一個至少答案對的版本,再來想一下之後怎麼改進,於是就寫了一個 %15 的,寫完以後被問了一個不錯的問題:「如果你是 code review 的 reviewer,你會對自己這段 code 有什麼評價?」,自己的程式碼自己鞭。

第二題沒什麼難度,用 indexOf 判斷一下就好,主要是想考內建函式熟悉程度,真的忘記也可以直接開 MDN 來看。

第三題給了一個迴圈解,然後被問了遞迴解的時間複雜度,腦袋當機的我居然猜了 O(n!),真滴丟臉。這一題算是討論的比較久,因為原本寫的方法有一些小問題,就有讓我再重寫了別的版本試試看,邊寫邊討論有哪邊可以再做改進。

我覺得這種面試方法還滿不錯的,用一些簡單的小題目一來可以刷掉底子很差的工程師,二來也可以直接看到面試者怎麼 coding 還有 coding style,有什麼問題也可以即時地去討論。

考這個大概花了半小到一小,接下來就是針對過往的經歷來問,例如說有問到:

  1. 之前做過的專案
  2. 之前碰過的效能優化的地方
  3. 如何衡量效能優化是否有效
  4. 如何評估導入一項新技術
  5. React + Redux 使用上碰過的困難之處
  6. Redux 使用心得
  7. 如何選擇 CSS framework

問完之後就換我問他們問題,我這次主要都是好奇技術團隊的人數跟架構,他說台灣這邊工程師好像 40 幾個,7 個前端,但不是前端一個 team,而是分成幾個不同的 scrum team,team 裡面有前端有後端有 PM 之類的。

最後問了面試流程,說這關過了跟 HR 簡單聊一下,聊完跟技術主管,接著最後一關是 CEO。

結果

財報狗

財報狗雖然薪資上界是我的下界,但我相當喜歡他們開放透明的風格,在徵才頁面上把許多東西都講得很清楚,例如說面試流程、優缺點以及公司文化跟風格,這一點很吸引我,所以還是投了,想說可以聊聊看。

一面:CEO

  1. 公司組織架構(公司幾個人、技術團隊幾個人)
  2. 技術細節(前後端用的技術、伺服器在哪裡、有沒有寫測試跟 CI/CD)

目前公司 6 個人而已,工程師有 4 個人,團隊規模比我想像中的還小,以公司型態來說就是很早期的新創,不過公司營收是可以完全支撐團隊的,這點我覺得滿厲害。

對方問我的問題有:

  1. 從去年離職之後到今年都在幹嘛
  2. 個人目標是什麼?
  3. 有沒有什麼公司的特性是我絕對不會想去的?

對方聽你回答完或者是問完問題之後,都會幫你總結一遍確認溝通無誤,這個溝通方式滿好的!因為有些問題我回答完自己都想說:「我在供三小」,結果對方總結之後會覺得「對就是這樣,我就是想說這個」,滿佩服對方整理跟歸納的能力。

有時候藉由對方總結,也可以幫自己整理一下思緒。例如說個人目標那一題,我談到教學跟出國旅遊,對方就很疑惑公司怎麼幫助我達成個人目標。

我就解釋說我把公司跟個人目標切開,這兩者對我來說是完全獨立的,在工作上我只求個人成長,增加技術跟管理相關的能力,跟我個人想做的事情完全沒有關係。

對方就幫我總結說:「所以看起來你的目標有分兩種,一種是職涯上的目標,另外一種是工作之外的目標,是嗎?」,我就說:「對欸對欸就是這樣」,這樣分的話就很清楚了。

二面:技術面

  1. 寫 code 時會注意什麼(我回答:coding style 用 prettier + eslint 解、把常用 function 抽出、奇怪的地方加註解)
  2. 有聽過 clean code 跟 SOLID 嗎?(我回答:有但印象不太深刻,然後講了一下自己的理解,後來對方提示 SOLID 代表的東西,我就比較有印象了,然後舉例回答)
  3. design pattern 有用過嗎?(我回答:前端很常出現觀察者模式(event listener 跟 react-redux),但自己唯一用過的是工廠模式)
  4. 測試(我回答:以前寫過 unit test 跟一點 e2e testing)
  5. 引入新框架的考量點跟優先順序(我回答:第一是功能,能不能做出我們所想要的,第二是生態系,是不是夠多人用有夠強的社群,第三是難易度,學習曲線影響了新人跟之後找人,然後會做個 POC 簡單驗證一下)
  6. CI/CD 經驗(我回答:工作上用過,自己之前有串過拿來改作業)

輪到我發問的時間,我問了這些問題:

  1. 前端架構長怎麼樣
  2. git 協作上的 workflow
  3. 碰過的效能問題(這題後來有被反問,我的回答很長就先省略了)
  4. 財報狗的測試
  5. 財報狗的後端架構(回答這個問題直接開圖出來介紹,加分)

他們前端新的頁面是用 Vue,後端是 Ruby on Rails。

面試起來的感覺滿不錯的,對方一樣會總結你剛剛的回答,確保彼此溝通無誤,對於有些答不出來的部分,對方也會講一下他的理解,有種教學相長的感覺。例如說 SOLID 那一題,專有名詞忘記也沒關係,概念有講到就好,後來也有幫我補充專有名詞喚醒我的回憶,講得比較奇怪的地方也會跟你討論。

面試時間差不多兩個小時。

結果

浪 Live

猜測跟我之前做過直播平台的背景有關所以在 Linkedin 上面被找去面試,雖然之前做完直播以後就對直播沒太大興趣,但還是想說去聊聊看,順便交流一下直播會碰到的問題。公司在中山國中站附近,那邊整個辦公室都是工程師,還有另一個辦公室在內湖。

一面 Round1:技術面

考題的部分就是 JS 常見面試題,就不多談了,然後有些陷阱題滿有趣的。

寫完之後面試官進來,是兩個工程師,主要就是談一下之前的工作經歷,做了哪些東西,總之就是聊天的感覺,交換一些技術上的意見,有特別討論了一下 redux-saga 跟 redux-observable 使用上的差異還有心得。

聊得差不多之後(大概一小時)就到下一輪。

一面 Round2:技術副總

第一題

第二題

第三題

除了第一題沒答出來以外,二三題都被說回答得滿好的,第二題說是他面試半年以來答的最完整的,可能是我除了回答加密或是 hash 以外,還明確地指岀應該用哪一種演算法吧?而且之前寫了跟 Cookie 以及 Session 有關的文章其實幫了不少,有些概念是互通的。

技術部份聊完以後就是發問時間,對方花了滿長時間在介紹他們公司的方向還有最近要做的事,講得很完整。在技術部門方面他們工程師滿多人的,前端好像四個,後端八個,還有 Android 與 iOS 工程師。原本進辦公室想說好像有點小,後來才知道原來我看到的都是工程師,那這樣其實挺大的(至少跟我以前待的新創比起來)

聊得差不多以後就先出去了,然後我留在會議室用電話跟 HR 再進行下一輪。

一面 Round3:HR

前兩輪已經面了大概兩個半小時,精神已經有點恍惚了,所以沒想到什麼問題要問 HR 的,因此面的滿快就結束了。

一個工作天以後被邀請二面。

二面 Round1:資深技術副總

  1. 為什麼念哲學系?
  2. 那為什麼會接觸程式?
  3. 有修資工系的課嗎?
  4. 當初怎麼去新加坡的?
  5. 為什麼從新加坡離開?
  6. 從新加坡離開之後在幹嘛?
  7. 為什麼出來求職?
  8. 這次想找的公司型態為何?

以上問題也是這次面試任何公司時幾乎都會碰到的常見問題。在反問時間的時候我問了公司有沒有碰到什麼效能上的問題,他回了一個手機上碰過的實際案例。

聊了大概一個小時,終於到了最後一輪。

二面 Round2:人資主管

問的問題一樣圍繞個人背景跟職涯發展,有問到說他們公司對我的吸引力是什麼?我就很老實給一個答案,說浪跟其他公司對我來說都差不多,就是普普通通,從以前到現在唯一讓我心動過的就只有 Stripe

在聊到過往的工作經歷時,也主動跟對方提說之前每份工作都只待一年半左右,但我不擔心這個,因為時間雖然不長,但我有做到該做的事,對公司也帶來很多效益,能留多久是看緣分跟契合程度的事,沒辦法勉強,但只要待了就會把事情做好。

結果

優訊 Unistar

在內湖的博弈業,以前都沒面過博弈業,想說也可以去聊聊看,看能不能聊出什麼心得,如果價格開得夠高,也不排斥去博弈業看看,畢竟博弈業應該也有很多技術上的挑戰。

進去以後一樣先寫個人資料還有考卷,考題分成三個部分:

  1. JS,結合 this、scope 跟 event loop 的題目,出得滿好的
  2. CSS,要你水平垂直置中一個 float 元素,然後要你畫出 box model,以及寫出常用的 CSS3 屬性
  3. React,給你一個 UI 設計稿問你會怎麼設計這個元件,然後問 key 的作用還有 state 與 props 的差別

題目難度普通,雖然有些我寫不出來就是了。

Round1:技術面

  1. redux 概念可以稍微講一下嗎?
  2. controlled component 跟 uncontrolled component 熟悉嗎?
  3. redux middleware 可以再講深一點嗎?

進去之後做的事情基本上是重構,把舊的 Ember 的 code 翻新成 React,預計要花一些時間,感覺滿有挑戰性的。

Round2:技術主管

  1. HTTP/2 知道嗎?講一下你的理解
  2. CDN 知道嗎?講一下你的理解
  3. keep alive 在幹嘛?

其他問題基本上也是從工作經歷去問,沒有特別記下來問了什麼。

Round3:大主管

後來談到我之前在新加坡工作,然後他問了比較細的問題,例如說公司在哪裏,我那時候就想說他是不是在新加坡工作過,後來他說他是新加坡人(但我真的聽不出來,可能離開太久)

在技術方面大概問了一下怎麼維持 code quality,一開始我就說 code review,後來他說這已經是寫完 code 以後了,那之前呢?我就稍微補充一下 prettier 跟 eslint 一些工具的使用。

其餘的一樣問了前面那些問題,就是人資型的問題,像是那種什麼生涯規劃、選公司考量還有期望待遇之類的。

結果

Shopback

應該滿多人用過這個服務的,就是買東西可以拿回饋,這間其實之前在新加坡就有聽過,有朋友跟同事都是從這間出來的。職缺的話是 full-stack,雖然我是走前端但是要我做後端也不排斥啦,所以一樣投。

一面:HR

  1. 上一份工作的工作內容是什麼?
  2. 使用者人數有多少?
  3. 為什麼離開上一份工作?

還有針對這次求職問一些問題:

  1. 面試狀況(已經到哪個階段,剛開始還是正在面)
  2. 喜歡的公司型態
  3. 如果都拿到 offer,會怎麼選擇?

接著我問對方的問題是:

  1. 工程師的工作內容
  2. 工程團隊之間的溝通
  3. 公司福利(假期、研討會補助)
  4. 之後的面試流程

接下來會有作業,做完之後有過就 on-site,先技術面(白板題),面完之後跟人資談。

結果

OneDegree

在批踢踢很常看到徵才文(雖然有些負評就是了),從一開始就有注意了,發現還在招人之後就透過 Cakeresume 投遞,後來收到一個內部成員的信件說想邀請面試,在 Linkedin 上也被台灣負責人問說要不要面試,後來成功與 HR 在 Linkedin 上取得聯絡,開始面試。

Round1:技術面

自我介紹我主要是講前兩份工作的內容,然後他會再從那裡面去問問題,例如問說之前碰過最難的挑戰是什麼,還有之前有沒有處理過資安相關的問題,以及效能上的優化等等。

我自己覺得答的滿爛的,英文真的要練習,不然就只能像我這樣丟人現眼,哭哭。幸好問一問之後他說:「那現在可以切成中文了」,我才鬆一口氣。

接著是現場其他面試官的提問,有問了 functional css 使用上的感想還有 SSR 的經驗,這次面試下來發現 SSR 幾乎是 React 的必考題,有實作過的話應該還滿加分的,也問了一些其他的像是 TechBridge 之類的的問題,技術上的問題我覺得並沒有問到很多。

Round2

總之聊的時候覺得滿聊得來的,氣氛都不錯,就有種朋友間聊天那種感覺,最後聊到期望待遇,然後很有誠意的直接現場發 offer。

結果

面試總結

然後大部分面試都會以 Zoom 線上面試為主,到辦公室的比較少一點,應該跟疫情滿有關係,因為有些公司我搜心得的時候大多都是直接到現場去面試。

關於技術方面的考題,可能是因為要找比較資深的,所以幾乎沒有筆試了,就算有對方通常也不會看,可能預設你都回答得出來。問的問題主要圍繞在以前的工作經歷中做過的東西,常見問題像是:

  1. 介紹以前工作上做了什麼
  2. 以前碰過什麼困難的技術問題?
  3. 有做過什麼效能優化嗎?
  4. 有寫過測試嗎?
  5. 與其他團隊成員還有設計跟 PM 的溝通方式為何?

以 React 來說,常見問題是:

  1. 有做過 Server-side rendering 嗎?
  2. 有用過 redux 跟 middleware 嗎?
  3. 用什麼方式管理 Style?例如說 Styled component?

在問題的回答上會比較在意的是要有自己的看法,舉例來說,我就回答了不少次 redux-saga 跟 redux-observable 的差異還有使用心得,之前在 Modern Web 2018 有講過這個主題,所以特別熟悉。

實戰上的經驗也很重要,Server-side rendering 幾乎每間公司都有問,我在前兩份工作都有實作到,也有不少東西可以講。

回答的深度跟完整性也可以加分,例如說效能優化很常考, 可以從特定框架(例如說 React 或是 Vue,雖然 React 不是框架)的角度來回答,也可以從減少 HTTP request 以及降低 bundle size 的角度來回答,講更細的話可以講到減少 CSS 大小、減少 JS 大小(dynamic import 與 code splitting 等等)還有減少圖片(像是 webp 或是 lazy loading)。

如果你對這方面的優化很有興趣但工作上卻碰不到,可以試試看我與學生合作的專案:新拖延運動黑客松,雖然說能做的有限,但也不失是一個練習的機會。

喔對了,這次面試沒有碰到任何演算法相關題目或者是白板題。

再來是這次面試有一個優點也是缺點,那就是知名度。因為有在經營 TechBridge Weekly 還有技術部落格,去面試的時候有些面試官第一句話就是:「我有看過你的文章」,或是「我有在看 TechBridge」,一方面很開心在做的東西有人看,另一方面也是感到有點壓力。

為什麼有壓力?怕對方幻想破滅啊!看文章覺得哇這個人好像不錯,結果找來面試被看破手腳,怎麼這個也不會,那個也不會,哭哭。我都已經想好會不會哪天在靠北工程師看到自己出現在上面:「有沒有某個常寫部落格的工程師,卻連 XXX 都不懂的八卦」。

然後這次被問的個人相關的問題,最常見的絕對是:

  1. 為什麼去新加坡?為什麼又離開?
  2. 離職後這一年在幹嘛?
  3. 為什麼念哲學系?怎麼沒唸資工系?

一些個人背景相關的問題(為什麼念哲學系、怎麼沒唸資工、有修了哪些資工系的課、什麼原因開始學程式),從找第一份工作的時候就一直被問了,沒想到工作了四年以後還是會被問一次,不枉費我還特別寫文章來解釋這段故事。

總結

所以這次找到自己覺得不錯的缺,思考幾天之後就答應了,後續的面試也都全部推掉,畢竟再面試下去意義也不大。從開始對外求職一直到求職結束,其實也就兩個禮拜的事情而已,比第一次求職的時候順利許多,心態上也很不一樣。有關最後怎麼選擇工作還有其他心得,可以參考:關於求職,連我自己都不知道我要什麼

五年前第一次求職,大部分時候都像是在被考試,而這次可能是因為經驗變多了,比較像是技術上的交流,交換一下對某個問題的意見,比起考試更像是同事之間的討論。反正知道什麼我就把經驗分享出來,不知道的就說不知道。

這次使用 Linkedin 求職,有不少不認識的網友們私訊推薦職缺,私訊中已經有先感謝了,在這邊再公開感謝一遍,也順便幫這些公司曝光一下,應該都還在徵人:

  1. 幣安
  2. Grindr
  3. 台灣人工智慧學校
  4. 17 直播
  5. Omlet Arcade
  6. Verizon Media

大概就是這樣啦,大約兩週以後要開始上班了,希望一切順利!

重度拖延症患者,興趣是光想不做,有很多想做的事,卻一件都沒有執行。無聊的時候喜歡寫文章,發現自己好像有把事情講得比其他人清楚的能力。相信分享與交流可以讓世界更美好。Medium 文章列表請參考:https://aszx87410.github.io/blog/medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store