面試 三 針對樂優專案提出問題2

2021-10-01 02:22:32 字數 1480 閱讀 4264

本章主要講述根據樂優**專案,面試可能會問到的一些問題

1.你如何理解分布式服務

我們的專案就是分布式服務,按照自己的話來說,就是把核心業務提取出來,例如訂單管理,購物車管理都需使用商品管理的業務,只需要商品管理自己去對資料庫進行增刪改查,而購物車和訂單管理直接呼叫商品管理即可.

這樣做的優點在於:將基礎服務進行提取,系統間相互呼叫,提高了**的復用和**的開發效率。

但也存在著缺點:系統間的耦合度變高,呼叫關係也錯綜複雜,難以維護。

2.如何應對高併發

只有高可用了才可進行高併發(應該主要是從下面括號裡面去回答吧)

高併發:(分布式,靜態化技術,cdn服務,快取(資料庫併發),非同步併發,池化,佇列(rabbitmq))

高可用:(集群:redis,負載均衡ribbon,限流(控制),降級,熔斷(hystrix))

就像頁面靜態化技術就是解決高併發的非常有效的手段.

3.如何避免訊息的丟失

1.做ack確認,當乙個訊息被消費者接收以後,消費者應當發一條回執,我已經收到並消費了該條訊息,那麼此時,rabbitmq才能把訊息從佇列中刪除

但是請注意:

並不一定做了訊息確認就能避免訊息丟失,如果rabbitmq掛了,訊息沒了怎麼辦呢?可能有些人會回答說那就搭集群被,一台掛了還有別的.但是面試官想得到的回答可不一定是這個.這就引出了第二條,應持久化,而我們的rabbitmq它預設是不持久化的。

2.作訊息的持久化,避免rabbitmq把訊息弄丟,發訊息前,將訊息持久化到資料庫,並記錄訊息狀態(即可靠訊息服務)

但前提是:佇列和exchange也都進行了持久化.(因為訊息都經歷了佇列和交換機,中途也可能發生訊息的丟失)

3.採用生產者確認機制:避免生產者因為網路問題發出了訊息,但未到rabbitmq中,那麼這個也算是訊息丟失.

傳送訊息前:channel.confirmselect();

傳送訊息後:channel.waitforconfirms();

4.如何避免訊息堆積?

1.採用workqueue多個消費者監聽同一佇列

2.接收到訊息後,而是通過執行緒池非同步消費。

5.對redis和memcache有沒有了解,為什麼選擇redis?

memcache無持久化: memecache把資料全部存在記憶體之中,斷電後會掛掉且資料不能超過記憶體大小。 而redis有部份存在硬碟上,這樣能保證資料的永續性(預設rdb模式)

memcache只支援k-v結構,redis有複雜的資料型別。

memcache是多執行緒,效能比redis(單執行緒)差

在這裡可能會有人問:多執行緒不是應該比單執行緒效能要更好嗎?

這是因為memcache大多數時間用在了切換執行緒上。

6.redis面試經常會問到的問題

7.你們的微服務位址如果不小心暴露了怎麼辦?

8.如何解決分布式事務問題?(熱點)

求最大的數 三 針對上篇的改進

using system using system.collections.generic using system.io using system.linq using system.text using system.threading.tasks using system.xml 這裡要定義成...

面試知識點一(針對有經驗的人)

面臨重新找工作,梳理下比較常問的知識點。jvm 和調優 對於有2.3年工作經驗的人來說這是個亮點。執行緒池 這必須懂。遠端呼叫 加分的亮點。mq 有問的 資料庫優化 天天問 集合原始碼 這還用說嗎?不懂能出去找工作 框架原理 同上 高併發 亮點,明白了。你還需要找工作?nosql 和快取 這不懂都不...