全部文章 (50)
C++ (13)
-
C++protobuf:基础和构建项目流程
该文章介绍了使用cmake工具安装protobuf的步骤,以及给出一个简单的使用C++ protobuf例子,并介绍如果使用cmake对proto文件进行管理和自动生成,并给出一个完整的项目配置结构和流程。
-
C++并发设计:背景基础知识-深入理解内存序
该文章主要对并发设计中涉及同步知识进行总结,包括:CPU缓存结构、缓存一致性协议MESI, CPU间是如何通信的以及产生跨CPU同步问题,使用内存屏障来解决跨CPU共享变量同步问题。
-
C++并发设计:线程池设计(二)— 代码实现
本文章通过C++并发设计:线程池设计(一)项目代码分析文章总结的线程池设计框架,以及代码设计的优秀之处,结合各个项目的优点,然后再进行整合,采用C++23标准最终实现自己的线程池代码,这里更关注设计,因此采用C++23标准可以直接使用move_only_function,而减少实现上的复杂性,兼容低版本可以自身实现move_only_func,并使用C++concepts对模板参数进行约束。
-
C++并发设计:线程池设计(一)— 项目代码分析
本篇文章通过介绍和总结当前开源的C++线程池(按照讲解顺序,依次为CTPL、thread-pool) 设计代码实现、分析单队列和多队列俩者的实现方式,以及异步执行获取结果方式 C++20 binary_semaphore和jthread新特性使用和讨论。
-
C++并发设计:notify_one 何时需要加锁
该文章主要分析对std::condition_variable中notify_one和wait的使用以及分析notify_one需要加锁和不需要加锁的俩种情况,以及虚假唤醒处理,并给出最佳实现方式。
-
C++基础:inline 关键字
介绍 C++17 inline variable,以及 inline 在头文件中定义变量和静态成员的用法。
-
C++对象生命周期专题:特殊成员函数与三/五/零法则
从对象的创建、复制、移动到销毁,梳理 C++ 特殊成员函数的隐式声明、定义、删除规则,以及三法则、五法则和零法则。
-
C++优化:编译器中的 Copy elision 和 RVO 优化
介绍复制省略、RVO 和 NRVO 的原理、适用场景以及不同 C++ 标准下的行为。
-
C++基础: filesystem 库使用
介绍 C++17 filesystem 库中路径、目录和文件类型相关的常用操作。
-
C++基础:日期与时间 chrono库介绍及使用
介绍 C++ chrono 库中的 duration、clock、time_point、calendar 及常见用法。
-
C++基础:随机数random库 介绍及应用
总结 C rand 函数、C++ random 库、随机分布和常见随机化算法的使用。
-
C++基础:CRTP概念与应用和concept
介绍 CRTP 的基本思想、常见应用,以及 C++20 concept 对模板参数的约束。
-
C++基础:RAII与智能指针
介绍 RAII 资源管理思想,以及 shared_ptr、weak_ptr 和 unique_ptr 的使用。
Linux (9)
-
磁盘:健康检查与验收
介绍磁盘 SMART 指标、自检、badblocks 坏道检测、fio 基准测试,以及一个支持并行、自动回滚的磁盘验收脚本。
-
性能分析:Linux 常用性能工具
整理 Linux 系统性能分析的常用工具:60 秒检查清单、time、gprof、perf 与火焰图、fio、iperf3,以及各工具对应的分析场景。
-
虚拟化:KVM 安装与虚拟机管理
介绍 KVM/libvirt 的安装、nmcli 桥接网络配置、virt-install 安装虚拟机、日常管理和克隆操作。
-
Git:日常操作手册
总结 Git 配置优先级、密钥与代理、子模块管理、分支操作、fetch/pull 区别以及撤销和恢复的常用命令。
-
磁盘:LVM 逻辑卷与 RAID 软阵列
介绍 LVM 的 PV/VG/PE/LV 概念与扩容流程,以及使用 mdadm 创建 RAID0 软阵列并挂载验证的完整步骤。
-
DPDK:环境搭建与网卡绑定
介绍在虚拟机中裁剪编译 DPDK、加载 igb_uio 驱动、配置大页内存、绑定网卡,以及使用 l2fwd 和 testpmd 验证。
-
内核调试:QEMU+GDB 调试 Linux 内核
使用 QEMU 运行自定义 Linux 内核,通过 GDB 远程调试 start_kernel,包含环境搭建、内核编译、busybox rootfs 制作和踩坑记录。
-
运维:SSH 免密、排障与远程构建
介绍 SSH 免密登录、常见排障(权限过宽、DNS 反向查询卡住)、多私钥管理,以及 screen 会话保持和 rsync 远程构建。
-
eBPF:环境预检与内核配置
介绍 eBPF 开发前需要开启的内核配置项,以及一个自动检查内核配置、kprobe 符号、tracepoint 和 vmlinux 的预检脚本。
datastruct & algorithm (8)
-
跳表:理论与实现
该文章描述了如今比较常用的数据结构-跳表,在leveldb、redis等项目中都能看到其身影。跳表数据结构由美国计算机科学家William Pugh 在《Skip Lists: A Probabilistic Alternative to Balanced Trees》(1990)[^1]中发表。因此理论部分主要根据这篇论文,实现为标准链表C++实现。
-
Bellman-Ford 与 SPFA:单源最短路径
介绍 Bellman-Ford 的松弛过程、路径恢复、边数限制,以及 SPFA 的队列优化和负环检测。
-
拓扑排序:DFS、BFS 与环检测
介绍有向无环图的拓扑排序,分别使用 DFS 和 Kahn 算法实现,并说明如何检测有向环。
-
最长递增子序列(LIS)与最长公共子序列(LCS)
介绍 LIS 和 LCS 的动态规划、路径恢复、复杂度优化,以及严格递增序列的二分模板。
-
摩尔投票算法:查找多数元素
介绍摩尔投票算法查找出现次数超过一半的多数元素,并比较随机抽样方法与一般众数问题的区别。
-
树状数组:原理、操作与应用
介绍树状数组的 lowbit 原理、单点修改、前缀和查询,以及使用树状数组统计逆序对。
-
字符串哈希:滚动哈希与子串比较
介绍多项式滚动哈希、前缀哈希、子串哈希的 O(1) 计算,以及哈希冲突的处理方式。
-
前缀和与差分:一维、二维模板
总结一维和二维前缀和、差分数组的定义、区间查询与区间修改模板。
Agent (5)
-
为什么学完 LangChain Agent,我还要学习 LangGraph?
以 ops-agent 为例,从 State、Node、Edge、条件路由和并行 Reducer 出发, 说明 LangChain Agent 与显式 LangGraph Workflow 的职责边界。
-
可靠 Tool 设计:让 Agent 安全调用外部能力
以 enterprise-ops-agent 为例,系统介绍 Tool Schema、执行器、错误分类、超时重试、 幂等、权限、Prompt Injection、工具白名单和审计的代码设计与测试方法。
-
给 Agent 加知识库:RAG 基础
结合企业运维 Agent 的 Runbook 实践,理解 RAG 的 Loader、Chunk、Embedding、Retriever、Citation 和评测,
-
从 LLM API 到 LangChain Agent:重新理解 Tool Calling
从原生 LLM Tool Calling 出发,理解 LangChain 的 Model、Message、Tool 和 Agent, 并通过同一个服务状态查询示例,看清手动循环如何封装为 create_agent。
-
LLM 应用基础:Prompt、RAG 与 Tool Calling
介绍 Prompt、Message、Token、Context、Structured Output、Embedding、RAG 和 Tool Calling, 并通过一个 DeepSeek 工具调用示例说明模型与应用程序如何协作。
数据库 (9)
-
MySQL 8.4 实战(四):原生分区与业务水平分表
区分 MySQL 原生分区与业务水平分表,通过 RANGE、HASH、分区裁剪、表级 MDL 和四分片路由实验分析生产选型取舍。
-
MySQL 8.4 实战(三):EXPLAIN ANALYZE 与查询优化器
建立从查询目标、统计信息、估算行数到实际迭代器的执行计划分析方法,用证据判断全表扫描、回表、排序和索引提示。
-
MySQL 8.4 实战(二):主键选择与 B+Tree 索引设计
从 InnoDB 聚簇索引和二级索引结构出发,比较递增主键、全局 64 位 ID 与随机二进制 ID,并建立面向查询的联合索引设计方法。
-
MySQL 8.4 实战(一):InnoDB 与订单表结构设计
以可扩展订单系统为例,从业务不变量和访问模式出发,推导字段类型、业务约束、关联完整性、时间、金额与索引的表结构设计方法。
-
MySQL 8.4 实战(准备篇):实验环境部署与基线
使用 Docker 部署可丢弃的 MySQL 8.4 实验实例,固定网络、数据卷、账号和关键参数,并保存可复现的运行基线。
-
MySQL 8.4 实战(零):架构、SQL 执行链路与阅读路线
用一条 SELECT 和一笔订单事务串起连接、解析、优化器、执行器、InnoDB、Buffer Pool、redo、undo 与 binlog,并给出整套系列的推荐阅读路线。
-
RTT ADG 部署方案
Active Data Guard 同城灾备部署实践:主库监听与参数调整、standby redo log、RMAN 在线复制备库、switchover/failover 切换演练及 oci 客户端替换。
-
Oracle ADG 部署方案
记录一次Oracle ADG 部署实施操作方案和流程,Active Data Guard 同城灾备部署实践:主库监听与参数调整、standby redo log、RMAN 在线复制备库、switchover/failover 切换演练及 oci 客户端替换。
-
Oracle 升级 19c 实施方案
记录一次生产环境 Oracle 11.2.0.4 升级 19c 的完整实施操作:环境准备、19c 静默安装与补丁、实例创建、数据恢复及紧急回退流程,附上线检查项与风险注意事项。
redis (2)
-
Redis底层Dict实现
该文章主要描述了Redis中最为基础的数据结构Dict的底层实现细节。在Redis中,Dict被广泛用于各种功能中,主要用于存储键值对,以实现快速的数据访问和操作,以及介绍Dict在扩容和缩容采用渐进Reshashing的方式。
-
Redis zset的应用
该文章讲解了redis zset的应用场景例子,分别给出排行榜和推荐系统的应用 实例,并给出完整的实现
tool (4)
-
qemu的使用
该文章描述了在windows11上使用qemu虚拟ARM架构平台并安装arm架构ubuntu系统的详细流程。
-
GDB 观察 C++ 对象内存布局:对齐、vptr 与虚表
使用 GDB 观察 C++ 空类、内存对齐、虚函数和虚继承对象的内存布局,并说明实验结论的 ABI 和编译器限制。
-
GDB 观察点:追踪变量的读写变化
介绍 GDB 的写观察点、读观察点和读写观察点,并说明多线程程序中的线程限定、原子变量和常见限制。
-
GDB 断点调试:文件、条件与临时断点
介绍 GDB 的编译调试信息、文件和行号断点、临时断点、条件断点,以及常用的执行和查看命令。