---
title: 2018 前端工程師面試心得
date: 2018-03-15T10:44:17+08:00
tags:
  - Interview
  - Front-end
cover:
  image: http://weihanglo.tw/posts/2018/2018-interviews/hahow-frontdoor.webp
  caption: 三次面試中唯一一張照片
---

這是我在 2018 年 Q1 的求職面試心得，不算實習的話，就是第一次正式求職。記錄下來作爲人生里程碑，也分享給大家參考。

_（撰於 2018-03-15）_

<!-- more -->

## 背景

森林系畢業，沒參與過任何資工必修課，是個大四才起步的自學傻子，啟蒙語言是 R。大四時協助教授建置 Linux server 並擔任 server admin。畢業前進入業界擔任 iOS 開發實習生，並在畢業後轉正職，2017 年 Q3 才開始全職開發前端工程。正職工作經驗約 1.5 年。

我的優勢是學習力旺盛、有 native app 開發經驗、熟悉且熱愛 Linux 和 command-line、熟悉電子書市場與相關技術、善於溝通傾聽而不堅持己見、喜愛分享所學所見。

我的劣勢是對 UI 較不在行、CS 知識不夠紮實、臨場反應不佳易緊張、沒有跑過真正的 TDD 和嚴謹的軟體開發流程。

希望我的背景能給同樣境遇的朋友一些參照。

## 求職需求

由於前東家是上櫃公司，規模不小，制度完善，但也稍缺彈性，所以求職希望以新創公司為主。

以下依優先順序排列，薪資等基本需求不列入：

- 新創團隊或具有新創氛圍
- 技術討論風氣盛。
- 有能力相仿或更強的 co-worker，不必自幹。
- 工作流程明確。
- 重視軟體品質（CI／CD、單元測試）。
- 同事年齡相近。
- 對社會有正面意義。

## 應徵企業列表

以下是這段時間我有去應徵的企業，如果你對細節沒興趣，[可以直接 end](#一些想法)。

- [CakeResume：錄取但婉拒](#cakeresume)
- [Hahow 好學校：錄取](#hahow-好學校)
- [Appier 沛星互動：錄取](#appier-沛星互動)

## CakeResume

<div style="text-align: center; padding: 2em;">
  <img src="cakeresume.png">
</div>

- 職缺：全端工程師
- 應徵方式：使用 CakeResume 投遞 CakeResume 的履歷

若是近年來想求職的朋友，想必對 [CakeResume][cakeresume] 不陌生，CakeResume 是線上履歷編輯平臺，利用拖拉元件的方式，快速搭建個性履歷，並提供企業刊登職缺。
動機

會想應徵全端工程師是因在學期間協助實驗室架設 server 與 DB，對後端頗有興趣。看到 CakeResume 全端缺便躍躍欲試，自己對新創團隊的運作方式十分好奇，加上媒體轉載許多創辦人的創業過程分享，頓時熱血沸騰，從頭打造服務百萬用戶的機會實屬難得。

[cakeresume]: https://www.cakeresume.com/

### 面試

面試地點是在 AppWorks 之初創投的空間，由於我是約週一晚間面試，因此只有創辦人來面試我，一問之下，才發現公司規模比想像中更迷你。面試內容不外乎自我介紹、作品展示等，並沒有技術考題。創辦人很善於傾聽，會順着你的話瞭解你的人格特質與能力，整體而言，面談十分舒服，相談甚歡。後來我們開始大談各種技術選型，因爲新創的緣故，目前是用開發較快的 Rails，比較缺乏大公司那種完整的 CI／CD 流程，我表達了工作的預期，雖然薪資與工作環境沒有符合我的需求，但感覺創辦人希望我能考慮考慮，或許是人格特質符合徵才需求吧！

### 結果

週末之前就收到回覆。美其名是錄取通知，其實比較類似邀請成爲夥伴，共同奮鬥打拚。當下其實滿兩難的，CakeResume 的理念很棒，創辦人很誠懇又熱情，甚至最後盡量將薪資拉近我的預期，但礙於我內心希望有 co-worker 共同討論成長，不希望完全自幹，所以就婉拒了，非常感謝創辦人的盛情邀約。

在面談中，創辦人有句話一直縈繞在我心中：「CakeResume 不是科技業求職平台，透過履歷編輯工具，協助相對資訊弱勢的其他族群曝光自己，展現他們的長才！」平臺上早有許多廚師、理髮師等各行各業的人使用履歷服務。如此崇高的理念，令我非常感動，也回憶起踏入軟體圈的初衷與期許。誠摯推薦大家使用分享 CakeResume 的服務！

## Hahow 好學校

<div style="text-align: center; padding: 2em 0;">
  <img src="hahow.png">
</div>

- 職缺：前端工程師
- 應徵方式：主動在 Hahow 官網投遞履歷

[Hahow][hahow] 是在華語市場頗爲知名的線上課程募資平臺，至今有幾十萬會員數與豐富多樣的線上課程。和其他平台的差異在於 Hahow 使用募資的方式，確保學生人數與課程品質，並提供同學與老師，還有同學間完善的交流與作業批改機制。]

[hahow]: https://hahow.in

### 動機

應徵 Hahow 工程師並非偶然，早在 2017 Q3 就看到楚楚動人的徵才文，不過當時沒打算離職。爾後不久就讀到 Hahow 在他們的[技術 Medium][hahow-tech] 上許多軟工與對軟體品質的分享，對於許多還在 `rsync` `tar` 作部署備份的手動工程師，有如荒漠甘泉。 一月初偶然在 Facebook 上瞥見徵才貼文，期限只剩幾刻鐘，「此時不投，更待何時」。這時候你絕對會慶幸**平常有整理履歷和 LinkedIn**。

由於 Hahow 的面試流程較有意思，接下來以時序分段落介紹：

[hahow-tech]: https://tech.hahow.in/

### 線上測驗

幾天後，收到 Hahow 的回覆，獲得第二階段線上測驗的門票，三十分鐘 3 題 JavaScript 演算法，用的是 RemoteInterview.io 平台。老實說我其實滿緊張的，LeetCode 刷得不多，又沒受過專業演算法訓練，甚至上機當天還在擔心 online editor 沒有 VIM keymap，還好平台編輯器使用 CodeMirror，沒有太奇怪的 keymap 設定，但也因此失去一些寶貴作答時間。

題目就是 LeetCode Easy 的程度，也有考到 closure 概念（有點忘了），不過實在是太緊張，有個基本到不行的 Dynamic Programming 題，寫到最後居然卡住，當時就覺得駭啊，只好繼續調 CodeMirror 的 VIM 設定放鬆心情。默默祈禱 Hahow 評分除了過測資，也會參考解題邏輯。

### 第一階段面試

幾天後，收到 on-site 面試邀約。面試官約莫 30 歲，是個略靦腆但好相處的人，一開始就介紹自己是四個 co-funder 之一，以三十人的小公司來說，不難想像面試都是 co-funder 自己來。同樣從背景，工作經歷問起，也有技術相關的討論，這時我才知道，原來 React + RxJS 早已滲透每個人心中，新創公司不是已經導入就是正在導入，Hahow 也不例外。突然話鋒一轉，面試官開始技術面試，主要是考觀念，例如 SPA 爲什麼流行？如何在 SPA 做 SEO 等等，必須「清楚理解每種技術的優劣」，並學會「在不同情境下選用適合的技術」。也有 JavaScript 必考題：Promise 與 callback 的比較，還好之前有[認真研究 Promise][weihang-promise]。除此之外，少不了白板面試，題目是簡單的 array 題，只是腦袋突然打結，讓面試官撒泡尿才寫完。

接下來是求職者發問時間，我必問的問題之一是：「你如何得知今天該做什麼」，其實我並不在意團隊跑不跑 scrum 這種形式上的流程，只要有明確的任務管理，不會讓工程師閒着發呆，或是任意插件就很 OK 了，熱門的開發流程並不總是適合每個團隊。

由於是新創公司，我也詢問了公司目前資金與營運狀況，面試官也順便介紹了其他 co-funder 的背景，過程就像老友聊天一樣放鬆，一不小心面試就從九點聊到十二點，蠻不好意思的。

[weihang-promise]: https://weihanglo.tw/posts/2017/javascript-concurrency-promise/

### 小專案

一面完，面試官告訴我有一個 mini project，主要是了解 coding style 和實際的能力，有辦法的話，可以嘗試使用一些 promising 的技術展現自己。其實做 mini project 的成本不低，不過我還是稍微花了心力，在週末趕完，[程式碼在此][hahow-mini-project]，有興趣可以參考。個人認爲小專案不僅可體現實力，更是一個有條理地說明程式架構的機會，寫出讓人快速理解文件，反而比實作還燒腦啊！

幾天後，就收到回覆，Hahow 針對專案實作提了一些問題，我也簡單提供修正與改善的方法，就進入最後面試階段了。

[hahow-mini-project]: https://github.com/weihanglo/hahow-recruitment

### 第二階段面試

二面主要是看個人特質及目標與公司的契合度，面試官是兩個 co-funder，一個技術背景，另一個負責營運。同樣也是自我介紹，聊聊爲什麼想要和 Hahow 一起奮鬥，這部分與一面重複，不過有了前次經驗，這次嘗試抓住對方想聽的重點，也訓練自己在壓力下維持口條清晰。

由於前份工作也有教育相關的部分，我就開始針對 Hahow 的政策、理念和目標開始發問，再導引到自身擅長的領域。這邊就不諱言的舉個例子，Hahow 的理念固然是推廣教育，學那些學校不會教的事，但對於經濟弱勢的朋友，有些課程仍然負擔不起，有沒有解決辦法？其實這不只是 Hahow 的問題，坊間甚至整個國民教育，都有資源不均的情形，當我們揮舞著「唯有讀書高」的大旗，是否有些人根本無法心無旁騖地好好學習？

這次面試一不小心又談了兩個多小時，不過目前遇到的 3 個 co-funder 都很誠懇，也願意將許多營運面的狀況分享給我。傳說在 Hahow 的 slack 上，這些都是公開的祕密，也許所謂扁平化的管理就如斯。

### 結果

經過一番電話交涉，最終 Hahow 給了符合預期的 package，雖然過程有點冗長，仍然感謝 Hahow 如此器重我。
Hahow 非常注重學生老師互動，也有心推廣各式各樣的技能，而非獨尊程式設計。從 [Hahow 的部落格][hahow-blog] 就可一窺這群文青多麼理想多麼可愛，希望看倌也能從 Hahow 豐富的課程中學到些什麼，翻轉臺灣金錢學歷至上的教育。

哦還有一點，Hahow 的男女比例很 OK。

[hahow-blog]: https://blog.hahow.in/

## Appier 沛星互動

![](appier.png)

- 職缺：前端工程師
- 應徵方式：主動在 Appier 官網投遞履歷 + 內部推薦

談到 [Appier][appier]，應該無人不曉，被譽爲下個台機電，未來的新創獨角獸，全球百大 AI 企業。目前主要產品是 AI 廣告與跨螢追蹤等。客戶多是大型跨國企業。Appier 可謂近來最火熱的公司之一。

[appier]: https://www.appier.com/

### 動機

很早就知道有前端缺，礙於自信不足，沒有嘗試，因緣際會下，朋友說有缺可以幫忙內推，加上很喜歡 JSDC 2017 兩位 Appier 講者給的 RxJS 與 FP 的演說，就主動循正常管道投遞履歷（原以為履歷直接交給朋友就行）。

### 第一階段面試

履歷過關後，便是第一次 on-site 面試，地點是在臺北信義區的總部內。我承認我是土包子，看到門禁設備像捷運一樣要領磁扣過閘門，開始懷疑走錯地方了。

#### 工程師

這次面試共有三組人馬，第一組是兩位前端 leader，與前面兩間公司不同，很直接就切入技術層面，先是問選擇 Redux-Observable 實作 Hahow 小專案的理由（不是 Appier 面試嗎，怎麼問起 Hahow 來了呢？），蠻欣慰地是他們很用心看 GitHub 和作品集。接下來繼續追問 Observable 的概念，不知道哪根筋不對，我居然拿出筆電 demo 簡單的 Observable 實作。面試官就說：「既然拿出筆電了，那我們來**從頭實作一個 Promise 吧！**我跟你同時寫。」實作 promise 談何容易，雖然面試官不斷提點我方向，可惜最後只有半成品，還好實作方向正確。

這硬仗過後，便是口頭觀念問答：

- 原型鍊的觀念
- 解釋 CORS
- 爲什麼送 request 伺服器沒收到 cookies（因爲沒有加 `withCredentials`）
- 何謂 third-party cookies

感覺起來都是 tracking 或廣告常遇到的 issue，除了 CORS 最近實作 [static file server][sfz] 剛好有接觸，其他答得勉勉強強，不過面試官們很和善，也很願意聊技術，據說連 [Reason][reason] 都進 production 了，果真玩很大！


#### PM

這關大概算是 PM 面試，一位漂亮的 PM 姐姐和 PCMan（沒錯，就是 PCMan），PM 姐姐講話條理分明，也很親切，主要詢問個人特質和溝通技巧，遇到難以溝通的情況會怎麼應對；輪到 PCMan 就毫不留情開了白板演算法，選擇一種語言寫實際程式碼。「API 忘記了就儘管問沒關係」PCMan 如是說。我當下居然沒選 JavaScript 而選擇許久沒碰的 Python，導致作答花了不少時間（應該要選 Rust 的）。題目雖不難，但 PCMan 會依循你的程式碼脈絡深入探討你怎麼分析複雜度，例如我提到了 amortized analysis，PCMan 就順著追問平攤的算法與定義，甚至最後討論到 Python built-in function 實作上與 for-loop 解法的 memory allocation 比較，果然功力深不可測。

既然遇到 PCMan，我就順便問了一些 [side project][sfz] 遇到的疑惑，雖然沒有直接替我解惑，卻提點不少方向，讓我順利修正一些 issue，很高興能看見傳說中的人物。

#### 人資

人資姐姐這部分就比較輕鬆，是常見的人資問題，也閒聊在此工作的光景，但前面兩關耗時太多，早已超過下班時間，對姐姐挺不好意思，不敢聊太多。這邊要幫忙緩頰，我覺得不管是工程師、PM 還是 HR，每個人都非常友善，沒有鄉民口中的趾高氣昂，也許當事人才知道實情，別再任意散播啦。

[sfz]: https://github.com/weihanglo/sfz
[reason]: https://reasonml.github.io/

### 第二階段面試

二面安排在週六上午，很神奇的時間，想必面試官是高階主管。

#### CTO

第一關是 CTO，風格獨特的技術人，先談談過去的經驗，而後從經驗延伸相關問題，大概如下：

- 爲什麼用 React，jQuery 不好嗎？
- 什麼是 closure？
- 什麼是 CORS？哪些請求需要開啟 CORS？
- 你說 JSONP 可以 cross origin，那怎麼實作 JSONP？
- 客戶說網頁跑很慢，你要怎麼檢測？

後來 CTO 似乎翻到我寫的「[所謂最好的面試題][best-questions]」，就拿來考，我有點太緊張，一直試圖回想自己寫了什麼，搞得答題像背答案，答得不盡理想。最後我問了公司未來的產品與規劃，當然沒辦法得知新產品的內容，但依稀聽得出來 Appier 不僅在廣告下足功夫，且將邁向下個階段了。

這邊平反一下，也許 CTO 面試時會打斷面試者說話，但通常都是離題或誤解才會出手。而且用心觀察，可以發現 CTO 只是說話急促，並非盛氣凌人，當天我有告知 CTO 他的語速過快，而他也有試圖慢下來講（雖然還是很快）。我認爲每個人的言談都自成風格，若不適可以當場提出，相信大多數人會試著改善，事後發文抨擊對事情無益。

#### CEO/COO

CEO 和 COO 這一關偏向人格特質，先是問了離職原因，我說想找年齡相近的 co-worker，CEO 馬上笑笑地說自己很老要被淘汰了，我趕緊補上說因爲前同事都生小孩去了，COO 接著說我才剛生完小孩呢！這下慘了，馬上踩了兩個雷。之後不免俗地問了自認為的優缺點，對自己的期許，以及生涯規劃。我也提問了公司目前最大的困難是什麼？答案不是資金而是跨國溝通，蠻令人訝異的，但也由此得知 Appier 已經走過新創風險最高的那里路。

不論是 CTO、CEO 還是 COO，身爲公司的領導人物，卻沒有一絲高姿態，也願意親自面試工程師，尊重每位面試者，難能可貴，大家別在捕風捉影啦。

### 結果

錄取。縱使整個過程有個人特殊狀況，仍感謝 Appier 各位大大協助我排除，讓我可以很放心的面試。Appier 真的高手如雲，能在這邊工作學習絕對進步神速。

[best-questions]: https://medium.com/@weihanglo/answers-to-chernys-interview-questions-ed5b35dce930
## 一些想法

原本想要分享一些面試準備方式，但發現自己沒有依循特定模式準備，LeetCode 也很偶爾刷一刷，而且四處都有大神分享如何拿到 FLAG 或 BAT offer 的文章，我就不誤人子弟了。

從 3 人剛孵化的團隊，到 30 人逐漸穩定的熱血新創，面試到近 300 個員工的未來獨角獸。每一個創業階段都經歷過，會看到起步期趕著做出 MVP 證明理念，初期商業模式與理想的拉鋸，到擴張期捨我其誰的傲氣，甚是有趣。雖然自己沒能力領導團隊，有幸身在其中參與面試也滿足了。

一連串的面試下來，我覺得最有價值的是「了解自己」，爲了面試，你必須定期整理自己的履歷，反省自己的長處與缺點，並檢視這段歲月究竟成長多少。有時候我們會汲汲營營薪資福利，但機運勉強不來，寶貴的面試經驗才是你最可靠的財富。失敗了，就過半年一年再投一次吧！

我最喜歡問面試官：「你喜歡在這裡工作嗎？」很多時候，得到的是意味深長的微笑，我依稀記得以前部門主管的一席話：「工作不是人生的目標，卻占了一半的人生，學習與之共處才能快樂工作。」工作當然有愉快也有不爽，不過，在臺灣這種低薪、高工時、職場霸凌嚴重、勞權低落的就業環境，除了想辦法讓慣老闆無所遁形外，也別忘了鼓勵那些願意照顧員工，讓員工快樂工作的優良企業。

最後，**堅持初衷，擇你所愛，選了就不要後悔**。

祝福各位都能找到理想中的工作！
