軟體工程師系統設計面試準備指南

矽谷輕鬆談 Kenji
矽谷輕鬆談 Just Kidding Tech
9 min readMay 11, 2020

--

當你有了幾年的工作經驗以後,在找工作時一定會遇到系統設計的面試,有鑒於大部分的面試心得都是針對演算法以及資料結構的程式面試 (包括我之前寫的美國軟體工程師求職心得),對於系統設計的準備資源還真的不多,本篇要來剖析系統設計面試,介紹面試的流程、正確的心態以及準備的方向,讓大家再也不怕系統設計面試!

為什麼系統設計很重要?

在程式面試表現優異,可以讓你順利拿到 Offer;但是系統設計會決定你加入公司的職等!這也就是為什麼有些人有十年經驗只能拿到 Mid-Level (L4) 的 Offer,而有些人只有五年經驗卻可以拿到資深工程師以上 (L5+) 的 Offer。

另外,如果你是面試 Staff 或是 Principal 級別以上的話,除了系統設計以外,有些公司還會有 Technical Leadership 的面試,來判斷你是否有能力可以跟不同的部門合作、解決問題的不確定性、帶領資淺的人然後推動並且完成一個跨部門的大型技術專案。

簡單來說,系統設計用來判斷你是 L4 或是 L5+,Technical Leadership 面試用來判斷是 L5 或是 L6+。

為什麼系統設計很難準備?

大多數應徵者在準備的時候會過度偏重於程式面試,原因也不難理解,程式問題的定義很清楚,有給定的輸入以及預期的輸出,就算你真的想不出來,LeetCode 上的討論區也有參考答案;這種有考古題可以參考的面試,對於台灣教育出來的人來說相對好準備,隨著你解的問題多了,你也會更有信心,不知不覺甚至還會刷上癮了呢!但系統設計卻非如此。

系統設計面試的問題描述通常很模糊 (這是刻意的),沒有給定的輸入與輸出,比較沒有既定規則可以遵循,然後也沒有一個標準答案,針對不同系統你需要提出不同的解法然後分析優缺點,一樣的問題,面試官也會針對你過去經驗往不同的方向問,有些問題你工作上沒有碰過還真的回答不出來,這也就是為什麼很多人看到系統面試就怕了。

到底要怎麼準備?

首先我們要先建立一個觀念:沒有任何一個人可以知道所有的技術細節

不管你的面試官有多少年經驗,不管他們再怎麼資深,在變化快速的軟體產業,沒有人可以知道所有事情,一定有你知道而他們沒聽過的事情!

請把系統設計當成分享你過去所學的面試,這個面試的目的在於展示你對於軟體架構能力的廣度跟深度,你必須可以給出大方向的架構,知道有哪些元件 (廣度),同時針對你熟悉的領域深入探討更多細節 (深度),並且提出幾個解決方案,分析優缺點,並且針對系統需求選擇合適的解法。

大方承認自己對某些領域的細節不熟,也是完全沒問題的,只要讓面試官了解你知道這個東西,如果要深入了解的話你知道有哪些方向要努力,這樣就夠了,因為在大型的軟體專案裡,一定是高…

--

--

矽谷輕鬆談 Kenji
矽谷輕鬆談 Just Kidding Tech

資深軟體工程師 @ 矽谷金融科技公司 Square,熱愛學習以及分享新事物,有多年的 Android 以及後端開發經驗,正在經營 Podcast 矽谷輕鬆談 Just Kidding Tech,每週帶給你來自矽谷科技業第一手的經驗分享,千萬不能錯過喔!