程序员茄子
全部
编程
代码
资讯
案例
综合
联系我们
软件定制开发/软件按需定制 技术文章
php
mysql
shell
go
vue
css
api接口对接
支付接口对接
一千个 agent 同时 push:Aspen 把 Git 服务端从磁盘目录换成 Postgres + 对象存储
资讯
一千个 agent 同时 push:Aspen 把 Git 服务端从磁盘目录换成 Postgres + 对象存储
2026-11-08 21:31:15
经典 Git 服务器在 agent 群并发推送下会卡在锁和重复打包上。本文拆解 Aspen(Apache-2.0,pre-alpha)的设计:分支在 Postgres 里各一行、靠 compare-and-swap 移动,push 的 pack 原样进对象存储、fetch 直接拼发现成的包。附放弃全分支快照的代价、push 只见 trunk 带来的 -o force 差异、567 push/s 测试条件、源码构建命令与已知限制清单。
Git
Rust
PostgreSQL
自托管
Go 1.28 的复合字面量类型省略:整个字面量的类型开始由目标类型推断
编程
Go 1.28 的复合字面量类型省略:整个字面量的类型开始由目标类型推断
2026-11-08 21:07:35
Go 1.28 把复合字面量的类型省略从元素位置扩展到由目标类型推断整个字面量:函数调用实参、append/copy/delete、switch 都进入范围,两侧都不是 typed 的比较仍退回旧机制。文中按 CL 列出覆盖面,以及工具链、gopls 与代码生成器需要同步升级的原因。
Go
语言特性
工具链
Docker Engine 29:最低 API 版本抬到 v1.44,读取 /events 的脚本需要修改字段名
综合
Docker Engine 29:最低 API 版本抬到 v1.44,读取 /events 的脚本需要修改字段名
2026-11-08 21:06:18
Docker Engine 29 把 daemon 最低 API 版本抬到 v1.44,客户端也不再向更低版本协商,固定写版本号的旧客户端会被拒。GET /events 在 API 1.52 起省略 status/id/from,需要改用 Type/Action/Actor。文中给查询命令、字段对照表和同版本其他 API 移除项。
Docker
运维
接口对接
systemd v259 把 journal 默认存储改成 persistent:小盘、容器、只读根分区各会怎样
综合
systemd v259 把 journal 默认存储改成 persistent:小盘、容器、只读根分区各会怎样
2026-11-08 21:06:18
systemd v259 把 journal 默认存储从 auto 改成 persistent,以前只看 /var/log/journal 在不在,不在就写 tmpfs 重启即丢。本文讲清小盘机器、容器、只读根分区三种场景的实际后果,给出 Storage= 与 SystemMaxUse/RuntimeMaxUse 的配置写法与核对命令。
Linux
systemd
运维
升级到 MySQL 9.7 之前,先把 my.cnf 里这两个复制变量清掉
综合
升级到 MySQL 9.7 之前,先把 my.cnf 里这两个复制变量清掉
2026-11-08 21:05:22
MySQL 9.7 移除了 replica_parallel_type 与 group_replication_allow_local_lower_version_join,配置里残留会让 mysqld 报 unknown variable 起不来;group_replication_communication_stack 与 ip_allowlist 在 9.7.2 弃用。文中给升级前检查步骤、grep 清单和并行复制的替代参数方向。
MySQL
复制
升级踩坑
Vite 8 迁移:CJS 默认导入、manualChunks 与 commonjsOptions 的三处硬坑
代码
Vite 8 迁移:CJS 默认导入、manualChunks 与 commonjsOptions 的三处硬坑
2026-11-08 21:05:22
Vite 8 用 Rolldown + Oxc 替掉 esbuild/Rollup,多数配置能自动转换,但三处会静默或直接炸:CJS default 导入规则改变导致 TypeError、output.manualChunks 对象形式被移除、build.commonjsOptions 变 no-op。文中给出症状、配置对照表和一次扫清残留的 grep。
Vue
Vite
构建工具
PHP 8.6 的 SplFileObject:next() 与 fgets() 不再共享缓存,按行读文件要改写法
编程
PHP 8.6 的 SplFileObject:next() 与 fgets() 不再共享缓存,按行读文件要改写法
2026-11-08 21:04:15
PHP 8.6 拆开了 SplFileObject 里 next()、current()、fgets() 共享的缓存:next() 无缓存时直接推进流,fgets() 不再把行留给 current()。混用两者按行读大文件会变成漏行或重复行,且不报错。还讲了 EOF 后 key() 的行为、DirectoryIterator 返回类型与 CSV 方法弃用。
PHP
文件读取
升级踩坑
PHP 8.6 把 array_intersect() 的字符串转换提前到扫描阶段
编程
PHP 8.6 把 array_intersect() 的字符串转换提前到扫描阶段
2026-11-08 21:04:15
PHP 8.6 把 array_intersect() 的值转字符串从排序比较阶段前移到扫描阶段。有状态 __toString() 的结果、抛出的异常来自哪个元素、Array to string conversion 告警的条数与顺序都会变;参数类型校验提前,空数组输入则完全不转换。文末给四条自查清单。
PHP
数组函数
升级踩坑
PHP 8.6:close 阶段失败时,fclose() 与 file_put_contents() 不再返回成功
编程
PHP 8.6:close 阶段失败时,fclose() 与 file_put_contents() 不再返回成功
2026-11-08 21:03:21
PHP 8.6 把 fclose()、file_put_contents()、copy() 在 flush/close 失败时改成返回 false。NFS 上的 EDQUOT/ENOSPC/EIO 常发生在 write() 成功之后,于是字节数对得上但文件是截断的。文中给出三类函数的判断写法、临时文件+rename 的顺序要求,以及 fsync 与 close 兜底的分工。
PHP
文件写入
升级踩坑
PHP 8.6 弃用 mb_ereg* 与 mb_split:Oniguruma 停更后怎么迁到 preg_*
编程
PHP 8.6 弃用 mb_ereg* 与 mb_split:Oniguruma 停更后怎么迁到 preg_*
2026-11-08 21:03:21
Oniguruma 于 2025 年 4 月停止维护,PHP 8.6 弃用整个 mbregex 层并在 9.0 移除。本文列出受影响的函数清单,讲清 mb_ereg 与 preg_*/u 在 \w 语义、无效 UTF-8 返回 false 上的差异,给出 rg 扫描与 CI 拦截方式,以及 mb_onig PECL 包的定位。
PHP
正则
升级踩坑
Go 1.28 的 Timer 复制检测:Stop() 返回 false 之后,定时器为什么还在跑
编程
Go 1.28 的 Timer 复制检测:Stop() 返回 false 之后,定时器为什么还在跑
2026-11-08 21:02:30
Go 1.28 用自指针取代 Timer 内部的 init bool,按值复制的 Timer/Ticker 会被检测出来。这篇讲清楚副本 Stop() 返回 false、Reset 后堆里出现两份、channel 多一次 tick 的完整路径,为什么 copylocks、race detector、pprof 都查不到,以及怎么改成持有指针。
Go
定时器
并发
Go 1.27 的泛型方法:能链式调用,但进不了接口,接口也声明不出来
编程
Go 1.27 的泛型方法:能链式调用,但进不了接口,接口也声明不出来
2026-11-08 20:03:07
Go 1.27 允许具体方法自带类型参数,Map 这类操作能挂在类型上并链式调用;但接口仍不能声明泛型方法,泛型方法也无法满足接口,函数类型推断同时铺开到复合字面量、类型转换与 channel 发送。
Go
泛型
语言特性
REPACK (CONCURRENTLY) 不是 MVCC-safe:清膨胀时最后换文件那一下仍要 ACCESS EXCLUSIVE
编程
REPACK (CONCURRENTLY) 不是 MVCC-safe:清膨胀时最后换文件那一下仍要 ACCESS EXCLUSIVE
2026-11-08 20:01:15
PostgreSQL 19 用 REPACK 取代 VACUUM FULL 与 CLUSTER,REPACK (CONCURRENTLY) 大部分阶段只拿 SHARE UPDATE EXCLUSIVE,但最后换文件仍需 ACCESS EXCLUSIVE,且对旧快照事务不是 MVCC-safe。整理语法、权限、临时空间与不能用并发模式的具体条件。
PostgreSQL
REPACK
VACUUM
数据库运维
Apple IAP 服务端通知 V2:x5c 里的证书不能直接用来验签
代码
Apple IAP 服务端通知 V2:x5c 里的证书不能直接用来验签
2026-11-08 09:02:52
接 App Store Server Notifications V2 时最容易被跳过的几处:拿 x5c 里的证书直接验签等于没验(链是请求体的一部分,可自签伪造),必须锚定 Apple Root CA - G3;只解 payload 不验签;不校验 environment / bundleId 让沙盒数据进生产库;price 是千分之一货币单位;appAccountToken 漏传导致通知落不到用户。附 openssl 验证命令、App Store Server API 两个 host 与 JWT 的 exp 上限。
IAP
iOS
JWS
验签
支付
浏览器签得通、脚本签不通:CryptoJS 还原里最容易出错的八处
代码
浏览器签得通、脚本签不通:CryptoJS 还原里最容易出错的八处
2026-11-08 09:01:34
同一串明文、同一个 key,浏览器里请求通、脚本里签名错误:先查 CryptoJS 的 key 解析方式、口令派生(Salted__ 头)、输出编码大小写、body 重新序列化后的键序、环境指纹是否进了签名,以及 Hook 被 toString 检测或注入太晚。给可复现的判断命令和一段伪造 native code 的 Hook 写法,顺带说清 XHR 断点该断在哪一帧。
JS逆向
CryptoJS
AES
签名
抓包
Go 的 x509 报错是 verify.go 里写死的分支:按文案反推证书校验根因
编程
Go 的 x509 报错是 verify.go 里写死的分支:按文案反推证书校验根因
2026-11-08 00:04:32
Go 的 crypto/x509 报错文案来自 verify.go 的固定分支:没有 IP SAN、CN 兜底、名字列表超 100 条、候选签发者被拒、信任库为空,各自对应不同根因。附源码对照、Go 1.15/1.17/1.18 版本边界与 openssl 排查命令。
x509
TLS
证书
Go
运维
排错
staticcheck 2026.2 的 SA9010:defer f() 丢掉了那个该在退出时跑的闭包
编程
staticcheck 2026.2 的 SA9010:defer f() 丢掉了那个该在退出时跑的闭包
2026-11-08 00:04:30
SA9010 是 staticcheck 2026.2 新增检查,只做一句类型判断:defer 的调用结果如果是函数值就报。本文给出最小复现、defer 两阶段求值差别、带参数返回函数的修复写法,以及旧版本 -checks=SA9010 静默不检查的原因。
SA9010
staticcheck
Go
lint
defer
Gmail 报 550-5.7.25 缺 PTR:docker-mailserver 出站发信的源 IP、反向解析与 EHLO 怎么对齐
编程
Gmail 报 550-5.7.25 缺 PTR:docker-mailserver 出站发信的源 IP、反向解析与 EHLO 怎么对齐
2026-11-08 00:04:14
出站邮件被 Gmail 以 550 5.7.25 拒绝时,先确认收件方看到的源 IP,再依次核对 PTR 与正向 A/AAAA、EHLO 的 FQDN、出站 25 端口是否被封。附 docker-mailserver 的 smtp_bind_address 绑定写法,以及它被 smtp-amavis 继承的坑和 postfix-master.cf 覆盖方案。
docker-mailserver
邮件服务器
Postfix
反向解析
PTR
运维
pg_advisory_unlock 返回 false:Go 连接池下 session 级咨询锁的失效路径
编程
pg_advisory_unlock 返回 false:Go 连接池下 session 级咨询锁的失效路径
2026-11-08 00:04:05
Go 服务里 pg_advisory_lock 拿锁正常、pg_advisory_unlock 却返回 false 并打 WARNING:根因是 database/sql 连接池不保证两条语句走同一条 backend。给出 db.Conn 独占连接、改事务级 pg_advisory_xact_lock 两种写法,附 pg_locks 键编码还原、等待行定位、lock_timeout 与锁表容量边界。
咨询锁
PostgreSQL
Go
连接池
锁排查
Dovecot 2.4 拒读 2.3 的 dovecot.conf:dovecot_config_version 必须第一行,mail_location 已拆成三项
编程
Dovecot 2.4 拒读 2.3 的 dovecot.conf:dovecot_config_version 必须第一行,mail_location 已拆成三项
2026-11-08 00:03:53
Dovecot CE 2.3 升级到 2.4 后旧配置直接不工作。整理必须改的几处:dovecot_config_version/dovecot_storage_version 前置、设置全部全局化与 $SET:/%{user | domain} 新变量、passdb/userdb 必须命名、mail_location 拆成 mail_driver + mail_path + mailbox_list_layout、SSL 去掉行首 <、.conf.ext 取消,附默认值变化表与被移除功能清单。
Dovecot
IMAP
邮件服务器
dovecot.conf
配置迁移
钉钉机器人 webhook 接入:加签在 URL query,Outgoing 在 HTTP header,310000 怎么查
编程
钉钉机器人 webhook 接入:加签在 URL query,Outgoing 在 HTTP header,310000 怎么查
2026-11-07 21:33:16
钉钉群机器人发告警时,主动发送的 timestamp/sign 拼在 URL query,Outgoing 接收消息的签名却在 HTTP header,写反了只会拿到 310000。这篇记录了加签三步(毫秒时间戳、HMAC key 是 secret、Base64 后必须 urlEncode)、20 条/分钟限流的合并做法、310000 四种 errmsg 的排查顺序,以及三种安全设置怎么选。
钉钉
webhook
接口对接
告警
Go
yansongda/pay 3.x 一个 SDK 接完微信支付宝:证书配置、callback 边界与金额单位
代码
yansongda/pay 3.x 一个 SDK 接完微信支付宝:证书配置、callback 边界与金额单位
2026-11-07 21:32:19
PHP 项目同时接微信和支付宝时,yansongda/pay 3.x 能省掉两套签名验签代码,但配置结构与回调边界容易误判:支付宝三张证书各管什么、微信平台公钥为什么建议落盘、callback() 只验签不校验金额、微信按分支付宝按元的单位差异,以及什么时候自己封装更划算。
PHP
支付
微信支付
支付宝
SDK
数组
Vue 3.6 Vapor 下 slots.default() 会真的渲染插槽:判空写法与兼容性边界
代码
Vue 3.6 Vapor 下 slots.default() 会真的渲染插槽:判空写法与兼容性边界
2026-11-07 21:06:24
Vue 3.6 Vapor 里 slots.default() 不是只读探测:调用会执行插槽渲染、创建 DOM 与响应式副作用,hydration 时还会认领 SSR 节点。给出官方反例、用 <slot>默认内容</slot> 的替代写法,以及 Vapor 下 getCurrentInstance、模板 ref、globalProperties 等边界清单。
Vue
组件
Vapor
数组
PHP 8.6 把 php://filter 过滤器链限制到 16 个:未设上限会发弃用提示,显式设置后超限直接打开失败
编程
PHP 8.6 把 php://filter 过滤器链限制到 16 个:未设上限会发弃用提示,显式设置后超限直接打开失败
2026-11-07 21:05:38
PHP 8.6 给 php://filter 的过滤器链加了默认 16 个上限:未配置 filter.max_filter_count 时超限发弃用提示,显式设置后超限直接打开流失败。给出 stream_filter_append 与 context 选项两种替代写法、read/write 分别计数的注意点,以及把这条 deprecation 当攻击信号的用法。
PHP
安全
文件流
大家都在搜索什么?
devops
易支付
一个官网+多少钱
统一接受回调
统一回调
python
sub
node
宝塔日志
mysql
shell
ElasticSearch
css
vue
api接口对接
2025
支付接口对接
go
php
php回调
上一页
1
2
3
4
5
6
7
…
348
下一页
共 348 页
到第
页
确定