<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Pause1996的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Pause1996</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Pause1996]]></copyright><item><title><![CDATA[月球车移动实战：面向对象命令模式]]></title><link>https://blog.youkuaiyun.com/Pause1996/article/details/160112760</link><guid>https://blog.youkuaiyun.com/Pause1996/article/details/160112760</guid><author>Pause1996</author><pubDate>Mon, 13 Apr 2026 14:05:04 +0800</pubDate><description><![CDATA[本文档在《月球车移动实战：函数式命令组合设计》同一题意下，将+ 自由函数的实现改为（Command 模式），便于用继承扩展新指令类型，并在运行时以统一接口驱动行为。]]></description><category></category></item><item><title><![CDATA[月球车移动实战：函数式命令组合设计]]></title><link>https://blog.youkuaiyun.com/Pause1996/article/details/159888457</link><guid>https://blog.youkuaiyun.com/Pause1996/article/details/159888457</guid><author>Pause1996</author><pubDate>Mon, 13 Apr 2026 11:59:21 +0800</pubDate><description><![CDATA[阅读指引：测试覆盖初始状态、转向、位移、组合命令与边界场景，是需求反推的主要依据。阅读指引：执行入口实现极简，只负责执行命令并返回自身，体现执行器与命令解耦。这组测试不仅验证功能，也固化了命令模型的契约，后续重构时可作为回归保护。阅读指引：基础命令与高阶命令的实现都在这里，重点看方向映射、模运算和。，从而支持链式调用。状态变更逻辑全部在命令层，职责边界清晰。这个题目的关键不在“坐标加减”，而在“如何建模命令”。阅读指引：定义核心领域对象与命令抽象，重点关注。更好的思路是将“命令”抽象为一等公民，并让。]]></description><category></category></item><item><title><![CDATA[技术教练认证：扑克牌游戏]]></title><link>https://blog.youkuaiyun.com/Pause1996/article/details/160050027</link><guid>https://blog.youkuaiyun.com/Pause1996/article/details/160050027</guid><author>Pause1996</author><pubDate>Sat, 11 Apr 2026 11:48:50 +0800</pubDate><description><![CDATA[规则新增通过仓库扩展，不破坏主流程统计判型让实现简洁、优雅、可读将牌按“重复优先、点数次之”重排，将同牌型比较统一为逐位比较，显著减少分支逻辑比较链路固定，便于调试与性能分析测试按规则分层组织，回归成本低如果把这道题看成一个微型规则引擎，那么最值得复用的经验就是：先抽象数据特征，再组织比较流程。统计判型正是这个思路在扑克牌场景中的高性价比实践。]]></description><category></category></item><item><title><![CDATA[基于 LRU 的流表老化：工程实践]]></title><link>https://blog.youkuaiyun.com/Pause1996/article/details/159762713</link><guid>https://blog.youkuaiyun.com/Pause1996/article/details/159762713</guid><author>Pause1996</author><pubDate>Thu, 02 Apr 2026 14:26:23 +0800</pubDate><description><![CDATA[问题：大规模流表下，周期性全表扫描老化成本高；多线程命中后集中上报 LRU 更新，易造成消息突发与丢包。手段：用LRU 顺序表达“最近访问”，把淘汰与同步的焦点从“全体键”收束到链表顺序 + 哈希定位；在工程上可进一步结合分协议 idle侵入式链表与固定结点池等，控制分配次数与指针稳定性。跨线程：在节流基础上对发送时刻做按lru_index的散列，把更新打散到 [base, base + range)，缓解拥塞、利于链表与真实流量一致。落地注意。]]></description><category></category></item><item><title><![CDATA[基于 CRTP 的单例模板]]></title><link>https://blog.youkuaiyun.com/Pause1996/article/details/159730416</link><guid>https://blog.youkuaiyun.com/Pause1996/article/details/159730416</guid><author>Pause1996</author><pubDate>Wed, 01 Apr 2026 15:46:18 +0800</pubDate><description><![CDATA[工程里经常会有“全局唯一”的对象：日志器、配置中心、指标上报器、线程池、驱动管理器等。工程上更值得关注的是边界条件：进程退出时的析构顺序、以及“初始化线程安全”不等于“方法线程安全”。这篇模板选的是第一种路径：保持析构存在，但把风险点讲清楚。这里给出一个可复用的模板：用 CRTP 让“谁是单例”在类型层面固定下来，同时用函数内。若你的单例析构里访问了“已经先析构的其它静态对象”，可能出问题。初始化线程安全不代表“方法线程安全”。这套写法把“唯一实例”的约束收口到两处：基类统一删除拷贝/移动，派生类用。]]></description><category></category></item><item><title><![CDATA[从 0 到 1：用 Mixin 实现角色模式（以协议端点为例）]]></title><link>https://blog.youkuaiyun.com/Pause1996/article/details/159726087</link><guid>https://blog.youkuaiyun.com/Pause1996/article/details/159726087</guid><author>Pause1996</author><pubDate>Wed, 01 Apr 2026 13:05:01 +0800</pubDate><description><![CDATA[角色负责「职责切片」：协议里变化最频繁的是「当前栈里启用了哪些能力」，用角色比用枚举 + 巨型分支更可持续。Pimpl 负责「稳定 ABI 边界」：对外头文件保持精简，角色实现与第三方依赖留在.cpp。宏要克制只统一与对的虚继承；虚析构只在Role；USE_ROLEHAS_ROLE与成员名role##Role对齐；纯虚与业务逻辑写在{ ... }里。与策略模式配合：同一角色内部仍可用策略替换算法（例如不同压缩策略），避免角色类本身变成上帝类。测试：对每个IRole做 mock，对Impl。]]></description><category></category></item><item><title><![CDATA[8种Ethernet帧格式的统一解析]]></title><link>https://blog.youkuaiyun.com/Pause1996/article/details/159691242</link><guid>https://blog.youkuaiyun.com/Pause1996/article/details/159691242</guid><author>Pause1996</author><pubDate>Tue, 31 Mar 2026 16:36:53 +0800</pubDate><description><![CDATA[4种以太帧格式二层报文在「目的 MAC + 源 MAC」之后，不同帧族在下一字段上并不一致：Ethernet II 跟的是EtherType，IEEE 802.3 跟的是Length，再往后还有 LLC、SNAP、Novell Raw 等差异。再叠加可选 VLAN Tag（802.1Q/802.1ad），工程里往往要处理4 种主类型 ×（带/不带 VLAN）≈ 8 种组合。如何用一套统一的头部视图（EthHeader）同时覆盖 8 种组合，并把“字段布局”与“类型识别”从业务逻辑里抽离出来。]]></description><category></category></item><item><title><![CDATA[编译宏在版本差分中的应用]]></title><link>https://blog.youkuaiyun.com/Pause1996/article/details/159691204</link><guid>https://blog.youkuaiyun.com/Pause1996/article/details/159691204</guid><author>Pause1996</author><pubDate>Tue, 31 Mar 2026 16:35:38 +0800</pubDate><description><![CDATA[编译期与运行期分层：宏解决「有没有能力」，开关解决「要不要用」，混在一层里容易要么镜像臃肿，要么运维不灵活。宏命名与文档这类名字建议在团队内有一份简短说明，避免新人误用成「带开关的」或反过来。避免在宏里塞复杂逻辑：宏参数里只宜放简短语句或调用；复杂逻辑封装成函数，宏只负责调用，便于调试与单测。链接与符号：若卸载专用函数仅在下存在，需保证非卸载构建不引用这些符号，或通过弱符号、桩函数等策略统一处理。测试矩阵。]]></description><category></category></item><item><title><![CDATA[Ping-Pong 内存在统计上报的两个应用]]></title><link>https://blog.youkuaiyun.com/Pause1996/article/details/159651347</link><guid>https://blog.youkuaiyun.com/Pause1996/article/details/159651347</guid><author>Pause1996</author><pubDate>Mon, 30 Mar 2026 16:50:17 +0800</pubDate><description><![CDATA[后者的切换点在“统计查询定时器超时后，从 DPU 读到累计值并算完 delta 之后”，用双快照保证。上报线程直接读“正在写的累计值”时，往往会遇到一致性问题：一个结构体里多个字段来自不同时间点。Ping-Pong 内存（双缓冲）说白了就是准备两块同构缓冲区，让它们在“写”和“读”两个角色之间来回切换。，如果这些字段在打包过程中被更新（哪怕都在同一线程里，只要更新点穿插在打包逻辑之间），就可能读到一个“拼出来的状态”。统计模块维护一份累计值。这相当于“双缓冲的累计快照”：读到的永远是某个时刻的稳定累计值。]]></description><category></category></item><item><title><![CDATA[含位域结构体的序列化与反序列化​]]></title><link>https://blog.youkuaiyun.com/Pause1996/article/details/159547158</link><guid>https://blog.youkuaiyun.com/Pause1996/article/details/159547158</guid><author>Pause1996</author><pubDate>Fri, 27 Mar 2026 15:26:19 +0800</pubDate><description><![CDATA[展示了含位域的结构体如何做序列化与反序列化]]></description><category></category></item><item><title><![CDATA[AcWing算法基础课笔记]]></title><link>https://blog.youkuaiyun.com/Pause1996/article/details/146703712</link><guid>https://blog.youkuaiyun.com/Pause1996/article/details/146703712</guid><author>Pause1996</author><pubDate>Sat, 29 Mar 2025 17:47:45 +0800</pubDate><description><![CDATA[这里是学习AcWing算法基础课，记录的Notion笔记的搬运，主要是为了展示个人的知识积累。]]></description><category></category></item><item><title><![CDATA[算法基础-栈与队列]]></title><link>https://blog.youkuaiyun.com/Pause1996/article/details/144318127</link><guid>https://blog.youkuaiyun.com/Pause1996/article/details/144318127</guid><author>Pause1996</author><pubDate>Sat, 07 Dec 2024 22:31:54 +0800</pubDate><description><![CDATA[【代码】算法基础-栈与队列。]]></description><category></category></item><item><title><![CDATA[算法基础-字符串]]></title><link>https://blog.youkuaiyun.com/Pause1996/article/details/144277785</link><guid>https://blog.youkuaiyun.com/Pause1996/article/details/144277785</guid><author>Pause1996</author><pubDate>Thu, 05 Dec 2024 23:04:31 +0800</pubDate><description><![CDATA[【代码】算法基础-字符串。]]></description><category></category></item><item><title><![CDATA[算法基础-哈希表]]></title><link>https://blog.youkuaiyun.com/Pause1996/article/details/144224388</link><guid>https://blog.youkuaiyun.com/Pause1996/article/details/144224388</guid><author>Pause1996</author><pubDate>Tue, 03 Dec 2024 21:23:25 +0800</pubDate><description><![CDATA[【代码】算法基础-哈希表。]]></description><category></category></item><item><title><![CDATA[算法基础-链表]]></title><link>https://blog.youkuaiyun.com/Pause1996/article/details/144163421</link><guid>https://blog.youkuaiyun.com/Pause1996/article/details/144163421</guid><author>Pause1996</author><pubDate>Sat, 30 Nov 2024 23:47:19 +0800</pubDate><description><![CDATA[【代码】算法基础-链表。]]></description><category></category></item><item><title><![CDATA[算法基础-数组]]></title><link>https://blog.youkuaiyun.com/Pause1996/article/details/144094109</link><guid>https://blog.youkuaiyun.com/Pause1996/article/details/144094109</guid><author>Pause1996</author><pubDate>Wed, 27 Nov 2024 21:05:56 +0800</pubDate><description><![CDATA[特别的，如果mid还是使用(left + right)/2可能会存在left=0, right=1，mid等于0的情况，然后left=mid就一直无法更新边界退出循环了，可以使用上取整技巧规避，即mid = (left + right + 1) / 2;由于存在right=mid，退出条件必须是left < right，不然可能会死循环（考虑left=1,right=1的情况）由于存在left=mid，退出条件必须是left < right，不然可能会死循环（考虑left=0, right=0的情况）]]></description><category></category></item><item><title><![CDATA[rust日志宏封装]]></title><link>https://blog.youkuaiyun.com/Pause1996/article/details/143858343</link><guid>https://blog.youkuaiyun.com/Pause1996/article/details/143858343</guid><author>Pause1996</author><pubDate>Mon, 18 Nov 2024 15:26:04 +0800</pubDate><description><![CDATA[封装一个带等级的日志接口]]></description><category></category></item><item><title><![CDATA[rust智能指针]]></title><link>https://blog.youkuaiyun.com/Pause1996/article/details/143485519</link><guid>https://blog.youkuaiyun.com/Pause1996/article/details/143485519</guid><author>Pause1996</author><pubDate>Sun, 10 Nov 2024 14:26:11 +0800</pubDate><description><![CDATA[rust类型安全与智能指针总结]]></description><category></category></item><item><title><![CDATA[STL容器并发不安全导致的double free]]></title><link>https://blog.youkuaiyun.com/Pause1996/article/details/137110136</link><guid>https://blog.youkuaiyun.com/Pause1996/article/details/137110136</guid><author>Pause1996</author><pubDate>Fri, 29 Mar 2024 11:20:35 +0800</pubDate><description><![CDATA[众所周知，C++的STL里提供的map容器不能保证线程安全，项目因此给map加了一个锁，封装了一个线程安全的map，如下所示这里的读写锁是全局资源，通过封装RAII类，在构造函数内实现读或写保护，析构函数内实现解锁，就不用担心锁忘记释放，看起来也更简洁【参见Effective C++条款13以对象管理资源】]]></description><category></category></item></channel></rss>