程序员茄子
全部
编程
代码
资讯
案例
综合
联系我们
案例
php
mysql
shell
go
vue
css
api接口对接
支付接口对接
Go IM 消息存储拆解:100 条一桶的 Mongo 分桶、幂等写入与三个线上 bug
案例
Go IM 消息存储拆解:100 条一桶的 Mongo 分桶、幂等写入与三个线上 bug
2026-11-06 20:02:57
拆解 OpenIM 系 IM-Server 的消息存储:为什么聊天记录不用 MySQL、一条消息一文档死在哪、100 条一桶的 Bucket Pattern 如何用 (seq-1)/100 定位,Kafka 重复消费下的幂等写入状态机,读时改写让一条群消息只存一份,以及 del_list 无界增长、IsFull 空数组 panic、桶大小写死寻址无法迁移这些真实问题。
Go
MongoDB
存储设计
IM
wujie 子应用的 7 个生产事故:跨 realm 校验、origin 误用与 SW 注册边界
案例
wujie 子应用的 7 个生产事故:跨 realm 校验、origin 误用与 SW 注册边界
2026-11-05 21:31:47
一个 Vue 3 子应用同时跑 wujie 嵌入、独立访问、普通 iframe 三种形态,由此暴露 7 个事故:跨 realm 的 instanceof 让每次点击都报警、postMessage 的 targetOrigin 填了自己、URL 传 token 的页面漏登记导致幽灵 401、Service Worker 在 iframe 里注册必炸、bus 监听只 on 不 off 导致重复调用、$wujie 缺失白屏、大屏 resize 收不到宿主事件。每个都有现象、根因和修复代码。
wujie
微前端
Vue3
ServiceWorker
MySQL 8.4.13:丢弃表空间再导入旧镜像后,点查为什么读到旧数据
案例
MySQL 8.4.13:丢弃表空间再导入旧镜像后,点查为什么读到旧数据
2026-11-05 21:07:05
MySQL 8.4.13 修了两个 InnoDB 表空间导入缺陷:导出的表被改过、表空间 DISCARD 后又导入旧镜像时,点查会命中陈旧 AHI 条目返回旧代数据;导入失败后的残留页还会在 eviction 时触发 btr0sea.cc 断言。本文给现象、原因与排查步骤。
MySQL
InnoDB
数据库
故障排查
表空间
ingress-nginx 退役后:Traefik 兼容模式零改动吃下 annotation,Gateway API 还得自己补细节
案例
ingress-nginx 退役后:Traefik 兼容模式零改动吃下 annotation,Gateway API 还得自己补细节
2026-11-04 20:01:28
ingress-nginx 2026 年 3 月停止维护后的两条迁移路径实测:Traefik v3.7.16 的 ingress-nginx 兼容 provider 可零改动吃下 ssl-redirect、proxy-read-timeout、whitelist-source-range 等常见 annotation;改走 Gateway API 则要自己补 308 状态码、IP 白名单(Traefik Middleware)与 entrypoint 超时。附 ingress2gateway v1.2.0 把超时转成 10 倍的实测结果。
Kubernetes
Traefik
GatewayAPI
Ingress
运维
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
MF2 各实现版本不一致:ICU4J 升到 draft、ICU4C 停在 CLDR 47、JS 包 4.1 已到 48.2
案例
MF2 各实现版本不一致:ICU4J 升到 draft、ICU4C 停在 CLDR 47、JS 包 4.1 已到 48.2
2026-10-30 00:03:47
MF2 规范 Stable 不等于四个实现一致:ICU4J 在 ICU 78 升到 draft 且对齐 CLDR 48,ICU4C 仍停在 CLDR 47,ICU4X 才刚落地初始实现,JS 包 messageformat 4.1 对齐 LDML 48.2/49。给出实现版本矩阵、可跑的 JS 接入代码、语法/数据模型/运行期三层错误分型与接入检查清单。
MF2
MessageFormat
ICU
ICU4J
ICU4C
ICU4X
i18n
国际化
CLDR
JavaScript
本地化
稳定性
Vue 3 纯前端 PDF 工具站上线:8 个坑,从 80MB 白屏到只收录首页
案例
Vue 3 纯前端 PDF 工具站上线:8 个坑,从 80MB 白屏到只收录首页
2026-10-29 21:31:13
一个纯浏览器端 Vue 3 PDF 工具站的上线复盘:pdf-lib 处理 80MB 文件白屏、Web Worker 结构化克隆比主线程还慢、批量进度条在 ZIP 阶段撒谎,以及 Playwright 预渲染后 canonical 仍指向首页、Cloudflare Pages 308 导致 Googlebot 报错的排查过程,附可直接复用的代码。
Vue
3
pdf-lib
Web
Worker
预渲染
SEO
5500 个 WordPress 站点里每个 PHP-FPM worker 600MB:一次被当成 DDoS 的 OPcache bug 排障
案例
5500 个 WordPress 站点里每个 PHP-FPM worker 600MB:一次被当成 DDoS 的 OPcache bug 排障
2026-10-27 21:32:25
5500 个 WordPress 站点共用一块 OPcache,每次 Yoast 更新后的 opcache_reset 都在放大 php-src #23859 里的 map_ptr 共享计数,新 worker 从第一个请求起就占 600MB,OOM-killer 轮流杀数据库和 nginx。本文还原用 cgi-fcgi 探针和 /proc/smaps 定位匿名段的过程,以及 restrict_api、process_control_timeout 等缓解手段。
OPcache
PHP-FPM
内存排查
OOM
WordPress
排障案例
PXC 升到 8.0 后每 30 秒一阵巨量磁盘写:Linux 大 folio 遇上 mmap 的 Galera cache
案例
PXC 升到 8.0 后每 30 秒一阵巨量磁盘写:Linux 大 folio 遇上 mmap 的 Galera cache
2026-10-26 21:05:55
PXC 5.7 升 8.0 后各节点每 30 多秒爆发几 GB 磁盘写,MySQL 统计却解释不了。责任线程全落在 Galera 接收与应用线程上,真因是操作系统同时升到内核 6.1:大 folio 加 mmap 写回只能整 folio 刷盘,而 Galera cache 正是 mmap 文件。文里给线程写入占比、自查命令与五种 workaround。
MySQL
运维
Linux
性能排查
parentLocales 与 uloc_getParent 不是一回事:en-GB 的父级是 en-001,ICU 截成 en
案例
parentLocales 与 uloc_getParent 不是一回事:en-GB 的父级是 en-001,ICU 截成 en
2026-10-26 00:04:49
ICU 的 uloc_getParent 只按最后一个下划线截断,CLDR 的 parentLocales.json 里 en-GB 却指向 en-001、zh-Hant 指向 und。本文对照两套 parent 语义,梳理 CLDR 45 把 parentLocales 按 component 分表、新增 nonlikelyScript 规则后,只读显式 locales 列表的代码会在哪个版本开始出错,附可跑的对照脚本与升级自查清单。
parentLocales
CLDR
locale
i18n
ICU
国际化
Java
Intl.DateTimeFormat 的 dateStyle 与单组件互斥:容器里差 8 小时与 hourCycle 的 0/1 起点
案例
Intl.DateTimeFormat 的 dateStyle 与单组件互斥:容器里差 8 小时与 hourCycle 的 0/1 起点
2026-10-25 00:06:07
Intl.DateTimeFormat 有两类不会提示的失败:dateStyle/timeStyle 与 hour、year 等单组件同时写会直接抛 TypeError;timeZone 默认取运行时时区,容器里通常 UTC,服务器与浏览器输出就差 8 小时。文中给出互斥规则与 resolvedOptions 不展开的原因、IANA 与偏移两种时区写法、h11/h12/h23/h24 的起点差异与 hour12 的覆盖顺序,并附一段可跑的断言脚本。
Intl
Intl.DateTimeFormat
i18n
国际化
前端
JavaScript
时区
MF2 随 CLDR 47 转正:数据模型、MF1 语法对照与迁移验证
案例
MF2 随 CLDR 47 转正:数据模型、MF1 语法对照与迁移验证
2026-10-23 00:03:33
MF2 在 CLDR 47 转为 Stable,但 ICU4J/ICU4C 的 message2 仍是技术预览。本文拆开 MF2 的数据模型:声明、matcher 四条合法性约束、Syntax Error 与 Data Model Error 的分层,给出与 MF1 的四处硬差异对照(占位符、复数、转义、兜底)以及 bidi 默认策略对断言的副作用和迁移检查清单。
MessageFormat
MF2
i18n
国际化
ICU
CLDR
本地化
BOM 是 Windows 写进去、在 Linux 炸开的:PowerShell 5.1 默认编码、compose 的 \uFEFFTEST 与 MySQL 1064
案例
BOM 是 Windows 写进去、在 Linux 炸开的:PowerShell 5.1 默认编码、compose 的 \uFEFFTEST 与 MySQL 1064
2026-10-22 00:04:33
带 BOM 的 UTF-8 在 Windows 上一切正常,落到 Linux 的配置解析器、compose 或 MySQL 客户端时 BOM 就变成内容:PowerShell 5.1 的 Out-File/Set-Content 默认编码对照、实测五种写法的开头字节、compose env_file 里键名变成 \uFEFFTEST、compose.yml 报 service 'version'、MySQL 1064 与 Workbench 的原始报错,附字节确认与清洗命令。
BOM
PowerShell
docker-compose
MySQL
字符编码
运维
BOM 的消费端:shell 报 Exec format error、Go 报 illegal byte order mark、JSON 解析停在第 0 位
案例
BOM 的消费端:shell 报 Exec format error、Go 报 illegal byte order mark、JSON 解析停在第 0 位
2026-10-22 00:03:42
同一个 EF BB BF,在导出侧是 Excel 认 UTF-8 CSV 的必需品,在消费侧却让内核 execve 返回 ENOEXEC、Go 编译器报 illegal byte order mark、JSON.parse 在第 0 位失败。整理字节层确认方法、shell/Go/Python/Node/Jackson/PHP 的行为对照表,以及 sed 去 BOM、CI 检查与 .gitattributes 不管 BOM 的边界。
BOM
UTF-8
字节序标记
Shell
Go
JSON
字符编码
ICU 79 升级笔记:UnicodeString 将被标 final、H24 弃用,从 78.3 到 79 要验证的 5 件事
案例
ICU 79 升级笔记:UnicodeString 将被标 final、H24 弃用,从 78.3 到 79 要验证的 5 件事
2026-10-21 00:04:11
按「谁受影响 → 变更细节 → 怎么验证」梳理 ICU 78.3 到 79 的升级路径:ICU4C 要 C++17、ICU4J 最低 Java 11,79 计划把 UnicodeString 等类标 final、弃用 H24 并把周编号统一为 ISO,ICU4J 从 80 起不再保证跨版本 Java 序列化兼容;附 UnicodeSet pattern 解析变化、行断行反向迭代性能修复、tzdata 2026d 与数据裁剪手段。
ICU
Unicode
CLDR
国际化
i18n
升级迁移
代金券回调新增 appid/openid:多公众号共商户号时怎么路由、校验与限频
案例
代金券回调新增 appid/openid:多公众号共商户号时怎么路由、校验与限频
2026-10-20 21:05:24
微信支付 2026-10 更新:代金券消息通知地址可带 appid,核销回调才返回 openid,多公众号共用商户号时必须按 appid 做路由;会员卡模板一批字段必填改选填会让本地校验报错;商品券 display_info 与可用商品编码列表二选一;会员接口限频放宽到 100/秒。
支付对接
微信支付
接口变更
Go
CLDR locale 继承:en-GB 的父级是 en-001,不是 en
案例
CLDR locale 继承:en-GB 的父级是 en-001,不是 en
2026-10-20 00:07:16
CLDR 的 locale 继承不是删最后一个子标签:en-GB 的父级是 en-001,en-AT 要经过 en-150,es-MX 走 es-419,zh-Hant 直接回 und。本文用 5.8KB 的 parentLocales.json 给出真实映射、可运行的继承链代码,以及词条放在哪一层会影响哪些地区。
CLDR
locale
i18n
国际化
en-001
parentLocales
Node.js
Node 上 Intl 输出不一致:CLDR 48 的 unit ID 改名、周编号与 de-CH 分隔符
案例
Node 上 Intl 输出不一致:CLDR 48 的 unit ID 改名、周编号与 de-CH 分隔符
2026-10-20 00:04:18
同一段 Intl 代码在本地和线上输出不一致,多半不是代码问题,而是运行时打包了不同版本的 CLDR。本文给出 CLDR 48 的迁移清单:unit ID 从 permillion 改成 part-per-1e6、周编号改按 ISO、de-CH 分组符变 apostrophe、era code 与 territories 字段删除,并给出用 cldr-json 读数据、在 CI 里做版本与行为快照断言的做法。
CLDR
ICU
i18n
国际化
locale
Node.js
Intl
Backup Center:Laravel + Go Agent 做多机网站备份,存储按 YYYYMMDD 归档
案例
Backup Center:Laravel + Go Agent 做多机网站备份,存储按 YYYYMMDD 归档
2026-10-18 20:02:23
一台 Center 加每机一个 Go Agent,把网站备份统一调度到 S3/SFTP/WebDAV。记录一键脚本的环境变量与 OpenVZ/LXC 兼容坑、Agent 的 systemd 接入、tag 触发的发布流程,以及 README 没交代的一致性、加密、去重三个待验证点。
自托管
备份
Laravel
Go
Docker
运维
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
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
数据库
字符集
运维
utf8mb3 转 utf8mb4:767 字节索引上限、191/768 前缀与 row size 8126 的踩坑记录
案例
utf8mb3 转 utf8mb4:767 字节索引上限、191/768 前缀与 row size 8126 的踩坑记录
2026-10-16 00:03:48
从 utf8mb3 转 utf8mb4 时,内容没问题但表结构常被 InnoDB 的字节上限卡住:COMPACT 行格式 767 字节对应 191 字符前缀、DYNAMIC 行格式 3072 字节对应 768 字符,以及 TINYTEXT/VARCHAR 长度、row size 8126、ER_1071/1709/1118 报错与可执行修复 SQL。
utf8mb4
MySQL
字符集
索引
InnoDB
运维
数据库
emoji
Heron:agent 只读采集、hub 不下发命令的自托管主机监控
案例
Heron:agent 只读采集、hub 不下发命令的自托管主机监控
2026-10-15 20:02:43
Heron 是 Go 写的轻量自托管主机监控:hub 用一个静态二进制加 SQLite 文件存储、展示、告警,agent 只读采集上报。它的安全边界设计值得一读——agent 不照单执行 hub 指令,hub 能影响的只有上报节奏、探测任务、出口地址探测开关和验签后的更新任务。附安装命令与平台限制。
运维
监控
Go
自托管
开源项目
大家都在搜索什么?
devops
易支付
一个官网+多少钱
统一接受回调
统一回调
python
sub
node
宝塔日志
mysql
shell
ElasticSearch
css
vue
api接口对接
2025
支付接口对接
go
php
php回调
上一页
1
2
3
4
5
6
7
下一页
共 7 页
到第
页
确定