文章
这里收录了我发布的全部文章。
-
C++ STL:迭代器如何解耦算法与容器
STL 的灵魂是 Alexander Stepanov 的泛型编程思想:算法只依赖迭代器,容器只提供 begin/end——N 个算法 × M 个容器从需要 N×M 份代码变成 N+M 份。vector 扩容用 moveifnoexcept 保证强异常安全,std::sort 用 introsort 保证最坏 O(n log n),unorderedmap 因 ABI 包袱锁死为链地址法(比 absl::flathash_map 慢 2-3 倍)——这些实现选择背后都有性能与兼容性的深层权衡。
-
Go Redis:go-redis/v9 的连接池、Pipeline 与 Hook
github.com/redis/go-redis/v9 是 Redis 官方维护的 Go 客户端(截止 2026-04 最新 v9.18.0),提供类型安全的命令接口、channel-based 连接池、Pipeline/Transaction 批处理、Pub/Sub、Lua 脚本、Hook 中间件链、以及对 Standalone/Cluster/Sentinel/Ring 四种部署模式的统一抽象。掌握它的连接池调优、Pipeline 正确使用、redis.Nil 错误处理和 Context 超时行为是生产可靠性的关键。
-
Go PostgreSQL:pgx 的架构设计与生产实践
github.com/jackc/pgx/v5 是纯 Go 实现的 PostgreSQL 驱动和工具集。它直接实现 PostgreSQL 线协议(不依赖 libpq),提供原生 API 和 database/sql 兼容层双模式,内置连接池(pgxpool)、自动 prepared statement 缓存、COPY 批量导入、LISTEN/NOTIFY、70+ 类型映射。相比 lib/pq,pgx 更快、功能更全、维护更活跃,是 2026 年 Go + PostgreSQL 的唯一正解。
-
C++ 协程:语言机制、陷阱与实现边界
C++20 协程的本质是编译器把带 coawait/coyield/coreturn 的函数重写成状态机,把跨 suspend 存活的变量打包到一个堆上的 frame——这是语言级 stackless 协程,不是 Goroutine 式 stackful。标准库只给了 coroutinehandle / suspendalways / suspendnever 这几块地基,不给 Task<T>、不给 Generator(C++23 才加)、不给 executor、不给调度器。要在网络服务器里用,必须自己实现 Task<T>(严格遵守 symmetric transfer 否则链式 coawait 直接栈溢出)+ IoUringAwaiter(绑定到 reactor)。三大杀手级陷阱:协程参数必须按值传(引用参数跨 suspend 必悬挂)、finalsuspend 必须 suspend_always(否则 double-free)、热路径不能依赖 HALO,需要自定义 operator new。