每道题先给出需求和限制。你可以先设计一个简单可用的版本,再改几个条件,看看原来的方案哪里需要调整。不用追求画出一张“标准架构图”。
以下题目都是自拟的教学练习,不是任何公司的面试原题,也不代表线上生产配置。
先选一道题
| 题目 | 主要练什么 | 最容易漏掉的事 |
|---|---|---|
| 推荐 Feed | 召回、排序、新鲜度(freshness)与降级(fallback) | 被召回漏掉的内容,排序救不回来 |
| 带引用的知识库问答 | 索引、检索(retrieval)、权限与证据 | “看见了文档”不等于“答案有依据” |
| 可更正的长期记忆 | 写入、冲突、检索与删除 | 用户改了信息,旧版本仍可能被取出 |
每题怎么练
先花 5 分钟写清要解决什么、暂时不做什么,以及时间、成本等限制。再画数据流,标出每一步传递的信息。最后想一个出错的场景:服务超时、信息过期、数据分布变了,或者用户撤回权限,原来的设计还能正常工作吗?
方案不一定越复杂越好。如果去掉一个组件也能满足需求,就没必要为了架构图好看而留着它。
设计题和项目拆解有什么区别
这两种练习都放在工程实践。设计题从需求出发,允许你声明假设、比较方案;项目拆解从已有实现出发,检查代码里实际做了什么、哪些细节仍然不知道。本站的教学项目另外标明,不把自拟架构说成某家公司线上的事实。
资源与阅读建议保留在系统设计导读。想先学原理,可以回基础与原理;想换到技术问答、ML Coding 或算法题,去面试准备。
本页术语 3
- 新鲜度 freshness
- 内容产生到可被检索之间的延迟
- 降级 fallback
- 主路径不可用时切换到较简单但语义明确的备用行为
- 检索 retrieval
- 从外部语料里找出相关内容