设备采样、索引文件和离线数据交换,常把整数紧凑地保存为字节。读取时最危险的情况,是程序没有报错,却因字节序或字段宽度理解不同,得到一组看似合理的错误值。用 Python 标准库 struct 可以明确描述布局,但可靠读取还需要一份格式约定和严格的边界校验。
Python 稳定排序实战:复合键、混合升降序与缺失值
导出成绩表时,需求常是“分数高的在前,同分按姓名排列,未评分的放最后”。一个 reverse=True 无法表达全部规则。把优先级翻译成排序键,再用稳定性处理平局,才能让结果既符合业务,也便于验证。
密码存储不是加密:盐、慢哈希与渐进迁移

数据库泄露后,真正决定损失范围的不是密码表有没有改名,而是攻击者能否低成本地离线猜测。密码既不该明文保存,也不该用可解密的方式保存;更可靠的做法是为每个密码生成独立随机盐,再交给专门的慢哈希算法处理,只保存验证所需的参数与结果。
Python 属性访问为何会绕路:描述符协议、查找顺序与可复用校验

看似普通的 obj.name,背后不一定只是从字典里取值。property、实例方法、ORM 字段和许多校验框架都借助描述符协议介入属性访问。理解这条查找链,能解释“实例里明明有同名属性,为何读到的却是另一个值”,也能帮助我们写出可复用、行为明确的字段组件。
TCP 半关闭不是断线:FIN、RST 与应用层优雅收尾

调用方发完请求后,既想告诉服务端“我不会再发送”,又要继续接收剩余响应。直接关闭 Socket 会把两个方向一起交给内核处理,无法清楚表达这种意图。TCP 半关闭提供了更精确的语义:关闭一侧的发送方向,同时保留接收方向,让协议能够有序收尾。
用 Web Locks API 协调多个标签页:从互斥操作到选主

同一个站点打开多个标签页后,自动保存、刷新令牌、清理本地缓存等任务可能同时运行。给每个标签页加一个 setInterval 并不能解决竞态:它们共享存储,却各自拥有定时器。Web Locks API 提供了一个浏览器原生的命名锁,让同源标签页围绕同一个资源排队,适合处理“同一时刻只能有一个页面执行”的本地协作问题。
Service Worker 缓存更新别靠运气:版本、激活与回滚边界

Service Worker 让网页拥有离线能力,也带来一种很特别的故障:服务器已经发布了新代码,用户却一直运行旧页面。原因通常不是 CDN 没刷新,而是旧的 Service Worker 仍然控制着页面,或者新 Worker 激活后还保留着旧缓存。把缓存当成“下载文件夹”很容易失控;更稳妥的做法是把它当成有版本、有生命周期、可回滚的数据副本。
别让服务器替攻击者探路:SSRF 防护与出站访问控制

“填写图片 URL 生成缩略图”“输入回调地址测试 Webhook”都是常见功能。危险之处在于,真正发起请求的是位于可信网络里的服务器:攻击者只要控制目标地址,就可能借它访问云元数据、管理后台或只监听内网的服务。这类问题称为服务端请求伪造(SSRF),防线不能只靠一条 URL 正则。
用 Python bisect 查区间:重复值边界、排序前提与插入成本

离线分析接口延迟时,常要统计“耗时至少 20 毫秒、但不足 50 毫秒”的请求数。如果数据已经排序,每次遍历全部样本就浪费了这个前提。Python 标准库的 bisect 可以找到区间两端;真正容易出错的地方,是重复值落在哪一侧,以及插入数据后的成本。
Python dataclass 设计指南:默认值、frozen、slots 与序列化边界

在 Python 项目里,配置项、消息、数据库记录经常先用字典传递,后来才发现默认值散落、字段拼写无人检查、调试输出也不稳定。dataclasses 提供了一条轻量的建模路径:用类型注解描述字段,让构造、比较和调试代码自动生成,同时把可变性和内存布局这些取舍显式化。