系統設計面些啥?Palantir 面官教你如何準備系統設計面試!

系統設計面些啥?Palantir 面官教你如何準備系統設計面試!

Palantir 面官教你如何準備系統設計面試!本文由九章算法翻譯。閱讀英文原文請戳:http://t.cn/RA8POpp。

Palantir主要考察三方面的系統設計能力

我們面試時,我們希望看到面試者表現出基本的系統知識,同時瞭解一些設計的技巧。這與算法面試和程序面試有什麼不同呢,那就是,我們在整個過程中,其實主要看中的是你思考論述的過程,而不是你最後提出的解決方案(當然如果你提出的解決方案實在太挫……)。

系統設計面些啥?Palantir 面官教你如何準備系統設計面試!

也就是說,系統設計面試最重要的一點是“溝通”(communication)。

這也正體現了Palantir的企業文化。在Palantir,工程師們有著充分的自由。Palantir不會要求工程師一下子就開發出非常完美的功能。相反地,我們的工程師對於這些開放性問題有著充分的自主權。而且,我們的工作就是各自去為這些問題提出最佳的解決方案我們希望尋找的是那些我們可以完全信任的人。這樣,他們自己就可以做出非常棒的方案,而不需要我們的監管。也就是說,我們需要的工程師,是那些可以管理一個很大項目,同時保持項目持續朝正確方向發展的人。這意味著,你必須可以高效地與身邊的同時進行溝通。因為“閉門造車”在我們的大規模項目中是不可能的。

開放式面試

通常,我們會先讓你按給定的題目設計一個系統。面試官給你的提示往往很簡單 ——但你千萬不要太天真,這些題目往往都是“深不可測”的,面試官們想要看的是在45分鐘內,你可以解決掉多少問題。

系統設計面些啥?Palantir 面官教你如何準備系統設計面試!

大多數時候,我們會把握談話的方向。不過你可以按照自己的理解去解答面試題。

也就是說,你可以提問、在白板上畫示意圖,甚至可以激發出面官的想法。這道問題的限制條件是什麼?系統設計時需要什麼輸入?這些都是你在展開思考時所需要先向面試官澄清的。一定要記住,現實生活中的問題,都不是隻有一個答案的哦。任何事情都是一個博弈。

考察內容

系統設計面些啥?Palantir 面官教你如何準備系統設計面試!

系統是非常複雜的。當你在設計一個系統時,你必須直面所有的複雜性。基於這一點,你必須熟知以下內容:

  1. 併發性(concurrency)。你知道線程(threads)、死鎖(deadlock)和starvation嗎?你知道如何並行化算法嗎?你瞭解一致性(consistency)和連貫性(coherence)嗎?你大概瞭解IPC和TCP/IP嗎?你知道吞吐量(throughput) 和延遲(latency)的區別嗎?
  2. 現實表現(real-word performance)。你應當熟悉你電腦的速度和性能,包括RAM、硬盤、SSD以及你的網絡狀況。
  3. 估計(estimation)。估計在幫助你縮小可能性解決方案的範圍時起到了重要的作用。這樣,你就只需寫少數幾個原型或微基準。
  4. 可用性和可靠性(availability and reliability)。你是否考慮過系統什麼時候會出現bug無法運行嗎(特別是在分散式的環境中)?你知道如何設計一個系統以應當網絡故障嗎?你瞭解持久性嗎?切記,我們並不是要尋找一個熟悉以上所有的問題的“全才”。我們想衡量的是你的熟練程度。我們只需要你對系統設計方面有一定的基礎,並且知道什麼時候應該尋求專家的幫助。

如何準備

就像你在準備算法面試和程序面試時一樣,你必須刷無數的題,系統設計同樣需要練習。以下提供一些可以幫助你提高的建議:

系統設計面些啥?Palantir 面官教你如何準備系統設計面試!

  • 模擬系統設計面試。邀請一個工程師幫你模擬面試。讓他提出一個系統設計問題,如果正好是他正在做的項目那就再好不過了。不要把它當成是一個面試,而是放輕鬆地去思考問題,並提出你能想到的最佳解決方案。
  • 在實際的系統中去實踐。你可以在既有的OSS中去練習,也可以與朋友合作搭建一個系統。對於課堂中的系統設計作業,不再把它僅僅當成一個學術訓練,而是把它當成實際問題,思考系統設計過程中的架構和博弈。正如我們生活中遇到的大多事情一樣,只有做了才知道其中會遇到什麼問題,從而真正學到東西。
  • 深挖開源系統的運行特點。例如,你可以看看levelDB。這是一個乾淨、小、且編寫良好的系統。你可以讀讀執行命令,瞭解它是如何在硬盤中存儲數據的,如何將數據壓縮成不同的層?你也可以多多反思一下的博弈問題:哪種數據和大小是最優的?什麼情況下會降低讀寫速度?(提示:比較一下隨機寫和順序寫)
  • 多瞭解一下系統中數據庫和操作系統是如何運行的。這些技術並不只是你口袋中的工具,它們往往會在你設計系統的時候給你帶來啟發。如果你經常像DB或OS一樣思考它們如何處理各自的問題,你也會把這些思考方式應用到其它的系統設計中去。

最後,放輕鬆,表現出你的創造力

系統設計或許比較難,但它也是可以讓你表現自己創造力的地方。在面試時,注意聆聽問題,確保你瞭解該問題,並且直接、清晰地向面試官表達你的想法,你的表現肯定會得到面試官的認可。

祝大家good luck!

專業的北美IT求職經驗分享,技術交流社區,幫助你找到好的IT工作。

由硅谷頂尖的IT企業工程師授課,提供專業的算法培訓/面試諮詢。

官網:www.jiuzhang.com

微信公眾號:九章算法。

知乎ID:九章算法。

相關推薦

推薦中...