<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>void.dev</title><description>王宇的技术博客 — 代码、工具、系统、与一切值得折腾的东西</description><link>https://void.redx.space/</link><language>zh-CN</language><item><title>C++ 设计模式实战：RAII、观察者、工厂</title><link>https://void.redx.space/blog/cpp-random-design-patterns/</link><guid isPermaLink="true">https://void.redx.space/blog/cpp-random-design-patterns/</guid><description>用现代 C++（C++17/20）实现三种高频设计模式：RAII 资源管理、观察者模式事件系统、工厂模式插件架构。每种模式给出问题场景、实现代码和真实工程案例。</description><pubDate>Fri, 01 May 2026 00:00:00 GMT</pubDate></item><item><title>数据结构基础：从数组到红黑树</title><link>https://void.redx.space/blog/data-structures-fundamentals/</link><guid isPermaLink="true">https://void.redx.space/blog/data-structures-fundamentals/</guid><description>系统梳理常用数据结构的核心原理、时间复杂度和适用场景。数组、链表、栈、队列、哈希表、二叉树、堆、图，每种结构附实现要点和 C++ 代码片段。</description><pubDate>Fri, 01 May 2026 00:00:00 GMT</pubDate></item><item><title>OpenClaw vs Hermes Agent：两个本地优先 Agent 的设计差异</title><link>https://void.redx.space/blog/openclaw-vs-hermes-agent/</link><guid isPermaLink="true">https://void.redx.space/blog/openclaw-vs-hermes-agent/</guid><description>OpenClaw（Novita AI）和 Hermes Agent（Nous Research）都是本地运行的个人 AI Agent，但在记忆系统、技能学习、运行环境和模型生态上走了不同的路。深入对比两种架构的核心差异。</description><pubDate>Fri, 01 May 2026 00:00:00 GMT</pubDate></item><item><title>关于 void.dev</title><link>https://void.redx.space/blog/about/</link><guid isPermaLink="true">https://void.redx.space/blog/about/</guid><description>一个程序员的技术折腾记录，不定期更新，不限定领域，只要值得写就写。</description><pubDate>Thu, 30 Apr 2026 00:00:00 GMT</pubDate></item><item><title>AI Agent 的记忆系统：从上下文窗口到长期记忆</title><link>https://void.redx.space/blog/ai-agent-memory/</link><guid isPermaLink="true">https://void.redx.space/blog/ai-agent-memory/</guid><description>深入拆解 AI Agent 的四种记忆类型、上下文窗口压缩策略、RAG 向量检索原理，以及三种典型失败模式和工程选型建议。</description><pubDate>Thu, 30 Apr 2026 00:00:00 GMT</pubDate></item><item><title>什么是 AI Agent？从 LLM 到自主执行</title><link>https://void.redx.space/blog/ai-agent-what-is/</link><guid isPermaLink="true">https://void.redx.space/blog/ai-agent-what-is/</guid><description>LLM 本身是无状态问答机，Agent 是什么让它’动’起来的？本文深入解析 Agent 的四个核心能力、ReAct 框架、工具调用原理，以及主流框架横向对比。</description><pubDate>Thu, 30 Apr 2026 00:00:00 GMT</pubDate></item><item><title>二分查找：永远写不对？记住这个模板</title><link>https://void.redx.space/blog/algorithm-binary-search/</link><guid isPermaLink="true">https://void.redx.space/blog/algorithm-binary-search/</guid><description>彻底搞清楚二分查找的边界问题：闭区间和左闭右开两套模板、三道经典 LeetCode 题目完整 C++ 实现，以及二分答案的进阶思路。</description><pubDate>Thu, 30 Apr 2026 00:00:00 GMT</pubDate></item><item><title>滑动窗口算法：从暴力到 O(n) 的思维跃迁</title><link>https://void.redx.space/blog/algorithm-sliding-window/</link><guid isPermaLink="true">https://void.redx.space/blog/algorithm-sliding-window/</guid><description>系统讲解滑动窗口算法的核心模板、适用题型，配合三道经典 LeetCode 题目的完整 C++ 实现，彻底理解双指针收缩思路。</description><pubDate>Thu, 30 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Clash / Mihomo 配置详解：规则、策略组与分流</title><link>https://void.redx.space/blog/network-clash-config/</link><guid isPermaLink="true">https://void.redx.space/blog/network-clash-config/</guid><description>深入解析 Clash/Mihomo 的核心配置结构，包括代理节点、策略组类型、规则优先级、DNS fake-ip 模式，以及一份实用的完整配置模板。</description><pubDate>Thu, 30 Apr 2026 00:00:00 GMT</pubDate></item><item><title>代理与翻墙技术原理：从 HTTP 代理到现代协议</title><link>https://void.redx.space/blog/network-proxy-vpn-guide/</link><guid isPermaLink="true">https://void.redx.space/blog/network-proxy-vpn-guide/</guid><description>深入解析代理与 VPN 的本质区别，梳理从 SOCKS5 到 Shadowsocks、V2Ray/Xray、Hysteria2 的协议演进，以及机场订阅的技术本质。</description><pubDate>Thu, 30 Apr 2026 00:00:00 GMT</pubDate></item><item><title>HID 设备热插拔检测：从 udev 到 node-hid</title><link>https://void.redx.space/blog/hid-hotplug/</link><guid isPermaLink="true">https://void.redx.space/blog/hid-hotplug/</guid><description>在 Linux 上用 node-hid + usb 库实现可靠的 USB HID 设备热插拔检测，踩坑记录</description><pubDate>Tue, 28 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Electron IPC 类型安全：从 any 到完全类型化</title><link>https://void.redx.space/blog/electron-ipc-types/</link><guid isPermaLink="true">https://void.redx.space/blog/electron-ipc-types/</guid><description>用 TypeScript 泛型封装 Electron IPC，彻底消灭 any，preload 契约集中管理</description><pubDate>Sat, 25 Apr 2026 00:00:00 GMT</pubDate></item><item><title>手动关闭多个 el-popover（不用 v-model:visible）</title><link>https://void.redx.space/blog/element-plus-popover-hide/</link><guid isPermaLink="true">https://void.redx.space/blog/element-plus-popover-hide/</guid><description>通过 ref + Reflect.get 调用 hide() 方法手动关闭 Element Plus Popover，解释 Vue3 Proxy 导致无法直接调用实例方法的原因。</description><pubDate>Fri, 25 Oct 2024 00:00:00 GMT</pubDate></item><item><title>用 Vite+（vp）从零搭建 Vue3 + TypeScript + Element Plus + Pinia + Vue Router</title><link>https://void.redx.space/blog/vite-vue3-ts-elementplus-pinia/</link><guid isPermaLink="true">https://void.redx.space/blog/vite-vue3-ts-elementplus-pinia/</guid><description>使用 Vite+ 统一工具链（vp）一条命令搭建 Vue3 全家桶，涵盖按需导入、Pinia store、路由配置，以及常见坑的解决方案。</description><pubDate>Tue, 27 Aug 2024 00:00:00 GMT</pubDate></item><item><title>CEF LNK2038：解决 _ITERATOR_DEBUG_LEVEL 不匹配错误</title><link>https://void.redx.space/blog/cef-lnk2038-iterator-debug-level/</link><guid isPermaLink="true">https://void.redx.space/blog/cef-lnk2038-iterator-debug-level/</guid><description>分析 CEF（Chromium Embedded Framework）集成时出现的 LNK2038 _ITERATOR_DEBUG_LEVEL 链接错误，从根本原因到解决方案的完整指南。</description><pubDate>Tue, 07 May 2024 00:00:00 GMT</pubDate></item><item><title>彻底解决 npm 安装 Electron 失败的问题</title><link>https://void.redx.space/blog/npm-electron-install-fix/</link><guid isPermaLink="true">https://void.redx.space/blog/npm-electron-install-fix/</guid><description>分析 npm install electron 失败的根本原因（下载二进制超时/被墙），通过国内镜像（npmmirror）彻底解决，并介绍多种备选方案和常见错误排查。</description><pubDate>Fri, 01 Mar 2024 00:00:00 GMT</pubDate></item><item><title>解决 git 报错：Fatal: Out of memory, malloc failed</title><link>https://void.redx.space/blog/git-out-of-memory/</link><guid isPermaLink="true">https://void.redx.space/blog/git-out-of-memory/</guid><description>分析 git 大仓库操作时出现 Out of memory malloc failed 的根本原因，通过调整 pack.windowMemory、http.postBuffer 和 git repack 彻底解决。</description><pubDate>Wed, 31 Jan 2024 00:00:00 GMT</pubDate></item><item><title>在 VMware 虚拟机中安装 open-vm-tools 完整指南</title><link>https://void.redx.space/blog/vmware-tools-install/</link><guid isPermaLink="true">https://void.redx.space/blog/vmware-tools-install/</guid><description>详解 VMware Tools 的作用、open-vm-tools 与官方 VMware Tools 的区别，以及在 Ubuntu 虚拟机中安装并生效的完整步骤和常见问题排查。</description><pubDate>Tue, 21 Nov 2023 00:00:00 GMT</pubDate></item><item><title>负载均衡算法完全指南：从轮询到一致性哈希</title><link>https://void.redx.space/blog/load-balancing-algorithms/</link><guid isPermaLink="true">https://void.redx.space/blog/load-balancing-algorithms/</guid><description>系统梳理静态与动态负载均衡算法，涵盖轮询、随机、权重、IP Hash、一致性 Hash、最少连接、最快响应等，并对比 Nginx、Dubbo、Spring Cloud LoadBalancer 的实现差异。</description><pubDate>Wed, 15 Nov 2023 00:00:00 GMT</pubDate></item><item><title>C# 通过 SendMessage 向 C++ 窗口发送消息与字符串</title><link>https://void.redx.space/blog/csharp-sendmessage-cpp/</link><guid isPermaLink="true">https://void.redx.space/blog/csharp-sendmessage-cpp/</guid><description>使用 P/Invoke 调用 user32.dll 的 SendMessage，从 C# 发送自定义 WM_USER 消息及字符串指针给 C++ 原生窗口，并在 C++ 侧正确接收和转换。</description><pubDate>Fri, 09 Jun 2023 00:00:00 GMT</pubDate></item><item><title>ATL 字符串转换：CW2A 与 CA2W 完全指南</title><link>https://void.redx.space/blog/win-cw2a-ca2w/</link><guid isPermaLink="true">https://void.redx.space/blog/win-cw2a-ca2w/</guid><description>详解 ATL 宏 CW2A/CA2W 在 Unicode 与 ANSI 之间的字符串转换用法、头文件依赖、USES_CONVERSION 宏的作用与常见陷阱。</description><pubDate>Fri, 09 Jun 2023 00:00:00 GMT</pubDate></item><item><title>C++ 现代随机数生成：用 mt19937 彻底告别 rand()</title><link>https://void.redx.space/blog/cpp-random-mt19937/</link><guid isPermaLink="true">https://void.redx.space/blog/cpp-random-mt19937/</guid><description>深入讲解为什么 rand() 不够用，以及如何用 C++11 的 &lt;random&gt; 库正确生成高质量随机数，涵盖 mt19937、各种分布和线程安全。</description><pubDate>Fri, 26 May 2023 00:00:00 GMT</pubDate></item><item><title>将 EXE 和 DLL 打包成单一可执行文件</title><link>https://void.redx.space/blog/exe-dll-single-package/</link><guid isPermaLink="true">https://void.redx.space/blog/exe-dll-single-package/</guid><description>介绍两种将 exe 和依赖 dll 打包成单文件的方案：Enigma Virtual Box 和 WinRAR 自解压，适合发布 Windows 桌面程序时简化分发流程。</description><pubDate>Fri, 26 May 2023 00:00:00 GMT</pubDate></item><item><title>Windows PostMessage 跨线程传递 std::vector 指针</title><link>https://void.redx.space/blog/win-postmessage-vector/</link><guid isPermaLink="true">https://void.redx.space/blog/win-postmessage-vector/</guid><description>通过 PostMessage 在 Windows 消息队列中传递 std::vector 指针，使用 reinterpret_cast 将指针装入 LPARAM，并在接收方正确释放内存。</description><pubDate>Fri, 26 May 2023 00:00:00 GMT</pubDate></item><item><title>C++ 实现程序开机自启动：注册表方式详解</title><link>https://void.redx.space/blog/win-startup-registry/</link><guid isPermaLink="true">https://void.redx.space/blog/win-startup-registry/</guid><description>通过操作 Windows 注册表 Run 键实现程序开机自启动，包括 HKCU 与 HKLM 区别、完整封装代码、工作目录问题和 UAC 权限处理。</description><pubDate>Mon, 26 Dec 2022 00:00:00 GMT</pubDate></item><item><title>MFC 中 CString 与 WPARAM 之间的转换</title><link>https://void.redx.space/blog/mfc-cstring-wparam/</link><guid isPermaLink="true">https://void.redx.space/blog/mfc-cstring-wparam/</guid><description>详解 MFC 消息传递中 CString 无法直接强转为 WPARAM 的原因，以及两种正确的转换方案，并介绍结构体指针传递的正确姿势。</description><pubDate>Fri, 25 Nov 2022 00:00:00 GMT</pubDate></item><item><title>正确编译 Duilib 静态库：避免 ATL 依赖和链接错误</title><link>https://void.redx.space/blog/duilib-static-build/</link><guid isPermaLink="true">https://void.redx.space/blog/duilib-static-build/</guid><description>详解如何用 DuiLib_Static.vcxproj 编译 Duilib 静态库，解决 VARIANT 未定义、Unicode 配置不匹配和 ATL 依赖等常见问题。</description><pubDate>Wed, 24 Aug 2022 00:00:00 GMT</pubDate></item><item><title>MFC 界面自适应不同分辨率</title><link>https://void.redx.space/blog/mfc-dpi-adaptive/</link><guid isPermaLink="true">https://void.redx.space/blog/mfc-dpi-adaptive/</guid><description>MFC 对话框程序实现控件和字体随分辨率自动缩放的完整方案，附 DPI Awareness 配置说明</description><pubDate>Wed, 17 Aug 2022 00:00:00 GMT</pubDate></item><item><title>MFC 无标题栏窗口客户区拖动：三种方法对比</title><link>https://void.redx.space/blog/mfc-drag-window/</link><guid isPermaLink="true">https://void.redx.space/blog/mfc-drag-window/</guid><description>MFC 对话框去掉标题栏后如何实现拖动移动窗口，三种方案完整实现与适用场景分析</description><pubDate>Tue, 16 Aug 2022 00:00:00 GMT</pubDate></item><item><title>整数的补数：位运算掩码解法</title><link>https://void.redx.space/blog/algorithm-number-complement/</link><guid isPermaLink="true">https://void.redx.space/blog/algorithm-number-complement/</guid><description>LeetCode 476 题，用掩码 XOR 实现整数补数，附 C++/Python/Java 三种实现及补数与补码的区别</description><pubDate>Mon, 08 Mar 2021 00:00:00 GMT</pubDate></item></channel></rss>