| 项目 | 说明 |
|---|---|
| 考试时长 | 0.5 小时 |
| 开发环境 | Windows 系统。允许并强烈要求全程使用 GitHub Copilot |
| 技术栈 | Java(推荐 JDK 17+);数据库统一使用 MySQL 8 |
假设我们正在为一个小型电商平台开发核心后台服务。平台已有商品数据,用户可以通过前端页面浏览商品、提交订单。作为后端开发者,你需要交付以下能力:确保用户提交订单时库存被正确扣减、超卖被及时拦截,并在每个操作失败时给出用户真正能看懂的错误提示。
提示:在开始编码前,请先思考:一个真实用户在使用这个系统时,会经历哪些正常路径和异常路径?他们会看到什么提示?这些思考将直接影响你的接口设计质量。
说明:此阶段考察你能否独立搭建一个可运行的后端项目,而不是依赖已有模板。请从空目录开始。
开始前,请在终端中依次验证以下命令均能正常输出版本号:
java -version
mvn -v # 或 gradle -v
使用 AI 工具生成完整项目脚手架,要求满足:
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 实例,连接信息如下:
项目 值 Host 192.168.1.228Port 3307用户名 interview密码 123456
请利用 AI 生成 products(商品表)和 orders(订单表)的完整 DDL,执行后在 MySQL 中验证表已创建成功(SHOW TABLES; / DESC products;)。
将以下数据库连接信息填入项目配置文件,然后重启服务,验证控制台无连接报错。
application.yml 示例:
spring:
datasource:
url: jdbc:mysql://192.168.1.228:3307/shop_db?useUnicode=true&characterEncoding=utf8mb4&serverTimezone=Asia/Shanghai
username: interview
password: "123456"
driver-class-name: com.mysql.cj.jdbc.Driver
注意:配置文件中的数据库名称请与 2.1 步骤中你实际创建的库名保持一致。
场景描述:高峰期,某商品库存仅剩 1 件,100 个用户同时点击"立即购买"。
需求:在不引入 Redis 等外部缓存的前提下,仅使用 MySQL 实现防超卖。
场景描述:用户因网络延迟,在 5 秒内连续点击了 3 次"提交订单"按钮,发出了 3 个完全相同的请求(相同的 userId + productId + quantity)。
需求:在心跳接口的基础上,为订单提交接口增加幂等保护——5 秒内相同用户对同一商品的重复提交,只处理第一次,后续请求直接返回第一次成功的订单信息,不重复扣减库存。
要求: