這里記錄一些有趣的系統設計類的題目,一般大家比較喜歡出的設計類面試題目會和高可用系統相關比如秒殺和搶紅包等。歡迎大家在評論中評論自己遇到的題目,本篇文章會持續更新。
1、設計一個搶紅包系統
搶紅包系統其實也是秒殺類中的一個場景,搶紅包的特點在于無法超售,下單中的超賣、少賣問題是可以允許的。但是對于紅包,一旦用戶搶到的錢比發出去的錢更多,那就是大問題了。
搶紅包系統的特點:
- 高并發場景保證系統的高可用
- 不能超售,及不允許搶到的錢比發出的錢多。
1.1 高可用的解決方案:
- 負載均衡
- 限流
- 熔斷、降級
- 隔離
- 超時重試
- 異步調用
- 使用緩存
涉及高科用系統可以參考我之前寫的這篇文章:如何設計一個高可用系統
1.2 搶紅包系統的設計
參考文章:
https://jiajunhuang.com/articles/2023_01_31-red_envelope.md.html
https://juejin.cn/post/6925947709517987848
上面兩篇文章寫的很好,建議參考,這里總結一下該方案設計:
1. 分布式鎖攔截 或者 mysql層樂觀鎖控制
2. 預分配紅包,增加一個紅包明細表
還有一種方案可以使用redis隊列做存儲,每次來搶pop一個紅包,然后同時將這個紅包再異步存儲到庫中。這里需要注意的就是如果pop完系統崩潰,可能造成redis數據丟了,或者mysql還沒有存儲到紅包,該如何處理?
1.3 其他
紅包分配算法其實也會常問,如何分配才能保證隨機,這道題屬于算法題,不屬于系統設計題目,可作為延伸思考。
一般會使用二倍均值法
參考文章:https://juejin.cn/post/7080343105177665544
2、秒殺系統設計
秒殺系統的特點如下:
- 高性能
- 一致性
- 高可用
該題可以引發的問題很多,常問常新,非常考研一個人系統架構的能力,很多面試官會喜歡問這一類的設計問題,我收集了幾個比較不錯的系統設計可以參考和學習。
如何設計一個秒殺系統1
如何設計一個秒殺系統2