这里是全站文章的归档入口,下面是按时间倒序排列的全部文章。若想按主题浏览,请从首页的专题分类进入。
「测试框架与 Terratest」
系统讲解 Terraform 基础设施代码的测试体系:terraform test 原生测试框架与断言写法、Terratest 与 Go 集成测试、单元与集成测试的边界划分、plan 断言、资源清理与成本控制,以及 CI 中的分层测试策略。
posts
这里是全站文章的归档入口,下面是按时间倒序排列的全部文章。若想按主题浏览,请从首页的专题分类进入。
系统讲解 Terraform 基础设施代码的测试体系:terraform test 原生测试框架与断言写法、Terratest 与 Go 集成测试、单元与集成测试的边界划分、plan 断言、资源清理与成本控制,以及 CI 中的分层测试策略。
从树遍历求值出发,讲解手写 AST 解释器的完整实现:环境与词法作用域、闭包与递归、引用与值的语义、求值顺序与短路求值、控制流的树形编码,并对比字节码解释器的取舍,附带可运行的 Python 求值器示例。
从活跃性分析出发,讲解寄存器分配的核心算法:冲突图构建、图着色与溢出处理、线性扫描分配,并延伸到 SSA 解构、伪寄存器到物理寄存器的映射,以及 LLVM 与 HotSpot 中的工程取舍,附带可运行的 Python 实现。
扩展篇之十三:公会与战队系统。设计了公会创建与加入、成员角色与权限、公会战与排名、战队组队匹配、社交激励,帮助联机游戏把「路人局」升级为「有归属感的战队生态」。
深入讲解 Painless 脚本语言与 Ingest 管道:脚本上下文与 API、字段转换与条件处理、管道处理器编排、日期解析与数据清洗,以及脚本性能与安全的取舍。
用 Terraform 落地一套真实可用的 Azure 基础设施:资源组与 VNet 组合编排、VM 与托管磁盘、AKS 集群、RBAC 最小权限与成本治理,并给出常见 Azure 排障清单。
用 Terraform 落地一套真实可用的 AWS 基础设施:VPC/EC2/安全组组合编排、S3 与 CloudFront 静态托管、RDS 与自动备份、IAM 最小权限设计,并给出常见 AWS 排障与治理清单。
本节聚焦语法树的读取与生成。先看清 Node、NodeArray 与 Token 的结构差别,再用 ts.createPrinter 把改写后的树打回源码文本;接着从零构造 import、接口与类型别名,写出一个小型代码生成器,把 JSON 结构变成 .ts 文件,并解决注释丢失、格式被重排、产物幂等这三类工程问题。
本节动手写一个真正的 transformer。先讲清 TransformerFactory 的两级签名与 before/after 挂载点的差别,再用 ts.factory 在遍历中改写节点:剥离 console 调用、注入编译期常量、重命名函数。最后讲节点被改坏、parent 指针失效、类型节点在 after 里消失这三类高频坑的成因与处理。
本节把 tsc 拆成一个可编程的库。先用 ts.createSourceFile 做单文件语法解析,再用 ts.createProgram 加载整个项目,随后用 forEachChild 遍历语法树、用 TypeChecker 查询每个节点的推导类型,最后把结构化诊断渲染成可读报错。读完你能写出统计项目导出符号并打印类型的小脚本。
字段能增删、能嵌套、能按另一个字段的值条件出现,是表单真正开始变复杂的三个信号。本节用 useFieldArray 处理动态行,讲清 key 为什么必须用 RHF 生成的 id 而非数组下标;再用判别联合 schema 表达条件字段、用 superRefine 做跨行校验。同时实测数组级错误与行级错误在 errors 树上的不同落点,并给出分步表单的 trigger 校验与草稿持久化方案。
Zod 的 transform 与 default 会让 schema 的输入与输出变成两副面孔,表单类型也跟着分叉。本节用实测结果讲清 z.input、z.output 与 z.infer 的关系,给出 useForm 三段泛型的正确写法,并解释写错时编译器报出的 Resolver 不兼容信息。随后把 ZodError 映射成 RHF 的 FieldErrors,覆盖嵌套路径与服务端错误回填。
受控表单在大表单下会因每次按键重渲染整棵树而变慢。本节从这一性能问题切入,讲清 React Hook Form 的非受控与订阅式模型为何更快,再用 zodResolver 把 Zod schema 变成表单唯一的规则与类型来源,让字段名、错误结构与提交类型自动对齐。你会掌握 register、handleSubmit、formState 的用法与 Controller 的接入时机。
把一次请求进入 DispatcherServlet.doDispatch() 后的调用链逐段拆开:getHandler 如何遍历 HandlerMapping、HandlerAdapter 为什么要多一层适配、HandlerExecutionChain 怎么挂上拦截器、返回值如何经 HandlerMethodReturnValueHandler 落地,并标出 4.x 模块化后的新包路径。
讲清 @Transactional 的边界为什么该画在 Service 而不是 Controller 或 Repository,自调用与 private 方法失效的代理原理,只读事务与超时的真实作用,事务内做远程调用的危害,TransactionTemplate 的适用场景,以及 REQUIRES_NEW 与 NESTED 在 JPA 下的语义差异。
列表接口几乎都要分页。本节讲清 Pageable、Page、Slice、Sort 四者的关系,贴真实 SQL 展示分页背后的 count 与数据两条语句,说明为什么不该直接暴露 Page 的 JSON、排序字段为何要白名单校验,并给出深分页的性能问题与 keyset 分页思路。
本节用标准库 tracemalloc 做快照对比,把一次真实泄漏定位到具体行:两次各 500 个事件后,泄漏行的分配增量是 +527.9 KiB、+500 次分配;再用 objgraph 的 show_growth 与 find_backref_chain 画出 module→globals→_REGISTRY→Session 的引用链,并说明本机无 graphviz 时只能用文本 API。
本节用 sys.getsizeof 逐类实测 int/str/list/dict/tuple 与自定义实例的字节数,讲清 PyObject 头 16 字节、PyVarObject 与容器指针数组的布局,并给出一个反直觉结论:__slots__ 实例本体反而比 __dict__ 实例更大,省下的是整块 __dict__;再用 100 万实例实测 92.0MB 对 53.8MB 的真实差距。
本节拆开 CPython 的引用计数与循环 GC:用 sys.getrefcount 实测引用数随赋值、入容器、传参的增减,看清循环引用为何让 refcount 归零失败;再用 gc 模块实测三代阈值 (2000,10,10)、各代 collect 的回收数、__del__ 与 gc.garbage 的边界,并给出关闭 GC 后循环垃圾堆积的真实 RSS 数字。
把采集从「能跑」做到「能长期跑」:用 urllib.robotparser 实测解析 robots.txt,真跑令牌桶限速器与指数退避重试,用 JSONL 做断点续采,最后收束成一页合规边界清单——只抓公开数据、尊重 robots 与 ToS、控制频率、不绕过反爬。