[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fmoaboinTnBa0YETjPhnk6pdf3CgXL0dd6mJuLjCe-9c":3},[4,15,23,31,37,47,56,66,73,81,87,93,100,107,114,121],{"slug":5,"title":6,"description":7,"pub_date":8,"tags":9,"draft":14},"cpp-random-design-patterns","C++ 设计模式实战：RAII、观察者、工厂","用现代 C++（C++17\u002F20）实现三种高频设计模式：RAII 资源管理、观察者模式事件系统、工厂模式插件架构。每种模式给出问题场景、实现代码和真实工程案例。","2026-05-01",[10,11,12,13],"cpp","设计模式","c++17","工程",false,{"slug":16,"title":17,"description":18,"pub_date":8,"tags":19,"draft":14},"data-structures-fundamentals","数据结构基础：从数组到红黑树","系统梳理常用数据结构的核心原理、时间复杂度和适用场景。数组、链表、栈、队列、哈希表、二叉树、堆、图，每种结构附实现要点和 C++ 代码片段。",[20,21,10,22],"数据结构","算法","基础",{"slug":24,"title":25,"description":26,"pub_date":27,"tags":28,"draft":14},"algorithm-binary-search","二分查找：永远写不对？记住这个模板","彻底搞清楚二分查找的边界问题：闭区间和左闭右开两套模板、三道经典 LeetCode 题目完整 C++ 实现，以及二分答案的进阶思路。","2026-04-30",[21,29,30,10],"二分查找","leetcode",{"slug":32,"title":33,"description":34,"pub_date":27,"tags":35,"draft":14},"algorithm-sliding-window","滑动窗口算法：从暴力到 O(n) 的思维跃迁","系统讲解滑动窗口算法的核心模板、适用题型，配合三道经典 LeetCode 题目的完整 C++ 实现，彻底理解双指针收缩思路。",[21,36,30,10],"滑动窗口",{"slug":38,"title":39,"description":40,"pub_date":41,"tags":42,"draft":14},"hid-hotplug","HID 设备热插拔检测：从 udev 到 node-hid","在 Linux 上用 node-hid + usb 库实现可靠的 USB HID 设备热插拔检测，踩坑记录","2026-04-28",[10,43,44,45,46],"hid","linux","nodejs","electron",{"slug":48,"title":49,"description":50,"pub_date":51,"tags":52,"draft":14},"cef-lnk2038-iterator-debug-level","CEF LNK2038：解决 _ITERATOR_DEBUG_LEVEL 不匹配错误","分析 CEF（Chromium Embedded Framework）集成时出现的 LNK2038 _ITERATOR_DEBUG_LEVEL 链接错误，从根本原因到解决方案的完整指南。","2024-05-07",[10,53,54,55],"CEF","Visual Studio","链接错误",{"slug":57,"title":58,"description":59,"pub_date":60,"tags":61,"draft":14},"csharp-sendmessage-cpp","C# 通过 SendMessage 向 C++ 窗口发送消息与字符串","使用 P\u002FInvoke 调用 user32.dll 的 SendMessage，从 C# 发送自定义 WM_USER 消息及字符串指针给 C++ 原生窗口，并在 C++ 侧正确接收和转换。","2023-06-09",[62,10,63,64,65],"C#","windows","互操作","PInvoke",{"slug":67,"title":68,"description":69,"pub_date":60,"tags":70,"draft":14},"win-cw2a-ca2w","ATL 字符串转换：CW2A 与 CA2W 完全指南","详解 ATL 宏 CW2A\u002FCA2W 在 Unicode 与 ANSI 之间的字符串转换用法、头文件依赖、USES_CONVERSION 宏的作用与常见陷阱。",[10,63,71,72],"ATL","字符串",{"slug":74,"title":75,"description":76,"pub_date":77,"tags":78,"draft":14},"cpp-random-mt19937","C++ 现代随机数生成：用 mt19937 彻底告别 rand()","深入讲解为什么 rand() 不够用，以及如何用 C++11 的 \u003Crandom> 库正确生成高质量随机数，涵盖 mt19937、各种分布和线程安全。","2023-05-26",[10,79,80],"c++11","random",{"slug":82,"title":83,"description":84,"pub_date":77,"tags":85,"draft":14},"exe-dll-single-package","将 EXE 和 DLL 打包成单一可执行文件","介绍两种将 exe 和依赖 dll 打包成单文件的方案：Enigma Virtual Box 和 WinRAR 自解压，适合发布 Windows 桌面程序时简化分发流程。",[63,10,86],"工具",{"slug":88,"title":89,"description":90,"pub_date":77,"tags":91,"draft":14},"win-postmessage-vector","Windows PostMessage 跨线程传递 std::vector 指针","通过 PostMessage 在 Windows 消息队列中传递 std::vector 指针，使用 reinterpret_cast 将指针装入 LPARAM，并在接收方正确释放内存。",[10,63,92],"WinAPI",{"slug":94,"title":95,"description":96,"pub_date":97,"tags":98,"draft":14},"win-startup-registry","C++ 实现程序开机自启动：注册表方式详解","通过操作 Windows 注册表 Run 键实现程序开机自启动，包括 HKCU 与 HKLM 区别、完整封装代码、工作目录问题和 UAC 权限处理。","2022-12-26",[63,10,99],"registry",{"slug":101,"title":102,"description":103,"pub_date":104,"tags":105,"draft":14},"mfc-cstring-wparam","MFC 中 CString 与 WPARAM 之间的转换","详解 MFC 消息传递中 CString 无法直接强转为 WPARAM 的原因，以及两种正确的转换方案，并介绍结构体指针传递的正确姿势。","2022-11-25",[106,10,63],"mfc",{"slug":108,"title":109,"description":110,"pub_date":111,"tags":112,"draft":14},"duilib-static-build","正确编译 Duilib 静态库：避免 ATL 依赖和链接错误","详解如何用 DuiLib_Static.vcxproj 编译 Duilib 静态库，解决 VARIANT 未定义、Unicode 配置不匹配和 ATL 依赖等常见问题。","2022-08-24",[10,113,63,106],"duilib",{"slug":115,"title":116,"description":117,"pub_date":118,"tags":119,"draft":14},"mfc-dpi-adaptive","MFC 界面自适应不同分辨率","MFC 对话框程序实现控件和字体随分辨率自动缩放的完整方案，附 DPI Awareness 配置说明","2022-08-17",[106,10,63,120],"dpi",{"slug":122,"title":123,"description":124,"pub_date":125,"tags":126,"draft":14},"mfc-drag-window","MFC 无标题栏窗口客户区拖动：三种方法对比","MFC 对话框去掉标题栏后如何实现拖动移动窗口，三种方案完整实现与适用场景分析","2022-08-16",[106,10,63]]