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>
3.7 KiB
3.7 KiB
系统设计方法论
问题
- 系统设计的核心原则是什么?
- 如何进行需求分析?
- 如何估算系统容量?
- 数据模型设计有哪些最佳实践?
- 如何设计高可用架构?
标准答案
1. 系统设计原则
核心原则:
- 简单性(KISS:Keep It Simple, Stupid)
- 模块化(高内聚、低耦合)
- 可扩展性(水平扩展、垂直扩展)
- 高可用性(冗余、故障隔离)
- 一致性(CAP 理论权衡)
2. 需求分析
功能需求:
- 系统做什么?
- 用户角色有哪些?
- 核心流程是什么?
非功能需求:
- 性能:QPS、响应时间
- 可用性:99.9%、99.99%、99.999%
- 扩展性:支持多少用户
- 安全性:认证、授权、加密
- 一致性:强一致、最终一致
3. 容量估算
QPS 估算:
日活用户(DAU):100 万
平均每人每天请求:20 次
总 QPS = 100 万 × 20 / 86400 ≈ 231 QPS
峰值 QPS = 231 × 5 ≈ 1155 QPS(假设峰值是平均的 5 倍)
存储估算:
用户数:100 万
每人平均数据:1 KB
总存储 = 100 万 × 1 KB ≈ 1 GB
每年增长 = 1 GB × 12 = 12 GB
带宽估算:
平均响应大小:10 KB
QPS:1000
带宽 = 1000 × 10 KB × 8 = 80 Mbps
4. 数据模型设计
原则:
- 范式化(减少冗余)
- 反范式化(提高性能)
- 分区(水平、垂直)
- 索引(加速查询)
示例:
-- 范式化(3NF)
CREATE TABLE users (
id BIGINT PRIMARY KEY,
name VARCHAR(50),
email VARCHAR(100)
);
CREATE TABLE orders (
id BIGINT PRIMARY KEY,
user_id BIGINT,
amount DECIMAL(10,2),
created_at DATETIME,
FOREIGN KEY (user_id) REFERENCES users(id)
);
-- 反范式化(冗余用户名,避免 JOIN)
CREATE TABLE orders_denormalized (
id BIGINT PRIMARY KEY,
user_id BIGINT,
user_name VARCHAR(50), -- 冗余
amount DECIMAL(10,2),
created_at DATETIME
);
5. 高可用架构
冗余设计:
┌─────────────┐
│ 负载均衡 │ (Nginx、HAProxy)
└──────┬──────┘
│
┌─────────┼─────────┐
│ │ │
┌──▼──┐ ┌──▼──┐ ┌──▼──┐
│App 1│ │App 2│ │App 3│
└──┬──┘ └──┬──┘ └──┬──┘
│ │ │
└─────────┼─────────┘
│
┌──────▼──────┐
│ 主从数据库 │
│ Master │
│ Slave │
└─────────────┘
故障隔离:
- 熔断器(Circuit Breaker)
- 限流(Rate Limiter)
- 降级(Fallback)
- 舱舱模式(Bulkhead)
6. 扩展性设计
垂直扩展(Scale Up):
- 升级硬件(CPU、内存、磁盘)
- 简单、快速
- 有上限(硬件限制)
水平扩展(Scale Out):
- 增加机器数量
- 无限扩展
- 需要架构支持(无状态、数据分片)
7. 阿里 P7 加分项
架构思维:
- 能进行技术选型(权衡各种方案)
- 能进行容量规划(预估资源需求)
- 能进行成本控制(性价比优化)
设计能力:
- 能设计高并发架构
- 能设计高可用架构
- 能设计可扩展架构
沟通能力:
- 能清晰地表达设计方案
- 能进行技术方案评审
- 能推动方案落地