<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[IMPYLH的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/IMPYLH</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; IMPYLH]]></copyright><item><title><![CDATA[所有的临时方案，最后都成了基础设施]]></title><link>https://blog.youkuaiyun.com/IMPYLH/article/details/170244374</link><guid>https://blog.youkuaiyun.com/IMPYLH/article/details/170244374</guid><author>IMPYLH</author><pubDate>Sat, 07 Nov 2026 16:36:29 +0800</pubDate><description><![CDATA[TODO: 灰度完就删注释很短，语气很笃定。六年过去，成了公司最稳定的灰度策略。新来的同事管它叫“经典分流算法”，还有人提议把它抽成公共库。写的时候是权宜之计，活下来就是基础设施。临时方案不是罪。工程里到处都是权衡，今天的权宜之计，本来就是为了让业务先跑起来。真正的罪，是让它无声无息地变成永久，然后假装它一直就在那里。所以，下次写下# 先这样# 删除条件：____；owner：____；到期：____给它一个死期，它才配拥有一个体面的葬礼。毕竟在这个行业里，]]></description><category></category></item><item><title><![CDATA[文件变了，inotify 为什么没反应]]></title><link>https://blog.youkuaiyun.com/IMPYLH/article/details/170187815</link><guid>https://blog.youkuaiyun.com/IMPYLH/article/details/170187815</guid><author>IMPYLH</author><pubDate>Fri, 06 Nov 2026 10:16:07 +0800</pubDate><description><![CDATA[但如果你自己写，就必须在收到“新建目录”事件时补上 watch，否则新目录里的变化永远收不到。容器共享宿主内核，同一 UID 的额度会互相挤占，具体计数方式随内核版本和 user namespace 配置略有差异，以实际报错为准。它通知的是 inode 上的事件，队列会丢，递归要自己加，远程文件系统还不管。队列满时，你只知道“有事件丢了”，不知道丢了哪些。inotify 的接口很简单，但它的语义和大多数人的直觉有几处偏差。如果目录被删了，收到。就立刻读文件、解析配置，轻则解析失败，重则读到不完整的状态。]]></description><category></category></item><item><title><![CDATA[C++ 迭代器失效：删掉一个元素，循环为什么漏掉一个]]></title><link>https://blog.youkuaiyun.com/IMPYLH/article/details/170125044</link><guid>https://blog.youkuaiyun.com/IMPYLH/article/details/170125044</guid><author>IMPYLH</author><pubDate>Thu, 05 Nov 2026 09:41:38 +0800</pubDate><description><![CDATA[的：换一个标准库、换一个优化级别，它可能崩溃，也可能“看起来正常”，然后在某次上线后出问题。]]></description><category></category></item><item><title><![CDATA[僵尸进程：死了，但还没走]]></title><link>https://blog.youkuaiyun.com/IMPYLH/article/details/170034456</link><guid>https://blog.youkuaiyun.com/IMPYLH/article/details/170034456</guid><author>IMPYLH</author><pubDate>Wed, 04 Nov 2026 10:57:16 +0800</pubDate><description><![CDATA[僵尸进程最反直觉的地方在于：它不是一个“还活着的坏进程”，而是一个“已经结束但没被确认的进程”。kill对它无效，不是权限问题，也不是内核 bug，而是因为它已经不在能被信号打扰的世界里了。下次在ps里看到<defunct>，别急着找杀进程的命令。顺着PPID往上看，问题多半在父进程的某一行fork()后面，那里少了一个 wait()。]]></description><category></category></item><item><title><![CDATA[Python 的哈希契约：为什么 list 不能当字典的键]]></title><link>https://blog.youkuaiyun.com/IMPYLH/article/details/169925673</link><guid>https://blog.youkuaiyun.com/IMPYLH/article/details/169925673</guid><author>IMPYLH</author><pubDate>Tue, 03 Nov 2026 09:56:34 +0800</pubDate><description><![CDATA[字典不会帮你检查这件事，它只负责按照你给的哈希去找。元组本身不可变，但它的哈希是由元素组合出来的。它只是按照新的哈希去 2 号桶找，而当初存进去的是 1 号桶。三者相等，哈希也相同，所以它们是同一个键，后写入的覆盖先写入的。这不是 bug，而是哈希契约的正常结果。但另一个更隐蔽的 bug 是：对象明明还在字典里，却怎么也取不出来。字典既无法保证“一个键只出现一次”，也无法通过等价的键找到值。可变，但不参与相等判断，也不参与哈希，所以修改它不会破坏字典。两个内容相同的对象，默认就是两个不同的键。]]></description><category></category></item><item><title><![CDATA[chmod 777 之后，为什么还是 Permission denied]]></title><link>https://blog.youkuaiyun.com/IMPYLH/article/details/169821642</link><guid>https://blog.youkuaiyun.com/IMPYLH/article/details/169821642</guid><author>IMPYLH</author><pubDate>Mon, 02 Nov 2026 09:33:21 +0800</pubDate><description><![CDATA[先还原一个很常见的现场。服务换到新机器，日志目录写不进去。于是权限被加到 7777，加上-R，再加上 sudo，最后开始怀疑内核有 bug。大多数时候，问题不在权限位，而在于我们默认“权限”只有rwx这一层。Linux 在真正打开一个文件之前，要穿过好几道门：路径上的目录、umask、ACL、挂载选项、LSM、文件属性，任何一道没过去，chmod 777都只是把第一道门拆了。下面按排查顺序，把这几道门逐个走一遍。]]></description><category></category></item><item><title><![CDATA[别用字符串思维写 PowerShell 管道]]></title><link>https://blog.youkuaiyun.com/IMPYLH/article/details/169741032</link><guid>https://blog.youkuaiyun.com/IMPYLH/article/details/169741032</guid><author>IMPYLH</author><pubDate>Sun, 01 Nov 2026 14:08:39 +0800</pubDate><description><![CDATA[既然管道是用来传递对象的，那自定义函数也理所当然该顺应这个约定。PowerShell 提供了来实现这一点。只有正确地用上它，函数才不会变成“只接受数组参数”的孤岛。来看一个最贴近日常的例子：计算文件占用的 MB 数。返回的是FileInfo对象，天然就有Length属性。param(begin {process {end {Write-Verbose "共处理 $$total。]]></description><category></category></item><item><title><![CDATA[Linux 的时间为什么会被拨回去]]></title><link>https://blog.youkuaiyun.com/IMPYLH/article/details/169664184</link><guid>https://blog.youkuaiyun.com/IMPYLH/article/details/169664184</guid><author>IMPYLH</author><pubDate>Sun, 01 Nov 2026 03:15:36 +0800</pubDate><description><![CDATA[凌晨两点多，监控里出现一批超时告警：某个服务里所有 30 秒超时的 RPC 在同一秒内集体失败。机器没重启，进程也没重启，只是chronyd把系统时钟往回拨了 12 毫秒。对多数业务来说 12 毫秒不算什么，但对那些用“墙上时间”算超时、算租约、算间隔的代码来说，时间倒流足以让逻辑集体失灵。这篇文章聊的就是这件事：Linux 有哪几种时间，NTP 到底怎么改时间，以及哪些代码写法会在时间跳变时出问题。]]></description><category></category></item><item><title><![CDATA[Rust 的 Drop 顺序：谁先走，谁后走]]></title><link>https://blog.youkuaiyun.com/IMPYLH/article/details/169641744</link><guid>https://blog.youkuaiyun.com/IMPYLH/article/details/169641744</guid><author>IMPYLH</author><pubDate>Sat, 31 Oct 2026 11:57:20 +0800</pubDate><description><![CDATA[先看一段不会打印出done单线程、没有竞争、没有unsafe，程序却永久挂起。原因不是Mutex有问题，而是里的MutexGuard是，它的析构点在match表达式结束处，而不是读完数字的那一刻。于是第一把锁还握着，第二把锁就来了。Drop是 Rust 里最沉默的机制：写对了没人注意，写错了就是死锁、泄漏、或者“为什么文件还没关”。这篇文章把它的顺序规则拆开讲清楚。]]></description><category></category></item><item><title><![CDATA[ESM 循环依赖：为什么 import 进来的是 undefined]]></title><link>https://blog.youkuaiyun.com/IMPYLH/article/details/169573488</link><guid>https://blog.youkuaiyun.com/IMPYLH/article/details/169573488</guid><author>IMPYLH</author><pubDate>Sat, 31 Oct 2026 03:04:30 +0800</pubDate><description><![CDATA[或者更隐蔽一点：不报错，但import进来的值是undefined，函数一调用就崩。循环依赖不是“打包工具的小毛病”，而是 ES Module 的求值顺序和绑定机制共同作用的结果。理解它，比记住“不要循环依赖”更有用。]]></description><category></category></item><item><title><![CDATA[Go 的 map 被并发写时，为什么连 recover 都救不了]]></title><link>https://blog.youkuaiyun.com/IMPYLH/article/details/169546142</link><guid>https://blog.youkuaiyun.com/IMPYLH/article/details/169546142</guid><author>IMPYLH</author><pubDate>Fri, 30 Oct 2026 11:08:26 +0800</pubDate><description><![CDATA[很多人第一反应是加个recover结果进程照样退出，日志里也不会出现recovered。这不是recover写错了，而是这个错误根本不在panic体系里。]]></description><category></category></item><item><title><![CDATA[Python 缓存实战：lru_cache 的五个坑与正确用法]]></title><link>https://blog.youkuaiyun.com/IMPYLH/article/details/169238947</link><guid>https://blog.youkuaiyun.com/IMPYLH/article/details/169238947</guid><author>IMPYLH</author><pubDate>Tue, 27 Oct 2026 09:18:33 +0800</pubDate><description><![CDATA[lru_cache是 Python 标准库里最容易被随手加上的优化之一。给一个慢函数套上装饰器，命中率看起来也不错，于是代码上线。直到某天发现内存只涨不降，或者接口返回了旧数据，才回头检查这个装饰器。它确实好用，但它的行为边界比多数人以为的要窄。下面这五个坑，基本覆盖了日常使用中最容易出问题的地方。]]></description><category></category></item><item><title><![CDATA[Python 导入机制实战：改了代码为什么不生效]]></title><link>https://blog.youkuaiyun.com/IMPYLH/article/details/169238842</link><guid>https://blog.youkuaiyun.com/IMPYLH/article/details/169238842</guid><author>IMPYLH</author><pubDate>Tue, 27 Oct 2026 09:17:42 +0800</pubDate><description><![CDATA[改完一个模块里的常量，重启脚本，输出还是旧值；在 Jupyter 里调整了函数，调用结果纹丝不动；线上服务报，本地却一切正常。这些问题的根源大多不在代码逻辑，而在import背后那套缓存与路径规则。import到底做了什么，以及几类"代码明明改了却不生效"的典型场景。]]></description><category></category></item><item><title><![CDATA[告别手写遮罩层：用原生 dialog 实现弹窗]]></title><link>https://blog.youkuaiyun.com/IMPYLH/article/details/169155256</link><guid>https://blog.youkuaiyun.com/IMPYLH/article/details/169155256</guid><author>IMPYLH</author><pubDate>Mon, 26 Oct 2026 12:42:35 +0800</pubDate><description><![CDATA[弹窗几乎是每个 Web 项目都绕不开的组件。过去我们习惯用 div拼出遮罩层，再写一套 JS 管理z-index、焦点、ESC 关闭和滚动锁定。代码越写越长，边界情况却总也补不完。HTML 原生的 <dialog>元素已经可以承担大部分工作：它会自动进入顶层、隔离背景交互、限制焦点范围，并在关闭后把焦点还给触发元素。本文从一个最小示例出发，逐步补齐表单交互、遮罩点击、样式和可访问性细节。]]></description><category></category></item><item><title><![CDATA[Linux 磁盘空间突然满了怎么办：从 df 到 inode 的排查]]></title><link>https://blog.youkuaiyun.com/IMPYLH/article/details/169150747</link><guid>https://blog.youkuaiyun.com/IMPYLH/article/details/169150747</guid><author>IMPYLH</author><pubDate>Mon, 26 Oct 2026 12:41:50 +0800</pubDate><description><![CDATA[凌晨收到监控告警：根分区使用率 96%。登录服务器后 df -h显示确实快满了，但用 du扫描却找不到对应的大文件。这种“空间对不上”的情况在 Linux 上很常见，原因通常不止一种。下面按从易到难的顺序梳理一遍排查流程。]]></description><category></category></item><item><title><![CDATA[Lua 元表实战：只读表、默认值与运算符重载]]></title><link>https://blog.youkuaiyun.com/IMPYLH/article/details/169146453</link><guid>https://blog.youkuaiyun.com/IMPYLH/article/details/169146453</guid><author>IMPYLH</author><pubDate>Mon, 26 Oct 2026 10:53:29 +0800</pubDate><description><![CDATA[Lua 的表默认只有一种行为：读不存在的键返回nil，写键直接生效，两个表不能相加。元表（metatable）是 Lua 留下的扩展点，它允许我们挂上一组元方法，改变表在索引、赋值、比较、运算、调用和打印时的表现。很多人把元表当成“高级语法”，其实它更像一张钩子表：只有当默认操作需要额外信息时，Lua 才会去元表里找对应的钩子。本文示例基于 Lua 5.4，可直接保存为.lua文件后用运行。]]></description><category></category></item><item><title><![CDATA[异步 IO 入门：从阻塞到 asyncio]]></title><link>https://blog.youkuaiyun.com/IMPYLH/article/details/169146246</link><guid>https://blog.youkuaiyun.com/IMPYLH/article/details/169146246</guid><author>IMPYLH</author><pubDate>Mon, 26 Oct 2026 10:35:16 +0800</pubDate><description><![CDATA[写 Python 时，我们常遇到这样的场景：程序大部分时间都在等待网络响应、磁盘读写或数据库查询。如果每个等待都阻塞主线程，CPU 只能干瞪眼。。]]></description><category></category></item><item><title><![CDATA[Linux 系统备份与镜像]]></title><link>https://blog.youkuaiyun.com/IMPYLH/article/details/168643117</link><guid>https://blog.youkuaiyun.com/IMPYLH/article/details/168643117</guid><author>IMPYLH</author><pubDate>Wed, 21 Oct 2026 16:05:08 +0800</pubDate><description><![CDATA[Clonezilla 是一个专业的系统克隆和备份工具，支持整盘克隆、分区克隆和增量备份，适合批量部署和系统迁移。Linux 系统备份与创建镜像是一项基础但重要的运维技能。文件级备份：使用 tar、rsync、cp等工具进行灵活备份；磁盘级镜像：使用 ddpartclone、Clonezilla 创建完整系统镜像；增量备份：通过 rsync和定时任务实现高效增量备份；自动化策略：使用 cron 或 systemd 定时器实现无人值守备份；最佳实践。]]></description><category></category></item><item><title><![CDATA[Linux 磁盘管理完整指南]]></title><link>https://blog.youkuaiyun.com/IMPYLH/article/details/167997853</link><guid>https://blog.youkuaiyun.com/IMPYLH/article/details/167997853</guid><author>IMPYLH</author><pubDate>Thu, 15 Oct 2026 09:50:02 +0800</pubDate><description><![CDATA[本文系统梳理了 Linux 磁盘管理的完整流程：从查看磁盘信息、分区、格式化、挂载，到扩容与故障排查。掌握这些命令后，你就能独立完成日常的磁盘管理任务。建议在虚拟机或测试环境中多加练习，熟能生巧。]]></description><category></category></item><item><title><![CDATA[Linux 用户与权限管理：从入门到实战]]></title><link>https://blog.youkuaiyun.com/IMPYLH/article/details/167887368</link><guid>https://blog.youkuaiyun.com/IMPYLH/article/details/167887368</guid><author>IMPYLH</author><pubDate>Wed, 14 Oct 2026 09:20:12 +0800</pubDate><description><![CDATA[Linux 用户与权限管理是系统运维的必修课。本文从用户与用户组的概念出发，系统介绍了用户、组、文件权限、特殊权限以及 sudo 提权的常用命令，并通过一个多用户协作的实战案例串联了核心知识点。掌握这些内容后，你就能在日常工作中安全、高效地管理 Linux 系统的访问控制。建议在虚拟机或容器环境中多加练习，逐步形成肌肉记忆。]]></description><category></category></item></channel></rss>