logo
0
0
WeChat Login

AI开发实习生上机测试文档

考试说明

项目说明
考试时长0.5 小时
开发环境允许使用任何AI辅助工具
技术栈Java(推荐 JDK 17+);数据库统一使用 MySQL 8

题目背景:商品库存管理与订单提交服务

假设我们正在为一个小型电商平台开发核心后台服务。平台已有商品数据,用户可以通过前端页面浏览商品、提交订单。作为后端开发者,你需要交付以下能力:确保用户提交订单时库存被正确扣减、超卖被及时拦截,并在每个操作失败时给出用户真正能看懂的错误提示。

提示:在开始编码前,请先思考:一个真实用户在使用这个系统时,会经历哪些正常路径和异常路径?他们会看到什么提示?这些思考将直接影响你的接口设计质量。


阶段零:环境验证与项目创建(15 分钟内完成)

说明:此阶段考察你能否独立搭建一个可运行的后端项目,而不是依赖已有模板。请从空目录开始。

0.1 本机环境自查

开始前,请在终端中依次验证以下命令均能正常输出版本号:

java -version mvn -v # 或 gradle -v

0.2 项目脚手架生成

使用 AI 工具生成完整项目脚手架,要求满足

使用 Spring Boot 3.x + Maven/Gradle 构建

  • 包含 spring-boot-starter-webspring-boot-starter-validationmybatis-spring-boot-starter(或 JPA)、mysql-connector-j 依赖
  • 项目能通过 mvn spring-boot:run(或 ./gradlew bootRun)成功启动,控制台不报错

阶段一:基础 API 搭建

使用 AI 工具完成以下三个 RESTful API

GET /api/product/list — 商品列表查询

参数page(页码)、pageSize(每页数量)、status(可选,枚举:ON_SALE / SOLD_OUT

返回:标准分页 JSON,包含商品 ID、名称、价格、当前库存数量、销售状态。


POST /api/order/submit — 提交订单

参数userId(字符串,必填)、productId(字符串,必填)、quantity(整数,必填,最小值为 1)

返回:订单提交结果,成功时包含订单 ID、商品名称、购买数量、下单时间;失败时包含明确的错误提示(如"库存不足"、"商品已下架"等)。

GET /api/order/list — 用户订单列表

参数userId(必填)、pagepageSize

返回:该用户的历史订单列表,包含订单 ID、商品名称、购买数量、下单时间、订单状态。


阶段二:持久化与 MySQL 8 接入(核心环节)

将内存数据完整迁移至 MySQL 8。请利用 AI 生成 DDL 语句,但作为开发者,你必须主动审查以下问题

2.1 数据库初始化

说明:考试使用统一提供的远程 MySQL 实例,需要找面试官索要

2.2 表结构设计

请利用 AI 生成 products(商品表)和 orders(订单表)的完整 DDL,执行后在 MySQL 中验证表已创建成功(SHOW TABLES; / DESC products;)。


阶段三:并发场景与用户体验修正

3.1 防超卖:数据库层并发控制

场景描述:高峰期,某商品库存仅剩 1 件,100 个用户同时点击"立即购买"。

需求:在不引入 Redis 等外部缓存的前提下,仅使用 MySQL 实现防超卖。

3.2 防重复提交:幂等性设计

场景描述:用户因网络延迟,在 5 秒内连续点击了 3 次"提交订单"按钮,发出了 3 个完全相同的请求(相同的 userId + productId + quantity)。

需求:在心跳接口的基础上,为订单提交接口增加幂等保护——5 秒内相同用户对同一商品的重复提交,只处理第一次,后续请求直接返回第一次成功的订单信息,不重复扣减库存。

要求

  • 修改后用 Postman 演示:快速连发 3 次相同请求,展示只生成了 1 条订单且库存只扣减了 1 次```

提交内容

需要将最终测试结果(带截图)、代码 发送到 16008@theling.cn 邮箱