程序员茄子
全部
编程
代码
资讯
案例
综合
联系我们
软件定制开发/软件按需定制 技术文章
php
mysql
shell
go
vue
css
api接口对接
支付接口对接
Galera 下 causal_reads 等满 10 秒 timeout:换成 wsrep_sync_wait 位掩码
编程
Galera 下 causal_reads 等满 10 秒 timeout:换成 wsrep_sync_wait 位掩码
2026-11-04 00:04:36
Galera 三节点 + MaxScale 读写分离,照抄异步复制的 causal_reads=local 不生效:MASTER_GTID_WAIT 等不到 gtid_slave_pos,每个读白等满 10 秒超时。改用 wsrep_sync_wait 位掩码(1/2/4/8,常用 1/7/15),并记下四个静默跳过的条件:显式事务内、已有等待中的 GTID、非客户端线程、wsrep_dirty_reads=ON;附分区时 ERROR 1205、connection_init_sql_file 注入与连接池复位。
causal_reads
Galera
MariaDB
MaxScale
读写分离
数据库
MaxScale readwritesplit 默认值排障:max_slave_connections=255 与 max_replication_lag=0s
编程
MaxScale readwritesplit 默认值排障:max_slave_connections=255 与 max_replication_lag=0s
2026-11-04 00:04:19
readwritesplit 的三个默认值就能解释多数线上异常:每会话最多 255 条从库连接、max_replication_lag 默认 0s 等于延迟过滤关闭、24.02 起 strict_tmp_tables 默认 true 会在有临时表时静默禁掉主库重连。按参数把后端连接数上界、从库选择判据、master_failure_mode 三值行为算清楚,附可抄的 maxscale.cnf。
readwritesplit
MaxScale
读写分离
数据库代理
MariaDB
Seata AT 回滚报 Has dirty records when undo:镜像校验、全局锁与回滚顺序的排查记录
编程
Seata AT 回滚报 Has dirty records when undo:镜像校验、全局锁与回滚顺序的排查记录
2026-11-04 00:04:09
从 Seata AT 模式一次回滚失败切入:SQLUndoDirtyException 的四个判定分支、on update CURRENT_TIMESTAMP 如何破坏镜像校验、全局锁 lockKey 与 300ms 重试预算、undo_log 防悬挂记录,以及 2.0 正序回滚 bug(#6120)的复现条件与判据。
Seata
分布式事务
AT模式
undo_log
MySQL
Java
Vite SPA 打进 nginx 镜像后:启动时生成 env.js,一份镜像跑遍所有环境
编程
Vite SPA 打进 nginx 镜像后:启动时生成 env.js,一份镜像跑遍所有环境
2026-11-04 00:03:54
Vite 的 import.meta.env 在 build 期被静态替换,镜像一旦构建就与环境绑定。记录用容器启动时生成 env.js + 白名单写入 + no-store 缓存的做法,以及 envsubst 不带参数、alpine 缺 gettext、docker-entrypoint.d 执行顺序、覆盖 ENTRYPOINT 代价、提升环境后串配置等具体坑。
SPA部署
nginx
Vite
Docker
envsubst
运行时配置
支付宝手机网站支付 alipay.trade.wap.pay 下单:product_code 写错不报错,pageExecute 的 GET 和 POST 别混
编程
支付宝手机网站支付 alipay.trade.wap.pay 下单:product_code 写错不报错,pageExecute 的 GET 和 POST 别混
2026-11-04 00:03:49
手机网站支付下单侧容易踩的四处:product_code 的 ALIPAY_WAP_PAY / QUICK_WAP_WAY 两代写法、pageExecute 返回自提交表单还是带 sign 的长链接、return_url 只做展示不能写订单状态、notify_url 必须公网可 POST,以及沙箱与生产参数成套切换和签名错误排查顺序。
支付宝手机网站支付
支付宝
手机网站支付
接口对接
PHP
签名验签
把 PHP 编译成原生二进制:TypePHP 的三条构建路径与它会卡住的语法
代码
把 PHP 编译成原生二进制:TypePHP 的三条构建路径与它会卡住的语法
2026-11-03 21:32:59
TypePHP 用 PHP 写了个自举的 AOT 编译器,把 PHP 源码降级成 C++17 再编译成原生二进制、PHP 扩展或共享库。本文给出依赖安装、tpc 用法、project.yml 关键字段、--nano 的能力裁剪,以及最关键的兼容性边界:全局作用域只能声明、必须 main()、变量变量不支持、Closure 不能重绑、生成器不是 Zend Generator、引用参数要 std::ref。附什么场景值得上、什么场景别硬套。
PHP
AOT
编译器
swoole
性能优化
opcache.jit=tracing 白掉 17% RPS:PHP tracing JIT 的 use-after-free 与 buffer_free 不回收
编程
opcache.jit=tracing 白掉 17% RPS:PHP tracing JIT 的 use-after-free 与 buffer_free 不回收
2026-11-03 21:31:41
把 PHP tracing JIT 打开当默认值,三天后又被退回关闭。原因有两层:热点落在 C 内建函数时 JIT 纯亏 17% RPS;多租户下 opcache_invalidate() 不回收 JIT buffer,buffer_free 永远不动。中间还踩到一个 php-src 的 use-after-free,修复随 8.4.26 / 8.5.11 发布。含 opcache_get_status 复现步骤与重开默认的三条前置条件。
PHP
OPcache
JIT
性能优化
use-after-free
Go 1.24 默认用 MPTCP 监听:Linux 内核 CVE-2026-98432 的排查与缓解
资讯
Go 1.24 默认用 MPTCP 监听:Linux 内核 CVE-2026-98432 的排查与缓解
2026-11-03 21:04:12
Linux 内核 CVE-2026-98432(IPv4 TCP options RCU UAF,CVSS 9.8)的利用前提是暴露 MPTCP 监听,而 Go 1.24 起把 multipathtcp 默认值改成 2,Go 服务在 Linux 上默认就是 MPTCP 监听。给出 ss -Mltnp / go version -m 排查、GODEBUG 与 sysctl 缓解,以及为什么关 MPTCP 不算修复。
Go
Linux
安全
PHP 8.6 的 Stream 错误 API:把 E_WARNING 换成可查询的 StreamError
编程
PHP 8.6 的 Stream 错误 API:把 E_WARNING 换成可查询的 StreamError
2026-11-03 21:04:11
PHP 8.6 新增 Stream 错误 API:StreamError / StreamException、StreamErrorStore / Mode / Code 枚举,加 stream_last_errors / stream_clear_errors,由 context 的 error_mode / error_store / error_handler 控制。讲清为什么默认 opt-in、错误存储按 stream 堆积怎么清、error_handler 里为什么不能再碰 stream。
PHP
错误处理
Stream
K8s 1.35.10 修了 namespaceSelector 负算子:被排除命名空间里的 Pod 不再参与打分
综合
K8s 1.35.10 修了 namespaceSelector 负算子:被排除命名空间里的 Pod 不再参与打分
2026-11-03 21:03:24
kube-scheduler 在 1.35.10 修了一个 bug:pod 反亲和的 namespaceSelector 用 NotIn / DoesNotExist 时,本应排除的命名空间里的 Pod 仍在参与节点过滤与打分。讲清怎么从 FailedScheduling 与落点偏差认出它、kubectl 核对命名空间标签、DoesNotExist 不等于命名空间不存在,以及升级后落点会变。
Kubernetes
调度
排障
MySQL 9.7 的 enable_cascade_triggers:级联外键会触发子表触发器,复制路径不对称
编程
MySQL 9.7 的 enable_cascade_triggers:级联外键会触发子表触发器,复制路径不对称
2026-11-03 21:03:24
MySQL 9.7 新增 enable_cascade_triggers(默认 OFF):打开后 CASCADE 与 SET NULL 能激活子表 BEFORE/AFTER 触发器,触发器随发起语句执行、报错连同级联一起回滚。row-based 复制只记结果不重跑触发器,statement-based 按源设置走,混用 binlog_format 会让副本审计表分叉。
MySQL
主从复制
触发器
curl 报 65 CURLE_SEND_FAIL_REWIND:PHP 8.6 用 CURLOPT_SEEKFUNCTION 让流式请求体可回卷
编程
curl 报 65 CURLE_SEND_FAIL_REWIND:PHP 8.6 用 CURLOPT_SEEKFUNCTION 让流式请求体可回卷
2026-11-03 21:02:16
流式请求体遇到 307/308 重定向、401 多轮认证或连接重试时,curl 无法回卷直接报 65。PHP 8.6 加了 CURLOPT_SEEKFUNCTION,回调按 offset/origin 定位并返回 OK/FAIL/CANTSEEK。给出文件流与只进流(临时文件落地)两种写法,以及 size_delivered 区分截断。
PHP
curl
接口对接
PHP 8.6 的 Io\Poll:替掉 stream_select 的 1024 fd 上限与全量扫描
编程
PHP 8.6 的 Io\Poll:替掉 stream_select 的 1024 fd 上限与全量扫描
2026-11-03 21:02:16
PHP 8.6 新增 Io\Poll 轮询 API,Linux 走 epoll、BSD/macOS 走 kqueue,绕开 stream_select 的 FD_SETSIZE 1024 上限和每次 O(n) 全量扫描。列出 Context/Watcher/StreamPollHandle 的用法骨架、异常分类,以及从 stream_select 迁移要先包装句柄、重核超时参数等注意点。
PHP
异步
网络编程
PHP 8.6 里 trim() 开始吃掉 \f:默认字符集、array_filter 的 ValueError 与一批弃用
编程
PHP 8.6 里 trim() 开始吃掉 \f:默认字符集、array_filter 的 ValueError 与一批弃用
2026-11-03 21:02:16
PHP 8.6 三处不改签名却改结果的变动:trim/ltrim/rtrim/chop 默认字符集加入 form feed 0x0C,CSV 与 PDF 抓文本的字段字节会静默变化;array_filter 非法 $mode 从静默按 0 处理改成抛 ValueError;ArrayIterator 一批方法与 spl_object_hash 开始弃用。
PHP
版本升级
兼容性
Go 1.28 的 map 哈希改动:小键改走 wyhash,int64(0) 和 uint64(0) 不再碰撞
编程
Go 1.28 的 map 哈希改动:小键改走 wyhash,int64(0) 和 uint64(0) 不再碰撞
2026-11-03 21:01:18
Go 1.28 换掉 UseAeshash,改成按微架构配置阈值 MinAeshashSize,小键改走 wyhash;接口哈希折入动态类型 typehash,map[any]any 里 int64(0) 与 uint64(0) 不再碰撞。附各平台基准数字、CL 号与三类会因此失真的业务代码。
Go
runtime
数据结构
Go 1.27 默认 500 个请求头就回 431:kube-apiserver 大批 group 用户被拒的排查
综合
Go 1.27 默认 500 个请求头就回 431:kube-apiserver 大批 group 用户被拒的排查
2026-11-03 21:01:18
Go 1.27 给 net/http 加了 MaxHeaderValueCount,默认 500 个 header value,超限返回 431。kube-apiserver 上 impersonate 或代理用户 group 超过 500 个就直接被拒,1.35.10 把上限提到 16384。讲清 431 与 413 的区别、头数量怎么数、curl 复现与 Go 侧配置。
Go
运维
Kubernetes
Go 1.28 的 PGO 能吃 perf 采样了:perf_to_profile 转换与样本列匹配的坑
编程
Go 1.28 的 PGO 能吃 perf 采样了:perf_to_profile 转换与样本列匹配的坑
2026-11-03 21:01:18
Go 1.28 的 PGO 现在能直接吃 Linux perf 采的 CPU profile:perf.to_profile 转换后 FromPProf 会挑出 cycles_event/count 这类 CPU 样本列。给出 perf record 到 go build -pgo 的完整命令链,以及 -pgo 只认单文件、采样频率、容器 CAP_PERFMON 等实操坑。
Go
性能优化
profile
Go 1.27 让 net/http 自动 drain:HTTP/1 连接复用从 710ms 到 150ms
编程
Go 1.27 让 net/http 自动 drain:HTTP/1 连接复用从 710ms 到 150ms
2026-11-03 20:03:41
只取 StatusCode 就 Close 的 HTTP/1 请求,Go 1.26 之前每次都丢连接重建,100 次请求 710ms。Go 1.27 让 Transport 自动异步 drain 未读响应体(上限 50ms / 256KB),代码不变降到 150ms。含手写 drain 四步演进、JSON 换行差一个字节的典型坑,以及 release notes 提示的反向风险。
Go
net
http
性能优化
HTTP
1.1
20 个定时任务挂了 12 小时零告警:systemd-run --user 在系统级服务里找不到总线
案例
20 个定时任务挂了 12 小时零告警:systemd-run --user 在系统级服务里找不到总线
2026-11-03 20:02:26
系统级服务里调 systemd-run --user --scope,缺 XDG_RUNTIME_DIR 导致连不上 /run/user/<uid>/bus,20 多个定时任务失败 188 次、看门狗全程无告警。完整排查链、三条探针命令,以及补环境变量、enable-linger、改 --service、改用系统级 service 四种修法的取舍。
systemd
Linux
运维
定时任务
故障排查
RocketMQ 发送全部失败:日志指向 10909,Broker 只监听了 10911
案例
RocketMQ 发送全部失败:日志指向 10909,Broker 只监听了 10911
2026-11-03 20:01:14
灰度上线后 RocketMQ 消息发送成功率掉到 0,Broker 指标全都正常,应用日志报 connect to <ip>:10909 failed。本文从端口特征入手,说清 VIP 通道端口为何是 listenPort-2、vipChannelEnabled 默认为 true 的来源,并对比开放 10909 与客户端关闭 VIP 通道两条修复路径的取舍。
RocketMQ
消息队列
排障
运维
Java
PayPal Webhook 验签 FAILURE 排查笔记:签名串、raw body 与验签通过后的掉单
代码
PayPal Webhook 验签 FAILURE 排查笔记:签名串、raw body 与验签通过后的掉单
2026-11-03 09:01:23
PayPal Webhook 验签失败时多数不是密钥问题:签名串是 transmissionId|timeStamp|webhookId|crc32(rawBody),crc32 必须是十进制、body 必须是原始字节;再加上 cert_url 白名单、webhook_id 环境混用两个坑。文末给出验签通过后仍掉单的四类原因与排查顺序。
支付
PayPal
Webhook
接口对接
排障
TCC 的三种异常压在一张表上:tcc_fence_log 四个状态,useTCCFence 默认还是 false
编程
TCC 的三种异常压在一张表上:tcc_fence_log 四个状态,useTCCFence 默认还是 false
2026-11-03 00:04:21
TCC 的幂等、空回滚、资源悬挂在实现层是同一件事:一条分支记录被 Try 和 Cancel 错序写入。以 Seata 1.5.1 的 tcc_fence_log 为例,拆开 status 四态(tried/committed/rollbacked/suspended)各自挡哪种错序,说明 useTCCFence 默认 false 这个升级陷阱、空回滚必须写记录才能防悬挂的原因,并给出自建这张表的唯一键与同库约束。
TCC
分布式事务
Seata
DTM
组件粒度别按行数拆:一个下拉开出四个组件,小红点却留在 Badge 里
编程
组件粒度别按行数拆:一个下拉开出四个组件,小红点却留在 Badge 里
2026-11-03 00:04:12
Ant Design 的 Select 在 headless 层拆成 Root/Trigger/Value/Content/Item,Badge 的小红点却一直是内部实现。本文用 Event/Props/Expose/Context 四条信息通路(外加 Feedback 例外)给出可执行的组件粒度判据,附 Switch、Select、Caret 的判定过程、Vue 代码对照,以及「只有转发 props」这种拆早了的信号。
组件粒度
组件设计
前端工程
Vue
React
Headless
UI
beforeEnter 在 /users/2 → /users/3 时不触发:导航守卫 12 步顺序与三个边界
编程
beforeEnter 在 /users/2 → /users/3 时不触发:导航守卫 12 步顺序与三个边界
2026-11-03 00:03:56
导航守卫真正难的不是记钩子名,而是 12 步执行顺序和触发边界:beforeEnter 在 /users/2 → /users/3 这种参数变化时根本不执行;数据请求该放 beforeResolve 而不是 afterEach;返回值 false、路由地址、true 的语义与 next 三态等价表;异步守卫挂起期间 URL 与视图不一致、return false 时 URL 回滚的原因。附自检清单。
导航守卫
Vue
Router
前端路由
大家都在搜索什么?
devops
易支付
一个官网+多少钱
统一接受回调
统一回调
python
sub
node
宝塔日志
mysql
shell
ElasticSearch
css
vue
api接口对接
2025
支付接口对接
go
php
php回调
上一页
1
2
3
4
5
6
7
…
344
下一页
共 344 页
到第
页
确定