11.13
如何设计一个短链接系统?
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 隔离级别)。

浙公网安备 33010602011771号