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)分佈式鎖(對服務進行了負載均衡時)