3年經驗面試題彙總+自我解答(每天更新一點)

一.微服務之間是如何獨立通訊的?

同步:

1 Rest Http協議

2 RPC TCP協議

異步:

二. 項目中緩存如何使用的?爲什麼要用緩存?緩存使用不當會造成什麼後果?

使用方向:

字典項 、菜單配置、系統參數、登錄token、session

要用緩存原因:

高性能

對於一個請求,耗時幾百毫秒查出一個結果,然後這個操作員就用了一次,這很浪費。

而同一個不經常改變的結果,從緩存取,只需要幾毫秒。

高併發

redis官方測評數據,每秒10W左右的讀寫,而mysql遠遠達不到這個數量。

不當的後果?

暫時未想好。

三. 爲什麼進行分庫分表?(涉及到高併發的時候,原來公司在數據庫層面使用什麼方案)分庫分表用過哪些中間件?這些中間件有什麼有趣點?你原來公司是怎麼進行數據庫水平或者垂直拆分的?

爲什麼進行分庫分表?

分表:

單一表的數據量太大,達到幾百萬的時候,sql執行性能就會變差,這個時候就需要把一個表的數據拆到多個表中。

分庫:

以一般經驗來看,一個數據庫最多支撐2000併發,就需要擴容,這個時候把一個數據庫的數據拆分到多個多個庫中,承受的併發將提高多倍

分庫分表用過哪些中間件?

DDS 華爲自研

沒有開源,這個就不多說了

Sharding-jdbc

噹噹網開源的,屬於client層方案,支持分庫分表,讀寫分離,分佈式ID生成,柔性事務

Mycat

是阿里的Cobar改良而來,屬於proxy層方案

他們有什麼優缺點?

首先,Mycat和Sharding-jdbc這兩種中間件,我並沒有用過

根據網上的回答,整理一下

ShardingJdbc:

優點在於不用部署,運維成本低,不需要代理層的二次轉發請求,性能高,缺點在於耦合,如果遇到升級,各個系統都需要重新升級再發布,各個系統都耦合Sharding-Jdbc的依賴

Mycat

這種proxy層的缺點在於需要部署,自己運維一套中間件,運維成本高,好處是對於各個項目是透明的,如果遇到升級,自己中間件那裏搞就行

我原來公司如何進行水平或者垂直拆分數據庫的

水平拆分和垂直拆分同時用。

首先使用垂直拆分,化爲兩個模塊,一個是基本不變的公共資源庫,裏面存放菜單 字典 系統參數之類的數據

然後把第一次水平拆分稱爲一級分庫,根據新政區劃這個字段,把全國的數據劃分爲幾部分,然後放到不同的庫裏。

但是有的進行一級分庫之後,從省份來看,有的省份的數據依然是大的,這個時候就進行二級分庫,也就是把省裏的數據進行第二次水平拆分。我們制定一個二級分庫字段,進行hash一下均勻分散,這樣可以平均分配每個庫的數據量和請求壓力

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章