博客 / 詳情

返回

頭一次見問這麼多kafka的問題

分享一篇粉絲朋友整理的面經,第一次遇見問那麼多kafka的問題,看看他是怎麼回答的。

先來看看 職位描述:

崗位職責:

  • 負責基於 Go 的後端服務的設計、開發和維護;
  • 參與系統架構設計,確保系統的高可用性、高性能和可擴展性;
  • 編寫高質量、可維護的代碼,並進行代碼評審;
  • 解決複雜的技術問題,優化系統性能;
  • 與跨職能團隊合作,確保項目按時交付;
  • 編寫技術文檔和開發規範,提升團隊整體開發效率;
  • 參與新技術的研究和引入,推動技術創新。

崗位要求:

  1. 計算機科學或相關專業本科及以上學歷,思維邏輯清晰;
  2. 5年以上軟件開發經驗,至少3年Go語言開發經驗;
  3. 熟悉 Go 語言的標準庫和常用框架,瞭解 Go 語言的內存管理和併發模型;
  4. 具備微服務架構設計和開發經驗,熟悉 gRPC、Protobuf 等技術;
  5. 熟悉常見的數據庫(如 MySQL、PostgreSQL)和緩存技術(如 Redis);
  6. 有良好的代碼風格和編寫高質量單元測試的習慣;
  7. 熟悉 Docker、Kubernetes 等容器技術,具備一定的 DevOps 經驗;
  8. 具備較強的分析和解決問題的能力,良好的溝通和團隊協作能力;
  9. 有開源項目貢獻者或個人技術博客者優先。

加分項:

  • 有 Rust 開發經驗,熟悉其他編程語言(如 Python、C++等);
  • 有金融行業交易系統開發經驗,如行情報價、交易、風控等。

面試流程

來看看面試的全過程:

  1. 自我介紹
  2. 説一下項目的業務,怎麼做的,難點在哪,如何解決?

    • 消息隊列:數據傾斜問題,數據不丟,重複消費
    • redis:使用hash以及Pipline,bigkey拆解
    • 數據庫:性能優化,分庫分表
  3. 數據庫優化設置lock_timeout是哪個鎖的超時

    數據庫優化設置中的 lock_timeout 主要是針對行鎖的超時設置。當一個事務在等待獲取行鎖時,如果超過了 lock_timeout 設置的時間,就會拋出超時錯誤,避免事務長時間等待而導致系統性能下降。

  4. kafka集羣規模

    我們的 Kafka 集羣規模為 5 台服務器,能夠支持 50 萬的併發量。通過合理的配置和優化,我們可以進一步提高 Kafka 集羣的性能和併發能力。

  5. kafka為什麼支持高併發

    Kafka 支持高併發主要有以下幾個原因:

    1. 分區:Kafka 將數據分成多個分區,每個分區可以在不同的服務器上進行存儲和處理,從而實現了水平擴展,提高了系統的併發能力。
    2. 零拷貝:Kafka 採用了零拷貝技術,減少了數據在內存中的複製次數,提高了數據的傳輸效率。
    3. 網絡壓縮:Kafka 支持網絡壓縮,可以減少網絡傳輸的數據量,提高系統的性能和併發能力。
  6. 説一下什麼是零拷貝

    零拷貝是一種技術,主要通過減少數據在內存中的複製次數來提高數據的傳輸效率。在 Kafka 中,零拷貝技術主要通過使用 mmap 函數實現。mmap 函數將文件映射到內存中,使得應用程序可以直接訪問文件內容,而不需要進行數據的複製。這樣可以減少數據在內存中的複製次數,提高數據的傳輸效率。

  7. 為什麼選擇kafka

    Kafka 具有很高的併發處理能力,能夠滿足金融交易系統對高吞吐量的要求。而且Kafka 的擴容性非常好,可以很容易地增加服務器節點來提高系統的性能,天生適合集羣部署,並且使用 Java 和 Scala 編寫,便於進行問題排查和維護。相比之下,RabbitMQ 的集羣部署相對複雜,而且使用 Erlang 語言,對於一些開發人員來説可能不太熟悉,問題排查也比較困難。

  8. Api 網關用來做什麼的?

    Api 網關主要用於對第三方調用進行流量限制和安全控制。它可以對請求進行過濾、路由和負載均衡,確保系統的穩定性和安全性。同時,Api 網關還可以提供一些額外的功能,如身份驗證、授權、監控和統計等。

  9. 支付模塊這塊怎麼做的

    參與的項目中,支付模塊是由其他同事負責開發的。我主要是通過調用支付模塊提供的 API 來實現相關業務功能。在調用 API 時,我會確保參數的正確性和安全性,同時對返回結果進行合理的處理和錯誤處理。

  10. 説一下你們微服務的架構是怎麼樣的

    我們的系統採用了無服務和微服務的混合架構。這種架構可以充分發揮無服務架構的彈性和高效性,同時又能利用微服務架構的靈活性和可擴展性。在具體實現中,我們將一些通用的功能模塊封裝成無服務函數,通過事件驅動的方式進行調用。而對於一些複雜的業務模塊,則採用微服務架構,進行獨立開發和部署。

  11. 差分升級是怎麼實現的

    通過對比不同版本的代碼,找出差異部分,然後將這些差異部分抽取出來進行計算 MD5 值等操作,以確定是否需要進行升級。在升級過程中,我們會確保數據的完整性和一致性,同時儘量減少對系統的影響。

  12. 編譯服務類似CI/CD

    通過修改 Git 命令,實現了類似於 Web Hook 的功能。當有代碼提交併打上 tag 時,系統會自動進行 Git clone 操作,然後進行測試和編譯。這樣可以確保代碼的質量和穩定性,同時提高開發效率。

  13. C/C++是開發固件的吧

    我曾經使用 C/C++ 和 Lua 的組合開發過智能網關。不過,由於我這次是應聘後端開發崗位,所以沒有將這部分內容寫在簡歷中。

  14. 你很喜歡用redis?

    非常喜歡使用 Redis。Redis 就像一個數據結構數據庫,它提供了豐富的數據結構和操作接口,使用起來非常方便。在項目中,我們使用 Redis 實現了很多業務功能,比如緩存熱點數據、實現分佈式鎖、進行任務隊列管理等。

  15. 反問

結尾

大家可以看出來,在這場深入的技術面試中,需要應試者具備強大的技術功底和應對各種挑戰的能力。面試官詢問的方向好像大多是 Kafka 的高併發處理的問題,不知道這次的面經有沒有給你帶來哪些學習要點呢?也希望通過分享這位面試者的經歷,能給正在求職或致力於技術提升的你帶來啓發和幫助。

堅定不移,聽話照做,按部就班,早日上岸!

加我微信,免費領面經,升職加薪:wangzhongyang1993,備註:面經。

user avatar kuaishoutech 頭像 opencsg 頭像 iamrockrepublic 頭像 mysteryjack 頭像 teamcode 頭像 renzhendezicai 頭像 fannaodeliushu 頭像 bianchengshijie 頭像 u_16213658 頭像 hust 頭像 febobo 頭像 hello_5adf4e51b4f3e 頭像
16 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.