- 博客(22)
- 收藏
- 关注
原创 Linux多线程同步:mutex与condition variable深度理解(附生产者消费者实现)
本文深入讲解Linux多线程同步的两大核心机制:mutex与condition variable。从竞态条件的本质出发,阐明mutex保证数据安全、cond控制线程等待与唤醒,并重点剖析pthread_cond_wait的内部机制及必须配合mutex的原因。提供pthread和C++11标准库双版本的生产者消费者完整实现(环形缓冲区、两个条件变量),对比展示底层C API与现代RAII写法的差异。最后总结虚假唤醒、死锁等常见问题。适合需要系统掌握多线程同步的C/C++开发者。
2026-04-16 15:44:15
407
原创 C++ 左值 / 右值 / 移动语义 / 完美转发详解
本文系统梳理C++11引入的移动语义与完美转发机制。从左值/右值的基础概念出发,深入讲解左值引用与右值引用的区别、移动构造函数的设计、std::move的本质(仅类型转换,不真正移动)、vector扩容中的性能收益,以及完美转发如何通过万能引用与std::forward保持参数原始属性。附引用折叠规则表格与完整关系图,帮助开发者掌握现代C++高效编程的核心技术。
2026-04-01 15:55:30
542
原创 基于 C++ 的第三方 SDK 封装实践(ASR + 短信服务)
本文以百度语音识别(ASR)和阿里云短信服务(DMS)为例,系统讲解C++项目中第三方SDK的封装实践。从RAII资源管理、接口收敛、错误处理集中化等角度,设计ASRClient和DMSClient两个封装类,将复杂的SDK调用简化为recognize()和send()等语义清晰的接口。文章总结了封装带来的价值:降低耦合、提升可维护性、便于扩展,并提供可复用的设计模板。
2026-04-01 15:51:24
416
原创 使用 C++ 理解 AMQP 消息传输机制与 TCP 底层封装
本文深入剖析AMQP-CPP库的消息传输机制,从TCP底层出发,逐层讲解事件循环(libev)、Handler桥梁、TcpConnection套接字封装、Channel信道复用,以及消息从发布到接收的完整流动路径。通过ASCII示意图和对比表格,清晰揭示AMQP-CPP如何将复杂的网络细节封装,让开发者只需关注onMessage回调。适合希望理解消息队列底层原理的C++开发者。
2026-03-27 14:44:31
336
原创 使用 ODB 连接 MySQL:C++ 类、ODB 和数据库的关系解析
本文通过一个完整的学生管理系统示例,系统讲解ODB连接MySQL的完整流程。从C++类的#pragma db object映射定义,到ODB的事务管理和连接池配置,再到#pragma db view实现多表联查与字段筛选,最后演示增删改查的具体操作。清晰揭示C++类、ODB、MySQL三者的角色关系,帮助开发者快速上手ODB,享受ORM带来的开发效率提升。
2026-03-26 14:05:36
362
原创 深入理解 Linux 进程:环境变量、fork 与 exec
本文深入讲解Linux进程管理的核心机制:fork与exec。从进程的基本概念出发,用示意图清晰展示fork如何复制父进程的内存和环境变量,exec如何替换子进程内存并执行新程序,最终以执行ls命令为例串联完整流程。同时梳理环境变量在父子进程间的继承关系,解释export、source、~/.bashrc的作用与区别。帮助开发者理解shell命令执行、程序启动的底层原理,为调试程序、管理多进程任务打下坚实基础。
2026-03-25 13:14:45
400
原创 Linux 环境变量、进程继承与编译实践的底层解析
本文从Linux内核数据结构出发,深入解析环境变量在进程间的继承机制。通过fork与exec的底层原理,阐明export与source的本质区别(子进程继承 vs 当前进程修改)。结合C++编译实践,系统梳理CPLUS_INCLUDE_PATH、LIBRARY_PATH、LD_LIBRARY_PATH在编译、链接、运行阶段的作用,并演示Makefile如何利用环境变量简化配置。帮助开发者彻底理解环境变量与进程关系,避免“找不到头文件/库”的常见问题。
2026-03-25 13:11:55
367
原创 ODB 预处理指令深度解析与多表查询示例
本文系统讲解ODB框架中#pragma db预处理指令的核心用法,涵盖从单表映射(object、id、column等)到多表联查(view)的完整场景。通过学生-班级示例,演示如何用object(JoinClass alias : 条件)模拟SQL JOIN,用query((?))实现动态条件占位,并介绍了自定义SQL查询的query("..." + (?))语法。帮助C++开发者快速掌握ODB的ORM映射与复杂查询构建。
2026-03-23 18:49:21
251
原创 Qt 入门:信号与槽机制详解
本文系统讲解Qt核心机制——信号与槽。从connect函数的基础用法切入,对比Qt5新旧写法,详解自定义槽函数、Qt Designer自动连接原理、自定义信号设计、参数传递规则,并深入阐释其解耦设计与多对多连接的思想。涵盖disconnect断开连接、lambda表达式等进阶用法,帮助开发者真正理解并灵活运用这一GUI编程基石。
2026-03-11 09:15:32
564
原创 NAT、内网访问公网与 UDP/TCP 穿透原理
:本文深入解析NAT工作原理与UDP/TCP穿透机制。从内网访问公网的映射建立时机切入,通过ASCII拓扑图和对比表格,清晰阐释UDP穿透(Hole Punching)的实现原理及TCP穿透困难的根本原因(连接状态机限制)。涵盖端口映射、双重NAT(CGNAT)的现实影响及Linux查看工具,为网络编程、P2P、WebRTC等应用开发提供底层认知。
2026-03-11 08:37:48
441
1
原创 Redis为什么这么快:IO模型、epoll与工程实践
本文系统梳理Redis核心知识体系,从“为什么快”的底层原理(内存存储、高效数据结构、epoll IO多路复用)出发,用钓鱼类比生动讲解五种IO模型,深入解析单线程设计哲学。涵盖基本命令、过期机制、Key设计规范等基础内容,并重点剖析工程实践中必须掌握的缓存三大问题(穿透、击穿、雪崩)及缓存与数据库一致性方案。帮助读者建立从原理到实践的完整Redis认知框架。
2026-03-05 23:30:28
411
原创 从单机到分布式:Redis 在系统演进中的角色
分布式系统是如何一步步演化而来的?Redis在其中扮演什么角色?本文沿着“单机→应用/DB分离→负载均衡→读写分离→缓存→分库分表→微服务”的演进路径,解析每一步的设计思想和解决的核心问题。最终揭示Redis的真正价值:不仅是缓存,更是分布式系统中的共享状态中心。
2026-03-03 08:59:27
985
原创 Elasticsearch 在 IM 项目中的工程化实践笔记
本文从实战角度记录Elasticsearch核心使用经验。针对小内存服务器部署,详细说明JVM内存调优策略;解析索引、映射、DSL查询等核心概念,通过用户搜索场景实例演示Mapping设计、批量写入及复杂bool查询构建;并深入剖析C++客户端的工程封装机制。最终形成清晰认知:ES是搜索引擎而非数据库,在IM等项目中与MySQL分工协作,分别负责搜索体验与数据一致性
2026-02-06 22:10:34
378
原创 Protobuf C++ 快速上手:从 `.proto` 到序列化完整跑通
本文是Protocol Buffers入门实践指南,针对JSON序列化的性能瓶颈,带你快速跑通Protobuf最小工作闭环。从编写.proto结构描述文件,到使用protoc生成C++代码,再到调用SerializeToString()和ParseFromString()完成二进制序列化与反序列化,全程无需手写编码逻辑。通过完整可运行的示例,直观感受Protobuf高效紧凑的二进制序列化特性,为后续深入学习打下坚实基础。
2026-01-25 22:05:08
605
原创 etcd 服务注册与发现封装实践
本文是ETCD系列实战第二篇,聚焦于工程封装。在理解基础API(Put/Get/Watch/Lease)后,我们设计了两个核心类:Registry(服务注册)与Discovery(服务发现),将ETCD的租约机制和监听功能封装为可直接用于微服务的模块。文章提供了完整的类定义、带日志和配置管理(gflags)的示例程序,并分享了get()与ls()区别等关键踩坑经验,帮助你将ETCD从“会用”升级到“工程复用”。
2026-01-21 22:12:50
614
原创 ETCD 学习笔记 —— 分布式键值存储与服务发现初体验
想实现服务自动注册与发现?ETCD的租约机制和实时监听正是答案。本文从零开始,带你理清ETCD服务端、C++客户端及一堆依赖库的关系,通过两个完整的C++示例,直观演示数据如何“付房租”保活、到期自动清理,以及变更如何被实时感知。快速掌握分布式系统核心组件。
2026-01-19 20:19:20
611
原创 C++ 小工具实践:gflags & gtest 学习笔记
本文系统介绍了Google开源的两个C++开发利器:gflags和gtest。gflags用于优雅管理程序命令行参数,支持动态配置服务IP、端口等运行时参数,避免硬编码;gtest提供完善的单元测试框架,包含EXPECT和ASSERT两类断言机制。通过实际代码演示了两者的安装、配置和使用方法,帮助开发者在后台项目中快速搭建健壮的开发环境。
2026-01-01 11:10:38
424
原创 Qt 入门实战(三):对象树与控件生命周期
在Qt里疯狂new控件却从不delete,真的不会内存泄漏吗?栈对象和堆对象到底该用哪个?本文通过图解对象树、对比生命周期,并设计一个可运行的实验,带你亲眼目睹Qt对象树自动释放内存的全过程,从根本上解除你对Qt内存管理的困惑。
2025-12-15 11:48:14
444
原创 Qt 入门实战(二):HelloWorld 的两种方式与控件内存管理
本文以“HelloWorld”为例,深度对比了Qt界面开发的两种核心方式:Qt Designer可视化拖拽与纯C++代码编写。不仅展示了如何显示文本,更深入剖析了.ui文件的XML本质、ui_widget.h的自动生成机制、控件为何必须堆分配、QString的设计初衷,以及Qt对象树如何自动管理内存。帮你从第一个程序开始,就建立正确、地道的Qt开发思维。
2025-12-15 10:30:30
978
原创 Qt 学习笔记:从环境搭建到工程构建的完整流程
本文系统梳理了从零开始学习Qt框架的核心脉络。从环境搭建入手,深入解析了Qt程序入口 main 函数的各组成部分(QApplication、事件循环、exec()),剖析了核心控件 QWidget 的构成与对象树机制,揭示了 .ui 文件的XML本质及Qt Designer的工作原理,并完整阐释了由 .pro 工程文件驱动的Qt项目构建链路。适合Qt初学者建立清晰的知识框架,也可作为速查手册。
2025-12-09 15:08:14
670
原创 动态规划进阶:子序列问题与回文串问题
本文系统总结了动态规划的经典题型及解题思路,提出通用的“动规五部曲”方法,帮助读者掌握子序列和回文串问题的解决策略。内容涵盖最长递增子序列(包括O(N²)与O(N log N)解法)、等差子序列计数、区间DP求解回文子串与回文子序列等典型问题。重点解析二维状态定义与填表顺序的规律,旨在帮助读者快速理解状态转移本质,实现从基础到进阶的动态规划能力提升。
2025-11-27 13:18:07
1033
原创 动态规划学习笔记:最全思路+例题讲解
动态规划入门难?本文用“三步问题→打家劫舍→股票买卖”三道题,详解DP五步思维法,帮你从状态定义到转移方程系统掌握动规核心,告别盲目刷题。
2025-11-17 00:51:38
869
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅