1. 程式人生 > >快手Java四面:設計模式+紅黑樹+Java鎖+Redis+Kafka等

快手Java四面:設計模式+紅黑樹+Java鎖+Redis+Kafka等

一面(一個小時十分鐘)

1.自我介紹

2.說說B+樹和B樹的區別,優缺點等?

3聊聊Spring,主要IOC等等

4多執行緒JUC包下的一些常見的類,比如CountDownLatch、Semaphore等

5.鎖的概念,鎖相關的關鍵字,volatile,synchronized。還比較了ReentrantLock與synchronized。

6.你瞭解哪些收集器?CMS和G1。詳細談談G1的優點?什麼時候進行Full GC呢?

7.Spring中涉及的一些設計模式

8.演算法題:無序數列中求第k大的數(維護最小堆,然後依次遍歷,與堆頂比較)

9.MySQL建立索引的原則,好處

10. 怎麼實現一個執行緒安全的計數器?

 

二面(四十多分鐘)

1. 設計模式:講了單例,工廠方法,抽象工廠,策略模式,觀察者模式,代理模式,還順便講了下spring動態代理的實現原理

2. 執行緒池有哪些引數?分別有什麼用?如果任務數超過的核心執行緒數,會發生什麼?阻塞佇列大小是多少?

3. HashMap的底層資料結構

4. 紅黑樹的具體結構及實現,紅黑樹與查詢樹的區別體現

5. 接著聊ConcurrentHashMap,底層實現

6. HashMap雜湊函式的認識,JDK1.8採用的hash函式

7. 資料庫索引,索引底層的實現,B+樹的結構以及與普通查詢樹的優點

9. TCP三次握手四次揮手,四次揮手過程中服務端的哪幾種狀態,哪幾種包

10. 已經有一個查詢好友的介面,設計一個微信朋友圈,可以實現發表朋友圈,新增評論,檢視評論等功能。主要是設計資料結構

 

三面(50分鐘:主要分散式這塊)

  1. 你對快手的瞭解,和抖音的區別,聊專案

  2. 專案中用到dubbo?那你說說什麼是rpc框架?和http呼叫的區別是什麼?

  3. Redis有哪些資料結構?持久化方案和區別?

  4. Redis哨兵、叢集的設計原理和區別?

  5. Redis快取和資料庫會存在一致性問題嗎?怎麼解決

  6. Kafka怎麼保證資料可靠性?講了生產者端傳送訊息到broker持久化,分割槽和副本機制,消費者消費訊息的at-least-once和at-most-once?怎麼實現Exactly-Once?

 

HR面

常規的面試流程了,主要就是自己優缺點,以及未來的職業發展,以及薪資這塊。