<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[每天进步一点点]]></title><description><![CDATA[阻碍即动力。]]></description><link>https://blog.youkuaiyun.com/Cypher_Studio</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Cypher_Studio]]></copyright><item><title><![CDATA[Jumpserver Client 探索小记：一个“调起本地工具“的中间适配器]]></title><link>https://blog.youkuaiyun.com/Cypher_Studio/article/details/170616505</link><guid>https://blog.youkuaiyun.com/Cypher_Studio/article/details/170616505</guid><author>Cypher_Studio</author><pubDate>Thu, 12 Nov 2026 16:17:40 +0800</pubDate><description><![CDATA[Jumpserver Client并非直接连接工具，而是本地工具的调起适配器。其核心作用是：在浏览器中选择“本地连接”后，通过自定义协议唤醒客户端，再由它调用本机已安装的SSH终端等工具完成真实连接。整个链路依赖运维开启目标机器的SSH服务，否则会因connection refused失败。该设计巧妙解决了Web端无法直接调用本地程序的难题，实现了统一管控与本地操作体验的融合，体现了中间层调度的实用价值。]]></description><category></category></item><item><title><![CDATA[调试mysql延迟与libevent回调实际发送回复时机问题]]></title><link>https://blog.youkuaiyun.com/Cypher_Studio/article/details/166832209</link><guid>https://blog.youkuaiyun.com/Cypher_Studio/article/details/166832209</guid><author>Cypher_Studio</author><pubDate>Tue, 29 Sep 2026 10:59:28 +0800</pubDate><description><![CDATA[某历史项目因HTTP请求超时，经排查发现服务日志显示处理完成仅需1ms，但实际响应延迟达30秒。通过tcpdump抓包确认，响应在30秒后才发出。深入分析源码及数据库操作日志，定位根因为libevent回调中每次请求均重新建立MySQL连接（单次耗时约10秒），三次操作叠加导致超时。修复方案为引入连接池，避免频繁建连。总结：应用日志不可靠，必须结合网络层抓包验证真实行为，方能精准定位延迟问题。]]></description><category></category></item><item><title><![CDATA[编译期断言技巧]]></title><link>https://blog.youkuaiyun.com/Cypher_Studio/article/details/166597846</link><guid>https://blog.youkuaiyun.com/Cypher_Studio/article/details/166597846</guid><author>Cypher_Studio</author><pubDate>Thu, 24 Sep 2026 17:18:03 +0800</pubDate><description><![CDATA[muduo 源码中通过 char require_32_bit_integer_at_least[sizeof(int) >= sizeof(int32_t) ? 1 : -1]; 实现编译期断言：若 int 不足 32 位，数组长度为负，编译失败；否则合法。后续 (void)require_... 消除未使用变量警告。二者独立，前者验证类型大小，后者清理警告，体现 C++ 语言特性的巧妙运用。]]></description><category></category></item><item><title><![CDATA[关于gcc编译指定: -Wl,-rpath 的设置的一个要注意的点]]></title><link>https://blog.youkuaiyun.com/Cypher_Studio/article/details/164468860</link><guid>https://blog.youkuaiyun.com/Cypher_Studio/article/details/164468860</guid><author>Cypher_Studio</author><pubDate>Mon, 07 Sep 2026 16:49:47 +0800</pubDate><description><![CDATA[<think>我们根据内容生成摘要。要求≤150字。核心问题：使用相对rpath导致从不同目录启动失败；解决方案：用$ORIGIN替代相对路径；解释$ORIGIN机制及转义。摘要需简洁。</think>摘要：程序通过相对rpath指定自带libstdc++库，但仅能从bin目录启动。从其他目录启动时，动态链接器按当前工作目录解析相对路径，导致找不到正确库。解决方法是用$ORIGIN（动态链接器内置变量，表示可执行文件所在目录）替换相对路径，如-Wl,-rpath,'$$ORIGIN/../libc++'，其]]></description><category></category></item><item><title><![CDATA[顶层 const 和 底层 const]]></title><link>https://blog.youkuaiyun.com/Cypher_Studio/article/details/161616676</link><guid>https://blog.youkuaiyun.com/Cypher_Studio/article/details/161616676</guid><author>Cypher_Studio</author><pubDate>Tue, 02 Jun 2026 13:41:20 +0800</pubDate><description><![CDATA[本文探讨了C++中顶层const与底层const的区别及其应用场景： 定义区分：顶层const修饰对象本身（如const int），底层const修饰指针/引用指向的对象（如const int*）； 值传递问题：函数模板值传递会丢失顶层const和引用属性（如const int退化为int）； 引用特性：引用本身隐含不可变性，其const只能是底层const（修饰被引对象），类似int& const的写法非法。通过代码示例直观展示了类型推导中的const丢失现象及引用const的底层本质。]]></description><category></category></item><item><title><![CDATA[转发引用（Forwarding Reference）]]></title><link>https://blog.youkuaiyun.com/Cypher_Studio/article/details/161621739</link><guid>https://blog.youkuaiyun.com/Cypher_Studio/article/details/161621739</guid><author>Cypher_Studio</author><pubDate>Tue, 02 Jun 2026 13:40:57 +0800</pubDate><description><![CDATA[转发引用（Universal Reference）是C++11引入的特性，语法形式为T&&，能动态绑定左值或右值引用。其核心用途是实现完美转发，保持参数的原始类型和值类别。转发引用的特性依赖于类型推导和引用折叠规则：传入左值时推导为左值引用，传入右值时推导为右值引用。与右值引用的区别在于是否需要类型推导。结合std::forward可实现完美转发，避免不必要的拷贝或移动。引用折叠规则确保正确处理引用叠加的情况。注意：转发引用仅在模板类型推导时生效，const T&&不属于转发引用。该特性对C++泛型编程至关]]></description><category></category></item><item><title><![CDATA[cpp: std::back_inserter]]></title><link>https://blog.youkuaiyun.com/Cypher_Studio/article/details/160374268</link><guid>https://blog.youkuaiyun.com/Cypher_Studio/article/details/160374268</guid><author>Cypher_Studio</author><pubDate>Tue, 21 Apr 2026 15:45:06 +0800</pubDate><description><![CDATA[std::back_inserter是C++标准库中的迭代器适配器，用于将输出操作转换为容器的push_back()调用，实现自动扩容。它解决了STL算法需要预先分配空间的问题，允许直接向空容器写入数据而无需手动resize。与普通迭代器不同，back_inserter会在每次赋值时自动扩展容器，使代码更简洁安全。类似功能的还有front_inserter和inserter，分别对应push_front()和指定位置插入。典型使用场景包括std::copy等需要输出迭代器的算法，特别适合不确定输出数据量的情]]></description><category></category></item><item><title><![CDATA[redis++使用: hmset 与 hmget]]></title><link>https://blog.youkuaiyun.com/Cypher_Studio/article/details/160366077</link><guid>https://blog.youkuaiyun.com/Cypher_Studio/article/details/160366077</guid><author>Cypher_Studio</author><pubDate>Tue, 21 Apr 2026 14:02:26 +0800</pubDate><description><![CDATA[Redis C++客户端库redis-plus-plus提供了hmget和hmset接口用于批量操作Hash数据。hmget通过迭代器范围获取多个字段值，返回OptionalString类型结果，需检查空值。hmset支持多种输入方式，包括initializer_list、vector of pairs和unordered_map，可高效设置多个字段。两个接口配合使用可完成Hash数据的批量读写操作，结果顺序与请求顺序一致，适用于用户信息等结构化数据的存储场景。]]></description><category></category></item><item><title><![CDATA[glog单行 30000 字节限制问题]]></title><link>https://blog.youkuaiyun.com/Cypher_Studio/article/details/160255963</link><guid>https://blog.youkuaiyun.com/Cypher_Studio/article/details/160255963</guid><author>Cypher_Studio</author><pubDate>Fri, 17 Apr 2026 17:48:51 +0800</pubDate><description><![CDATA[glog日志库默认限制单条日志长度为30000字节，超过部分会被截断。可通过两种方式解决：1)修改源码中的kMaxLogMessageLen常量并重新编译；2)编写分段输出函数，将长日志拆分为多段输出（推荐）。第二种方法无需修改库代码，通过循环分块输出，同时保持正确的日志位置信息。关键点在于控制每段长度不超过kMaxLogMessageLen限制，并添加分段标记方便阅读。]]></description><category></category></item><item><title><![CDATA[win11新机器设置杂七杂八]]></title><link>https://blog.youkuaiyun.com/Cypher_Studio/article/details/159680163</link><guid>https://blog.youkuaiyun.com/Cypher_Studio/article/details/159680163</guid><author>Cypher_Studio</author><pubDate>Tue, 31 Mar 2026 10:56:59 +0800</pubDate><description><![CDATA[摘要：本文介绍了Windows系统的三个实用技巧：1）通过命令行绕过联网注册，使用本地账户登录；2）通过注册表修改恢复经典右键菜单；3）在时间设置中开启秒数显示。这些方法分别涉及系统登录、界面优化和个性化设置，操作简单且无需第三方工具，适合希望快速优化Windows使用体验的用户。]]></description><category></category></item><item><title><![CDATA[gcc 的 include 搜索顺序学习与验证]]></title><link>https://blog.youkuaiyun.com/Cypher_Studio/article/details/157808067</link><guid>https://blog.youkuaiyun.com/Cypher_Studio/article/details/157808067</guid><author>Cypher_Studio</author><pubDate>Fri, 06 Feb 2026 16:51:12 +0800</pubDate><description><![CDATA[本文总结了GCC编译器头文件搜索顺序规则及相关选项。主要内容包括： 头文件搜索顺序规则： 双引号形式&quot;...&quot;：当前目录→-iquote→-I→系统路径 尖括号形式&lt;...&gt;：-I→系统路径 常用搜索路径选项： -iquote：仅影响双引号形式 -I：影响所有包含形式 -isystem：系统头文件路径，抑制警告 -idirafter：后备搜索路径 环境变量影响： CPATH/C_INCLUDE_PATH/CPLUS_INCLUDE_PATH会在-isystem之后、系统路径之]]></description><category></category></item><item><title><![CDATA[零长度数组（Zero-Length Array）]]></title><link>https://blog.youkuaiyun.com/Cypher_Studio/article/details/156239849</link><guid>https://blog.youkuaiyun.com/Cypher_Studio/article/details/156239849</guid><author>Cypher_Studio</author><pubDate>Wed, 24 Dec 2025 19:12:15 +0800</pubDate><description><![CDATA[零长度数组是C/C++中用于处理可变长度数据结构的特殊数组形式，常见语法为type name[0]或C99的type name[]。其核心特点包括不占用结构体空间、作为访问后续数据的符号标记、内存连续性和类型安全访问。主要应用于网络协议、文件格式等需要动态数据处理的场景。使用时需注意内存分配和释放需整体处理，且不同编译器支持程度可能不同。该技术通过结构体头部与数据的连续存储，实现了高效、类型安全的内存访问，特别适合协议封装和数据序列化需求。]]></description><category></category></item><item><title><![CDATA[opencv 学习: 12 使用策略模式进行实现算法切换-以颜色搜索为例]]></title><link>https://blog.youkuaiyun.com/Cypher_Studio/article/details/156026457</link><guid>https://blog.youkuaiyun.com/Cypher_Studio/article/details/156026457</guid><author>Cypher_Studio</author><pubDate>Wed, 17 Dec 2025 20:13:40 +0800</pubDate><description><![CDATA[摘要： 本文介绍了策略设计模式在图像处理中的应用。策略模式通过将算法封装到独立类中，实现运行时灵活切换不同算法。文章详细阐述了策略模式的适用场景（算法变体切换、行为差异分离、算法与业务解耦）和实现方法（抽象策略接口+具体算法类）。通过一个颜色检测算法的具体案例，展示了如何将图像处理算法封装为策略类，包括核心的process()方法和参数设置接口。代码示例演示了使用策略模式处理彩色图像，通过欧几里德距离计算颜色匹配度，并输出二值化结果。该模式使算法更易于测试、维护和重用。]]></description><category></category></item><item><title><![CDATA[opencv 学习: 11 图片像素位置变换，以图片加水波纹特效为例]]></title><link>https://blog.youkuaiyun.com/Cypher_Studio/article/details/155461323</link><guid>https://blog.youkuaiyun.com/Cypher_Studio/article/details/155461323</guid><author>Cypher_Studio</author><pubDate>Mon, 01 Dec 2025 20:09:56 +0800</pubDate><description><![CDATA[摘要 本文介绍了通过像素重映射实现图像特效的方法。该方法保持像素值不变，仅改变像素位置，适用于创建哈哈镜等简单特效或图像畸变矫正。实现过程包括：1)定义重映射矩阵存储新坐标；2)通过双重循环计算每个像素的位移位置；3)使用OpenCV的remap函数应用映射。示例代码展示了波浪效果实现，其中Y坐标按正弦函数周期性偏移。该方法采用向后映射技术，通过x和y两个浮点型映射矩阵完成图像变换。执行结果显示，原始图像成功转换为具有波浪形变的效果图。]]></description><category></category></item><item><title><![CDATA[centos-6.9 下编译安装 gcc-4.8.5]]></title><link>https://blog.youkuaiyun.com/Cypher_Studio/article/details/155353915</link><guid>https://blog.youkuaiyun.com/Cypher_Studio/article/details/155353915</guid><author>Cypher_Studio</author><pubDate>Fri, 28 Nov 2025 15:10:45 +0800</pubDate><description><![CDATA[本文记录了在Linux系统上编译安装gcc-4.8.5的过程。主要内容包括：1) 从官方源下载gcc-4.8.5源码并解压；2) 安装必要的数学库依赖(GMP、MPFR和MPC)；3) 配置编译选项，指定自定义安装路径；4) 使用make进行编译安装；5) 通过update-alternatives工具实现多版本gcc管理；6) 使用readelf查看程序编译时使用的gcc版本信息。文中还提供了详细的命令行操作步骤和注意事项，适合需要维护历史项目的开发人员参考。]]></description><category></category></item><item><title><![CDATA[win11 微软拼音，关闭烦人的 Tab 快捷键候选提示]]></title><link>https://blog.youkuaiyun.com/Cypher_Studio/article/details/155351869</link><guid>https://blog.youkuaiyun.com/Cypher_Studio/article/details/155351869</guid><author>Cypher_Studio</author><pubDate>Fri, 28 Nov 2025 13:42:59 +0800</pubDate><description><![CDATA[微软拼音输入法在Linux命令补全时误触发搜索功能的问题及解决方案。问题表现为拼音输入状态下按Tab键会弹出建议词列表而非命令补全，若误按回车则会跳转浏览器搜索，严重影响操作流畅性。解决方法：1）通过输入法设置开启兼容模式，可改善界面风格；2）在高级设置中关闭&quot;新词热词&quot;和&quot;候选&quot;功能，但Tab快捷键仍可能触发询问弹窗。微软输入法的这一设计存在明显缺陷，用户即使关闭功能仍会被反复询问启用，严重影响使用体验。]]></description><category></category></item><item><title><![CDATA[opencv 学习: 10 图像的简单运算（2）]]></title><link>https://blog.youkuaiyun.com/Cypher_Studio/article/details/155316557</link><guid>https://blog.youkuaiyun.com/Cypher_Studio/article/details/155316557</guid><author>Cypher_Studio</author><pubDate>Thu, 27 Nov 2025 15:39:26 +0800</pubDate><description><![CDATA[本文介绍了OpenCV中的图像操作符重载和通道处理技术。操作符重载部分包括比特位运算、比较操作符和矩阵计算，如矩阵相乘、转置、叉乘等，可简化图像处理代码实现。通道分离与合并部分详细讲解了cv::split和cv::merge方法的使用，通过分离图像通道单独处理后再合并，实现高效的通道级操作。示例代码展示了如何通过调整蓝色通道值来改变图像色调，并解释了防蓝光效果的实现原理。这些技术为图像处理提供了灵活高效的操作方式。]]></description><category></category></item><item><title><![CDATA[CPP 同名结构体的同名方法调用问题，违反单一定义规则（ODR）]]></title><link>https://blog.youkuaiyun.com/Cypher_Studio/article/details/155312975</link><guid>https://blog.youkuaiyun.com/Cypher_Studio/article/details/155312975</guid><author>Cypher_Studio</author><pubDate>Thu, 27 Nov 2025 13:57:58 +0800</pubDate><description><![CDATA[摘要：在Ubuntu 20.04环境下使用g++ 9.4.0时，发现违反C++的One Definition Rule（ODR）导致未定义行为。通过最小示例复现问题：两个头文件(a.h和b.h)定义了同名结构体A但内容不同，当在不同编译单元中使用时，编译器会根据编译顺序选择其中一个定义，导致运行时行为不可预测（如数据成员访问错误）。解决方法包括：1）确保类型名称唯一；2）使用命名空间隔离同名类型。该问题凸显了ODR违规在编译时难以检测但会导致严重运行时问题的特性。]]></description><category></category></item><item><title><![CDATA[opencv 学习: 10 图像的简单运算]]></title><link>https://blog.youkuaiyun.com/Cypher_Studio/article/details/155243392</link><guid>https://blog.youkuaiyun.com/Cypher_Studio/article/details/155243392</guid><author>Cypher_Studio</author><pubDate>Tue, 25 Nov 2025 20:13:46 +0800</pubDate><description><![CDATA[摘要：本文介绍了如何将图片视为矩阵进行四则运算，重点演示了OpenCV中的加法运算。通过cv::add和cv::addWeighted方法可实现图片叠加，后者支持权重参数调节。文章还展示了使用掩码(mask)进行局部区域运算的技巧，以及不同运算方式的视觉效果对比。此外，简要提及了OpenCV提供的其他运算方法，如subtract、absdiff、multiply等矩阵运算函数。所有运算都默认使用cv::saturate_cast确保像素值合法，并支持直接将输入图片作为输出参数以优化内存使用。]]></description><category></category></item><item><title><![CDATA[知识碎片：UTF-8的编码浅识]]></title><link>https://blog.youkuaiyun.com/Cypher_Studio/article/details/155036209</link><guid>https://blog.youkuaiyun.com/Cypher_Studio/article/details/155036209</guid><author>Cypher_Studio</author><pubDate>Wed, 19 Nov 2025 20:01:47 +0800</pubDate><description><![CDATA[UTF-8是一种变长编码格式，使用1-4个字节表示字符。本文介绍了UTF-8的三种主要表示方式：十六进制编码（如0xE50x9B0xA2表示&quot;团&quot;字）、Unicode转义序列（\u56e2）和Unicode码点（U+56E2）。这些格式分别用于数据存储、编程语言和标准文档中。文章还提供了C++测试代码，能够将输入的UTF-8字符串转换为十六进制编码输出，帮助理解编码转换过程。不同表示方式本质上指代相同字符，只是应用场景不同。]]></description><category></category></item></channel></rss>