文末有面經共享群
前面已經分享過幾篇面試了,這是一篇關於更加面向專案和技術的面經詳解,第一次遇見問那麼多kafka的問題,看看這個粉絲是怎麼回答的。
先來看看 職位描述:
崗位職責:
- 負責基於 Go 的後端服務的設計、開發和維護;
- 參與系統架構設計,確保系統的高可用性、高效能和可擴充套件性;
- 編寫高質量、可維護的程式碼,並進行程式碼評審;
- 解決複雜的技術問題,最佳化系統效能;
- 與跨職能團隊合作,確保專案按時交付;
- 編寫技術文件和開發規範,提升團隊整體開發效率;
- 參與新技術的研究和引入,推動技術創新。
崗位要求:
- 電腦科學或相關專業本科及以上學歷,思維邏輯清晰;
- 5年以上軟體開發經驗,至少3年Go語言開發經驗;
- 熟悉 Go 語言的標準庫和常用框架,瞭解 Go 語言的記憶體管理和併發模型;
- 具備微服務架構設計和開發經驗,熟悉 gRPC、Protobuf 等技術;
- 熟悉常見的資料庫(如 MySQL、PostgreSQL)和快取技術(如 Redis);
- 有良好的程式碼風格和編寫高質量單元測試的習慣;
- 熟悉 Docker、Kubernetes 等容器技術,具備一定的 DevOps 經驗;
- 具備較強的分析和解決問題的能力,良好的溝通和團隊協作能力;
- 有開源專案貢獻者或個人技術部落格者優先。
加分項:
- 有 Rust 開發經驗,熟悉其他程式語言(如 Python、C++等);
- 有金融行業交易系統開發經驗,如行情報價、交易、風控等。
面試流程
來看看面試的全過程:
-
自我介紹
-
說一下專案的業務,怎麼做的,難點在哪,如何解決?
- 訊息佇列:資料傾斜問題,資料不丟,重複消費
- redis:使用hash以及Pipline,bigkey拆解
- 資料庫:效能最佳化,分庫分表
-
資料庫最佳化設定lock_timeout是哪個鎖的超時
資料庫最佳化設定中的 lock_timeout 主要是針對行鎖的超時設定。當一個事務在等待獲取行鎖時,如果超過了 lock_timeout 設定的時間,就會丟擲超時錯誤,避免事務長時間等待而導致系統效能下降。
-
kafka叢集規模
我們的 Kafka 叢集規模為 5 臺伺服器,能夠支援 50 萬的併發量。透過合理的配置和最佳化,我們可以進一步提高 Kafka 叢集的效能和併發能力。
-
kafka為什麼支援高併發
Kafka 支援高併發主要有以下幾個原因:
- 分割槽:Kafka 將資料分成多個分割槽,每個分割槽可以在不同的伺服器上進行儲存和處理,從而實現了水平擴充套件,提高了系統的併發能力。
- 零複製:Kafka 採用了零複製技術,減少了資料在記憶體中的複製次數,提高了資料的傳輸效率。
- 網路壓縮:Kafka 支援網路壓縮,可以減少網路傳輸的資料量,提高系統的效能和併發能力。
-
說一下什麼是零複製
零複製是一種技術,主要透過減少資料在記憶體中的複製次數來提高資料的傳輸效率。在 Kafka 中,零複製技術主要透過使用 mmap 函式實現。mmap 函式將檔案對映到記憶體中,使得應用程式可以直接訪問檔案內容,而不需要進行資料的複製。這樣可以減少資料在記憶體中的複製次數,提高資料的傳輸效率。
-
為什麼選擇kafka
首先,Kafka 具有很高的併發處理能力,能夠滿足金融交易系統對高吞吐量的要求。其次,Kafka 的擴容性非常好,可以很容易地增加伺服器節點來提高系統的效能。此外,Kafka 天生適合叢集部署,並且使用 Java 和 Scala 編寫,便於進行問題排查和維護。相比之下,RabbitMQ 的叢集部署相對複雜,而且使用 Erlang 語言,對於一些開發人員來說可能不太熟悉,問題排查也比較困難。
-
Api 閘道器用來做什麼的?
Api 閘道器主要用於對第三方呼叫進行流量限制和安全控制。它可以對請求進行過濾、路由和負載均衡,確保系統的穩定性和安全性。同時,Api 閘道器還可以提供一些額外的功能,如身份驗證、授權、監控和統計等。
-
支付模組這塊怎麼做的
參與的專案中,支付模組是由其他同事負責開發的。我主要是透過呼叫支付模組提供的 API 來實現相關業務功能。在呼叫 API 時,我會確保引數的正確性和安全性,同時對返回結果進行合理的處理和錯誤處理。
-
說一下你們微服務的架構是怎麼樣的
我們的系統採用了無服務和微服務的混合架構。這種架構可以充分發揮無服務架構的彈性和高效性,同時又能利用微服務架構的靈活性和可擴充套件性。在具體實現中,我們將一些通用的功能模組封裝成無服務函式,透過事件驅動的方式進行呼叫。而對於一些複雜的業務模組,則採用微服務架構,進行獨立開發和部署。
-
差分升級是怎麼實現的
透過對比不同版本的程式碼,找出差異部分,然後將這些差異部分抽取出來進行計算 MD5 值等操作,以確定是否需要進行升級。在升級過程中,我們會確保資料的完整性和一致性,同時儘量減少對系統的影響。
-
編譯服務類似CI/CD
透過修改 Git 命令,實現了類似於 Web Hook 的功能。當有程式碼提交併打上 tag 時,系統會自動進行 Git clone 操作,然後進行測試和編譯。這樣可以確保程式碼的質量和穩定性,同時提高開發效率。
-
C/C++是開發韌體的吧
是的,我曾經使用 C/C++ 和 Lua 的組合開發過智慧閘道器。不過,由於我這次是應聘後端開發崗位,所以沒有將這部分內容寫在簡歷中。
-
你很喜歡用redis?
是的,我非常喜歡使用 Redis。Redis 就像一個資料結構資料庫,它提供了豐富的資料結構和操作介面,使用起來非常方便。在專案中,我們使用 Redis 實現了很多業務功能,比如快取熱點資料、實現分散式鎖、進行任務佇列管理等。
-
反問
結尾
大家可以看出來,在這場深入的技術面試中,需要應試者具備強大的技術功底和應對各種挑戰的能力。面試官詢問的方向好像大多是 Kafka 的高併發處理的問題,不知道這次的面經有沒有給你帶來哪些學習要點呢?也希望透過分享這位面試者的經歷,能給正在求職或致力於技術提升的你帶來啟發和幫助。
歡迎關注 ❤
我們搞了一個免費的面試真題共享群,互通有無,一起刷題進步。
沒準能讓你能刷到自己意向公司的最新面試題呢。
感興趣的朋友們可以加我微信:wangzhongyang1993,備註:【部落格園】。