#就地避難在家鍛鍊寫作能力
軟體工程師系統設計面試準備指南
當你有了幾年的工作經驗以後,在找工作時一定會遇到系統設計的面試,有鑒於大部分的面試心得都是針對演算法以及資料結構的程式面試 (包括我之前寫的美國軟體工程師求職心得),對於系統設計的準備資源還真的不多,本篇要來剖析系統設計面試,介紹面試的流程、正確的心態以及準備的方向,讓大家再也不怕系統設計面試!
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 跟微服務器的重要概念,學習的深度都是其他資源無法提供的。
#總結
這篇文章我們整理了很豐富的系統設計資源,希望大家不要被這滿滿的資訊量嚇跑。
請記得,我們永遠有各種方法在短期內針對面試做準備,提升面試的表現,但這都只是一時的,沒辦法讓你一夕之間就成為專家;如果想要追求長期的持續成長,那麼沒有捷徑 — 就是養成每天學習以及閱讀的習慣,一開始真的很難看到效果,但是當你持續一週、一個月甚至是一年以後,你會明顯感受到自己的成長,這些投入的時間都是騙不了人的。
如果這篇文章對你有幫助,請拍手留言加訂閱,並且分享給更多有需要的人知道!
同時也有1部Youtube影片,追蹤數超過24萬的網紅暗網仔 2.0,也在其Youtube影片中提到,Payme [捐款]: https://payme.hsbc/deepwebkid Instagram: https://www.instagram.com/dw_kid12/ Facebook: https://www.facebook.com/deepwebkid/?modal=adm...
「手機proxy server」的推薦目錄:
- 關於手機proxy server 在 矽谷輕鬆談 Just Kidding Tech Facebook 的最佳貼文
- 關於手機proxy server 在 NYCU 產學運籌中心 Facebook 的最讚貼文
- 關於手機proxy server 在 Taipei Ethereum Meetup Facebook 的精選貼文
- 關於手機proxy server 在 暗網仔 2.0 Youtube 的最佳解答
- 關於手機proxy server 在 手機proxy設定在PTT/Dcard完整相關資訊 - 星星公主 的評價
- 關於手機proxy server 在 手機proxy設定在PTT/Dcard完整相關資訊 - 星星公主 的評價
- 關於手機proxy server 在 免root 用手机给设备开代理 - Hsnico's Blog 的評價
- 關於手機proxy server 在 求救! 使用WiFi上網無法設定Proxy server [HTC Aria , Android 2.1] 的評價
- 關於手機proxy server 在 Re: [問題] arc s & mcool(請低調)...轉自PTT-MobileComm板 的評價
手機proxy server 在 NYCU 產學運籌中心 Facebook 的最讚貼文
[轉貼徵才]
搭早,小編來幫優質新創徵才囉。
注意請別跟小編應徵阿,請看下面聯絡方式。
-----------我是分隔線---------------------------------------------------
我們是 Crypto-Arsenal(https://crypto-arsenal.io),專注在加密貨幣交易策略平台與區塊鏈智能合約應用開發,目前正在找尋『至少二年內以創業為人生目標的共同創辦人(CTO)』,必須具備以下專業(一或多項)並且可以建立自己的技術團隊:
- Web Front/Back-end Development
- Blockchain and Smart Contract
- Machine Learning
- Scrum/Agile
目前我們已開發的平台使用的技術範疇如下
前端:
- React.js
- HTML/CSS (SCSS)
- TypeScript
- Node.js (Next.js)
- Apollo GraphQL Client (react-graphql)
後端:
- Node.js (ES6)
- Python
- Docker
- Kubernetes
- GCP/GKE
- MySQL
- GraphQL Server (Apollo Server)
- 使用 Migration Tool 管理 DB Schema 經驗
- gRPC
- InfluxDB
- Ethereum 運作
- CI / CD (CircleCI)
- Envoy Proxy
- Unit Test (jest)
- E2E Test (Selenium / Cypress)
💁♀️🙋♀️聯絡方式:
請主動聯繫 Richard,附簡歷與 Github 連結
1. E-Mail: richard@crypto-arsenal.io
2. 手機:0917-267-483
3. LINE ID:tzungju
手機proxy server 在 Taipei Ethereum Meetup Facebook 的精選貼文
📜 [專欄新文章] Solidity Weekly #15
✍️ mingderwang
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
真的 Dapps 怎麼做?
這裡我所謂的”真的” Dapps,是希望真能達到 decentralized apps 的目的,也就是不再需要任何網站 (https server) 來存放你的合約介面程式。也許有些人會覺得沒有必要真的完全 decentralized 吧,連 CryptoKitties 都沒做到,不是也一樣賣得嚇嚇叫!
但有多少網站連結最後都因為沒人維護而消失在 link 的另一端,有些好遊戲;也因為經營者不玩了,造成玩家所有的努力都付之一炬,不是很令人失望且有點可惜嗎?
目前我們可以利用 IPFS 來存放 html 與 js 或其他 asset 檔案,就可少去 web 伺服器永遠存在的必要性,未來 (我猜) 幾乎瀏覽器會支援某種類似 IPFS 的 proxy,就像現在支援 cache 一樣,無形中加速 IPFS 檔案的下載,至少 users 感覺會好一點。(註: 目前 IPFS 還是有點慢)
這個 Ropsten Testnet Ether 水龍頭 https://ipfs.io/…/QmVAwVKys271P5EQyEfVSxm7BJDKWt42A2gHvNmx…/ 就是一個沒有用 https server 的 DApp 例子。
當然要把複雜的 Javascript 程式包到 html 裡或簡單的單檔 JS 裡需要一點技巧。但我想難不倒我們台灣的大部分的前端工程師。
shared links:
Build a simple Ethereum + InterPlanetary File System (IPFS)+ React.js DApp.
https://itnext.io/build-a-simple-ethereum-interplanetary-fi…
Ming> 本文確確實實一步ㄧ步地教你如何結合 IPFS 與 web3.js 1.0 撰寫 DApp 上傳檔案到 IPFS,並記錄的 Ethereum blockchain。(但沒介紹如何安裝 DApp 在 IPFS 上)。
PS. 另一個方法就是用 react native (Expo) + web3.js 寫成手機 app。下週 Solidity Weekly 再來分享。(如果未來每個人的手機,可以像 mp3 世界裡的 azureus p2p 方式下載 Dapps 軟體,應該也算是 decentralized 吧)
Solidity Weekly #15 was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
手機proxy server 在 暗網仔 2.0 Youtube 的最佳解答
Payme [捐款]: https://payme.hsbc/deepwebkid
Instagram: https://www.instagram.com/dw_kid12/
Facebook: https://www.facebook.com/deepwebkid/?modal=admin_todo_tour
Spotify: https://open.spotify.com/album/2LjUOH9T9j21GiX8jzytu6
訂閱: https://www.youtube.com/channel/UC8vabPSRIBpwSJEMAPCnzVQ?sub_confirmation=1
我最高觀看次數的影片 (我為何不再拍暗網? 只說一次): https://www.youtube.com/watch?v=jbihKaqEEQw&t=127s
首支單曲: https://www.youtube.com/watch?v=UASHWB6Ai9Y
我的成長故事: https://www.youtube.com/watch?v=Kdhtp6A6YJE
這位才是真正的網絡垃圾: https://www.youtube.com/watch?v=jlJYDx1GP-U&t=263s
Billie Eilish出賣靈魂的方法: https://www.youtube.com/watch?v=pfB1S2uy5Po&t=115s
日本最殘酷的直播節目: https://www.youtube.com/watch?v=7E81OKVX7wc
我受夠了, 我的精神困擾: https://www.youtube.com/watch?v=aQ6uxaQhiS4&t=7s
[警告]史上最危險IG Story限時動態| 會導致你手機死亡
[警告]史上最危險IG Story限時動態| 會導致你手機死亡
破解會導致你手機死亡的阿拉伯IG Story限時動態
破解會導致你iPhone死亡的IG Story限時動態
[警告!!!] 破解導致你iPhone死亡的IG Story限時動態
Instagram story that kills your phone-pgtalal
之前我第一次在Instagram stories做了一part Q&A, 大家的反應數量和問題可以說是驚人.
那試想想如果當天你按進去我story後, 你電話突然這樣...
如何想打開都打不開, 再用另一部電按進我story, 結果又是一樣. 之後所有千千萬萬的暗友做同一件事結果又是這樣.
你應該會覺得我是創造了什麼詛咒限時動態 ..可能我會從你的電話爬出嚟, 對嗎?
那如果我告訴你這個星期外國發現了一個IG網頁你一按進去他的story你的電話真的馬上會動不到, 甚至有機會之後還有後遺症, 你除了想到被詛咒的限時動態外, 還會有什麼其他解釋呢?
我們今天的影片就是會有答案.
大家好又是我暗網仔! 一起破解IG史上最恐怖的 限時動態!
告訴大家這個IG 帳號名字前, 我先想提醒大家千祈唔好按進去亂試. I do not encourage doing that.
名pgtalal的IG頁有一個令人電話動不了(俗稱 “crash” )的IG story. 這事件得到多個網路新聞網站報道. 令人百思不得其解.
亦同時令到 pgtalal成為近日受到最多關注和追除人數上升得最快的IG網頁.
奇怪的地方是如果你是用一部 ‘android’ 電話按進這個Instagram story這個紫色畫面會出現. 同時會播著一首名 ‘your love’ 的歌曲. 唯一奇怪的地方是不像其他的IG story, 你按電話畫面不能讓他暫停.
但如果你用iphone按進去這個Instagram story, 你的iPhone是會完全動不了. 會crash.
我試過用iPhone, macbook不同電器看IG, Facebook, Youtube. 東西都是大同小異.
那為何在這個情況下, 同一個story用不同電話看, 會看到不同的東西? 不同的畫面呢?
而為什麼簡單一個IG story會好像能完全控制你的電話呢?
是黑客入侵Instagram? Nordvpn又能幫到手嗎?
(題外話: 今天的影片不是由Nordvpn贊助的. 今天沒有贊助. 但如果你想贊助暗網仔以後拍多點好影片, 這是我的payme, 暗網仔donation, 下面也有link.多多益善少少無拘! 大家可能有看片知道我之前搬咗屋. 多謝大家繼續支持)
看完所有關資料. Pgtalal 帳號沒有頭像. 有一個7000多follower的私人帳號.
之前Pgtalal有一名電視劇friends女演員的post, 亦曾有3個不同會令到你電話crash的IG story, 現在看這個page, story 只有兩個, friends 女演員個post 亦消失了。
最後他還有一個douyin帳號. 只是長期在拍一個 ‘N’ 字. 到底什麼意思?
他帳號所有的字體都是阿拉伯字. 翻譯成英文後都是好像沒什麼意思.
其實整件事件都不像是靈異東西. 而係似某一個一個聰明人做的一種實驗.
這個出現在私人頁面簡介的”full stack developer” 這個職業就是證據. 電腦專家full stack developer精通前端和後端開發軟件.
什麼意思?
這是個很懂電腦的人在玩一個遊戲. 或是想prove一個point.
英國Youtuber Mrwhosetheboss用了一大dung電話逐一去這個IG網頁時發現不是每一部android電話都能夠避免 ‘死機’ 這個情況.
越舊的電話 被story搞死的機會率越大.
去到某一些舊年份的電話根本完全打不開那個story.
這是代表什麼? 代表越新越多 RAM 越多處理能力的機器越能對付這個story. 亦解釋到為何最高只有6GB RAM的iPhone會不停死機.
唯一的解釋就是因為這個story是比一般story大, 所以需要多點RAM去處理. 可以這樣搞大一個Instagram story的嗎?
最後互聯網找出的答案非常神奇! 網上專家用metadata對比一個普通ig story的尺寸和這個放大story的尺寸 , 放大story大約比正常大18個數位那麼多! 即是0.5和180,000,000,000,000,000的對比. 想像一下, 一個capacity只能裝落 ‘零點幾’ 的iPhone 要面對18個 零的放大IG story時, 如何能不crash呢?
最後證實我們看到的只是一個IG 投票poll和計時器. 放大了的某一個角落. 所以怎麼按也沒有反應。
技術上的結論就是Pgtalal用了一個叫 http proxy的濾器, 有一點像Nordvpn, 讓他send data給Instagram 的server前能任意改變當中的data. 主要是誇大個story的size.
而IG 就這樣超超超超超大這樣 send給你電話讓你死機.
很多網上專家相信Pgtalal 這樣做是想make a statement看看IG security有多yuek!
人類安全要緊!!!
但....最後好像證明了這個pgtalal只有14歲...
所以他應該不是這麼偉大.
如果我14歲是這樣做只會是因為貪玩.
手機proxy server 在 手機proxy設定在PTT/Dcard完整相關資訊 - 星星公主 的推薦與評價
手機 無法連上特定網站· 手機google沒有回應· Windows 10 無法連上這個網站.[PDF] Proxy (網頁代理伺服器) 設定—Chrome 1. 開啟Chrome 瀏覽器,進入... ... <看更多>
手機proxy server 在 免root 用手机给设备开代理 - Hsnico's Blog 的推薦與評價
一台可以科学上网的Android 设备(iOS 端不清楚),Proxy Server App 创建代理。 Proxy Server. 使用方法. 手机端开启个人热点,无线有线都可以,接收端 ... ... <看更多>
手機proxy server 在 手機proxy設定在PTT/Dcard完整相關資訊 - 星星公主 的推薦與評價
手機 無法連上特定網站· 手機google沒有回應· Windows 10 無法連上這個網站.[PDF] Proxy (網頁代理伺服器) 設定—Chrome 1. 開啟Chrome 瀏覽器,進入... ... <看更多>