前言
真的非常感謝互聯網提供的這個平台和各位牛油,每次面試就在網上狂搜面經然后一通背,平時也有很多大佬分享自己的經驗,參考他們的經驗和自己摸索。雖然只有一個offer,對於本菜雞來說也達到了目標了。下面為了回報為我提供經驗的大佬,我也把自己的資料以及面經分享出來給大家!
這些資料的內容都是面試時面試官必問的知識點,篇章包括了很多知識點,其中包括了有基礎知識、Java集合、JVM、多線程並發、spring原理、微服務、Netty 與RPC 、Kafka、日記、設計模式、Java算法、數據庫、Zookeeper、分布式緩存、數據結構等等。
一面
1、介紹一下自己, 為什么選擇出來看看機會
2、聊項目, 警報怎么做的, 統一接入監控項怎么做的
3、聊項目, 配置中心項目, 問實時配置推送怎么做
4、討論為什么選擇所有的組件依賴放在配置中心中控制
5、我現在要做一個限流功能, 怎么做?這個限流要做成分布式的, 怎么做?
6、怎么搶鎖?鎖怎么釋放?
7、加了超時之后有沒有可能在沒有釋放的情況下, 被人搶走鎖?怎么解決?
8、不用 zk 的心跳, 可以怎么解決這個問題呢?
9、假如這個限流希望做成可配置的, 需要有一個后台管理系統隨意對某個 api 配置全局流量, 怎么做?
10、某一個業務中現在需要生成全局唯一的遞增 ID, 並發量非常大, 怎么做
11、算法題:M*N 橫向縱向均遞增的矩陣找指定數
12、有什么想問我的?
二面
1、平時用的工具鏈和技術棧是什么?
2、golang 踩過坑嗎?這段 golang 代碼有沒有 bug?
3、Java 中 HashMap 的存儲, 沖突, 擴容, 並發訪問分別是怎么解決的?
4、拉鏈法中鏈表過長時變形為紅黑樹有什么優缺點?
5、HashMap 的並發不安全體現在哪?
6、HashMap 在擴容時, 對讀寫操作有什么特殊處理?
7、ConcurrentHashMap 是怎么做到並發安全的?
8、Java 有哪些鎖機制, 分別有什么特點?
9、知道 CAS 嗎? Java 中 CAS 是怎么實現的?
10、MySQL 的存儲引擎用的是什么?(InnoDB)為什么選 InnoDB?
11、MySQL 的聚簇索引和非聚簇索引有什么區別?
12、B+樹和二叉樹有什么區別和優劣?
13、針對一個場景設計索引,具體場景忘記了,反正考察的是聯合索引與列選擇性的知識
14、現有一個新的查詢場景, 要怎么解決?
15、假如要查 A in () AND B in (), 怎么建索引?
16、查 A in () AND B in () 時, MySQL 是怎么利用索引的?
17、假如查詢 A in (), MySQL 是針對 N 個值分別查一次索引, 還是有更好的操作?
18、用過 Redis 的哪幾種數據結構?ZSET 是怎么實現的?
19、zrange start, stop, 總長度為 n, 復雜度是多少?
20、Kafka 的消費者如何做消息去重?
21、MySQL 去重、Redis 去重、假如場景量極大且允許誤判,布隆過濾器也可以
22、介紹一下 Kafka 的 ConsumerGroup
23、Kubernetes 和 Docker 用得怎么樣?
24、時序型數據庫的存儲結構是怎么樣的?
25、LSM 樹了解嗎? 是一種什么存儲結構?
26、在生產中用過 Cassandra 和 RocksDB 嗎?量有多大?
27、Cassandra 的墓碑機制是什么?
28、算法題:牛客題霸上的原題,可以去看看:NC57 反轉數字
三面
1、聊項目和工作經驗
2、用 Kubernetes 的過程中踩過哪些坑?
3、考慮一個業務場景: 頭條的文章的評論量非常大, 比如說一篇熱門文章就有幾百萬的評論, 設計一個后端服務, 實現評論的時序展示與分頁
4、假如用 id 翻頁的方式, 數據庫表如何設計?索引如何設計?
5、假如量很大, 你覺得需要分庫分表嗎? 怎么分?
6、分庫分表后怎么查詢分頁?
7、分庫分表后怎么保證主鍵仍然是遞增的?
8、現在需要支持深分頁, 頁碼直接跳轉, 怎么實現?
9、瞬時寫入量很大可能會打掛存儲, 怎么保護?(斷路器)
10、斷路器內部怎么實現的?(可以用 ringbuffer)
11、斷路器會造成寫入失敗, 假如我們不允許寫入失敗呢?
12、算法題: N 場演唱會, 以 [{startTime, endTime}…] 的形式給出, 計算出最多能聽幾場演唱會