Skip to content

阶段 4 练习题:大师级 - 生产级应用开发 ​

📋 练习说明 ​

本阶段包含 30 个高难度练习题,涵盖微服务架构、数据库、安全、DevOps、前端高级技术和系统设计。这些练习题将巩固你在本阶段学到的所有知识,帮助你具备开发生产级应用的能力。

完成建议:

  • 建议每天完成 2-3 道题
  • 每道题都要动手实现,不要只看不做
  • 遇到困难先自己思考,再查阅资料
  • 完成后进行代码审查,寻找改进空间

1. 微服务架构(6 题) ​

练习 1.1:服务拆分设计 ⭐⭐⭐⭐ ​

题目: 设计一个在线教育平台的微服务架构,包含以下功能模块:

  • 用户管理(学生、教师、管理员)
  • 课程管理(课程信息、章节、资源)
  • 订单和支付
  • 学习进度跟踪
  • 评论和评分
  • 直播课程
  • 消息通知

要求:

  1. 识别并定义各个微服务
  2. 绘制服务依赖关系图
  3. 定义服务间通信方式(同步/异步)
  4. 设计数据库策略(每个服务独立数据库)
  5. 说明如何处理分布式事务

练习 1.2:API 网关实现 ⭐⭐⭐⭐⭐ ​

题目: 实现一个功能完整的 API 网关,支持:

  • 请求路由(根据 URL 路径路由到不同服务)
  • 负载均衡(轮询、随机、最少连接)
  • 认证和授权(JWT)
  • 限流(固定窗口、滑动窗口、令牌桶)
  • 断路器模式
  • 请求/响应日志
  • 性能监控(响应时间、错误率)

参考答案位置:examples/api-gateway/

练习 1.3:服务发现实现 ⭐⭐⭐⭐ ​

题目: 实现一个简单的服务注册中心,功能包括:

  • 服务注册和注销
  • 服务发现(根据服务名查找所有实例)
  • 健康检查(定期检查服务健康状态)
  • 自动移除不健康的服务实例

练习 1.4:分布式追踪 ⭐⭐⭐⭐ ​

题目: 为一个微服务系统添加分布式追踪功能:

  1. 生成全局唯一的 Trace ID
  2. 在服务间调用时传递追踪上下文
  3. 记录每个服务的处理时间
  4. 将追踪数据发送到 Jaeger 或 Zipkin

练习 1.5:Saga 模式实现 ⭐⭐⭐⭐⭐ ​

题目: 实现一个电商下单的 Saga 流程:

  1. 创建订单
  2. 预留库存
  3. 扣减用户余额
  4. 发起支付
  5. 如果任何步骤失败,执行补偿事务回滚

要求:

  • 实现编排式 Saga(中央协调器)
  • 记录 Saga 状态到数据库
  • 实现补偿逻辑
  • 处理并发和幂等性

练习 1.6:消息队列应用 ⭐⭐⭐⭐ ​

题目: 使用 RabbitMQ 或 Kafka 实现一个事件驱动的订单系统:

  1. 订单服务发布 order.created 事件
  2. 库存服务订阅并扣减库存
  3. 通知服务订阅并发送邮件
  4. 积分服务订阅并增加积分

要求:

  • 保证消息至少被消费一次
  • 实现消息重试机制
  • 处理死信队列

2. 数据库和 ORM(6 题) ​

练习 2.1:数据库设计 ⭐⭐⭐⭐ ​

题目: 设计一个社交网络的数据库模式,包含:

  • 用户(个人信息、隐私设置)
  • 好友关系(双向好友)
  • 帖子(文字、图片、视频)
  • 评论(支持回复)
  • 点赞
  • 消息(一对一聊天)

要求:

  1. 绘制 ER 图
  2. 创建表结构(SQL)
  3. 添加必要的索引
  4. 考虑查询性能(如 Feed 流生成)
  5. 处理数据一致性问题

练习 2.2:查询优化 ⭐⭐⭐⭐⭐ ​

题目: 给定一个慢查询,进行优化:

sql
SELECT 
  u.id,
  u.name,
  u.email,
  COUNT(DISTINCT o.id) as order_count,
  COUNT(DISTINCT r.id) as review_count,
  AVG(p.amount) as avg_payment
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
LEFT JOIN reviews r ON u.id = r.user_id
LEFT JOIN payments p ON o.id = p.order_id
WHERE u.created_at > '2024-01-01'
  AND o.status = 'completed'
GROUP BY u.id, u.name, u.email
HAVING COUNT(DISTINCT o.id) > 5
ORDER BY avg_payment DESC
LIMIT 100;

要求:

  1. 使用 EXPLAIN ANALYZE 分析查询
  2. 识别性能瓶颈
  3. 添加合适的索引
  4. 重写查询(可能拆分为多个查询)
  5. 考虑使用物化视图

练习 2.3:ORM 实现 ⭐⭐⭐⭐ ​

题目: 使用 Prisma 或 TypeORM 实现一个博客系统:

  • 用户和文章的一对多关系
  • 文章和标签的多对多关系
  • 文章和评论的一对多关系(支持嵌套评论)
  • 软删除功能
  • 分页查询(光标分页)

练习 2.4:数据库迁移 ⭐⭐⭐ ​

题目: 实现以下数据库迁移场景:

  1. 添加新列(带默认值)
  2. 修改列类型(字符串 → 枚举)
  3. 拆分表(用户表拆分为用户基础信息和用户详情)
  4. 数据迁移(将旧数据转换为新格式)

要求:

  • 零停机迁移
  • 可回滚
  • 数据完整性验证

练习 2.5:MongoDB 聚合 ⭐⭐⭐⭐ ​

题目: 使用 MongoDB 聚合管道实现以下查询:

  1. 按月统计订单数量和总金额
  2. 找出销量前 10 的商品
  3. 计算每个用户的消费总额并排名
  4. 分析用户购买行为(最常购买的商品类别)

练习 2.6:读写分离 ⭐⭐⭐⭐ ​

题目: 实现 PostgreSQL 的读写分离:

  • 写操作路由到主库
  • 读操作路由到从库(支持多个从库的负载均衡)
  • 处理主从延迟问题
  • 实现故障转移(主库宕机时提升从库)

3. 安全(5 题) ​

练习 3.1:完整的认证系统 ⭐⭐⭐⭐⭐ ​

题目: 实现一个完整的认证系统,包含:

  • 用户注册(邮箱验证)
  • 用户登录(JWT)
  • 密码重置(邮件链接)
  • Token 刷新(Refresh Token)
  • 登出(Token 黑名单)
  • 双因素认证(TOTP)

参考答案位置:examples/auth-system/

练习 3.2:RBAC 权限系统 ⭐⭐⭐⭐⭐ ​

题目: 实现一个 RBAC 权限系统:

  • 定义用户、角色、权限的数据模型
  • 实现权限检查中间件
  • 支持权限继承(角色层级)
  • 动态权限分配
  • 提供管理界面(API)

练习 3.3:安全漏洞修复 ⭐⭐⭐⭐ ​

题目: 给定一个有安全漏洞的应用代码,识别并修复以下漏洞:

  1. SQL 注入
  2. XSS(存储型和反射型)
  3. CSRF
  4. 不安全的密码存储
  5. 敏感信息泄露
  6. 不安全的文件上传

练习 3.4:API 限流实现 ⭐⭐⭐⭐ ​

题目: 实现一个分布式限流系统:

  • 支持多种限流算法(固定窗口、滑动窗口、令牌桶)
  • 使用 Redis 存储计数器
  • 支持不同粒度的限流(IP、用户、API Key)
  • 提供限流配置 API
  • 返回剩余配额信息

练习 3.5:OAuth 2.0 实现 ⭐⭐⭐⭐⭐ ​

题目: 实现一个 OAuth 2.0 授权服务器:

  • 支持授权码模式
  • 客户端注册和管理
  • 授权页面
  • Token 生成和验证
  • Token 刷新
  • Scope 权限控制

4. DevOps 和部署(6 题) ​

练习 4.1:Dockerfile 优化 ⭐⭐⭐⭐ ​

题目: 优化以下 Dockerfile,减小镜像体积并提升构建速度:

dockerfile
FROM node:18
WORKDIR /app
COPY . .
RUN npm install
RUN npm run build
EXPOSE 3000
CMD ["node", "dist/main.js"]

要求:

  1. 使用多阶段构建
  2. 使用 alpine 基础镜像
  3. 优化层缓存
  4. 添加 .dockerignore
  5. 非 root 用户运行

练习 4.2:Kubernetes 部署 ⭐⭐⭐⭐⭐ ​

题目: 在 Kubernetes 上部署一个完整的应用,包含:

  • 前端(React)
  • 后端 API(Node.js)
  • 数据库(PostgreSQL)
  • 缓存(Redis)

要求:

  1. 编写 Deployment、Service、Ingress 配置
  2. 使用 ConfigMap 和 Secret 管理配置
  3. 配置健康检查和就绪探针
  4. 实现水平自动扩展(HPA)
  5. 配置持久化存储(PVC)

参考答案位置:examples/k8s-deployment/

练习 4.3:CI/CD 流水线 ⭐⭐⭐⭐⭐ ​

题目: 使用 GitHub Actions 构建完整的 CI/CD 流水线:

  1. 代码检查(ESLint, Prettier)
  2. 运行测试(单元测试、集成测试)
  3. 构建 Docker 镜像
  4. 推送镜像到 Registry
  5. 部署到 Kubernetes(测试环境自动部署,生产环境人工审批)
  6. 运行 E2E 测试
  7. 通知(Slack/邮件)

练习 4.4:监控系统搭建 ⭐⭐⭐⭐ ​

题目: 搭建一个完整的监控系统:

  1. 使用 Prometheus 收集应用指标
  2. 使用 Grafana 创建仪表板
  3. 配置告警规则(CPU、内存、错误率)
  4. 集成 Alertmanager 发送告警
  5. 添加自定义业务指标

练习 4.5:日志聚合系统 ⭐⭐⭐⭐ ​

题目: 搭建 ELK Stack 日志系统:

  1. 配置 Filebeat 收集日志
  2. 使用 Logstash 处理和转换日志
  3. 存储日志到 Elasticsearch
  4. 使用 Kibana 查询和可视化
  5. 创建日志告警

练习 4.6:蓝绿部署 ⭐⭐⭐⭐ ​

题目: 实现蓝绿部署策略:

  1. 同时运行两个版本的应用(蓝色和绿色)
  2. 流量路由到当前版本
  3. 部署新版本到空闲环境
  4. 测试新版本
  5. 切换流量到新版本
  6. 保留旧版本以便回滚

5. 前端高级(4 题) ​

练习 5.1:性能优化 ⭐⭐⭐⭐⭐ ​

题目: 优化一个性能较差的 React 应用:

  1. 分析性能瓶颈(使用 React DevTools Profiler)
  2. 实现代码分割(路由级别和组件级别)
  3. 优化图片加载(懒加载、响应式图片、WebP)
  4. 减少重渲染(React.memo, useMemo, useCallback)
  5. 实现虚拟列表(react-window)
  6. 优化包体积(Tree Shaking、动态导入)

目标:

  • LCP < 2.5s
  • FID < 100ms
  • CLS < 0.1
  • 包体积减少 50%

练习 5.2:状态管理 ⭐⭐⭐⭐ ​

题目: 使用 Redux Toolkit 或 Zustand 实现一个购物车系统:

  • 添加/删除商品
  • 更新商品数量
  • 计算总价(含优惠)
  • 持久化到 localStorage
  • 乐观更新(先更新 UI,再同步到服务器)

练习 5.3:SSR 实现 ⭐⭐⭐⭐⭐ ​

题目: 使用 Next.js 实现一个博客:

  • 文章列表(SSG)
  • 文章详情(SSR)
  • 评论功能(Client-side)
  • SEO 优化(Meta 标签、Sitemap)
  • 图片优化(Next.js Image)

练习 5.4:可访问性改进 ⭐⭐⭐⭐ ​

题目: 改进一个表单的可访问性:

  1. 添加正确的 ARIA 属性
  2. 实现键盘导航(Tab、Enter、Escape)
  3. 添加表单验证和错误提示
  4. 确保颜色对比度符合 WCAG AA 标准
  5. 使用屏幕阅读器测试

6. 系统设计(3 题) ​

练习 6.1:设计 Twitter ⭐⭐⭐⭐⭐ ​

题目: 设计一个类似 Twitter 的社交媒体平台:

功能需求:

  • 发布推文(280 字符)
  • 关注用户
  • Home Timeline(显示关注用户的推文)
  • 点赞和转发
  • @提及和话题标签

非功能需求:

  • 日活用户:200M
  • 每用户每天发 2 条推文
  • 读写比:100:1
  • 推文延迟:< 5s

要求:

  1. 容量估算
  2. API 设计
  3. 数据库设计
  4. Feed 生成策略(推模式 vs 拉模式)
  5. 缓存策略
  6. 扩展性方案

练习 6.2:设计视频流媒体平台 ⭐⭐⭐⭐⭐ ​

题目: 设计一个类似 YouTube 的视频平台:

  • 视频上传和转码
  • 视频播放(支持不同清晰度)
  • 推荐算法
  • 评论和点赞
  • 订阅和通知

考虑点:

  • CDN 设计
  • 视频存储和编码
  • 流媒体协议(HLS、DASH)
  • 推荐系统
  • 缓存策略

练习 6.3:设计分布式缓存 ⭐⭐⭐⭐⭐ ​

题目: 设计一个分布式缓存系统(类似 Redis):

  • 支持基本操作(GET、SET、DELETE)
  • 支持过期时间
  • 一致性哈希分片
  • 主从复制
  • 持久化(RDB、AOF)

📝 自我评估 ​

完成练习后,使用以下标准评估自己:

  • [ ] 能够独立设计微服务架构
  • [ ] 能够优化数据库查询性能
  • [ ] 能够实现安全的认证授权系统
  • [ ] 能够使用 Docker 和 Kubernetes 部署应用
  • [ ] 能够构建 CI/CD 流水线
  • [ ] 能够优化前端性能
  • [ ] 能够设计大规模系统

恭喜完成阶段 4 的所有练习!你已经具备了开发生产级应用的能力! 🎉

由 VitePress 构建,Markdown 教材原地维护。