程序员茄子
全部
编程
代码
资讯
案例
综合
联系我们
软件定制开发/软件按需定制 技术文章
php
mysql
shell
go
vue
css
api接口对接
支付接口对接
订单关单后的资源释放:库存回滚、优惠券退回与额度解冻怎么做到不重不漏
编程
订单关单后的资源释放:库存回滚、优惠券退回与额度解冻怎么做到不重不漏
2026-10-18 00:04:35
订单关单只改 status 会留下退不干净的库存、券和冻结额度。这篇给可落地的做法:关单事务只抢状态并写 outbox 释放任务、库存用 available/locked 预占模型并给 locked 加下界条件、流水表唯一键做幂等、优惠券过期与叠加退券的取舍、冻结额度双向更新、以及「locked 汇总 = 待支付明细」的每日对账 SQL 和重试/人工补偿口径。
订单关单
库存回滚
幂等
优惠券
对账
订单状态机
20 字限制卡住一个 👨👩👧👦:emoji 的码点、字节与 grapheme cluster
编程
20 字限制卡住一个 👨👩👧👦:emoji 的码点、字节与 grapheme cluster
2026-10-18 00:04:23
表单「20 个字」限制被一个家庭 emoji 撑爆、按码点截断后渲染成方块,是编码层最常见的错位。这篇把 emoji 的 7 种编码形式(VS16、肤色修饰、ZWJ、区域指示符、tag、keycap)和三种长度口径拆开,给出 Go/PHP/JS 按 grapheme cluster 计数与截断的可执行写法,以及 utf8mb4 列宽、排序规则与终端宽度上的边界。
emoji
Unicode
字符编码
Go
PHP
前端工程
Excel 双击 UTF-8 CSV 全是「涓枃」:BOM 写在哪一步,写了为什么还是乱码
案例
Excel 双击 UTF-8 CSV 全是「涓枃」:BOM 写在哪一步,写了为什么还是乱码
2026-10-18 00:04:03
后端导出的 UTF-8 CSV 用 Excel 双击打开中文全是「涓枃」:Excel 按系统 ANSI 代码页解码,只认文件开头的 BOM。给出 PHP/Python/Node/Go 写 BOM 的正确位置,四种「写了 BOM 反而更乱」的真实原因与字节级验证方法,以及中文文件名走 filename*=UTF-8'' 的处理方式,最后说明何时该弃 CSV 改 xlsx。
乱码
CSV导出
字符集
UTF-8
BOM
Excel
PHP
Python
Go
锁文件存在不等于被遵守:七个包管理器的默认行为与强制模式对照
编程
锁文件存在不等于被遵守:七个包管理器的默认行为与强制模式对照
2026-10-18 00:03:49
把「锁文件」拆成尊重与强制两个维度:npm/pnpm 默认尊重但冲突时静默覆盖,Cargo/Pipenv 默认重新解析并改写锁文件,Poetry/Gradle/Go 默认即强制。附 npm install 与 npm ci 的 resolver 差异、lockfileVersion 1/2/3、隐藏锁文件的三条有效条件、integrity 校验与冲突重建步骤。
锁文件
lockfile
依赖管理
npm
CI
供应链
订单超时关单的三条触发链路:RabbitMQ 队头阻塞、Redis ZSET 抢单与扫表兜底
编程
订单超时关单的三条触发链路:RabbitMQ 队头阻塞、Redis ZSET 抢单与扫表兜底
2026-10-18 00:03:48
订单超时关单的触发链路怎么选:为什么要把到期时刻存成 expire_at、扫表怎么用游标分批和分片、RabbitMQ TTL+DLX 的队头阻塞与 x-delayed-message 插件代价、RocketMQ 18 级延时上限、Redis ZSET 用 Lua 原子抢任务以及 keyspace notification 为何不能当调度器。另含三个真实翻车点:消息里的状态快照不能当事实、积压恢复集中放量、关单双写失败靠兜底。
订单关单
延时队列
RabbitMQ
RocketMQ
Redis
定时任务
订单状态机
接口 504 排查:ServiceLatency 为 0,说明请求根本没到后端
编程
接口 504 排查:ServiceLatency 为 0,说明请求根本没到后端
2026-10-18 00:03:14
接口报错先别急着翻后端日志:用响应头里的 X-Ca-Error-Code / X-Ca-Request-Id、TotalLatency 与 ServiceLatency、以及 8 个 IO 时间点,判断请求是被网关拦截还是已转发到后端,耗时落在哪一段;附 Nginx $request_id、Go 中间件与 curl 计时对齐的自建落地方式。
接口排障
API网关
故障排查
可观测性
重试不是越多越好:出站 HTTP 客户端的分类、full jitter 与每依赖预算
编程
重试不是越多越好:出站 HTTP 客户端的分类、full jitter 与每依赖预算
2026-10-17 21:31:29
调用第三方 API 出问题时,最常见的错误是就地加重试。本文给出一套出站 HTTP 客户端的重试策略:按状态码和幂等性分类、带抖动的指数退避、正确合并 Retry-After、为每个依赖设置重试预算与并发隔离,并附一份可直接用的 Go 实现。
接口对接
HTTP
Go
重试
稳定性
支付宝转账异步通知没到:从应用网关订阅到 uni.transfer / multistep 状态判定
代码
支付宝转账异步通知没到:从应用网关订阅到 uni.transfer / multistep 状态判定
2026-10-17 21:30:51
支付宝转账和收单是两套通知机制:单笔转账走应用网关 + alipay.fund.trans.order.changed,且只有 SUCCESS 才触发;多步转账走 multistep.notify,FAIL/DEALING 也会推。本文按配置、订阅、验签应答、HTTP 状态码排查、查询兜底的顺序,理清转账状态为什么收不到、怎么定位。
支付宝
接口对接
支付
异步通知
转账
Valkey 9.2.0-rc1 运维笔记:forkless RDB、服务端热 key、给运维留连接位
编程
Valkey 9.2.0-rc1 运维笔记:forkless RDB、服务端热 key、给运维留连接位
2026-10-17 21:10:10
Valkey 9.2.0-rc1 里三项运维直接相关的变化:forkless RDB 快照的开关与验证方法、服务端 HOTKEYS 近似 Top-K 检测的适用边界、priority-subnets 与 maxclients-reserved 预留管理连接位,另附 ACL roles、复制限流等条目。
Valkey
Redis
运维
缓存
OpenResty 1.31.1.1 落地:precontent 阶段、按请求校验上游证书与 cosocket TLS
编程
OpenResty 1.31.1.1 落地:precontent 阶段、按请求校验上游证书与 cosocket TLS
2026-10-17 21:09:03
OpenResty 1.31.1.1 里三处对网关直接有用的新能力:precontent_by_lua 阶段与 access/content 的分工、proxy_ssl_verify_by_lua 按上游动态决定证书校验、settrustedstore/getsslsession 把可信 CA 下沉到单次握手,附升级自查路径与验证命令。
OpenResty
Nginx
Lua
网关
TLS
nginx 1.30 升级后最容易漏掉的默认值:代理上游默认走 HTTP/1.1 并开启 keep-alive
综合
nginx 1.30 升级后最容易漏掉的默认值:代理上游默认走 HTTP/1.1 并开启 keep-alive
2026-10-17 21:07:25
nginx 1.30 把代理到上游的 HTTP 版本默认从 1.0 改成 1.1 并默认开启 keep-alive。梳理由此带来的连接复用、后端 idle timeout 不匹配导致的 502、残留 Connection close 反向抵消,以及日志字段与 stub_status 的验证方法。
nginx
运维
反向代理
升级踩坑
MySQL 9.7 外键级联开始执行子表触发器:enable_cascade_triggers 的开关、映射与回滚边界
编程
MySQL 9.7 外键级联开始执行子表触发器:enable_cascade_triggers 的开关、映射与回滚边界
2026-10-17 21:05:31
MySQL 9.7 起外键 CASCADE 可执行子表触发器,需开启 enable_cascade_triggers(默认 OFF)。梳理级联类型与触发器映射、同语句同事务的回滚边界、回写父表与级联表数上限 30,以及 ROW/STATEMENT 复制的差异和上线顺序。
MySQL
触发器
外键
升级踩坑
Go 1.27 泛型方法:能链式调用,但反射扫不到它
编程
Go 1.27 泛型方法:能链式调用,但反射扫不到它
2026-10-17 21:04:39
Go 1.27 泛型方法的两条边界:接口方法不能声明类型参数、泛型方法也实现不了接口;以及由此带来的反射盲区——NumMethod 里看不到泛型方法,序列化/ORM/RPC 框架会漏 API。附链式调用与官方原因解释。
Go
泛型
反射
语言特性
Go 1.27 的 encoding/json 换内核:升级后默认行为变了,any 解析反而更慢
编程
Go 1.27 的 encoding/json 换内核:升级后默认行为变了,any 解析反而更慢
2026-10-17 21:03:50
Go 1.27 的 encoding/json 变成 json/v2 的兼容层后,升级即生效的行为差异:非法 UTF-8 报错、字段名大小写敏感、nil slice 变 []、[]byte 变 base64、Duration 无默认格式;以及解到 any 反而慢 1.5 倍的原因和渐进迁移顺序。
Go
JSON
版本升级
性能
PHP 8.5 把 FETCH_CLASS 的构造参数改成 CUFA 语义后,实体水合会坏在哪
编程
PHP 8.5 把 FETCH_CLASS 的构造参数改成 CUFA 语义后,实体水合会坏在哪
2026-10-17 21:02:54
PHP 8.5 把 PDO::FETCH_CLASS 的构造参数改成 call_user_func_array 语义:字符串键变命名参数、自动 by-ref 包装消失、fetch 中途 setFetchMode 直接抛 Error。给最小复现、报错形态、定位命令与四种修复路径。
PHP
PDO
升级踩坑
数据库
PHP 8.5 的 #[\NoDiscard] 和 (void):让被丢掉的返回值留下一条日志
编程
PHP 8.5 的 #[\NoDiscard] 和 (void):让被丢掉的返回值留下一条日志
2026-10-17 21:02:03
PHP 8.5 的 #[\NoDiscard] 与 (void) 在支付、加锁、队列代码里的实际用法:如何让被丢弃的返回值变成可检索的告警,error_reporting 与错误处理器怎么配,和静态分析各管什么,附 8.5 弃用的机械清理命令。
PHP
8.5
错误处理
静态分析
Laravel MCP 升级 1.0:initialize 换成 server/discover,每个 POST 都要带三个 header
编程
Laravel MCP 升级 1.0:initialize 换成 server/discover,每个 POST 都要带三个 header
2026-10-17 20:04:28
Laravel MCP 1.0 升级笔记:从 composer require 到第一个 Tool 的骨架,再到最疼的三处破坏——initialize 换成 server/discover、每个 POST 要带 MCP-Protocol-Version/Mcp-Method/Mcp-Name、sessionId 被移除,以及 -32020/-32022 错误码与 PKCE 强制、client_id 变 URL 的连带改动。
Laravel
MCP
PHP
AI
Agent
OAuth
协议升级
AWS Lambda 耐久执行 Go SDK:step/wait/callback 怎么写,以及重放逼你守的几条规则
编程
AWS Lambda 耐久执行 Go SDK:step/wait/callback 怎么写,以及重放逼你守的几条规则
2026-10-17 20:03:00
AWS Lambda 耐久执行 SDK for Go 的工程笔记:从建 module、构建 bootstrap、配 DurableConfig 跑通第一个耐久函数,到确定性、goroutine 所有权、ErrorType 匹配、Step 语义与重试、Wait 的整秒规则、Callback 的 RawSerdes、子上下文 256 KiB 上限、Retry 与 Map/Parallel。
Go
AWS
Lambda
Serverless
Durable
Execution
工作流
SDK
重试
微信支付 APIv3 上送敏感字段:Wechatpay-Serial error 与平台私钥解密失败的排查顺序
代码
微信支付 APIv3 上送敏感字段:Wechatpay-Serial error 与平台私钥解密失败的排查顺序
2026-10-17 09:02:10
微信支付 APIv3 上送敏感字段(商家转账收款人姓名/银行卡、实名信息)加密失败的排查:上送用平台证书公钥/微信支付公钥、下行用商户私钥解密,方向别弄反;RSAES-OAEP 填充在各语言里的写法;HTTP 头 Wechatpay-Serial 传平台证书序列号或公钥 ID;逐项对应 PARAM_ERROR Wechatpay-Serial error 与"平台私钥解密失败",附 RSA2048 约 214 字节上限与 AEADBadTagException 关联排查。
微信支付
APIv3
敏感信息加密
RSA-OAEP
接口对接
微信支付 JSAPI 前端调起排查:验证签名失败、URL 未注册、permission value is offline verifying
代码
微信支付 JSAPI 前端调起排查:验证签名失败、URL 未注册、permission value is offline verifying
2026-10-17 09:01:29
prepay_id 拿到后前端调起收银台失败怎么查:APIv3 调起支付 6 个参数、paySign 四行签名串构造、signType 固定 RSA 且不参与签名、appId 大写 I、时间戳秒级、prepay_id 2 小时有效。逐项对应"支付验证签名失败""chooseWXPay:fail permission value is offline verifying""当前页面URL未注册""缺少参数 appId/total_fee",并区分 V2 支付授权目录与 V3 签名的排查重点。
微信支付
JSAPI
paySign
支付调起
接口对接
git tag 推上去,镜像自动进 GHCR:多架构构建、semver 标签,以及 latest 被 prerelease 顶掉的坑
编程
git tag 推上去,镜像自动进 GHCR:多架构构建、semver 标签,以及 latest 被 prerelease 顶掉的坑
2026-10-17 00:04:38
打一个 v* tag 就自动构建、推送多架构 Docker 镜像到 GHCR 的完整 GitHub Actions 写法:semver 标签派生、latest 的 prerelease 门禁、QEMU 与原生 runner 两种多架构方案、provenance 导致 unknown/unknown、GITHUB_TOKEN 推 GHCR 与包公开设置。
自动化发版
Docker
GHCR
GitHub
Actions
CI
CD
写给别人复用的 composable:VueUse 官方指南里的 9 条约定与 5 处取舍
编程
写给别人复用的 composable:VueUse 官方指南里的 9 条约定与 5 处取舍
2026-10-17 00:04:14
面向「要写给别人复用的 composable」的库作者:整理 VueUse 官方指南的通用约定,并逐条说明理由——包大对象用 shallowRef、全局变量走 configurableWindow、内部 watch 透传选项、controls 选项让简单用法保持简单、新 Web API 输出 isSupported、异步函数返回 PromiseLike 以配合 Suspense、无渲染组件包装规范,附适用边界与代码。
Composables
Vue3
组合式函数
VueUse
前端
TypeScript
一次切干净还是渐进式:数据库割接的阶段、回滚,与 PgDog 的 CUTOVER 机制
编程
一次切干净还是渐进式:数据库割接的阶段、回滚,与 PgDog 的 CUTOVER 机制
2026-10-17 00:04:02
讲清 cut-over(数据库割接)到底切的是哪个动作:摄取冻结、最终同步、路由切换与回滚路径,all-at-once 与渐进式的选型判据,再拆解 PgDog 的 CUTOVER 命令、阈值配置、逆向复制,以及反向复制不停导致 WAL 堆积的坑。
cut-over
数据库割接
数据库迁移
PgDog
PostgreSQL
回滚
运维
Illegal mix of collations(1267/1271):用 COLLATION() 定位比较两侧的真实来源
案例
Illegal mix of collations(1267/1271):用 COLLATION() 定位比较两侧的真实来源
2026-10-17 00:03:36
MySQL/MariaDB 报 Illegal mix of collations(1267/1271)怎么排查:从错误码看两侧 collation 来源,用 COLLATION() 与 information_schema 定位冲突列与连接设置,讲清 MySQL coercibility 与 MariaDB derivation 推导规则、COLLATE 修法的索引代价,以及 uca1400_ai_ci 默认变更带来的新冲突。
collation
排序规则
MySQL
MariaDB
数据库
字符集
运维
大家都在搜索什么?
devops
易支付
一个官网+多少钱
统一接受回调
统一回调
python
sub
node
宝塔日志
mysql
shell
ElasticSearch
css
vue
api接口对接
2025
支付接口对接
go
php
php回调
上一页
1
2
3
4
5
6
7
…
331
下一页
共 331 页
到第
页
确定