2021 軟體工程新鮮人面試心得 (Appier/Umbo CV)

Rain Wu
14 min readAug 11, 2021

--

求職也差不多告一個段落,透過這篇簡單的隨筆記錄一下人生,同時也分享一些職場資訊與面試經驗回饋給社群。

photo by Danielle MacInnes on Unsplash

個人背景

  • 高中開始自學程式開發遊戲,大學後開始轉向網頁後端開發。
  • 應屆從成大資訊系畢業,在學期間都在混不常到校被當了不少必修,GPA 只有 3.3 而已上不了臺面。
  • 實務經驗包含新創實習、獨立接案、產學合作、實驗室專案、短期合約傭兵等等都有過。
  • 當過幾次 technical conference 的講者,也在幾個技術專欄貢獻文章。

詳細技能樹

  • Programming Language: Python (5 yrs), Go (2 yrs)
  • Storage: Redis, PostgreSQL, Cassandra, Elasticsearch
  • Observability: Prometheus, Grafana, New Relic, AWS Cloudwatch, Kibana
  • DevOps Tools: Docker, Docker-compose, Terraform, Packer, Rancher, Drone, GitHub Actions, Helm
  • Others: AWS, microservices, distributed system, GraphQL, GitFlow

面試動機

大概二月到三月時我也跟著大多數應屆畢業生一起面了幾間刷題大廠的 new grad role,那時大概 leetcode 刷到近 300 題還是被線上前測洗臉洗到破皮,即使僥倖通過也因為尚未服完兵役,而被給了軟釘子碰或是私下善意勸退等當完兵後再來。

當時我大概低潮了一兩週,時常和朋友講幹話抱怨菜雞才考刷題、面試官沒種正面硬剛後端技術等等,感謝身邊幾位朋友當時聽了一堆沒營養的垃圾話呵呵。一方面因為我自己閒不下來的個性,疫情不斷延後兵役入營時程,畢業後可能有半年以上的空窗期,雖然可以發幾個 PR 解解憂愁但這麼長的時間對我來說還真他媽折磨。

另一方面則是對於「軟體工程面試一定要刷題」的內心掙扎,我在過去實習面試時就因為死不刷題而被刷掉過很多次,年初臨時抱佛腳刷了又被洗臉我還真的有一瞬間考慮是不是把時間都拿來刷題好了,反正刷題關卡沒過也不會有後續的機會展現網頁後端實力。

後來應該是因為過去累積的人脈、公開演講、專欄文章漸漸有影響力,長期佈局的被動求職策略開始發酵,平均每週都會一兩則面試邀約(雖然有些有點奇怪就是了)。但也因此我才能重新檢視自己的技術與市場定位,規劃合適的求職策略,也才有這篇文章能夠分享回饋社群。

找公司策略

對於幾間我有長期關注並且有興趣加入,只是因為兵役問題而可能被刷或被勸退的,我有先整理到另一份清單了,因為蠻多公司面試有 CD 時間。所以我算是用了兩階段求職的策略,當兵前先接觸願意讓我留職停薪的公司,若找不到合適的就接受現實等當完兵後再面第二輪。

以下是幾個我個人選擇投哪些公司的大方向以及優缺點,如果情況和我相似的可以參考看看:

偏向狙擊而不是海投

可能是因為天生的惰性讓我完全不想一次投十幾間甚至數十間,真心覺得短時間內面那多間的人很強,我個人同時五間公司就是極限了。由於我自己已經十分確定要走向後端,也接觸過再進一步衍伸的幾個分支,所以能蠻肯定的只接觸自己有興趣的公司。

最大的好處就是面試範疇和品質較為理想,可以全力集中自己擅長的領域準備與發揮,對於自身技術有自信的人可以主動反問提高層次脫穎而出。同時由於能精準符合雇主的需求,所以能稍微享受賣方市場的優勢,拿到 offer 的比例非常高,開的薪資數字也明顯高不少。

缺點很明顯的心理壓力會大很多,同時面 20 間也許很快能拿到第一個 offer,而且被其中一個拒絕其實拒絕其實不痛不癢,但只面 5 間就會很抖。然後也需要有人脈來獲得足夠產業資訊和各個企業情況,不然可能會被不實八卦謠言影響,或是被面試主管畫大餅拐去賣肝。

排除刷題為主的公司

到了最後我仍是堅信「不需要刷題也能展現自身實力」的理念,既然刷不過刷題手那我索性就不面了,FAANG 等級的公司確實想進去開開眼界但不急,至於其他的就算了。因此我踢除了常見的刷題大廠和大量本土公司,以及部分的 new grad 職缺。

好處之一就是不用浪費時間刷題,這實在太誘人了。其次是以 system design 和過去經驗為面試主軸的企業,個人感受多半是同事技術實力和開的薪資都在一定水準之上的外商或優質新創,蠻符合我的職涯期待。反觀刷題廠變數較大,有不少是台商慣老闆和沒啥發展的中小企業。

缺點主要就是刷題關卡多半是為了 new grad 或 junior role 設計的,因為正常的學生走學校那套課程出來還真的啥都不會,沒什麼好問的只好考刷題。擺脫了刷題後技術面硬度明顯增加,有幾間我直接面 senior role 了,有底蘊扛著不被電爆是基本,還要再軟實力等等方面都有發揮才能確定拿下 offer。

其他瑣碎的個人偏好

  • 有錄取 Bootcamp 速成工程師的團隊直接排除
  • 商業模式模糊不清、沒有 work life balance 的也是直接排除
  • 在技術面時面試官被我反問問題回答得太爛的也是直接排除
  • 遇上指派 take home project 的主動詢問是否可跳過不寫或換成其他面談性質的關卡,對方堅持一定要寫的話就終止面試

雖說這麼挑惕的條件確實再次壓縮了我本來就不多的口袋名單,但有這類特徵或問題的公司我就算錄取了也不會去,那我不如直接早早從願望清單中排除掉。這裡的排除並非直接停止面試,我還是會盡可能拿個 compete offer 來抬高身價,但 take home project 實在太浪費時間了所以只好直接拒絕。

面試過程

  • 幾個月下來陸陸續續面了十多間,但我沒有記下來有些太久了我已經忘了。所以就只詳細寫兩個有朋友幫忙內推,肩負著不能讓他們丟臉的壓力所以我印象比較深刻,其他的都是在 Linkedin 上被邀請的就沒記那麽清楚了。

Umbo CV(盾心科技)/ Backend Engineer

06/28 內推

  • 朋友說他們正在徵同事,問有沒有在找工作,於是請他幫忙內推。

07/05 一面

只有一關:技術主管 * 1

  • 先聊聊學校 lab、實習以及社團的經驗。
  • 技術問題偏硬,但主要是圍繞履歷內容和過去經驗,包含 hybrid cloud 架構、redis cluster、SLA 達標難題、藍綠部署流程設計、elasticsearch 的 shards 和 replicas 等等。
  • 我提問時也反問技術,比如為何深度採用 mongoDB,以及相關的 aggregation 和 two-phase commit 踩雷經驗等等。
  • 好像因為聊太多導致嚴重超時了,但看起來沒關係。

07/13 二面

  • 信上是寫兩關 tenical interview 和一關 behaviour interview,不過後來 HR 也上線聊了一下,也許該算是四關。
  • 一面有足夠時間推高技術深度,二面的節奏明顯較快,感覺有預先設計好問題,也希望讓將來有機會合作的同事都能接觸到。
  • 每個段落之間都有十分鐘左右的休息。

第一關:軟體工程師 * 2

  • 先交流了些寫技術 blog 以及當專欄作者以及在新創工作的經驗。
  • 技術面偏簡單,只記得 LRU cache。
  • 我覺得沒深入聊有點可惜,於是主動提了些 raft 和 etcd 的話題聊了一下時間到了就換下一關。

第二關:軟體工程師 * 2

  • 對方說對每個部分都有興趣,所以我就用 STAR 框架快速帶過一次。
  • 技術面偏硬,但主要是圍繞履歷內容和過去經驗,被集火了一波 AWS 上不同技術之間如何選擇的問題、cache 的原理和 blue-green deployment, canary deployment, rolling upgrade 之間的優缺和差異。
  • 輪到我時反問了公司大量佈局監視器的業務模式,測試時該如何模擬大量終端裝置的隨機連線情境。

第三館:技術主管 * 1

  • 和一面同個主管,先關心了下我面試的體驗,然後問了些團隊合作方面的 behaviour question。

第四關:HR * 1

  • 全英文面試
  • 問了為何想加入 Umbo CV、自己的優缺點以及為何離開上一份工作、對薪資與同事的期待、目前是否有其他進行中的面試等等。

07/23 CEO Stage Interview

只有一關:CEO * 1

  • 全英文面試
  • 先被關心了一下學業狀況、然後也聊了下平時的興趣、以及最近放假都在做什麼。
  • 輪到我反問時我問了 CEO 工作日常、創業最大的挑戰、以及為什麼想邀請我到終面,希望我能提供團隊什麼樣的價值。

令我印象蠻深刻的是對方會很深入的聊每個話題,比如我提到平時會看書,他就問了我最近看的書名和主要內容,我提到最近有在打 Albion Online 他好像還立刻查了下這遊戲,然後問我是玩哪個職業,我回說這遊戲不綁定職業,不過我多半是拿弓箭,真要說定位的話算是 Ranger。不確定是不是為了確認英文能力才聊這麼深入,但對方蠻有誠意想認識彼此感覺蠻棒的。

有個難忘的問題是問到國小國中最喜歡做的事是什麼,這個問題還真是問進了我心坎裡,當下大量童年回憶湧現,我很想在裡頭找些重要的東西但好像怎麼找也找不到,腦袋一時間當機只好回說都在讀書,畢竟我國小國中還真的是在地區學校一路班排第一升學上來的。

幾秒後我才想起我之前是個愛畫畫的小孩,現在也還是,只是技術更好了,工具變高級了而已,現在我依然拿著電繪版和電繪筆在創作,並且永遠不會讓這成為我的主要收入來源。我和他介紹了下之前用 Python 寫的 Blender 打光相關工具以及分享最近 render 的幾張圖。

Appier / Software Engineer, Backend Development (Internship)

07/07 內推

  • LinkedIn 上看到職缺,就請朋友幫推個。

07/19 一面

總共一關:軟體工程師 * 3,分別來自兩個不同的 product team,為了方便以下簡稱 A 和 B

  • 互相簡短自介,一如往常的被關心了一下學業狀況,也先問了我對於 Appier 的認知,然後再補了些簡介。
  • 面試硬度適中,硬核的底層原理不多,但很多工程問題,主要也是圍繞過履歷內容及過去經驗為主,也有一些情境題。
  • 一開始針對過往經驗問了下實習、學校 lab、之前在 conf 演講的內容、以及在社團中帶 go 語言讀書會導讀 open source project 的經驗
  • 硬技術有被問到過往的 conf 演講內容、AWS 架構設計、go 語言中的 goroutine 原理及大量 goroutine 運行時可能遇到的問題。
  • 工程問題有聊到過去為團隊導入 CI / CD 的經驗、immutable infrastructure 應用、SLA 不達標該如何提升、多個 subteam 如何在 AWS 架構上做好隔離等等。
  • 情境題則是技術選型、技術導入、團隊溝通都有,比如跨職能或跨團隊溝通的經驗、如何和其他人溝通該採用誰的方案、如何快速上手一門從來沒摸過的技術、如何在開發節奏緊湊的情況下維持程式碼品質、如何帶領上手專業技能。
  • 最後有個面試官貼了自己的 blog 連結上來,於是我也不甘示弱地貼了我的筆記連結(有工商機會不好好把握嗎?)。

07/20 phone call

  • HR 打來說希望以正職的 position 邀請我進到下一關面試,當兵期間可以留職停薪,並火速幫我排好了下個階段的三個面試,效率奇高。
  • 隔了一個多小時後 HR 打來說除了 team A 外,一面時的另個 team B 也想以正職的機會邀請我,所以再加排了一個面試。
  • 因為這關的面試主管我都不認識,所以先和 HR 要了每個人的 Linkedin profile 來認識一下。

07/21–07/22 二面

  • 都是部份 technical question、部分 behaviour question 的關卡,不確定怎麼分,但總之是四關。

第一關:Product Team Lead * 1

  • 互相簡短自介後,對方先開始介紹了下他所帶的 product team
  • 先閒聊了下實習和專案經驗
  • 貌似沒有太硬的技術問題,工程問題則是被問到對於 Data Engineering 的理解、導入 CI / CD 遇到的阻力、訂定 integration test 和 end-to-end test 流程的經驗、撰寫技術文件或新功能 proposal 的內容架構。
  • 情境題包含跨職能或跨團隊溝通的經驗、如何和其他人溝通該採用誰的方案等等。
  • 輪到我提問時技術方面我問了採用 cassandra 的原因以及 python celery 在 broker 選擇的問題,其他也有問了些職涯上的經驗和建議,以及為何邀請我進到二面以及希望我如何貢獻團隊。

第二關:CTO * 1

  • 很熱情也很有活力,是我有生以來遇過精神最好的一位 CTO。
  • 互相簡介後,先關照了下學業狀態,然後聊了下對讀碩的想法。
  • 技術的部分希望我介紹一個自己做過的專案、最近參加國外黑客松的經驗、之前社團課講 high performance PostgreSQL database 的內容。
  • 後續又聊了很多學校社團、修課經驗的話題,感覺他對於我的校園經歷很有興趣,但我不常到校所以有點尷尬,主要都在圍繞在社團上。
  • 輪到我提問時問了為何想創業以及一些創業早期的問題,還有領了一題 system design 題目作紀念

第三關:Product Team Lead * 1

  • 互相簡短自介後,對方先開始介紹了下他所帶的 product team
  • 先閒聊了下實習和專案經驗
  • 也沒有太硬的技術問題,工程問題則是被問到導入 CI / CD 遇到的阻力、學習新技術的方法等等。
  • 情境題包含跨職能或跨團隊溝通的經驗、如何面對需求不斷調整的狀況、專案時程管理。
  • 其他有被問到個人職涯與里程碑規劃、個人優缺點、技術研討會籌備經驗、conf 演講經驗。
  • 輪到我提問時大概問了 product team lead 的工作日常、為何想來 Appier、如何處理會議過多的情況,同時問了些職涯上的經驗和建議,以及為何邀請我進到二面以及希望我如何貢獻團隊。

第四關:Engineering Manager * 1

  • 部分英文面試
  • 互相簡短自介後,對方希望我針對 backend engineering 的經驗做更聚焦的介紹
  • 沒有技術或工程問題,主要是團隊合作經驗和行為面試為主
  • 蠻大一部份是針對過去工作中的情況,包含過去自己在團隊中的定位、和 mentor 或主管的互動、為何最後選擇離開等等
  • 其他有問到對同事與主管的期待、科技社群參與、演講與社團經驗。
  • 輪到我提問時大概問了工作日常、為何想來 Appier,同時問了些職涯上的經驗和建議,以及為何邀請我進到二面以及希望我如何貢獻團隊。

07/31 Final Interview

只有一關:CEO * 1

  • 互相簡短自介後,聊了下實習做過的專案,因為這關節奏蠻快的,具體被問了哪些問題我不太記得了。
  • 我提問了 CEO 工作日常、為何想創立 Appier、為什麼做多個產品而不是一個產品、一年後的公司會有哪些發展、覺得最近的新鮮人有哪些特質、有什麼給新鮮人的職涯建議等等。

一些心得與感觸

不刷題還可以拿到軟體工程師 offer 嗎?

如果單純想聽 one-word answer 的話,那我告訴你肯定是「可以」。以我自身而言,這輪面的 7 間公司共拿到 6 個 offer,包含新加坡、台灣、中國三個區域,開的薪資也都能在當地物價水準過上品質不俗的生活。

這代表著你不只可以有一份得以溫飽的工作,甚至還可以成為多個團隊爭搶的人才,落在同產業同齡層中的前段位置。

是的,這需要運氣,但也不只需要運氣。

這一段經歷感覺就像在走鋼索,對著幾乎沒有前人經驗能參考的標的賭博,賭市場上還有對專業技術高度渴求的企業、賭能遇上相互賞識的雇主與面試官、賭就業市場給自己的定價符合自己的期待。但從我自身賭博的收益來看,我能非常肯定地告訴你「可以」。

職場平行時空

不同的企業類型也造就了不同的招募需求和工作環境,這種平行時空的感覺更明顯了。在接案公司、台商大廠、外商大廠、優質新創、殭屍新創雖然都掛 SWE 頭銜,但環境和生活幾乎是不同的世界。

因此如果要避開劣質同事、獲得更多發展機會、不想親身經歷各種職場鬼故事的話,最直接的方式就是加入對的環境。這些眾所嚮往優質工作特性幾乎和薪酬正相關,人才是科技公司的關鍵資產、稀少的人才會因為市場機制而提升薪酬,而成功爭取到人才的企業便能提升其工作環境品質與競爭力,從而形成正向循環。

站上賣方市場

在擺脫了就學時需要頻繁到校的地域限制後,掌握關鍵技術的賣方市場優勢感受就更具體了。除了薪資開的數字更給尊重外,面試流程上也更有誠意、人資會定期主動聯繫以及積極加快流程,聽到有其他 compete offer 時也會介紹自家公司福利或是多塞些獎金或股票之類的積極爭取。

我平時也看了不少台灣軟體工程師的生態分析文章,新鮮人的平均薪資和我個人期望有些落差,所以我也在談判策略上思考許久。但隨著一個個 offer 的到來,以及符合期待的薪資數字,我也對自己的市場價值越來越有信心。確實能有一種「不是我缺機會,而是你們缺人才」的強勢感,也因此有更多談判的操作機會,可以狠狠的把 HR 折磨一波 (?)

結語

其實這篇文章主要是想寫給五年前那個剛接觸軟體開發充滿熱忱的自己,或者是現在的高中生看的。希望能讓你們知道有個堅信自己腦中「軟體工程價值」的頑固學長,能完全不靠刷題談成一份自己嚮往的工作,而且現在過得挺不錯的。希望所有熱愛軟體工程的人才都能走上自己的理想道路!

--

--

Rain Wu

A software engineer specializing in distributed systems and cloud services, desire to realize various imaginations of future life through technology.