共 50 篇文章

No.001
计算机//4 分钟

从一次 curl 超时说起:DNS、TCP 与 TLS 到底谁慢了

一个 20 秒的 curl 超时,可能卡在 DNS、TCP 握手、TLS 协商,也可能是 IPv6 在悄悄拖后腿。这篇文章给你一套五分钟内定位链路瓶颈的方法。

↗
No.002
计算机//4 分钟

CPU 跑到 100% 时,Linux 上到底发生了什么

CPU 100% 不一定是故障,load 很高也不一定是 CPU 不够。从 /proc/stat 到 cgroup 限流,拆开看内核到底在忙什么。

↗
No.003
计算机//5 分钟

内存不是越多越好:虚拟内存、页缓存与 OOM Killer

free 显示的剩余内存少,往往不是内存不够。把虚拟内存、页缓存、overcommit 和 OOM Killer 的选择逻辑拆开,才知道该加内存还是改参数。

↗
No.004
计算机//5 分钟

为什么你的程序在 Docker 里时间不对

容器里时间差 8 小时,多半不是时钟漂移,而是时区数据缺失。从 /etc/localtime 到 JVM 的时区缓存,逐层排查并给出可复现的修法。

↗
No.005
计算机//5 分钟

文件删了空间没释放?inode 与文件描述符的真相

rm 之后 df 还是满的,多半是进程还握着文件描述符。从 inode 引用计数讲到 df -i,把「删了没释放」的几种情况一次说清。

↗
No.006
计算机//4 分钟

从输入 URL 到页面出现:一次完整的请求之旅

地址栏回车之后,浏览器做了十几件事。用 Navigation Timing 把 DNS、TLS、TTFB 和渲染拆开,白屏三秒才能定位到具体哪一段。

↗
No.007
计算机//5 分钟

为什么 0.1 + 0.2 不等于 0.3

0.1 + 0.2 得到 0.30000000000000004,不是语言有 bug,而是二进制浮点的必然结果。讲清表示误差、舍入规则和金额的正确存法。

↗
No.008
计算机//5 分钟

Git 的三种对象与一次 commit 的真实结构

git cat-file -p HEAD 打印的到底是什么?从 blob、tree、commit 的字节结构讲起,手工造一个 commit,理解哈希链和引用。

↗
No.009
故障排查//5 分钟

Nginx 502 排查手册:从 upstream 到文件描述符

502 不是一种错误,而是一类。本文按上游连接、worker 容量、文件描述符三条线索,把 error.log 里的关键字翻译成可执行的排查步骤和修复参数。

↗
No.010
故障排查//5 分钟

Python 里最隐蔽的坑:可变默认参数与闭包晚绑定

同一个默认参数被所有调用共享,循环里的 lambda 全部输出最后一个值——两个看起来无关的 bug,根因都是「什么时候求值」。本文给出复现、定位命令和四种修复写法。

↗
No.011
故障排查//5 分钟

MySQL 死锁现场:一条 UPDATE 引发的连锁反应

死锁不是数据库故障,而是两个事务互相等锁。本文讲清 1213 与 1205 的区别,教你把 InnoDB 的死锁现场读出来,并用统一的加锁顺序和重试策略收口。

↗
No.012
故障排查//5 分钟

前端白屏十分钟:一次 Source Map 与缓存叠加事故

发版后部分用户白屏,控制台报 ChunkLoadError。旧 HTML、已删除的 chunk 与错位的 Source Map 叠加,让定位一开始就走偏。本文还原过程并给出缓存兜底方案。

↗
No.013
故障排查//4 分钟

Docker 容器启动即退出:ENTRYPOINT、信号与 PID 1

本地 docker run 正常,部署后容器秒退;或者跑着跑着停了,日志最后一行是 Starting。从退出码、ENTRYPOINT 写法到 PID 1 的信号语义,一次讲清。

↗
No.014
故障排查//5 分钟

JavaScript 的 this 到底指向谁:六种绑定一次讲清

同一个方法,直接调用正常,作为回调传给 setTimeout 就报 undefined。this 由调用点决定,不是定义位置。本文用六种绑定、一张优先级表和可运行的例子把这件事定死。

↗
No.015
故障排查//5 分钟

定时任务没执行?cron 环境变量与 PATH 的坑

手动跑正常,crontab 里却静默失败。cron 不读你的 .bashrc,PATH 只有两个目录,工作目录还是家目录。本文给出三分钟定位方法和一个自带环境的脚本模板。

↗
No.016
故障排查//5 分钟

Redis 连接池耗尽:一次连接泄漏的完整复盘

接口 P99 涨到秒级,日志出现 ConnectionError。Redis 很闲,客户端却借不到连接。从连接数曲线到异常路径的 finally,讲清泄漏怎么找、怎么修。

↗
No.017
代码实战//7 分钟

用 80 行 Python 写一个可靠的定时任务调度器

只靠标准库写一个进程内调度器:秒级间隔触发、异常隔离、失败指数退避、上一轮没跑完就跳过,并说清它和 cron 各自该用在什么场景。

↗
No.018
代码实战//6 分钟

手写一个带重试与退避的 HTTP 客户端

重试不是 for 循环套三次。用标准库写一个带全抖动指数退避、超时预算、Retry-After 支持与幂等判断的 HTTP 客户端,并说清哪些请求根本不该重试。

↗
No.019
代码实战//4 分钟

用 Shell 写一个生产可用的日志清理脚本

磁盘被打满的往往不是日志本身,而是没人清理的日志。这个脚本按天压缩、按期删除,带锁、带 dry-run、带空格文件名防护,并解释 rm 之后空间为什么不释放。

↗
No.020
代码实战//4 分钟

20 行 JavaScript 实现丝滑的滚动进度条

滚动监听本身不慢,慢的是每帧读写布局。用 requestAnimationFrame 合并事件、transform 代替 width,再处理 iOS 回弹和短页面,20 行就能做到不掉帧。

↗
No.021
代码实战//5 分钟

用 SQL 窗口函数解决“每组取最新一条”

“每个用户取最新一条订单”有四种写法,结果却可能不一样。用 ROW_NUMBER 加确定性排序一次写对,并说清并列、NULL、索引和跨库差异。

↗
No.022
代码实战//7 分钟

写一个零依赖的 JSON 配置文件校验器

配置文件写错一个类型,服务启动十分钟后才崩在某个分支上。用两百行标准库代码做一次启动校验:类型、范围、枚举、未知字段、默认值,错误一次报全。

↗
No.023
代码实战//6 分钟

用 Git Hook 自动拦截密钥泄露

AK、token、私钥被提交进仓库,往往是在推送之后才被发现。用一段 pre-commit 脚本扫描暂存区新增行,把泄露挡在本地,并给出误报处理和泄露后的补救顺序。

↗
No.024
代码实战//5 分钟

从零实现一个简易 LRU 缓存(Python / TypeScript 双版本)

哈希表加双向链表,get 和 put 都是 O(1)。文章给出 Python 与 TypeScript 两版完整实现,并说清并发、空值、缓存击穿这些容易被忽略的边界。

↗
No.025
代码实战//4 分钟

用 FFmpeg 批量压缩视频:一条命令省下 80% 空间

手机视频、录屏和素材归档占满硬盘时,FFmpeg 的 CRF、preset 与缩放参数比“随便压一下”重要得多。给出可直接运行的批量脚本、目标体积算法和验证方法。

↗
No.026
AI 笔记//5 分钟

RAG 不是向量数据库的堆砌:一次检索质量优化实录

把文档灌进向量库只是起点。这篇记录一次检索质量排查:如何区分没召回和召回没用,切片、混合检索、重排各自解决哪一段,以及怎样用五十条标注把每次改动量化。

↗
No.027
AI 笔记//5 分钟

为什么你的 Prompt 不稳定:温度、上下文与评测集

同一个 prompt 连跑两次给出两种答案,未必是模型退化。把采样参数、上下文顺序和服务端差异拆开,用格式合法率与多次采样一致率把「稳定」变成两个可测的数字。

↗
No.028
AI 笔记//5 分钟

本地跑大模型:7B、14B、32B 到底怎么选

选本地模型不是比参数大小。先把权重、KV cache 和并发预留的显存账算清,再确认量化削掉了哪类能力,最后用首 token 延迟和生成速度决定 7B、14B 还是 32B,以及它值不值得占你一张卡。

↗
No.029
AI 笔记//5 分钟

Agent 的工具调用为什么总失败:五个工程细节

演示里能查单、能下单的 Agent,接进真实系统后成功率不到七成。问题多半不在模型,而在参数 schema、错误信息、幂等、工具数量和终止条件这五处,每一处都能单独修。

↗
No.030
AI 笔记//5 分钟

用 Embedding 做语义搜索:从原理到可运行代码

关键词搜不到「多久能收到发票」,因为原文写的是「二十四小时内发送」。这篇把向量检索拆成归一化、内积、切片和阈值四件事,并给出一份能直接跑的代码。

↗
No.031
AI 笔记//5 分钟

大模型幻觉的工程解法:引用、校验与拒答

在 prompt 里写「不要编造」基本无效。把答案拆成句子,逐句检查引用是否存在、数字是否对得上、证据是否覆盖,再把不达标的部分换成拒答,并给出下一步建议。

↗
No.032
AI 笔记//5 分钟

微调还是 RAG?一张决策表讲清楚

「模型不懂我们的业务」这句话,八成该用 RAG 解,不是微调。把知识、行为、格式和成本四件事分开看,用一张表决定该改索引还是改权重,以及先跑哪个基线。

↗
No.033
AI 笔记//5 分钟

把 LLM 接入生产:超时、重试、降级与成本控制

Demo 里一次调用只要一点二秒,上线后长尾变成几十秒,账单还超了预期。超时要分层、重试要有总预算、降级要留退路、成本要能归因,四件事缺一件就得出事。

↗
No.034
AI 笔记//5 分钟

2026 年 AI 编程助手使用指南:哪些任务真的能交给它

有的任务能省掉大半时间,有的反而更慢。按「可验证性」和「上下文局部性」分四格,看清哪些该交、哪些必须自己写,验收闸门该卡在哪一步。

↗
No.035
工具与库//4 分钟

uv:把 Python 依赖管理提速 10 倍的现代工具

把虚拟环境、依赖解析、锁文件和 Python 版本收进一个工具,换个安装器只是顺带的结果。这篇讲清 uv 的工作方式、提速从哪里来,以及哪些项目暂时不该换。

↗
No.036
工具与库//4 分钟

Ruff 入门:用一个工具替代 Black、Flake8 和 isort

一个中等规模的 Python 仓库,通常会同时装着 Black、isort、Flake8 和四五个插件。Ruff 用一个二进制把它们收掉,但规则怎么选、边界在哪,比安装更需要想清楚。

↗
No.037
工具与库//4 分钟

SQLite 被低估的 7 个能力

很多人对 SQLite 的印象还停在「单文件、测试用」。实际上 STRICT 表、UPSERT、生成列、FTS5、热备份这些能力早就内置,足够撑起一批小服务的生产环境。

↗
No.038
工具与库//4 分钟

Playwright:比 Selenium 更稳的浏览器自动化

端到端测试最贵的不是写用例,是排查那些「重跑就过」的失败。Playwright 把等待、隔离和现场留存做进了机制里,这篇文章讲清它为什么稳,以及哪些场景它并不合适。

↗
No.039
工具与库//4 分钟

HTMX:不用前端框架也能做交互

一个内部后台为了表格排序和表单校验引入了整套前端框架,构建链比业务代码还复杂。HTMX 换了个思路:让 HTML 自己发请求,服务端直接返回片段。

↗
No.040
工具与库//5 分钟

Pydantic v2:数据校验的性能与边界

v2 换了 Rust 内核,校验快了不少,但真正让人踩坑的是语义变化和隐式转换。这篇讲清它快在哪、什么该放进模型、什么必须留在服务层。

↗
No.041
工具与库//5 分钟

Caddy:自动 HTTPS 的极简 Web 服务器

证书申请、续期、重载,本来是三件需要人盯的事。Caddy 把它们做进默认行为,一条 reverse_proxy 就能上线。这篇讲清它省了什么,以及省不掉的前提条件。

↗
No.042
工具与库//4 分钟

ripgrep + fd:让命令行搜索快一个数量级

在几十万文件的仓库里 grep -r,一半时间花在 node_modules 和二进制文件上。ripgrep 和 fd 快的原因不神秘:默认少搜、并行搜、跳过没意义的东西。

↗
No.043
安全修复//5 分钟

Log4Shell 复盘:一行 JNDI 查询如何击穿 Java 生态

一个被写进日志的 User-Agent,就能让服务器主动连上攻击者的 LDAP 服务。这篇复盘讲清 Log4Shell 的成因与传播路径、怎么在资产里找出 log4j-core 及其间接依赖,以及升级之外还能做哪些兜底动作。

↗
No.044
安全修复//4 分钟

OpenSSH regreSSHion:Linux 服务器该如何真正修复

一个未认证即可触发的远程代码执行漏洞,让 OpenSSH 重新成为焦点。但把 LoginGraceTime 改成 0 并不等于修好。这篇讲清 regreSSHion 的成因、怎么确认版本与补丁状态,以及补丁和缓解措施之间的取舍。

↗
No.045
安全修复//4 分钟

PwnKit 提权漏洞:pkexec 与 Polkit 的十年隐患

pkexec 里一个存在了十余年的参数处理缺陷,让任何本地用户都能拿到 root。这篇讲清 PwnKit 的触发条件、怎么批量确认几百台机器是否暴露,以及为什么删掉 setuid 位比等补丁更快。

↗
No.046
安全修复//4 分钟

HTTP/2 Rapid Reset:一次攻击为什么能打瘫 CDN

客户端可以在一条连接上无限次开流又立刻取消,服务端却要为每次请求干活。Rapid Reset 把 HTTP/2 的取消语义变成了放大器,这篇讲它为什么难防,以及边缘该怎么配。

↗
No.047
安全修复//5 分钟

XZ Utils 后门事件:供应链攻击离我们有多近

一个被精心维护了两年的开源项目,在发布压缩包里藏了后门。XZ Utils 事件改写了很多人对供应链的认知,这篇讲它的手法、怎么自查,以及能落地的防御动作。

↗
No.048
安全修复//4 分钟

Spring4Shell:一个 0day 的披露与修复时间线

2022 年 3 月底,一段能写 JSP 的利用代码在 GitHub 泄露,Spring 在两天内发了补丁。这篇按时间线复盘 Spring4Shell 的披露与修复过程,并给出不能立即升级时的缓解路径、自查命令与验证方法。

↗
No.049
安全修复//4 分钟

Windows ZeroLogon:域控最危险的 10 分钟

一个未认证的 RPC 调用,就能清空域控的机器账户密码,再用 DCSync 拿走整个域。ZeroLogon 的门槛只是网络可达,这篇讲清它的原理、检测信号,以及补丁之后为什么还要开强制模式。

↗
No.050
安全修复//4 分钟

给个人服务器的 12 条加固清单(2026 版)

个人服务器被打穿,多数不是因为 0day,而是 22 端口对全网开放、root 能密码登录、补丁停在半年前。这份清单按收口、补洞、留证据的顺序,给出 12 条一下午能做完的加固动作。

↗