这里是全站文章的归档入口,下面是按时间倒序排列的全部文章。若想按主题浏览,请从首页的专题分类进入。
「词法分析器实现」
从正则表达式到有限自动机,系统讲解词法分析器的手写与自动生成,覆盖 Thompson 构造、子集构造、DFA 状态表、最长匹配规则、跳过分隔符与错误恢复,并给出可运行的 Python 实现与避坑经验。
posts
这里是全站文章的归档入口,下面是按时间倒序排列的全部文章。若想按主题浏览,请从首页的专题分类进入。
从正则表达式到有限自动机,系统讲解词法分析器的手写与自动生成,覆盖 Thompson 构造、子集构造、DFA 状态表、最长匹配规则、跳过分隔符与错误恢复,并给出可运行的 Python 实现与避坑经验。
深入剖析 Elasticsearch 倒排索引:Term Dictionary 与 Posting List 结构、跳表与压缩算法、分析器与中文分词、索引段与近实时可见性,从底层理解检索原理。
系统讲解 HCL 配置语言:block 结构与表达式体系、字符串与集合类型、内置函数、for 表达式与 dynamic block 动态语法、条件表达式,并给出常见编写避坑与风格建议。
锯齿是光栅化把连续几何离散成像素网格的必然产物。本文从锯齿成因与采样理论讲起,系统对比几何级 MSAA、后处理级 FXAA/MLAA/SMAA、时序级 TAA 三类方案的原理、成本与画质,深入时序累积的历史缓冲、抖动与鬼影抑制,最后延伸到 DLSS/FSR 这类以超分为目标的时域重建技术,给出工程组合与选型建议。
本节讲面向切面编程在 TypeScript 里的三种实现路径:装饰器、Proxy、编译期转换,给出各自的适用边界与性能代价。随后用装饰器实现环绕通知,落地缓存、事务、重试、日志四类横切关注点;再用一个元数据驱动的校验器说明运行时类型信息的真实用法,并列出各自的坑。
本节解决标准装饰器拿不到类型信息的问题:reflect-metadata 如何为对象挂上元数据表,再拆解 emitDecoratorMetadata 发射的 design:type、design:paramtypes、design:returntype 三项与退化规则。再手写一个支持 Token 注册、递归解析与作用域的迷你依赖注入容器,并给出循环依赖、接口无法作 Token 等真实坑的解法。
本节讲 TypeScript 5.x 原生支持的标准(Stage 3)装饰器:说清它与旧版 experimentalDecorators 的语义差异,逐个拆解类、方法、访问器、字段的签名与执行顺序,重点讲 addInitializer 初始化钩子。读完你能用标准语法写不依赖第三方库的包装、注册与校验逻辑,看懂 useDefineForClassFields 等开关如何改变装饰器行为。
类型能描述数据的形状,却描述不了数据的新鲜度,这正是 SSR 与 ISR 最容易出事的地方。本节从三种渲染模式的数据流差异讲起,拆解 fetch 的缓存语义与 next 扩展类型、返回值收窄与 notFound 的 never、ISR 的 stale-while-revalidate 窗口、流式渲染与 Suspense 的边界,以及服务端与客户端缓存的新鲜度对齐。
Next.js App Router 用一份 TypeScript 同时描述服务端与客户端两种运行环境。本节讲清 params/searchParams 的异步化、Route Handlers 的入参校验、Server Actions 的 use server 约束与序列化红线、useActionState 与 revalidate 的类型,以及 middleware 的盲区。
Vue 3 的类型体验与 Vue 2 截然不同:ref 与 reactive 的自动解包、编译宏、defineProps 的双轨声明,常在 vue-tsc 下报错。本节从类型管线讲起,拆解 ref/reactive 解包规则、props/emits/model 声明、computed 与 watch 推导,以及泛型 composable 与 provide/inject 类型化。
从 AopProxy 接口与 DefaultAopProxyFactory.createAopProxy 的判定分支出发,讲清 Spring 何时用 JDK 动态代理、何时用 CGLIB,proxyTargetClass 与 spring.aop.proxy-target-class 如何改变选择,以及 CGLIB 内联进 spring-core 后两种代理的字节码差异与各自硬限制。
HikariCP 是 Spring Boot 的默认连接池,但默认值从不为生产负载而设。本节从数据库连接上限倒推 maximum-pool-size,讲清 minimum-idle、max-lifetime 与数据库 wait_timeout 的关系,给出连接泄漏检测与超时配套,并用 Actuator 的 hikaricp.connections.* 指标判断该调池还是查慢 SQL。
派生查询只能表达简单条件,复杂查询要靠 @Query。本节讲 JPQL 的语法要点与两种参数写法、@Modifying 批量更新、接口投影与类投影的取舍、nativeQuery 的适用场景与代价,以及 EntityManager、JdbcTemplate、查询超时与 JPQL 的能力边界。
深入 Redis Cluster 的 16384 槽位哈希分片、CRC16 与 hash tag、gossip 协议与集群状态、槽位迁移(MIGRATE)、扩缩容流程、集群限用命令与故障处理。
先实测本机 3.14.6 是否启用 JIT(sys._jit.is_available() 为 False),再拆开 CPython 的三层执行体系:自适应专门化字节码、Tier 2 微操作 IR 与 copy-and-patch 机器码,并梳理 3.13 引入、3.14 进入官方二进制的 JIT 演进与 tail-call 解释器。
实测运行时代码改写的三条路径:直接改 co_code / co_consts 与 CodeType.replace、用 bytecode 0.19.1 在指令层注入调用计数器,以及 3.12+ 的 sys.monitoring。含栈平衡校验边界与三条路径的开销对照(settrace 5.7 倍 vs monitoring 1.7 倍)。
深入 CPython 执行内核:栈式虚拟机的求值栈与指令编码、dis 的栈效应计算、类与推导式的代码生成、异常表机制,以及 3.11+ 自适应专门化如何在运行时把 LOAD_ATTR 改写为 LOAD_ATTR_INSTANCE_VALUE,附 3.14 字节码变化实测对照。
把抽取-转换-加载拼成一条可重跑、有依赖的数据管道:讲透幂等的三种落地手段,用标准库手写一个带拓扑排序与幂等状态的 DAG 调度器并真跑,再用 Polars 原生 Parquet 做分区落盘,最后收束成一份数据质量校验、水位线监控与可观测清单。
用同一份 50 万行真实数据实测 Polars 2.0:LazyFrame 惰性求值与查询计划、投影与谓词下推、多线程并行与流式引擎、表达式 API 与 pandas 的对照迁移,并给出同一任务的耗时对比,最后讲清什么时候该换、什么时候别换。
用 50 万行真实数据集实测 pandas 3.0 的性能陷阱:Copy-on-Write 成为默认后链式赋值的真实行为、SettingWithCopyWarning 的现状、dtype 与内存占用、apply 与向量化的耗时差距、groupby 与 merge 的坑,以及分块读取的取舍。