如何設計一個短鏈接系統?
ID 生成:雪花算法 / 自增 ID + 進制轉換(62 進制);
存儲:Redis 緩存 + MySQL 持久化;
重定向:302 跳轉;
防刷:限流 + 布隆過濾器去重。

秒殺系統如何設計?
前端:按鈕置灰、答題驗證碼;
網關:限流(Sentinel/Nginx);
服務層:Redis 預減庫存 + Lua 原子操作;
異步下單:MQ 削峯,訂單落庫。

如何防止重複下單?
前端 Token 機制;
後端唯一業務 ID(如訂單號)+ 數據庫唯一索引。

CAP 理論是什麼?
一致性(C)、可用性(A)、分區容錯性(P)最多滿足兩個;
分佈式系統必須選 P,通常在 CP(如 ZooKeeper)和 AP(如 Eureka)之間權衡。

如何保證接口冪等性?
前端防重提交;
後端:唯一索引、Token 機制、狀態機、悲觀鎖。

分佈式事務解決方案?
2PC(強一致,性能差);
TCC(Try-Confirm-Cancel,業務侵入);
最終一致性(MQ + 本地消息表);
Seata(AT 模式,自動補償)。

服務註冊發現流程?
服務啓動 → 向註冊中心(Nacos/Eureka)註冊;
消費方拉取服務列表 → 負載均衡調用;
心跳檢測 + 健康檢查實現故障剔除。

Spring Bean 的生命週期?
實例化 → 屬性填充 → Aware 接口回調 → BeanPostProcessor前處理 → 初始化(init-method)→ BeanPostProcessor後處理 → 使用 → 銷燬。

Spring 循環依賴如何解決?
三級緩存:singletonObjects(成品)、earlySingletonObjects(早期引用)、singletonFactories(工廠);
僅支持 setter 注入的單例 Bean 循環依賴。

@Autowired 和 @Resource 的區別?
@Autowired:Spring 提供,默認 byType,配合 @Qualifier byName;
@Resource:JSR-250 標準,默認 byName,找不到再 byType。

Spring Boot 自動裝配原理?
@EnableAutoConfiguration → 加載 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports → 條件裝配(@Conditional)。

InnoDB 和 MyISAM 的區別?
InnoDB:支持事務、行鎖、外鍵,默認引擎;
MyISAM:不支持事務、表鎖、全文索引(舊版),崩潰恢復差。

MySQL 索引為什麼用 B+ 樹?
B+ 樹層級少、磁盤 I/O 少;
葉子節點鏈表連接,利於範圍查詢;
非葉子節點只存 key,單頁可存更多索引項。

事務的四大特性(ACID)?
原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)。

MVCC 是什麼?如何實現?
多版本併發控制,讀不加鎖;
通過 undo log + Read View 實現快照讀;
解決幻讀需配合間隙鎖(RR 隔離級別)。