【设计面试】专题精选系统设计各方向的经典面试题,覆盖设计基础、系统设计、功能设计、场景设计、安全设计、设计模式六大板块。题目源自真实面试场景,高星题配备拓展追问与生产场景题,侧重考察架构思维、方案权衡与实战应用能力,适合系统性备战资深岗位设计类面试。
- Java218
- 数据库113
- 设计85
- 分布式82
- 框架75
- JavaCore64
- Spring64
- 工具53
- 笔记52
- 大数据32
- 面试31
- 分布式通信29
- 设计模式27
- Spring核心24
- 架构23
- 搜索引擎数据库22
- DevOps21
- 关系型数据库21
- 软件20
- 网络19
- KV数据库19
- 基础19
- 算法17
- Redis17
- MQ17
- 分布式协同16
- Elasticsearch16
- 操作系统15
- 列式数据库15
- 分布式理论15
- MySQL15
- 综合14
- HBase13
- 编程12
- 文档数据库12
- 中间件11
- Linux11
- IO11
- 并发11
- 其他11
- MongoDB11
- Spring数据10
- Kafka10
- Flink9
- Hive9
- JVM9
- 安全9
- 构建9
- 工作8
- 服务器8
- 编程语言8
- 解决方案8
- 分布式存储8
- SpringWeb8
- 重构7
- 分布式调度7
- 容器7
- ZooKeeper7
- Maven7
- 人工智能6
- JavaWeb6
- 网络分层6
- 网络协议6
- 分布式治理6
- 监控诊断6
- Python6
- Nginx6
- Hadoop5
- 缓存5
- 测试5
- Tomcat5
- 微服务5
- Docker5
- Elastic5
- RPC5
- UML4
- 数据库综合4
- 网络技术4
- 术4
- JavaBean4
- 模板引擎4
- ORM4
- IDE4
- SpringIO4
- Spring其他4
- Spring综合4
- Spring集成4
- 软件工程3
- 编程范式3
- 数据库中间件3
- 流量控制3
- Git3
- Kubernetes3
- RocketMQ3
- Spring安全2
- 健康1
- 器1
- 法1
【中等】如何设计一个排行榜功能?⭐⭐⭐
🎯 目标等级:L2 | ⏱ 建议用时:15 min | 🏷 标签:功能设计 / 缓存
💎 关键结论
首选 Redis zset(有序集合):以用户为 member、排行指标为 score,天然有序。ZINCRBY 原子加分,ZREVRANGE 取 Top N,ZREVRANK 查个人名次,O(logN) 复杂度,实时且简单。
⚡记忆卡片
【中等】如何在 10 亿个数据中找到最大的 1 万个?⭐⭐⭐
🎯 目标等级:L2 | ⏱ 建议用时:12 min | 🏷 标签:场景设计 / 海量数据 TopK
💎 关键结论
维护一个容量为 1 万的最小堆:读入前 1 万条建堆,之后每条数据与堆顶比较,比堆顶大才替换堆顶并下沉调整。遍历一遍 10 亿数据后,堆中即最大的 1 万个。时间复杂度 O(n log K),堆仅占约 40KB,适合数据无法全量装入内存的场景。
⚡记忆卡片
【中等】如何设计一个接口签名验证机制?⭐⭐⭐
🎯 目标等级:L2 | ⏱ 建议用时:15 min | 🏷 标签:安全设计 / 接口签名
💎 关键结论
接口签名验证靠三件套:签名防篡改、时间戳防过期、随机数防重放。客户端把参数(含时间戳、nonce)按字典序拼接加上约定密钥算哈希签名;服务端同规则重算比对,时间戳超窗口拒绝,nonce 存 Redis 窗口期内只允许一次。两边算法一致即安全。
⚡记忆卡片
- 口诀:参数排序加密钥,哈希签名两边同;时间戳卡窗口期,nonce 入 Redis 只一次
- 关键词:参数排序 / HMAC-SHA256 / 时间戳窗口 / nonce 防重放
- 链路:参数排序拼接 → 加密钥算哈希 → 服务端重算比对 → 时间戳校验 → nonce 查重
【困难】如何设计一个秒杀系统?⭐⭐⭐⭐⭐
🎯 目标等级:L3-L4 | ⏱ 建议用时:20 min | 🏷 标签:系统设计 / 秒杀
💎 关键结论
秒杀应对的是瞬时海量请求,思路是「稳、准、快」:前端静态页 + CDN 挡读流量,答题 + 限流削峰,扣库存用 Redis + Lua 原子操作保证不超卖,只有扣减成功的请求进 MQ 异步建单。最终 DB 写入量等于库存量,而不是请求量。
⚡记忆卡片
- 口诀:静态挡、答题缓、限流削、Lua 扣
- 关键词:瞬时海量请求 / 超卖 / 分层过滤 / Redis+Lua / 异步建单
- 链路:前端静态 + CDN → 答题限流 → Redis Lua 扣库存 → MQ 削峰 → 异步建单 → 对账兜底
综述
【简单】什么是设计模式?⭐⭐
🎯 目标等级:L2 | ⏱ 建议用时:5 min | 🏷 标签:设计模式 / 概念
💎 关键结论
设计模式是针对常见软件设计问题的可复用解决方案,是前人总结的最佳实践模板。它不是现成代码,而是一种设计思想,指导如何组织类和对象解决特定场景的问题。
⚡记忆卡片
- 口诀:模式不是代码,是解题思路
- 关键词:可复用 / 设计思想 / 特定场景 / 最佳实践
- 链路:常见问题 → 前人实践 → 提炼为模式 → 指导类与对象的组织方式
架构设计
【中等】一个单体项目整体吞吐达到 1 万 QPS,要微服务化拆分吗?⭐⭐⭐⭐
🎯 目标等级:L2 | ⏱ 建议用时:15 min | 🏷 标签:架构设计 / 微服务拆分
💎 关键结论
不建议拆。1 万 QPS 不是微服务拆分的理由——拆分的驱动力是业务复杂度与团队协作,不是高并发。单体用缓存、异步、水平扩容三台机器即可扛住 1 万 QPS;只有团队、业务、资源等信号持续恶化(命中 3 个以上)才启动拆分,且拆错的代价远大于晚拆。
⚡记忆卡片
开篇词丨秒杀系统架构设计都有哪些关键点?
秒杀的整体架构可以概括为“稳、准、快”几个关键字
- 稳-高可用 - 服务需要考虑各种容错场景,保证服务可用
- 准-一致性 - 高并发下的库存数量增减不能出错,避免超卖
- 快-高性能 - 支持高并发的读写
设计秒杀系统时应该注意的 5 个架构原则
架构原则:“4 要 1 不要”
- 数据尽量少:减少传输数据量(降低 CPU/带宽);减少数据库依赖(降低 DB 压力)
- 请求数尽量少:合并 CSS/JS,减少静态资源请求数
- 路径尽量短:减少数据经过的节点数,降低 I/O 传输耗时
- 依赖尽量少:减少完成一次用户请求必须依赖的系统/服务
- 避免单点:
- 应用服务设计为无状态 + 集群部署
- 数据库通过副本 + 故障转移保证可用性
RPC 简介
通过注册中心,服务消费者和服务提供者就可以感知彼此。但是,要实现交互还必须解决通信问题。
在单体应用中,一次服务调用发生在同一台机器上的同一个进程内部,因此也被称为本地方法调用。在微服务应用中,由于服务提供者和服务消费者运行在不同物理机器上的不同进程内,因此也被称为远程方法调用,简称 RPC(Remote Procedure Call)。
RPC 是微服务架构的基石,它提供了一种应用间通信的方式。RPC 的主要作用是:
- 屏蔽远程调用跟本地调用的差异,让用户像调用本地一样去调用远程方法。
- 隐藏底层网络通信的复杂性,让用户更聚焦于业务逻辑。
服务注册和发现的基本原理
服务定义是服务提供者和服务消费者之间的约定,但是在微服务架构中,如何达成这个约定呢?这就依赖于服务注册和发现机制。
注册和发现的角色
在微服务架构下,服务注册和发现机制中主要有三种角色:
- 服务提供者(RPC Server / Provider)
- 服务消费者(RPC Client / Consumer)
- 服务注册中心(Registry)