refactor: rename files to Chinese and organize by category

Organized 50 interview questions into 12 categories:
- 01-分布式系统 (9 files): 分布式事务, 分布式锁, 一致性哈希, CAP理论, etc.
- 02-数据库 (2 files): MySQL索引优化, MyBatis核心原理
- 03-缓存 (5 files): Redis数据结构, 缓存问题, LRU算法, etc.
- 04-消息队列 (1 file): RocketMQ/Kafka
- 05-并发编程 (4 files): 线程池, 设计模式, 限流策略, etc.
- 06-JVM (1 file): JVM和垃圾回收
- 07-系统设计 (8 files): 秒杀系统, 短链接, IM, Feed流, etc.
- 08-算法与数据结构 (4 files): B+树, 红黑树, 跳表, 时间轮
- 09-网络与安全 (3 files): TCP/IP, 加密安全, 性能优化
- 10-中间件 (4 files): Spring Boot, Nacos, Dubbo, Nginx
- 11-运维 (4 files): Kubernetes, CI/CD, Docker, 可观测性
- 12-面试技巧 (1 file): 面试技巧和职业规划

All files renamed to Chinese for better accessibility and
organized into categorized folders for easier navigation.

Generated with [Claude Code](https://claude.com/claude-code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
This commit is contained in:
yasinshaw
2026-03-01 00:10:53 +08:00
parent fe2e6dc2f2
commit 0e46a367c4
47 changed files with 0 additions and 0 deletions

View File

@@ -0,0 +1,318 @@
# 秒杀系统设计
## 需求分析和数据量评估
### 需求分析
- **核心功能**:商品秒杀、库存管理、下单支付、用户限流
- **业务场景**双十一、618等大促活动商品短时间内高并发抢购
- **QPS评估**假设10万用户同时抢购QPS可达10万+
- **峰值预期**高峰期QPS可达50万+
- **数据规模**商品10万+用户1000万+订单日峰值1亿+
### 数据量评估
- **商品表**10万条日均查询100万次
- **库存表**10万条秒杀期间读写10万+/秒
- **订单表**日峰值1亿条历史数据10亿+
- **用户表**1000万条日均查询500万次
- **Redis缓存**商品信息100万条库存信息10万条
## 核心技术难点
### 1. 高并发库存管理
- 传统数据库锁无法支撑高并发
- 需要分布式锁配合缓存实现
- 库存扣减的原子性问题
### 2. 超卖问题
- 库存与订单不一致
- 需要最终一致性保证
- 重复下单处理
### 3. 限流策略
- 全局限流、用户限流、商品限流
- 限流算法选择(令牌桶、漏桶)
- 限流后的用户体验
### 4. 数据一致性
- 缓存与数据库的一致性
- 分布式事务处理
- 幂等性保证
## 系统架构设计
### 总体架构
```
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ CDN/Static │ │ Load Balance │ │ API Gateway │
│ Cache │◄──►│ (Nginx) │◄──►│ (Gateway) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
┌───────────────────────────────────┼───────────────────────────────────┐
│ │ │
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ 业务服务 │ │ 业务服务 │ │ 业务服务 │
│ (微服务) │ │ (微服务) │ │ (微服务) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
└───────────────────────────────────┼───────────────────────────────────┘
┌───────────────────────────────────┼───────────────────────────────────┐
│ │ │
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Redis集群 │ │ 消息队列 │ │ 数据库集群 │
│ (缓存+分布式锁)│ │ (Kafka/RocketMQ)│ │ (MySQL分库分表)│
└─────────────────┘ └─────────────────┘ └─────────────────┘
```
### 关键组件
#### 1. 流量层
- **CDN**:静态资源加速
- **Web服务器**Nginx负载均衡
- **API网关**:限流、路由、认证
#### 2. 服务层
- **秒杀服务**:核心业务逻辑
- **订单服务**:订单处理
- **库存服务**:库存管理
- **支付服务**:支付处理
#### 3. 存储层
- **Redis集群**:缓存和分布式锁
- **数据库集群**MySQL分库分表
- **消息队列**:异步处理
#### 4. 监控层
- **监控系统**:实时监控
- **告警系统**:异常告警
- **日志系统**:业务日志
## 数据库设计
### 商品表
```sql
CREATE TABLE `seckill_product` (
`id` bigint NOT NULL AUTO_INCREMENT,
`product_id` bigint NOT NULL COMMENT '商品ID',
`product_name` varchar(255) NOT NULL COMMENT '商品名称',
`product_desc` text COMMENT '商品描述',
`original_price` decimal(10,2) NOT NULL COMMENT '原价',
`seckill_price` decimal(10,2) NOT NULL COMMENT '秒杀价',
`stock_count` int NOT NULL COMMENT '库存数量',
`seckill_count` int NOT NULL DEFAULT 0 COMMENT '已秒杀数量',
`start_time` datetime NOT NULL COMMENT '开始时间',
`end_time` datetime NOT NULL COMMENT '结束时间',
`status` tinyint NOT NULL DEFAULT 1 COMMENT '状态',
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_product_id` (`product_id`),
KEY `idx_start_time` (`start_time`),
KEY `idx_end_time` (`end_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
```
### 订单表
```sql
CREATE TABLE `seckill_order` (
`id` bigint NOT NULL AUTO_INCREMENT,
`order_no` varchar(64) NOT NULL COMMENT '订单号',
`user_id` bigint NOT NULL COMMENT '用户ID',
`product_id` bigint NOT NULL COMMENT '商品ID',
`product_name` varchar(255) NOT NULL COMMENT '商品名称',
`seckill_price` decimal(10,2) NOT NULL COMMENT '秒杀价',
`status` tinyint NOT NULL DEFAULT 0 COMMENT '状态',
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_order_no` (`order_no`),
KEY `idx_user_id` (`user_id`),
KEY `idx_product_id` (`product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
```
### 用户表
```sql
CREATE TABLE `seckill_user` (
`id` bigint NOT NULL AUTO_INCREMENT,
`user_id` bigint NOT NULL COMMENT '用户ID',
`username` varchar(50) NOT NULL COMMENT '用户名',
`email` varchar(100) NOT NULL COMMENT '邮箱',
`phone` varchar(20) NOT NULL COMMENT '手机号',
`status` tinyint NOT NULL DEFAULT 1 COMMENT '状态',
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
```
## 缓存策略
### Redis缓存设计
```typescript
// 商品信息缓存
const PRODUCT_CACHE_PREFIX = 'product:';
const PRODUCT_CACHE_TTL = 3600; // 1小时
// 库存缓存
const STOCK_CACHE_PREFIX = 'stock:';
const STOCK_CACHE_TTL = 300; // 5分钟
// 分布式锁
const LOCK_PREFIX = 'lock:';
const LOCK_TTL = 10; // 10秒
// 用户限流
const RATE_LIMIT_PREFIX = 'rate_limit:';
const RATE_LIMIT_TTL = 1; // 1秒
```
### 缓存策略
1. **多级缓存**
- CDN缓存静态资源
- Redis缓存热点数据
- 本地缓存减少网络IO
2. **缓存更新策略**
- 主动更新:秒杀开始前预加载
- 异步更新:异步刷新数据库
- 失效策略设置合理的TTL
3. **缓存预热**
- 秒杀开始前加载商品信息
- 预热库存信息到Redis
- 预加载热门商品
### 分布式锁实现
```java
public boolean acquireDistributedLock(String lockKey, String requestId, long expireTime) {
String result = redisTemplate.opsForValue().set(
lockKey,
requestId,
expireTime,
TimeUnit.MILLISECONDS
);
return "OK".equals(result);
}
public boolean releaseDistributedLock(String lockKey, String requestId) {
String script = "if redis.call('get', KEYS[1]) == ARGV[1] then " +
"return redis.call('del', KEYS[1]) " +
"else " +
"return 0 " +
"end";
Long result = redisTemplate.execute(new DefaultRedisScript<>(script, Long.class),
Collections.singletonList(lockKey),
requestId);
return result != null && result > 0;
}
```
## 扩展性考虑
### 1. 水平扩展
- **无状态服务**:服务实例可以水平扩展
- **数据分片**按商品ID分片
- **读写分离**:主库写入,从库读取
### 2. 垂直扩展
- **服务拆分**:按业务域拆分微服务
- **数据分层**:热数据、温数据、冷数据分离
- **缓存层扩展**Redis集群扩容
### 3. 异步处理
- **消息队列**:订单处理异步化
- **事件驱动**:使用事件总线
- **最终一致性**:保证数据最终一致
### 4. 容灾备份
- **多活架构**:多机房部署
- **故障转移**:自动故障检测和转移
- **数据备份**:定时备份和实时同步
## 实际项目经验
### 1. 技术栈选择
- **前端**Vue.js + React
- **后端**Spring Boot + Node.js
- **数据库**MySQL + Redis
- **缓存**Redis Cluster
- **消息队列**Kafka
- **监控**Prometheus + Grafana
### 2. 性能优化
- **JVM调优**调整堆大小和GC策略
- **MySQL优化**索引优化、慢SQL优化
- **Redis优化**:集群扩容、内存优化
- **网络优化**:连接池配置、超时设置
### 3. 运维部署
- **容器化**Docker + Kubernetes
- **CI/CD**Jenkins + GitLab
- **监控告警**ELK Stack + AlertManager
- **压测工具**JMeter + Locust
### 4. 灰度发布
- **蓝绿部署**:无缝切换
- **金丝雀发布**:逐步放量
- **流量控制**:按比例分配流量
## 阿里P7加分项
### 1. 架构设计能力
- **高可用架构**设计99.99%可用性的系统
- **高性能架构**支持百万级QPS
- **高扩展架构**:支持弹性扩缩容
### 2. 技术深度
- **分布式事务**Seata、TCC、Saga
- **分布式缓存**Redis集群、一致性哈希
- **分布式锁**Redis、Zookeeper、Etcd
### 3. 业务理解
- **电商业务**:理解秒杀业务场景
- **用户行为**:分析用户抢购习惯
- **风控系统**:防刷、防作弊机制
### 4. 团队管理
- **技术团队**带领10人+技术团队
- **项目管控**:管理千万级用户项目
- **技术方案评审**:评审核心技术方案
### 5. 前沿技术
- **Serverless**:秒杀函数化
- **云原生**K8s微服务架构
- **AI应用**:智能推荐、风控
## 面试常见问题
### 1. 秒杀系统如何防止超卖?
- 使用Redis预减库存
- 分布式锁控制并发
- 数据库唯一约束
- 消息队列异步处理
### 2. 如何实现限流策略?
- 令牌桶算法
- 漏桶算法
- Redis计数器
- Nginx限流模块
### 3. 分布式锁的实现方式?
- Redis RedLock
- Zookeeper
- Etcd
- 数据库悲观锁
### 4. 如何保证数据一致性?
- 最终一致性
- 消息队列补偿
- 定时任务对账
- 幂等性设计
### 5. 秒杀系统的瓶颈在哪里?
- 库存查询
- 下单逻辑
- 支付处理
- 库存同步