系统接口幂等设计

1、根据需求本身可以设计出幂等键。如发奖:幂等键可以设计为 订单号+订单状态+活动ID

2、新增表单页幂等性设计方案:

先解释下必要性:用户重复点击创建订单按钮,避免生成两个订单。即使前端做了防抖设计,但是由于网关、框架一般具有retry 功能,后端做防抖还是很有必要性的。

方案:ID生成服务 + 数据库主键唯一 来保证幂等

用户进入生单页面时,请求 ID生成服务 生成幂等键,表主键设计为生成的ID,不使用自增ID,避免生成重复订单。

3、更新ABA问题。

ABA问题:

我举个例子你就明白了。比如说,订单支付之后,小二要发货,发货完成后要填个快递单号。假设说,小二填了一个单号666,刚填完,发现填错了,赶紧再修改成888。对订单服务来说,这就是2个更新订单的请求。
正常情况下,订单中的快递单号会先更新成666,再更新成888,这是没问题的。那不正常情况呢?666请求到了,单号更新成666,然后888请求到了,单号又更新成888,但是666更新成功的响应丢了,调用方没收到成功响应,自动重试,再次发起666请求,单号又被更新成666了,这数据显然就错了。这就是非常有名的ABA问题。

解决方案:DB增加version字段,更新时携带version字段,版本号相同时再进行更新。

全部评论
隔行如隔山都不会
点赞 回复 分享
发布于 2025-10-21 21:06 北京

相关推荐

以前基本就是手搓代码,CRUD 写到天荒地老,现在多多少少都会用点 AI 工具帮忙,比如 ChatGPT、Copilot 之类的。最明显的变化其实是开发方式变了。以前是人写代码,现在更像是“人+AI 一起干活”。很多基础代码、模板代码,甚至一些简单逻辑,AI 一下就给你生成出来了。像 SpringBoot 项目结构、接口代码、一些工具类,基本都能很快出来。自己从零敲一遍的情况其实少了。但这也不代表程序员就没用了。反而现在更看重的是你能不能把需求想清楚、系统设计好,然后去判断 AI 给你的代码对不对。说白了,现在很多时候不是你不会写,而是你要会“看代码”和“改代码”。还有一个变化是,对能力要求也慢慢在变。以前很多初级岗位就是写 CRUD,现在这些活儿 AI 已经能干不少了。所以企业慢慢更想要那种能做架构、能处理复杂业务、能搞系统设计的人。简单重复劳动以后只会越来越少。另外,现在也有不少公司开始把 AI 往系统里接,比如做智能客服、知识库问答、文档助手这些。Java 在企业系统里还是主力,所以很多时候其实是 Java 去把这些 AI 能力接进业务系统里。像 Spring AI、LangChain4j 这些东西,也开始有人用了。所以整体看下来,其实不是“AI 把 Java 干没了”,而是 Java 开发的活儿在升级。以前是纯写代码,现在更像是:会写代码 + 会用 AI + 会做系统设计。如果你只是停留在写 CRUD,那确实会越来越卷;但如果能往架构、业务理解、AI 集成这些方向走,其实路还是挺多的。
AI时代下,你的岗位要求...
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务