大厂真题 / 蚂蚁
蚂蚁 AI Coding 真题解析:终端早餐店系统
题目要求
实现一个多端 TUI 终端早餐店系统,模拟从下单到制作到支付确认的完整流程。
系统要求实现三个终端:
- 叫号牌端(端口8024):展示当前所有订单的状态
- 顾客端(端口8025):顾客用来浏览菜单和下单
- 店主端(端口8026):店主用来查看订单、更新订单状态
状态流转
待确认 → 已确认 → 制作中 → 待取餐 → 已支付
↘ 已取消 ↗(不能跳过)
加分项
- 持久化存储(重启数据不丢)
- 基础权限控制(店主操作需要验证)
- 高可读的 TUI 交互设计
交付物
- 完整代码
- 测试脚本和测试结果
- 使用说明文档
这道题在考什么
第一,系统设计能力。 三个终端怎么通信?数据存在哪?最自然的方案是中心化 HTTP 服务:一个中心服务端存数据,三个终端都通过 HTTP 请求交互。
第二,工程实现能力。 状态机怎么实现?API 怎么设计?TUI 用什么库?需要做出合理的技术选型。
第三,跟 AI 协作的效率。 一个服务端 + 三个终端 + 数据模型 + 状态机 + 测试 + 文档,2小时内全做完,纯手写基本不可能。关键在于:你得知道要做什么,然后指挥 AI 去做。
解题思路
第一步:架构设计(5分钟)
技术选型:Python + FastAPI + rich + HTTP 轮询
breakfast_shop/
├── server.py # 服务端(核心)
├── models.py # 数据模型 + 状态机
├── customer_terminal.py # 顾客端
├── display_terminal.py # 叫号牌端
├── owner_terminal.py # 店主端
└── test_breakfast_shop.py # 测试
第二步:数据模型(10分钟)
订单状态用枚举类,状态流转用字典:
class OrderStatus(str, Enum):
PENDING = "PENDING" # 待确认
CONFIRMED = "CONFIRMED" # 已确认
COOKING = "COOKING" # 制作中
READY = "READY" # 待取餐
PAID = "PAID" # 已支付
CANCELLED = "CANCELLED" # 已取消
VALID_TRANSITIONS = {
"PENDING": ["CONFIRMED", "CANCELLED"],
"CONFIRMED": ["COOKING", "CANCELLED"],
"COOKING": ["READY"],
"READY": ["PAID"],
"PAID": [],
"CANCELLED": [],
}
校验一行搞定:if new_status not in VALID_TRANSITIONS[current_status]: raise Error
第三步:服务端 API(20分钟)
| Method | Path | 说明 |
|---|---|---|
| GET | /menu | 获取菜单 |
| POST | /orders | 创建订单 |
| GET | /orders | 获取所有订单 |
| GET | /orders/{id} | 查询单个订单 |
| PUT | /orders/{id}/status | 更新订单状态 |
权限控制:店主端请求带 token,服务端校验即可。
OWNER_TOKEN = "shop2024"
@app.put("/orders/{order_id}/status")
def update_status(order_id, req):
if req.token != OWNER_TOKEN:
raise HTTPException(403, "权限不足")
第四步:三个终端(40分钟)
推荐用 rich 库做 TUI。三个终端逻辑类似:”调 API → 展示数据 → 处理用户输入”。让 AI 写第一个后,后两个参考已有代码快速生成。
第五步:测试 + 文档(15分钟)
覆盖正常流程、非法状态跳转、权限校验。
第六步:加分项(剩余时间)
SQLite 持久化、TUI 美化(不同状态不同颜色 + emoji)。
核心设计要点
状态机
整个系统最精巧的设计。用字典定义合法转换路径,校验只需一次查询。如果以后要加新状态(比如”退款中”),只需在字典里加一行。
三端通信:HTTP 轮询
叫号牌端每隔2秒 GET 一次订单列表,刷新显示。为什么不用 WebSocket?因为2小时内要做完,HTTP 轮询足够且实现成本低。
权限控制
不需要 JWT、不需要 OAuth。店主端请求带一个 token 字段即可。考试场景下,最简方案就是最好方案。
Prompt 方法论:PARSE 五阶段协作法
P - Plan 规划(0-10分钟)
我需要在2小时内完成以下项目:
[把题目README完整贴这里]
请先不要写代码,帮我分析:
1. 技术选型建议(给2-3个方案,标注推荐)
2. 模块划分和文件结构
3. 核心数据模型设计
4. 接口/API设计
5. 实现优先级排序
A - Architect 架构实现(10-40分钟)
技术栈确认:[你选的技术栈]
请实现 [核心文件名],包含:
1. [数据模型要求]
2. [业务逻辑要求]
3. [API/接口要求]
验收标准:[怎么算"好了"]
R - Realize 前端/界面(40-65分钟)
一次只让 AI 做一个模块:
后端API已就绪([地址]),现在实现 [模块名]:
- [功能点列表]
- 输入非法内容不崩溃
验收标准:[怎么算完成]
S - Stabilize 稳定化(65-90分钟)
请创建 [测试文件名](用pytest),覆盖:
- [正向流程测试]
- [异常输入测试]
- [权限/边界测试]
E - Export 交付(90-120分钟)
基于项目实际代码生成使用说明文档,包含:
- 环境要求和安装步骤
- 启动方式和使用流程
- 项目文件结构和设计决策说明
不要编造不存在的功能。
Prompt 四个黄金法则
- 给验收标准,不给模糊需求:”实现用户CRUD API,验收标准:curl能创建用户” > “实现用户管理功能”
- 出错时给完整上下文:贴完整错误 + 相关代码 + “只修改有问题的部分”
- 用选择题代替开放题:”WebSocket和HTTP轮询二选一” > “你觉得用什么技术”
- 复杂功能分步确认:”先只实现数据模型和内存存储” > “实现完整的订单系统”
时间管理
| 时间点 | 必须达到的状态 | 没达到怎么办 |
|---|---|---|
| 10分钟 | 技术方案确定 | 别纠结,选最熟的 |
| 40分钟 | 后端核心能跑 | 砍功能,保最小可用 |
| 65分钟 | 前端/界面能用 | 降级为最简版本 |
| 90分钟 | 测试通过 | 能过几个算几个 |
| 120分钟 | 全部交付 | 确保文档存在 |
铁律:粗糙但完整 > 精致但残缺。 考官看的是:能跑 > 功能全 > 代码好 > 界面美。
小结
- AI Coding 考的不是”你会不会做这道题”,而是”你能不能高效地带着 AI 把一个完整项目落地”
- 核心能力:系统设计(架构清晰)+ 工程实现(状态机、API)+ AI 协作效率(分模块、给验收标准)
- 先搞架构再写代码,分模块让 AI 写,状态机先设计好,别在 TUI 美化上花太多时间