Python zoneinfo:正确处理夏令时重复时间与不存在时间 “凌晨一点半”不是永远唯一的时刻。某些地区秋季调回时钟时会重复一段本地时间,春季前拨时又会跳过一段时间。仅保存日期和小时分钟,可能无法还原用户的真实选择。本文使用 Python 3.14 标准库说明;zoneinfo... yunqueblog/ 技术教程/ 2026-10-01/ 2 阅读
Docker 健康检查实战:容器在运行,应用未必能服务 docker ps 显示容器正在运行,只能说明主进程尚未退出,不能证明应用能处理请求。线程卡死、初始化未完成和依赖异常,都可能让进程活着却无法服务。本文示例面向 Docker Engine 25.x 的普通独立容器模... yunqueblog/ 技术教程/ 2026-10-01/ 2 阅读
HTTP 重试与幂等键:超时之后怎样避免重复创建任务 客户端提交创建任务请求后超时,服务器可能什么都没做,也可能已经创建成功,只是响应丢了。直接重发可能生成两项任务,完全不重试又可能让用户以为操作失败。幂等键的作用是把“同一项业务意图的再次尝试”关联起来。本文讨论自建接... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读
Python 读写 CSV:编码、换行和字段边界要分别处理 CSV 看起来像“逗号分隔的文本”,但直接 split 逗号很快会遇到带引号的地址、跨行备注和编码问题。可靠处理需要分清三层:字节用什么编码解码,CSV 方言怎样描述字段,业务如何解释字段值。本文基于 Python ... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读
TLS 证书链检查:握手成功不等于证书验证通过 终端能连上 HTTPS,浏览器却提示证书错误,常见误区是把“建立了加密连接”当作“身份验证通过”。TLS 排查至少要同时检查目标主机名、证书有效期、服务器发送的中间证书,以及客户端信任来源。本文以 OpenSSL 3... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读
Git bisect 定位回归:先写可靠判定,再缩小提交范围 功能在旧版本正常、当前版本失败,逐个浏览提交记录很费力。Git bisect 可以利用已知的正常与异常边界,逐步缩小引入变化的范围。但它的可靠程度取决于测试判定:如果网络抖动、依赖漂移或环境残留会改变结果,再聪明的搜... yunqueblog/ 技术教程/ 2026-10-01/ 2 阅读
SQL 键集分页:用稳定游标替代不断增长的 OFFSET 列表越往后翻,OFFSET 越大,数据库需要处理的跳过部分可能越来越多。对于“继续加载下一页”的场景,可以改成从上一页最后一条记录之后继续查,这通常称为键集分页。本文使用 PostgreSQL 18 语法,假定 po... yunqueblog/ 技术教程/ 2026-10-01/ 2 阅读
Bash 管道退出码:别让 tee 把前面的失败藏起来 构建命令报错了,CI 却显示成功,一个常见原因是输出被接到 tee 后,只检查了整条管道的默认状态。本文针对 GNU Bash 5.x 的前台管道;PIPESTATUS 是 Bash 特性,不要把示例直接交给其他 s... yunqueblog/ 技术教程/ 2026-10-01/ 2 阅读
Linux 磁盘满了却找不到大文件:从 df、du 查到打开的删除文件 删除一个大日志后,df 的可用空间却没有增加,继续删其他文件通常不是好主意。文件名消失与存储空间释放不是同一件事。本文针对 Linux 本地文件系统,使用 GNU coreutils 9.x 与 lsof 的常用选项... yunqueblog/ 技术教程/ 2026-10-01/ 2 阅读
DNS 解析排查:把递归缓存、权威记录和委派链分开看 域名修改后,有人能访问、有人仍到旧地址,不能只说“等 DNS 传播”。应先确认是谁回答了查询,以及差异发生在哪一层。本文基于 BIND 9.20 系列 dig 的常用选项,适合排查自己管理的公开域名。示例域名和文档用... yunqueblog/ 技术教程/ 2026-10-01/ 2 阅读