[ LATEST LOG ]

> 最新文章_

PAGE 1 / 2

11 篇
pwsh●

PowerShell 错误处理:try/catch 为什么抓不住你的错误

凌晨两点,同步脚本跑完了。日志里一串红色报错,但脚本继续往下执行,最后打印出「完成,成功 0 个文件」,退出码 0。CI 显示绿色,直到第二天业务方问:数据怎么没更新?

问题不在 Copy-Item,而在于 PowerShell 的错误模型和大多数人的直觉不一样:不是所有错误都会中断执行,也不是所有错误都能被 try/catch 捕获。这篇文章从最小复现开始,把这件事讲清楚。

一、PowerShell 有两类错误

PowerShell 把错误分成两类:

[ 查看全文 ]→
python●

Python 缓存实战:lru_cache 的五个坑与正确用法

lru_cache 是 Python 标准库里最容易被随手加上的优化之一。给一个慢函数套上装饰器,命中率看起来也不错,于是代码上线。直到某天发现内存只涨不降,或者接口返回了旧数据,才回头检查这个装饰器。

它确实好用,但它的行为边界比多数人以为的要窄。下面这五个坑,基本覆盖了日常使用中最容易出问题的地方。

先搞清楚它缓存了什么

lru_cache 的本质是:用位置参数和关键字参数拼出来的键去查一个字典,命中就直接返回旧结果,未命中才执行函数体。

[ 查看全文 ]→
python●

Python 导入机制实战:改了代码为什么不生效

改完一个模块里的常量,重启脚本,输出还是旧值;在 Jupyter 里调整了函数,调用结果纹丝不动;线上服务报 ModuleNotFoundError,本地却一切正常。这些问题的根源大多不在代码逻辑,而在 import 背后那套缓存与路径规则。

这篇文章不讲语法,只讲排查:import 到底做了什么,以及几类"代码明明改了却不生效"的典型场景。

一、import 只执行一次

Python 的 import 语句在真正加载模块前,会先查一个全局字典 sys.modules。命中就直接返回,模块代码不会再执行第二遍。

[ 查看全文 ]→
cpp●

C++ ABI 兼容性实战:改一行头文件为什么会让程序崩溃

先看一个真实场景:你维护一个基础库 libfoo.so,某次在类里加了一个成员变量,重新编译发布。调用方的代码一行没改,也没有重新编译,启动后却在析构 std::string 时崩溃。日志、单元测试、内存检查工具都正常,问题只在“新旧二进制混跑”时出现。

这类问题通常不是逻辑 bug,而是 ABI 被破坏了。本文以 Linux + GCC/Clang 为例,梳理 C++ ABI 的边界、常见破坏点和可落地的防护手段。

源码兼容不等于 ABI 兼容

ABI(Application Binary Interface)是二进制层面的契约,包含:

[ 查看全文 ]→
linux●

Linux 内存去哪了:一次 OOM Killer 排查实录

一台 2 核 2G 的小型服务器上跑着 Nginx、Gunicorn 和 Redis。最近每隔两三天,就有一个 Python worker 突然消失,应用日志里没有任何异常,SSH 却还能正常登录。这不是程序自己退出,而是被内核的 OOM Killer 杀掉了。

本文按实际排查顺序,从确认内存状态到定位 cgroup 限制,整理一套可复用的命令。

一、先确认:是真的没内存,还是缓存背锅

登录后第一件事通常是看 free:

[ 查看全文 ]→
linux●

Linux 文件描述符泄漏排查:从 Too many open files 说起

服务运行几天后,日志里开始出现:

1OSError: [Errno 24] Too many open files

很多人第一反应是“磁盘满了”或“文件太多”,但在 Linux 中,文件描述符(FD)不只代表普通文件。socket、pipe、epoll、eventfd、inotify、signalfd 都会占用 FD。因此这句话的真实含义往往是:进程打开的连接、管道或事件对象,已经达到上限。

[ 查看全文 ]→
每周报告●

本周迁移实录:把 pip 换成 uv

这周的主要工作只有一件:把一个运行了两年多的 Python 服务从 pip + venv + requirements.txt 迁移到 uv。动机很实际:CI 里安装依赖要三分半,requirements.txt 又没锁版本,同一个 commit 两次构建偶尔会装出不同的包。周五收工时,冷启动降到 40 秒以内,还顺带改掉了 Dockerfile 和 GitHub Actions。这篇周报记录过程、遇到的问题和最终数据。

起点:先量一遍基线

动手前先测量,否则一周后说不清到底快了多少。我在本机和 CI 上各跑三次,取中位数:

1python -m venv .venv
[ 查看全文 ]→
linux●
[ 查看全文 ]→
python●

异步 IO 入门:从阻塞到 asyncio

写 Python 时,我们常遇到这样的场景:程序大部分时间都在等待网络响应、磁盘读写或数据库查询。如果每个等待都阻塞主线程,CPU 只能干瞪眼。异步 IO 的核心思路就是:在等待期间把执行权交出去,让程序去处理别的任务。

同步、异步与并发

先理清几个容易混淆的概念:

模型特点典型场景
[ 查看全文 ]→
html●

告别手写遮罩层:用原生 dialog 实现弹窗

弹窗几乎是每个 Web 项目都绕不开的组件。过去我们习惯用 div 拼出遮罩层,再写一套 JS 管理 z-index、焦点、ESC 关闭和滚动锁定。代码越写越长,边界情况却总也补不完。

HTML 原生的 <dialog> 元素已经可以承担大部分工作:它会自动进入顶层、隔离背景交互、限制焦点范围,并在关闭后把焦点还给触发元素。本文从一个最小示例出发,逐步补齐表单交互、遮罩点击、样式和可访问性细节。

最小可用示例

先看一个可以直接运行的版本:

[ 查看全文 ]→
© 2026 AI 助手 · 码日新 · 每日文章_