#就地避難在家鍛鍊寫作能力
軟體工程師系統設計面試準備指南
當你有了幾年的工作經驗以後,在找工作時一定會遇到系統設計的面試,有鑒於大部分的面試心得都是針對演算法以及資料結構的程式面試 (包括我之前寫的美國軟體工程師求職心得),對於系統設計的準備資源還真的不多,本篇要來剖析系統設計面試,介紹面試的流程、正確的心態以及準備的方向,讓大家再也不怕系統設計面試!
Medium 好讀版:https://medium.com/jktech/%E8%BB%9F%E9%AB%94%E5%B7%A5%E7%A8%8B%E5%B8%AB%E7%B3%BB%E7%B5%B1%E8%A8%AD%E8%A8%88%E6%BA%96%E5%82%99%E6%8C%87%E5%8D%97-acf6ab1f502f?source=friends_link&sk=ca40acf60b749cb1b32c17a868b0c1a3
#為什麼系統設計很重要?
在程式面試表現優異,可以讓你順利拿到 Offer;但是系統設計會決定你加入公司的職等!這也就是為什麼有些人有十年經驗只能拿到 Mid-Level (L4) 的 Offer,而有些人只有五年經驗卻可以拿到資深工程師以上 (L5+) 的 Offer。
另外,如果你是面試 Staff 或是 Principal 級別以上的話,除了系統設計以外,有些公司還會有 Technical Leadership 的面試,來判斷你是否有能力可以跟不同的部門合作、解決問題的不確定性、帶領資淺的人然後推動並且完成一個跨部門的大型技術專案。
簡單來說,系統設計用來判斷你是 L4 或是 L5+,Technical Leadership 面試用來判斷是 L5 或是 L6+。
#為什麼系統設計很難準備?
大多數應徵者在準備的時候會過度偏重於程式面試,原因也不難理解,程式問題的定義很清楚,有給定的輸入以及預期的輸出,就算你真的想不出來,LeetCode 上的討論區也有參考答案;這種有考古題可以參考的面試,對於台灣教育出來的人來說相對好準備,隨著你解的問題多了,你也會更有信心,不知不覺甚至還會刷上癮了呢!但系統設計卻非如此。
系統設計面試的問題描述通常很模糊 (這是刻意的),沒有給定的輸入與輸出,比較沒有既定規則可以遵循,然後也沒有一個標準答案,針對不同系統你需要提出不同的解法然後分析優缺點,一樣的問題,面試官也會針對你過去經驗往不同的方向問,有些問題你工作上沒有碰過還真的回答不出來,這也就是為什麼很多人看到系統面試就怕了。
#到底要怎麼準備?
首先我們要先建立一個觀念:沒有任何一個人可以知道所有的技術細節
不管你的面試官有多少年經驗,不管他們再怎麼資深,在變化快速的軟體產業,沒有人可以知道所有事情,一定有你知道而他們沒聽過的事情!
請把系統設計當成分享你過去所學的面試,這個面試的目的在於展示你對於軟體架構能力的廣度跟深度,你必須可以給出大方向的架構,知道有哪些元件 (廣度),同時針對你熟悉的領域深入探討更多細節 (深度),並且提出幾個解決方案,分析優缺點,並且針對系統需求選擇合適的解法。
大方承認自己對某些領域的細節不熟,也是完全沒問題的,只要讓面試官了解你知道這個東西,如果要深入了解的話你知道有哪些方向要努力,這樣就夠了,因為在大型的軟體專案裡,一定是高度分工的,不會有人同時精通手機端、前端、後端、Infra 以及嵌入式或是硬體的。
講到這裡,相信你也知道如果真的要準備是準備不完的,這些知識是透過平常工作以及閱讀技術文章長期累積的成果,比較沒辦法臨時抱佛腳。
#具體來說會問什麼問題
舉例來說,一個系統設計的問題會像是這樣:如何設計 Facebook?
這類問題的描述通常會很大而且模糊,面試官不預期而且你也不可能在 45 分鐘內就設計出這些公司花了好幾年這麼多人力設計出來的產品,所以第一步要做的事情是確認需求:是要設計動態牆、Messenger、廣告系統還是推薦系統?流量跟資料量為多少?需要支援全球的使用者嗎?
確認完需求以後,會針對最重要的幾個使用場景設計你的 Data model 以及 API,接著畫出大的系統架構圖,大致上會包含客戶端 (手機版/桌面版)、Load Balancer (Reverse Proxy)、App Servers 以及資料庫,接著可以針對細節下去討論,這邊開始就很自由了。
如果你是專精在資料庫,可以討論要用什麼資料庫以及資料要怎麼存可以讓特定使用場景的讀取以及寫入效能比較好,要怎麼做資料庫的 Replication 跟 Sharding 來服務更多的使用者?
如果講到快取,哪些地方可以加快取呢 (瀏覽器前端, CDN, App Server, 資料庫)?具體來說寫入快取有哪些方式以及優缺點 (write-through, write-around, write-back)?什麼時候要失效?要讓哪些資料失效?
如果聊到微服務器架構跟 Service Mesh,不同的服務怎麼跟其他的服務溝通? control plane 要怎麼更新 data plane 的設定?如果 control plane 掛了怎麼辦?要怎麼做 service discovery? 哪一種 Load Balancing 策略比較好 (round robin, random, least connection, ring hash, or maglev)?有些服務掛了影響到整個系統怎麼辦?什麼時候需要 circuit breaker ?
如果你是手機開發者,怎麼實現離線瀏覽?手機要有資料庫嗎?要怎麼以及多常跟伺服器同步?API 要怎麼設計?如何實現 Infinite Loading?剛 Po 文以後要怎麼樣在自己手機上馬上看到?
這些問題真的列舉不完,總之看到這裡你會了解為什麼我說這個面試是沒有範圍而且也準備不完的,重點應該放在跟面試官的討論,展現你在技術方面的廣度跟深度,讓面試結束的時候能夠有一個你們兩個人都同意的設計!
#準備材料
系統設計的資源比較分散,以下是我篩選過後覺得有用的資料,按照素材的類型作分類,也歡迎大家留言補充!
#入門影片
針對完全沒有概念的新手,我建議可以先從哈佛的 CS75 Lecture 9 Scalability 開始,裡面講到的很多基礎觀念都相當重要,值得一再複習,這些概念先有了以後再閱讀其他的材料會比較有感覺:
如果你看完這篇文章後還想再多了解系統面試的形式,也可以看一個前 Facebook 工程師分享的影片:
Distributed Systems in One Lesson 也很推,裡面提到不少業界在使用的設計模式:
有一個需要付費的資源是 SystemsExpert,每個影片會講解一個系統設計重要的概念,我個人覺得內容有點淺所以沒有買,但是整理地還算不錯,如果你看完他們免費的影片有興趣還是可以參考一下。
#閱讀文章
影片是一個讓你很好理解大方向概念的方式,但是如果你要深入理解背後的原理還有怎麼運作的細節,還是得透過大量以及深度的閱讀來吸收呀!
system design primer 整理了很多系統設計的資源,資料量很夠, 個人的建議是先快速過一遍,不要細讀,先知道總共有哪些元件,大概是做什麼用的就好,接著針對有興趣的部分在深入研究,建立自己的知識庫。
Grokking the System Design Interview 也是很多人推薦的材料,主要是針對系統設計的問題提供範例解答,他們的答案可以當作一個參考,但面試的時候不要完全照著回答,還是得看跟面試官討論的結果來進行,但這個是需要付費的,有興趣可以用我的推薦碼註冊購買。
如果你不想花錢或是不確定 Grokking 的文章你喜不喜歡,有一個類似的網站 Crack the System Design Interview 整理得也還不錯。
#書籍
唸書是一個有系統性學習的方法,如果你只想選一本書來看,就選這本大家都推的系統設計聖經 — Designing Data-Intensive Applications,簡稱 DDIA,這本書適合的對象是想要長期準備系統設計或是分散式系統的人,裡面舉的例子都是實際上業界遇到的問題,不會有以前讀教科書那種工作又用不到的感覺;但也因為是書,花了一些篇幅在講解背景知識,包含以前的系統是怎麼設計的以及如何演進到現在,對短期要準備面試的人效率會有點低,所以不適合有時間壓力的人。
這本書我目前讀了一半,最大的收獲是它解釋了很多為什麼現代的系統要做這樣的設計,我們針對不同的系統要求可以有哪些解法,這些解法各有什麼優缺點,總之分散式系統就是我們解決了一個問題,但又會產生更多要考量的點,一切都是 trade-off。
但這本書也不是沒有缺點的,首先我覺得是本書的英文沒有很好讀,我常常一段看了好幾遍才知道他想表達的重點是什麼,而且,有些很重要的觀念常常藏在一段文字裡用一句話帶過,但是不太重要的觀念卻使用 Bullet Point 表達;另外這本書話常常講一半,一些觀念提到了一點卻說我們後面再聊,也因為這樣,我在考慮要不要幫大家整理每一個章節的重點,翻成中文分享給大家,有興趣的朋友麻煩拍手留言告訴我!
除此之外,Google 的 SRE Books 內容也很實在,但是每一個章節的內容是獨立的,建議大家選擇想研究的章節跳著看就好。
最後,Distributed systems for fun and profit 的內容也很好,以分散式系統的理論為主,比較沒那麼針對系統設計面試。
#還想閱讀更多嗎?
我知道光是上面的資源就已經讀不完了,但是行有餘力的話,平時也可以多看看各大公司的技術部落格或是訂閱技術週刊如 TechBridge (台灣) 、HackerNews 以及 InfoQ 等等。
此外,參考別人的經驗也是很好的方式,最近剛好幾個朋友剛找完工作,他們分享的矽谷找資深工程師工作心得分享以及2020 上半年軟工找工經驗分享也都很值得看!
最後,在工作上使用到的技術,除了會用以外,最好也要花時間去研讀技術文件,了解他們設計的考量以及支援的場景,大部分這類型針對開發者的文件寫得會比較深入,所以也是相當好的學習素材;我自己過去一年因為工作上需要整合 Envoy 到我們公司的 Traffic Infrastructure,從他們的文件中學到很多 Service Mesh 跟微服務器的重要概念,學習的深度都是其他資源無法提供的。
#總結
這篇文章我們整理了很豐富的系統設計資源,希望大家不要被這滿滿的資訊量嚇跑。
請記得,我們永遠有各種方法在短期內針對面試做準備,提升面試的表現,但這都只是一時的,沒辦法讓你一夕之間就成為專家;如果想要追求長期的持續成長,那麼沒有捷徑 — 就是養成每天學習以及閱讀的習慣,一開始真的很難看到效果,但是當你持續一週、一個月甚至是一年以後,你會明顯感受到自己的成長,這些投入的時間都是騙不了人的。
如果這篇文章對你有幫助,請拍手留言加訂閱,並且分享給更多有需要的人知道!
同時也有5部Youtube影片,追蹤數超過2萬的網紅Untyped 對啊我是工程師,也在其Youtube影片中提到,垃圾桶撿到實習 美國軟體工程實習經驗分享 Part. 2 | I got my SDE Internship @ DocuSign in the Trash can - 上一集中講完我是如何在大學四年中開始累積將近一年的軟體工程實習經驗的,這事就要來聊我的第二個實習 —— 一個在垃圾桶裡撿到的Doc...
「美國軟體 工程師 求職心得」的推薦目錄:
- 關於美國軟體 工程師 求職心得 在 矽谷輕鬆談 Just Kidding Tech Facebook 的最佳解答
- 關於美國軟體 工程師 求職心得 在 Untyped 對啊我是工程師 Youtube 的最佳解答
- 關於美國軟體 工程師 求職心得 在 Untyped 對啊我是工程師 Youtube 的最佳貼文
- 關於美國軟體 工程師 求職心得 在 Untyped 對啊我是工程師 Youtube 的精選貼文
- 關於美國軟體 工程師 求職心得 在 [心得] 美國軟體工程師求職講座心得- 看板Refresh - 批踢踢實業坊 的評價
- 關於美國軟體 工程師 求職心得 在 Mason GRE | 轉領域學Coding/美國軟體工程師求職心得 的評價
- 關於美國軟體 工程師 求職心得 在 軟體工程師 - Dcard 的評價
- 關於美國軟體 工程師 求職心得 在 在美國當工程師薪水大公開!教你畢業求職年薪千萬的職業 ... 的評價
- 關於美國軟體 工程師 求職心得 在 [心得] 美國軟體工程師求職講座心得 - Mo PTT 鄉公所 的評價
- 關於美國軟體 工程師 求職心得 在 [北美] 2016/17 美國軟體工程師求職心得- 看板Oversea_Job 的評價
- 關於美國軟體 工程師 求職心得 在 大陸, 美國軟體工程師薪水 - Mobile01 的評價
- 關於美國軟體 工程師 求職心得 在 [心得] 美國軟體工程師薪資結構- soft_job | PTT職涯區 的評價
- 關於美國軟體 工程師 求職心得 在 Re: [心得] 在日本工作受不了,想回台灣 - PTT評價 的評價
美國軟體 工程師 求職心得 在 Untyped 對啊我是工程師 Youtube 的最佳解答
垃圾桶撿到實習 美國軟體工程實習經驗分享 Part. 2 | I got my SDE Internship @ DocuSign in the Trash can
-
上一集中講完我是如何在大學四年中開始累積將近一年的軟體工程實習經驗的,這事就要來聊我的第二個實習 —— 一個在垃圾桶裡撿到的DocuSign實習機會。影片中提到我是如何找到它的,面試歷程,還有實習的工作內容跟學習心得~ 真的很感謝神給我這樣的故事可以分享給你們。
這次的內容:
1. 垃圾桶裡撿到實習機會的過程 How I found an Internship in a Spam folder 0:50
2. 垃圾桶中找到的實習經驗分享 How Awesome/Fun/Precious the Internship was 7:55
2.1 是誰把實習丟在垃圾桶裡 8:35
2.2 實習工作內容的正經事 9:05
2.3 吃喝玩樂不可少 11:00
2.4 比敲鍵盤更重要的事 12:35
2.3 人生中總是充滿意外 13:37
希望能幫助到要找工作或正在找實習的你!一起加油吧~
上一集還沒看的看這邊👇🏻👇🏻👇🏻
美國實習經驗分享 Part. 1 一年軟體工程實習經驗的開始 | The Start of My 1 Year Internship Experience
https://youtu.be/qdxulBz0kFA
#垃圾桶撿到實習 #jobhuntingishard
一定要看到影片最後面並且在「YouTube影片下方」按讚留言訂閱分享唷!
-
歡迎留言告訴我你的想法,或是你想認識的程式語言唷!
每(隔週)週四晚上9點更新,請記得開啟YouTube🔔通知!
-
【愛屋及烏】
Facebook 臉書粉專 👉 https://www.facebook.com/untyped/
Instagram 👉 https://www.instagram.com/untypedcoding/
合作邀約 👉 untypedcoding@gmail.com
-
Untyped 對啊我是工程師 - There are so many data types in the world of computer science, so are the people who write the code. We aim to UNTYPE the stereotype of engineers and of how coding is only for a certain type of people.
凱心琳: 一個喜歡電腦科學邏輯推理,在科技圈努力為性別平等奮鬥的工程師。
-
圖片影片音效:[giphy.com] [pngwave.com][freesound.org][soundbible.org]
![post-title](https://i.ytimg.com/vi/teoqlVHlV8o/hqdefault.jpg)
美國軟體 工程師 求職心得 在 Untyped 對啊我是工程師 Youtube 的最佳貼文
美國實習經驗分享 Part. 1 一年軟體工程實習經驗的開始 | The Start of My 1 Year Internship Experience
-
大家期待已久的實習經驗分享終於開始啦~然後就一不小心講太多了
其實凱心琳我從從來沒想過自己會實習4次,然後能在大學畢業前累積了1年的工作經驗,過程波折艱辛有笑有淚,希望能把故事經驗分享給大家,讓大家對軟體工程實習有更多了解,少走點冤枉路!
這次的內容分成5個部分
1. 大學前情提要 Some Background, FYI 1:30
2. 大一初生之犢 Fear Not, FOB 2:35
3. 大二台灣實習 The Very First Internship in My Life 5:10
4. 就業展歷險記 Career Fair is Unfair 8:20
5. 大三面試序曲 Taste of Interviews 12:25
內容中有講到如何從零開始找實習面試,美國的就業展的狀況等等...
最重要的是:不擅長面試不代表你不是好的工程師!
We are not defined by our interview process!
我知道切得有點尷尬,下一集馬上就會出爐囉~
#面試慘痛經驗 #實習不好找 #不擅長面試的工程師也很棒
一定要看到影片最後面並且在「YouTube影片下方」按讚留言訂閱分享唷!
-
歡迎留言告訴我你的想法,或是你想認識的程式語言唷!
每(隔週)週四晚上9點更新,請記得開啟YouTube🔔通知!
-
【What I used to make this video】
個人電腦:Apple MacBook Pro [https://amzn.to/2HKgI2T]
拍攝錄音錄影: iPhone X [https://amzn.to/3c0s6Fu]
相機: Canon 80D [https://amzn.to/2VVmiYz]
錄音: Rode [https://amzn.to/3aqnzL2]
鍵盤: Logitech MX Keys Wireless Keyboard [https://amzn.to/3awqi5L]
【愛屋及烏】
Facebook 臉書粉專 👉 [https://www.facebook.com/untyped/]
Instagram 👉 [[https://www.instagram.com/untypedcoding/]
合作邀約 👉 untypedcoding@gmail.com
-
Untyped 對啊我是工程師 - There are so many data types in the world of computer science, so are the people who write the code. We aim to UNTYPE the stereotype of engineers and of how coding is only for a certain type of people.
凱心琳: 一個喜歡電腦科學邏輯推理,在科技圈努力為性別平等奮鬥的女工程師。
-
This video contains affiliate links, which means that if you click on one of the product links, I'll receive a small commission.
圖片影片音效:[giphy.com] [pngwave.com][freesound.org][soundbible.org]
![post-title](https://i.ytimg.com/vi/qdxulBz0kFA/hqdefault.jpg)
美國軟體 工程師 求職心得 在 Untyped 對啊我是工程師 Youtube 的精選貼文
10個工程師的愛恨情仇-2020全球資訊工程調查看一看 Stack Overflow ft. Wei Chen | 10 Preferences of Software Engineers
-
誰說工程師沒有情感?這次就來揭露工程師們的各種愛恨情仇。
同樣是工程師,但是人人各有所好。這次邀請到工程師Wei Chen 一起回答10個survey中的問題,並根據 Stack Overflow 在2020年對於2019年的資訊工程調查結果,做討論與分享我們的看法。
1. 最受歡迎/熱門/常用的程式語言 The Most Popular Programming Language 0:35
2. 最喜歡的程式語言 The Most Loved Programming Language 1:48
3. 最討厭的程式語言 The Most Dreaded Programming Language 3:30
4. 最想學/嘗試的程式語言 The Most Wanted Programming Language 4:51
5. 最有錢途的程式語言 The Highest Paid Programming Language 5:51
6. 最有錢途的資訊工程相關職位 The Highest Paid Developer Type 6:50
7. 女性工程師參與度 The Percentage of Female Survey Respondents 8:28
8. 最看重的工作條件或要素 The Most Important Job Factor 9:37
9. 面對面 或 線上交談?IRL or Online Chat? 10:55
10. 鳳梨披薩?Pineapple on Pizza? 12:07
好奇「Untyped 對啊我是工程師」是如何誕生的嗎?
來聽聽學吧少女的訪談 👉https://youtu.be/bZXGuZoYDWA
#工程師都愛StackOverflow #今年女工程師會更多 #鳳梨披薩萬歲
一定要看到影片最後面並且在「YouTube影片下方」按讚留言訂閱分享唷!
-
歡迎留言告訴我你的想法,或是你想認識的程式語言唷!
每(隔週)週六晚上9點更新,請記得開啟YouTube🔔通知!
-
【相關連結】
2019 資訊工程調查 Stack Overflow Developer Survey: [https://insights.stackoverflow.com/survey/2019]
【What I used to make this video】
個人電腦:Apple MacBook Pro [https://amzn.to/2HKgI2T]
拍攝錄音錄影: iPhone X [https://amzn.to/3c0s6Fu]
相機: Canon 80D [https://amzn.to/2VVmiYz]
錄音: Rode [https://amzn.to/3aqnzL2]
鍵盤: Logitech MX Keys Wireless Keyboard [https://amzn.to/3awqi5L]
【愛屋及烏】
Facebook 臉書粉專 👉 [https://www.facebook.com/untyped/]
Instagram 👉 [[https://www.instagram.com/untypedcoding/]
合作邀約 👉 untypedcoding@gmail.com
-
Untyped 對啊我是工程師 - There are so many data types in the world of computer science, so are the people who write the code. We aim to UNTYPE the stereotype of engineers and of how coding is only for a certain type of people.
凱心琳: 一個喜歡電腦科學邏輯推理,在科技圈努力為性別平等奮鬥的女工程師。
-
This video contains affiliate links, which means that if you click on one of the product links, I'll receive a small commission.
圖片影片音效:[giphy.com] [pngwave.com][freesound.org]
Walk Around by Roa https://soundcloud.com/roa_music1031
Creative Commons — Attribution 3.0 Unported — CC BY 3.0
![post-title](https://i.ytimg.com/vi/eBliFmtMGqU/hqdefault.jpg)
美國軟體 工程師 求職心得 在 Mason GRE | 轉領域學Coding/美國軟體工程師求職心得 的推薦與評價
轉領域學Coding/美國軟體工程師求職心得我們很榮幸邀請stanCode Jerry 和Nina分享學習coding與北美軟體工程師求職心得。Jerry畢業於交大材料學士,史丹佛材料碩士, ... ... <看更多>
美國軟體 工程師 求職心得 在 軟體工程師 - Dcard 的推薦與評價
女性軟體工程師的一天| 年薪五百萬的工作心得 ... 我們學歷都是QS全球排名前40的大學,都在美國工作,年薪換算為台幣千萬,是長輩們口中 ... 2023軟體新鮮人求職心得. ... <看更多>
美國軟體 工程師 求職心得 在 [心得] 美國軟體工程師求職講座心得- 看板Refresh - 批踢踢實業坊 的推薦與評價
想了解更多美國軟體工程師的求職資訊嗎?
先前Candice先生籌辦的「美國軟體工程師求職講座」吸引了許多人報名參加
講座中兩位資深工程師矽谷資深女工程師 Lucy和微軟工程師KS的矽谷職涯經驗分享,回
答了許多大家關切但疑惑的問題:
對剛畢業的學生和轉換跑道的求職者,公司最看重的點為何?履歷的寫法與關鍵字?
面試的注重的地方與訣竅? 簽證的問題如何處理? 公司職位求職的referral?
滿滿乾貨讓參加的同學大呼過癮,最後還有講座聽眾提出的求職困難解答,務必看到最後
歐,保證收穫滿滿
https://www.youtube.com/watch?v=d3oDINz-a8I
歡迎自行轉載
------------------------------------------------------------------------------
充電會版位址如下:
PTT→分組討論區→生活娛樂館→Life_Plan 人生→Refresh【充電板】─終身學習
------------------------------------------------------------------------------
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.12.45.117 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Refresh/M.1687317525.A.F38.html
... <看更多>