隨機面試題

1. 怎麼保證MQ消息必達?

(1)客戶端和服務端都提供回調接口,一旦收到數據消息就發送確認消息;

(2)客戶端對消息編號,一旦異常服務端及時通知客戶端重發;

2. 怎麼用Redis做分佈式鎖?

 (1) 用setNX(key,value,超時時間)方法設置鎖。

 (2)並通過給每個key設置隨機過期值來保證鎖不會大量同時過期。

3. 阻塞隊列和非阻塞隊列

    BlockQueue是JDK1.8新增的東西。它的特點是:當隊列爲空時,獲取隊列元素的操作會被阻塞;當隊列滿了時,添加新元素的操作會被阻塞。

4.信號量/Semaphore

   JDK1.8新增的東西,用來控制線程併發數(限流)。

5. 互聯網架構怎麼進行限流、監控和統計請求

  (1)nginx只能達到限流和監控的目的;

  (2)正對單體應用,在攔截器層增加監控代碼(適用於單體低併發的場景)。

  (3)針對微服務場景,編寫監控模塊,任何請求都需要先走一遍監控模塊才能繼續執行(適用於分佈式低併發的場景)。

  (4)SpringBoot/Dubbo項目可以引入Hystrix,能夠同時達到限流、監控、統計三個目的(適用於高併發的場景)。

6. 怎麼保證使用消息隊列時消息有序消費?

   (1)對於消息不可丟棄的場景,生產者推送消息時,給每個消息進行編號。消費者按序消費消息。

   (2)對於消息可丟棄 的場景,生產者推送消息時加上時間戳,消費者只消費更靠後的消息。

7. 高併發搶票解決方案?

    (1)引入消息隊列,可以有效削峯,而且可以有序進行;

    (2)分佈式鎖(對服務進行了負載均衡時)

發佈了119 篇原創文章 · 獲贊 23 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章