動態

詳情 返回 返回

頭一次見問這麼多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 tech 頭像 lenve 頭像 huangxunhui 頭像 chaochenyinshi 頭像 explinks 頭像 writers 頭像 donnie4w 頭像 323duqpq 頭像 swifter 頭像 immerse 頭像 xiaolanbenlan 頭像 beiyinglunkuo 頭像
點贊 25 用戶, 點贊了這篇動態!
點贊

Add a new 評論

Some HTML is okay.