大厂真题 / 蚂蚁

蚂蚁 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 四个黄金法则

  1. 给验收标准,不给模糊需求:”实现用户CRUD API,验收标准:curl能创建用户” > “实现用户管理功能”
  2. 出错时给完整上下文:贴完整错误 + 相关代码 + “只修改有问题的部分”
  3. 用选择题代替开放题:”WebSocket和HTTP轮询二选一” > “你觉得用什么技术”
  4. 复杂功能分步确认:”先只实现数据模型和内存存储” > “实现完整的订单系统”

时间管理

时间点 必须达到的状态 没达到怎么办
10分钟 技术方案确定 别纠结,选最熟的
40分钟 后端核心能跑 砍功能,保最小可用
65分钟 前端/界面能用 降级为最简版本
90分钟 测试通过 能过几个算几个
120分钟 全部交付 确保文档存在

铁律:粗糙但完整 > 精致但残缺。 考官看的是:能跑 > 功能全 > 代码好 > 界面美。


小结

  • AI Coding 考的不是”你会不会做这道题”,而是”你能不能高效地带着 AI 把一个完整项目落地”
  • 核心能力:系统设计(架构清晰)+ 工程实现(状态机、API)+ AI 协作效率(分模块、给验收标准)
  • 先搞架构再写代码,分模块让 AI 写,状态机先设计好,别在 TUI 美化上花太多时间