C++ 日志与结构化可观测性:spdlog 与异步日志
日志既是排障的第一现场,也是性能的隐形杀手。本文拆解 spdlog 的 logger/sink/formatter 架构,讲清同步与异步日志的队列模型与丢日志边界,演示结构化 JSON 日志与字段设计,并给出编译期级别裁剪、backtrace 环形缓冲与 OpenTelemetry 集成的落地方案。
tag
日志既是排障的第一现场,也是性能的隐形杀手。本文拆解 spdlog 的 logger/sink/formatter 架构,讲清同步与异步日志的队列模型与丢日志边界,演示结构化 JSON 日志与字段设计,并给出编译期级别裁剪、backtrace 环形缓冲与 OpenTelemetry 集成的落地方案。
文件 IO 看似简单,性能与可移植性却常被低估。本文从 std::filesystem 的 path 与目录遍历讲起,对比 fstream、POSIX read/write 与 mmap 三层的开销差异,剖析缓冲、系统调用次数与页缓存的关系,并给出内存映射的适用边界与常见陷阱。
时间处理是分布式系统里最容易出错的一环。本文梳理 std::chrono 的时钟、时长与 C++20 日历类型,讲清 system_clock 与 steady_clock 的分工、duration_cast 的溢出陷阱,并用 zoned_time、locate_zone 演示时区换算与夏令时边界,最后给出格式化与解析的落地方案。
大型 C++ 项目的编译时间常以小时计,大部分浪费在重复解析头文件上。本文从 -ftime-report 与 -ftime-trace 度量入手,讲解 IWYU 头文件治理、PCH、C++20 Modules 与 Unity Build,再谈 ccache 与 lld/mold。
C++ 没有标准化 ABI,同一份源码在不同编译器与标准库版本下常无法互相链接。本文实测 Itanium 与 MSVC 的名字修饰差异,剖析虚表布局与标准库类型跨边界传递的风险,给出 PIMPL、纯虚接口与 extern C 工厂方案,并讲解 soname 与 ABI 检查工具。
本文系统讲解目标检测与 YOLO 系列的工程落地,回答 anchor 与 anchor-free 怎么选、NMS 与置信度阈值怎么调、mAP 指标怎么读等实战问题。覆盖两阶段与单阶段范式、IoU 与 CIoU 损失、NMS 与 Soft-NMS、PR 曲线与 mAP@0.5:0.95,并给出 YOLOv8 推理与手写 NMS 两段可运行代码,附模型对比表、权衡与常见坑。
本文梳理计算机视觉的任务全景与端到端工程链路,回答从需求到上线该选什么任务、用什么指标、按什么顺序搭管线。覆盖分类、检测、分割、姿态、检索、OCR、跟踪等任务的输入输出与评估指标(Top-1、mAP、mIoU、PCK、FPS),并给出数据采集、标注、训练、导出 ONNX、服务化、监控回流的完整流程与两个可运行的 torchvision 示例,最后总结选型权衡与常见坑。
本导航整理 content/posts/golang/plumego 下的 9 篇文章,围绕 Plumego 这个强调显式、可读性与长期演进的 Go 服务框架展开:从为什么还要再做一个框架、与 Gin/Echo 等主流框架的设计取舍对比,到最小可运行示例、文档信息架构、公开路线图,再到 Best Practices 与两个用户中心的完整业务示例,最后明确回答「什么时候不该使用 Plumego」。适合正在为中小型 Go 服务选型、或想理解极简框架设计哲学的读者按顺序阅读。
本导航把 content/posts/golang/tutors 下的 151 篇文章按主题重新归类,覆盖 Go 1.18 到 1.22 的版本特性演进、语法与值语义、错误处理与结构化日志、并发与 context、HTTP 服务与客户端、认证安全、数据处理与文件 IO、模板与静态资源、数据库与缓存、测试与质量、性能与可观测性、工程结构与依赖管理、构建配置与时间处理十四个方向。每篇都给出真实 slug 与一句话核心内容,适合已经能写 Go 但想系统补齐进阶知识的开发者当作主题字典按需查阅。
系统覆盖 TypeScript 大版本升级的完整工程实践:升级的收益与风险、官方 breaking changes 清单的分类解读、升级前的基线准备(严格模式/依赖矩阵/类型错误清单)、自动化迁移工具链(npx typescript-tslint 检查/ts-migrate/类型修复脚本)、渐进式升级策略(分模块灰度/按错误码收敛)、Monorepo 多包协同升级、以及升级后的回归验证,帮助团队把版本升级从「事故高发操作」变成「可计划、可回滚、可验证」的工程流程。
系统覆盖 TypeScript 下的 Type-First(类型驱动)开发方法论:先定义类型契约再实现逻辑的开发流程、以类型为接口文档与测试前驱、编译期反馈循环(写类型→实现→编译通过=契约达成)、类型与单元测试的联动分工、类型即文档与团队协作、以及类型驱动的重构安全网,帮助团队建立「类型先行、编译器当测试」的工程文化。
Flakes 已成为 Nix 生态的事实标准,但「能用」和「用得对」是两回事。本文从企业工程视角总结 inputs/outputs 组织、flake.lock 锁文件治理、多文件模块化拆分、模板复用与 monorepo 级 flake 布局,附带可直接落地的目录骨架与代码。
C++ 作为一门兼具高性能与复杂性的系统级语言,工程化实践直接关系到代码的可维护性、健壮性和团队协作效率。本文从代码规范、静态分析、单元测试、覆盖率、包管理和 CI/CD 六个维度,梳理现代 C++ 项目的工程实践体系。
本文用小型 Web 服务示例讲解 Go 项目结构、cmd、internal、handler、service、store 和配置目录的取舍,帮助初学者避免过度设计。