SQLite 递归 CTE 遍历层级:把访问路径带上,显式挡住循环 层级数据也可能混进一条回头边分类菜单看起来是一棵树,但导入数据时可能把某个子分类重新指向祖先。递归查询若只不断连接下一层,就会在环里重复行。另一个容易误判的情况是共享分类:两个上级都引用同一节点,这并不等于循环。要保... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Python contextmanager:资源清理完成了,异常为什么还应该传出去 把资源状态和业务结果分开验收导入报表时,第二行金额格式错误,读取流已经关闭,任务是否可以显示成功?当然不能。资源是否释放与数据是否处理完成,是两项独立结果。把关闭动作封装成上下文管理器后,最容易漏掉的是后半项:为了记... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
TCP 消息分帧实战:用 Python 长度前缀解析器处理拆包与合并读取 客户端发送两条消息,服务端一次 recv 收到一条半,通常是应用对 TCP 的边界作了错误假设。TCP 提供有序字节流,应用必须自己定义消息结束的位置。把一次 send 对应到一次 recv,在本机测试中偶尔成立,也... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读
Python UTF-8 分块解码:字符跨过读取边界时,怎样保留未完成字节 读取日志流时,英文测试完全正常,换成中文就偶发 UnicodeDecodeError,常见原因是把每次收到的字节块直接解码。读取边界由缓冲区决定,未必落在字符边界上。某一块末尾只含一个字符的前半段,并不能直接说明原数... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读
Python SHA-256 文件校验:算对摘要之后,还要确认校验值从哪里来 下载文件后算出一串 SHA-256,只完成了测量。真正有用的下一步,是拿它与一个明确来源的预期值比较。若预期值也是从刚下载的文件重新算出来,两边当然一致,却没有回答“这是不是我要的那个发布包”。开始之前,先写清版本、... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读
Promise.allSettled 实战:部分任务失败后,怎样保留结果与对应关系 商品页同时读取用户资料、库存和推荐列表时,某个辅助模块失败,页面仍可能展示其他内容。此时需要一份完整清单:哪些成功,哪些失败,每项属于谁。只在最外层捕获一次异常,通常无法直接得到这份清单。先明确页面允许哪些部分降级,... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读
Bash getopts:选项解析、剩余位置参数和两种错误要分开 先写清命令行允许什么顺序准备一个处理文件的小工具:-v 开启详细输出,-n 指定处理次数,其余参数是文件名。实现前先确定调用约定:选项放前面,文件放后面;文件名可能包含空格,也可能以横线开头。这个约定直接决定哪些输入... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Git diff --check:提交前分别检查工作区与暂存区空白错误 文件改干净了,为什么提交里还有空格编辑器显示的文件内容和下一次提交准备采用的内容可能不同。一个常见过程是先暂存,再删掉行尾空格,最后直接提交。编辑器里确实已经修好,但暂存区仍保留旧版本。排查时若只检查当前磁盘文件,就... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
SQLite SAVEPOINT:局部失败怎样回滚,RELEASE 什么时候才提交 把一批工作划出可撤回的局部导入一份清单时,前半段已经通过检查,后半段可能包含重复编号。若业务允许跳过这一小段,就需要撤销这段已经成功写入的记录,同时保留前面的工作。只捕获报错不够:报错之前成功执行的语句,仍可能留在当... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Python groupby 分组实战:相邻片段和全局汇总是两种问题 先用一条交错记录确定需求假设流水按到达顺序记录为 A 收到两件、A 收到三件、B 收到七件、A 又收到五件。运营想看每段连续处理量,财务想看每位客户的总量。输入完全相同,答案却不同:前者有三段,后者只有两个客户。选工... yunqueblog/ 技术教程/ 2026-10-01/ 6 阅读