| 项目 | 说明 |
|---|---|
| 考试时长 | 0.5 小时 |
| 开发环境 | 允许使用任何AI辅助工具 |
| 技术栈 | Java(推荐 JDK 17+);数据库统一使用 MySQL 8 |
假设我们正在为一个小型电商平台开发核心后台服务。平台已有商品数据,用户可以通过前端页面浏览商品、提交订单。作为后端开发者,你需要交付以下能力:确保用户提交订单时库存被正确扣减、超卖被及时拦截,并在每个操作失败时给出用户真正能看懂的错误提示。
提示:在开始编码前,请先思考:一个真实用户在使用这个系统时,会经历哪些正常路径和异常路径?他们会看到什么提示?这些思考将直接影响你的接口设计质量。
说明:此阶段考察你能否独立搭建一个可运行的后端项目,而不是依赖已有模板。请从空目录开始。
开始前,请在终端中依次验证以下命令均能正常输出版本号:
java -version
mvn -v # 或 gradle -v
使用 AI 工具生成完整项目脚手架,要求满足:
使用 Spring Boot 3.x + Maven/Gradle 构建
spring-boot-starter-web、spring-boot-starter-validation、mybatis-spring-boot-starter(或 JPA)、mysql-connector-j 依赖mvn spring-boot:run(或 ./gradlew bootRun)成功启动,控制台不报错使用 AI 工具完成以下三个 RESTful API
参数:page(页码)、pageSize(每页数量)、status(可选,枚举:ON_SALE / SOLD_OUT)
返回:标准分页 JSON,包含商品 ID、名称、价格、当前库存数量、销售状态。
参数:userId(字符串,必填)、productId(字符串,必填)、quantity(整数,必填,最小值为 1)
参数:userId(必填)、page、pageSize
返回:该用户的历史订单列表,包含订单 ID、商品名称、购买数量、下单时间、订单状态。
将内存数据完整迁移至 MySQL 8。请利用 AI 生成 DDL 语句,但作为开发者,你必须主动审查以下问题:
说明:考试使用统一提供的远程 MySQL 实例,需要找面试官索要
请利用 AI 生成 products(商品表)和 orders(订单表)的完整 DDL,执行后在 MySQL 中验证表已创建成功(SHOW TABLES; / DESC products;)。
场景描述:高峰期,某商品库存仅剩 1 件,100 个用户同时点击"立即购买"。
需求:在不引入 Redis 等外部缓存的前提下,仅使用 MySQL 实现防超卖。
场景描述:用户因网络延迟,在 5 秒内连续点击了 3 次"提交订单"按钮,发出了 3 个完全相同的请求(相同的 userId + productId + quantity)。
需求:在心跳接口的基础上,为订单提交接口增加幂等保护——5 秒内相同用户对同一商品的重复提交,只处理第一次,后续请求直接返回第一次成功的订单信息,不重复扣减库存。
要求:
需要将最终测试结果(带截图)、代码 发送到 16008@theling.cn 邮箱