<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Quanye&#39;s Blog</title>
    <link>https://quanyeyang.github.io/zh-cn/</link>
    <description>Recent content on Quanye&#39;s Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>zh-cn</language>
    <managingEditor>quanyemostima@gmail.com (杨全烨)</managingEditor>
    <webMaster>quanyemostima@gmail.com (杨全烨)</webMaster>
    <copyright>© 2026 杨全烨</copyright>
    <lastBuildDate>Sun, 26 Jul 2026 16:00:00 +0800</lastBuildDate><atom:link href="https://quanyeyang.github.io/zh-cn/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>RESP3 push frame torn apart when a pubsub message &gt;= 16384 bytes is delivered to the publishing connection (9.0 regression)</title>
      <link>https://quanyeyang.github.io/zh-cn/valkey/bugfix-resp3-push-frame-torn/</link>
      <pubDate>Wed, 22 Jul 2026 11:55:36 +0800</pubDate>
      <author>quanyemostima@gmail.com (杨全烨)</author>
      <guid>https://quanyeyang.github.io/zh-cn/valkey/bugfix-resp3-push-frame-torn/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;binbin第一次直接assign给我的issue,我来尝试处理一下并且学习一下这里的代码。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;原issue界面:https://github.com/valkey-io/valkey/issues/4231&lt;/p&gt;
&lt;hr&gt;


&lt;h2 class=&#34;relative group&#34;&gt;1. 这个 bug 发生在什么业务场景 
    &lt;div id=&#34;1-%E8%BF%99%E4%B8%AA-bug-%E5%8F%91%E7%94%9F%E5%9C%A8%E4%BB%80%E4%B9%88%E4%B8%9A%E5%8A%A1%E5%9C%BA%E6%99%AF&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#1-%E8%BF%99%E4%B8%AA-bug-%E5%8F%91%E7%94%9F%E5%9C%A8%E4%BB%80%E4%B9%88%E4%B8%9A%E5%8A%A1%E5%9C%BA%E6%99%AF&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;p&gt;一条 TCP 连接同时干两件事：&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>防止同步重入解UAF类问题</title>
      <link>https://quanyeyang.github.io/zh-cn/valkey/bugfix-sync-reentry-uaf/</link>
      <pubDate>Tue, 21 Jul 2026 15:43:38 +0800</pubDate>
      <author>quanyemostima@gmail.com (杨全烨)</author>
      <guid>https://quanyeyang.github.io/zh-cn/valkey/bugfix-sync-reentry-uaf/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;迄今为止我们看到好几个这样的段错误问题了。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;这个PR,为单线程释放造成的UAF &lt;a href=&#34;https://github.com/valkey-io/valkey/pull/4212&#34; target=&#34;_blank&#34;&gt;https://github.com/valkey-io/valkey/pull/4212&lt;/a&gt;
同时还有&lt;strong&gt;多线程下RDMA的崩溃问题&lt;/strong&gt; 以及 &lt;strong&gt;Valkey Over RDMA测试中server UAF崩溃的问题&lt;/strong&gt;
中我们都遇到类似的问题，&lt;strong&gt;于是尝试从架构上来解决一下这个问题&lt;/strong&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;举一隅不以三隅反，则不复也。&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Broader direction (non-blocking):&lt;/strong&gt; Part of the root cause is that many flows free clients synchronously (&lt;code&gt;CLIENT KILL&lt;/code&gt;, &lt;code&gt;evictClients()&lt;/code&gt;, COB-limit handling, …), and we keep tripping over iterators/cached pointers that outlive those frees. This snapshot fix is a good local solution, but it may be worth a broader discussion on whether these paths should prefer &lt;code&gt;freeClientAsync()&lt;/code&gt; so client teardown always happens at a safe point (beforeSleep) rather than mid-iteration. Raising it here since it&amp;rsquo;s a recurring class of bug, not to block this PR.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>UAF类-多BLPOP场景</title>
      <link>https://quanyeyang.github.io/zh-cn/valkey/bugfix-uaf-multi-blpop/</link>
      <pubDate>Tue, 21 Jul 2026 11:15:35 +0800</pubDate>
      <author>quanyemostima@gmail.com (杨全烨)</author>
      <guid>https://quanyeyang.github.io/zh-cn/valkey/bugfix-uaf-multi-blpop/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;1. BLPOP 是干什么的？ 
    &lt;div id=&#34;1-blpop-%E6%98%AF%E5%B9%B2%E4%BB%80%E4%B9%88%E7%9A%84&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#1-blpop-%E6%98%AF%E5%B9%B2%E4%BB%80%E4%B9%88%E7%9A%84&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;p&gt;普通 &lt;code&gt;LPOP mylist&lt;/code&gt;：list 空就立刻回 &lt;code&gt;(nil)&lt;/code&gt;。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>RDB_OPCODE_SLOT_IMPORT short job_name causes server-side heap out-of-bounds read during startup RDB loading</title>
      <link>https://quanyeyang.github.io/zh-cn/valkey/security-rdb-slot-import-oob/</link>
      <pubDate>Sun, 19 Jul 2026 12:33:27 +0800</pubDate>
      <author>quanyemostima@gmail.com (杨全烨)</author>
      <guid>https://quanyeyang.github.io/zh-cn/valkey/security-rdb-slot-import-oob/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/valkey-io/valkey/issues/4207&#34; target=&#34;_blank&#34;&gt;https://github.com/valkey-io/valkey/issues/4207&lt;/a&gt;
一类安全性问题，上面是issue界面，可以尝试解决一下。&lt;/p&gt;
&lt;p&gt;典型的 trust-boundary 长度契约不一致——命令路径强制 &lt;code&gt;job_name&lt;/code&gt; 必须是 40 字节，
RDB 加载路径却没校验，导致 &lt;code&gt;memcpy(..., 40)&lt;/code&gt; 从短 SDS 上越界读。&lt;/p&gt;


&lt;h2 class=&#34;relative group&#34;&gt;漏洞本质（从内存布局看） 
    &lt;div id=&#34;%E6%BC%8F%E6%B4%9E%E6%9C%AC%E8%B4%A8%E4%BB%8E%E5%86%85%E5%AD%98%E5%B8%83%E5%B1%80%E7%9C%8B&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%E6%BC%8F%E6%B4%9E%E6%9C%AC%E8%B4%A8%E4%BB%8E%E5%86%85%E5%AD%98%E5%B8%83%E5%B1%80%E7%9C%8B&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;


&lt;h3 class=&#34;relative group&#34;&gt;子系统约定 
    &lt;div id=&#34;%E5%AD%90%E7%B3%BB%E7%BB%9F%E7%BA%A6%E5%AE%9A&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%E5%AD%90%E7%B3%BB%E7%BB%9F%E7%BA%A6%E5%AE%9A&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;CLUSTER_NAMELEN == 40&lt;/code&gt;，job name 是&lt;strong&gt;固定长度 hex&lt;/strong&gt;（类似 node id）：&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Client Side Caching-服务端反向索引在客户端断开之后没有做及时清理导致无限膨胀的问题</title>
      <link>https://quanyeyang.github.io/zh-cn/valkey/bugfix-client-side-caching-index-leak/</link>
      <pubDate>Wed, 15 Jul 2026 22:08:11 +0800</pubDate>
      <author>quanyemostima@gmail.com (杨全烨)</author>
      <guid>https://quanyeyang.github.io/zh-cn/valkey/bugfix-client-side-caching-index-leak/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Issue &lt;a href=&#34;https://github.com/valkey-io/valkey/issues/4143&#34; target=&#34;_blank&#34;&gt;#4143&lt;/a&gt; 的核心是：Client Side Caching（CSC）的服务端反向索引在客户端断开后&lt;strong&gt;故意不做即时清理&lt;/strong&gt;，&lt;strong&gt;导致内层表可无限膨胀&lt;/strong&gt;。
下面按&lt;strong&gt;机制 → 内存布局 → 生命周期 → 缺口&lt;/strong&gt; 来拆。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;这个非常像&lt;strong&gt;Thesis-ZooKeeper&lt;/strong&gt;中的客户端和server的watch机制。&lt;/p&gt;


&lt;h1 class=&#34;relative group&#34;&gt;问题背景 
    &lt;div id=&#34;%E9%97%AE%E9%A2%98%E8%83%8C%E6%99%AF&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%E9%97%AE%E9%A2%98%E8%83%8C%E6%99%AF&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h1&gt;


&lt;h2 class=&#34;relative group&#34;&gt;功能背景：Client Side Caching 
    &lt;div id=&#34;%E5%8A%9F%E8%83%BD%E8%83%8C%E6%99%AFclient-side-caching&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%E5%8A%9F%E8%83%BD%E8%83%8C%E6%99%AFclient-side-caching&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;CLIENT TRACKING on&lt;/code&gt; 让&lt;strong&gt;客户端在本地缓存 key&lt;/strong&gt;。
服务端&lt;strong&gt;不维护&lt;/strong&gt;「客户端有哪些 key」的&lt;strong&gt;完整正向索引&lt;/strong&gt;，而是维护反向索引：&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Valkey Over RDMA测试中server UAF崩溃的问题</title>
      <link>https://quanyeyang.github.io/zh-cn/valkey/bugfix-rdma-server-uaf/</link>
      <pubDate>Tue, 14 Jul 2026 21:46:50 +0800</pubDate>
      <author>quanyemostima@gmail.com (杨全烨)</author>
      <guid>https://quanyeyang.github.io/zh-cn/valkey/bugfix-rdma-server-uaf/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/valkey-io/valkey/issues/3345&#34; target=&#34;_blank&#34;&gt;https://github.com/valkey-io/valkey/issues/3345&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;我们遇到的主要现象就是ctrl + C的时候会出现段错误，应该如何解决？&lt;/p&gt;
&lt;p&gt;这是我们的PR:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/valkey-io/valkey/pull/3448&#34; target=&#34;_blank&#34;&gt;https://github.com/valkey-io/valkey/pull/3448&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;为了面试的时候讲清楚这个UAF导致的Server Crash问题，我们需要仔细复盘一下，
这个还是valkey Over RDMA的系列问题之一:&lt;/p&gt;


&lt;h2 class=&#34;relative group&#34;&gt;背景:RDMA为什么需要pending list 
    &lt;div id=&#34;%E8%83%8C%E6%99%AFrdma%E4%B8%BA%E4%BB%80%E4%B9%88%E9%9C%80%E8%A6%81pending-list&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%E8%83%8C%E6%99%AFrdma%E4%B8%BA%E4%BB%80%E4%B9%88%E9%9C%80%E8%A6%81pending-list&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;p&gt;RDMA 连接没有 TCP 那种 POLLOUT 事件来驱动 write handler，
所以 server &lt;strong&gt;用一张待处理链表手动&amp;quot;叫醒&amp;quot;连接&lt;/strong&gt;,
因为在真正开始传输数据的时候，我们使用的是RDMA的单边建立连接的方法，
WRITE_WITH_IMM,来产生通知，就是我知道什么时候可读，但是不知道什么时候可以写：&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>多线程下的RDMA的崩溃问题(无锁队列IO模型)</title>
      <link>https://quanyeyang.github.io/zh-cn/valkey/bugfix-multithread-rdma-lockfree-io/</link>
      <pubDate>Tue, 14 Jul 2026 21:27:29 +0800</pubDate>
      <author>quanyemostima@gmail.com (杨全烨)</author>
      <guid>https://quanyeyang.github.io/zh-cn/valkey/bugfix-multithread-rdma-lockfree-io/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;If it&amp;rsquo;s broken, I&amp;rsquo;ll fix it!&lt;/p&gt;&lt;/blockquote&gt;


&lt;h1 class=&#34;relative group&#34;&gt;现在重新引入了一个有意思的问题（背景阐述） 
    &lt;div id=&#34;%E7%8E%B0%E5%9C%A8%E9%87%8D%E6%96%B0%E5%BC%95%E5%85%A5%E4%BA%86%E4%B8%80%E4%B8%AA%E6%9C%89%E6%84%8F%E6%80%9D%E7%9A%84%E9%97%AE%E9%A2%98%E8%83%8C%E6%99%AF%E9%98%90%E8%BF%B0&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%E7%8E%B0%E5%9C%A8%E9%87%8D%E6%96%B0%E5%BC%95%E5%85%A5%E4%BA%86%E4%B8%80%E4%B8%AA%E6%9C%89%E6%84%8F%E6%80%9D%E7%9A%84%E9%97%AE%E9%A2%98%E8%83%8C%E6%99%AF%E9%98%90%E8%BF%B0&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h1&gt;
&lt;p&gt;描述:
本次问题解决的是&lt;strong&gt;RDMA的多线程导致的崩溃问题&lt;/strong&gt;.
在我们解决这个问题的同时,&lt;strong&gt;实际上主分支正在重构I/O的模型,我们不知道新的I/O模型是否还会出现这样的问题&lt;/strong&gt;.
(之后再进行验证)&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>valkey Over RDMA技术原理</title>
      <link>https://quanyeyang.github.io/zh-cn/valkey/rdma-valkey-over-rdma-internals/</link>
      <pubDate>Mon, 13 Jul 2026 15:03:13 +0800</pubDate>
      <author>quanyemostima@gmail.com (杨全烨)</author>
      <guid>https://quanyeyang.github.io/zh-cn/valkey/rdma-valkey-over-rdma-internals/</guid>
      <description>&lt;p&gt;&lt;strong&gt;2.RDMA基本概念&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;究竟是&lt;strong&gt;如何进行通信&lt;/strong&gt;的?&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;TCP是&lt;strong&gt;流式协议&lt;/strong&gt;(就是字节流),但是RDMA是&lt;strong&gt;面向消息&lt;/strong&gt;(就是element)通信的.&lt;/p&gt;
&lt;p&gt;放弃用双边操作（SEND/RECV）来传输业务数据，而是用双边操作来“交换信令”，用单边操作（WRITE）来“传输数据”。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Valkey Client&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;                                               &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Valkey Server &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Listen RDMA Port&lt;span class=&#34;o&#34;&gt;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;                                                                       &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;========================&lt;/span&gt; 1. 建立 RDMA &lt;span class=&#34;nv&#34;&gt;连接&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=========================&lt;/span&gt;&amp;gt;  &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &amp;lt;&lt;span class=&#34;o&#34;&gt;=======================&lt;/span&gt;    &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;RC QP 初始化&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;   &lt;span class=&#34;o&#34;&gt;========================&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;                                                                       &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==================&lt;/span&gt; 2. 交换 Feature 支持 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;@IBV_WR_SEND&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=============&lt;/span&gt;&amp;gt;  &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &amp;lt;&lt;span class=&#34;o&#34;&gt;=================&lt;/span&gt; 3. 交换 Feature 支持 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;@IBV_WR_SEND&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==============&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;                                                                       &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;                     &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;阶段 A：初始化远端内存写入权限&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; 这里都是双边操作        &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &amp;lt;---- 4. Server 发送其 RX Buffer 的地址/长度/R_Key &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;@IBV_WR_SEND&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; ---   &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Server 执行 ibv_post_recv 准备接收命令&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; ---- 5. Client 发送其 RX Buffer 的地址/长度/R_Key &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;@IBV_WR_SEND&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; ---&amp;gt;   &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Client 执行 ibv_post_recv 准备接收响应&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; 两边都通过send来发送R_key和内存地址,两边收到之后都可以绕过CPU直接进行读写的操作.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;                                                                       &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;                     &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;阶段 B：使用 WRITE 进行命令与数据交互&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;           &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; --- 6. Valkey Command &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;如 PING&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;@IBV_WR_RDMA_WRITE_WITH_IMM&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; ------&amp;gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;直接写入 Server 内存，触发 IMM 通知 Server CPU&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &amp;lt;--- 7. Valkey Response &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;如 PONG&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;@IBV_WR_RDMA_WRITE_WITH_IMM&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; ----- &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;直接写入 Client 内存，触发 IMM 通知 Client CPU&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; --- 8. Valkey Command &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;如 SET&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;@IBV_WR_RDMA_WRITE_WITH_IMM&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; -------&amp;gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &amp;lt;--- 9. Valkey Response &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;如 OK&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;@IBV_WR_RDMA_WRITE_WITH_IMM&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; ------- &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;                                                                       &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;                     &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;阶段 C：处理缓冲区写满 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;RX is full&lt;span class=&#34;o&#34;&gt;)]&lt;/span&gt;             &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;假设 Client 发现 Server 之前给的 RX Buffer 空间不足了&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;               &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;                                                                       &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &amp;lt;--- 10. Server 重新注册内存并发送新 RX Buffer 信息 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;@IBV_WR_SEND&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; -- &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Server 发现自己消费完了，主动发新 Buffer，并 ibv_post_recv&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; --- 11. Valkey Command &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;恢复发送&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;@IBV_WR_RDMA_WRITE_WITH_IMM&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; ----&amp;gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;                                                                       &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;假设 Server 发现 Client 的 RX Buffer 不足了&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;                         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; ---- 12. Client 重新注册内存并发送新 RX Buffer 信息 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;@IBV_WR_SEND&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;-&amp;gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Client 主动发新 Buffer，并 ibv_post_recv&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &amp;lt;--- 13. Valkey Response &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;恢复发送&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;@IBV_WR_RDMA_WRITE_WITH_IMM&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; --- &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;                                                                       &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;========================&lt;/span&gt; 14. 断开 RDMA &lt;span class=&#34;nv&#34;&gt;连接&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;========================&lt;/span&gt;&amp;gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;1.什么是IMM消息通知?&lt;/strong&gt;&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Raft Cluster valkey-cli Tooling Compatibility</title>
      <link>https://quanyeyang.github.io/zh-cn/valkey/feature-raft-cli-tooling/</link>
      <pubDate>Mon, 13 Jul 2026 14:53:53 +0800</pubDate>
      <author>quanyemostima@gmail.com (杨全烨)</author>
      <guid>https://quanyeyang.github.io/zh-cn/valkey/feature-raft-cli-tooling/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;也是非常有趣的话题，最近valkey引入了Raft算法。&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;这个 PR 解决的是：Raft 集群里，&lt;strong&gt;服务端对拓扑变更命令的执行模型变了&lt;/strong&gt;，
但 &lt;code&gt;valkey-cli --cluster fix&lt;/code&gt; 还在用旧的 gossip 事务模型发命令，两者不兼容。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/valkey-io/valkey/issues/3856&#34; target=&#34;_blank&#34;&gt;https://github.com/valkey-io/valkey/issues/3856&lt;/a&gt; 可以来学习一下。&lt;/p&gt;


&lt;h2 class=&#34;relative group&#34;&gt;start 
    &lt;div id=&#34;start&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#start&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;p&gt;首先切换的最新的上游分支：&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Raft Cluster Support For Non-Voting Memebers</title>
      <link>https://quanyeyang.github.io/zh-cn/valkey/feature-raft-non-voting-members/</link>
      <pubDate>Sun, 12 Jul 2026 23:44:47 +0800</pubDate>
      <author>quanyemostima@gmail.com (杨全烨)</author>
      <guid>https://quanyeyang.github.io/zh-cn/valkey/feature-raft-non-voting-members/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;也是Raft中一个很有意思的话题，我们来实现一个新的角色：Learner.
那这个实现的排期还挺紧迫的,这个毫无疑问也是&lt;strong&gt;比预选举协议更具有挑战性。&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/valkey-io/valkey/issues/3866&#34; target=&#34;_blank&#34;&gt;原issue&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;关于Raft的架构可以在&lt;strong&gt;Raft Cluster Pre-Vote Protocol&lt;/strong&gt;中复习，这是我们做的第一个Raft相关的PR.&lt;/p&gt;
&lt;p&gt;刚好同时了解集群的原理:&lt;strong&gt;特性：Redis Cluster 集群&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;需求是这么写的：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Implement support for &amp;ldquo;Learner&amp;rdquo; or &amp;ldquo;Observer&amp;rdquo; non-voting roles in the Raft consensus group.&lt;/em&gt;
实现learner 或者 observer.（实际上就是learner）.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Raft Cluster Pre-Vote Protocol</title>
      <link>https://quanyeyang.github.io/zh-cn/valkey/feature-raft-cluster-pre-vote-protocol/</link>
      <pubDate>Sun, 12 Jul 2026 23:06:26 +0800</pubDate>
      <author>quanyemostima@gmail.com (杨全烨)</author>
      <guid>https://quanyeyang.github.io/zh-cn/valkey/feature-raft-cluster-pre-vote-protocol/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;本文章写于cluster bus 可插拔raft协议改造的早期，此时还未成形，
只是笔者学习的一个记录而已,因为笔者在尝试在 redis 的 cluster V2中实现Raft的预选举协议。
已经merge,我们还可以进行一些复盘。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/valkey-io/valkey/issues/3860&#34; target=&#34;_blank&#34;&gt;原issue界面&lt;/a&gt;
这是valkey尝试实现可插拔的Raft协议中的&lt;a href=&#34;https://github.com/valkey-io/valkey/issues/3860&#34; target=&#34;_blank&#34;&gt;预选举问题&lt;/a&gt;，这也算是一个有趣的工程实现。
这里我们还是需要首先研究：&lt;a href=&#34;https://web.stanford.edu/~ouster/cgi-bin/papers/OngaroPhD.pdf&#34; target=&#34;_blank&#34;&gt;Diego Ongaro博士毕业论文原文&lt;/a&gt; 中的9.6节摘录：
&lt;em&gt;Preventing disruptions when a server rejoins the cluster One downside of Raft’s leader election algorithm is that a server that has been partitioned from the cluster is likely to cause a disruption when it regains connectivity. When a server is partitioned, it will not receive heartbeats. It will soon increment its term to start an election, although it won’t be able to collect enough votes to become leader. When the server regains connectivity sometime later, its larger term number will propagate to the rest of the cluster (either through the server’s RequestVote requests or through its AppendEntries response). This will force the cluster leader to step down, and a new election will have to take place to select a new leader. Fortunately, such events are likely to be rare, and each will only cause one leader to step down. If desired, Raft’s basic leader election algorithm can be extended with an additional phase to prevent such disruptions, forming the Pre-Vote algorithm. In the Pre-Vote algorithm, a candidate only increments its term if it first learns from a majority of the cluster that they would be willing to grant the candidate their votes (if the candidate’s log is sufficiently up-to-date, and the voters have not received heartbeats from a valid leader for at least a baseline election timeout). This was inspired by ZooKeeper’s algorithm, in which a server must receive a majority of votes before it calculates a new epoch and sends NewEpoch messages (however, in ZooKeeper servers do not solicit votes, other servers offer them). The Pre-Vote algorithm solves the issue of a partitioned server disrupting the cluster when it rejoins. While a server is partitioned, it won’t be able to increment its term, since it can’t receive permission from a majority of the cluster. Then, when it rejoins the cluster, it still won’t be able to increment its term, since the other servers will have been receiving regular heartbeats from the leader. Once the server receives a heartbeat from the leader itself, it will return to the follower state (in the same term). We recommend the Pre-Vote extension in deployments that would benefit from additional robustness. We also tested it in various leader election scenarios in AvailSim, and it does not appear to significantly harm election performance.&lt;/em&gt;
以下是&lt;strong&gt;翻译&lt;/strong&gt;：&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>事件通知是怎么产生的？</title>
      <link>https://quanyeyang.github.io/zh-cn/valkey/rdma-how-event-notifications-work/</link>
      <pubDate>Thu, 09 Jul 2026 15:50:02 +0800</pubDate>
      <author>quanyemostima@gmail.com (杨全烨)</author>
      <guid>https://quanyeyang.github.io/zh-cn/valkey/rdma-how-event-notifications-work/</guid>
      <description>&lt;p&gt;看看一个RDMA的上下文：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-C&#34; data-lang=&#34;C&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;typedef&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;RdmaContext&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;connection&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;conn&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 上层连接结构体
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ip&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;port&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;long&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;long&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;keepalive_te&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;cm&#34;&gt;/* RDMA has no transport layer keepalive */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ibv_pd&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 保护域
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;rdma_event_channel&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cm_channel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ibv_comp_channel&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;comp_channel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// CQ的通知事件，用来触发POLLIN事件
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ibv_cq&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cq&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;cm&#34;&gt;/* TX */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;RdmaXfer&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tx_addr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;cm&#34;&gt;/* remote transfer buffer address */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;uint32_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tx_key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;cm&#34;&gt;/* remote transfer buffer key */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;uint32_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tx_length&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;cm&#34;&gt;/* remote transfer buffer length */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;uint32_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tx_offset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;cm&#34;&gt;/* remote transfer buffer offset */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;uint32_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tx_ops&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;cm&#34;&gt;/* operations on remote transfer */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;cm&#34;&gt;/* RX */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;RdmaXfer&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;rx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;cm&#34;&gt;/* CMD 0 ~ VALKEY_RDMA_MAX_WQE for recv buffer
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;     * VALKEY_RDMA_MAX_WQE ~ 2 * VALKEY_RDMA_MAX_WQE -1 for send buffer */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;ValkeyRdmaCmd&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cmd_buf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ibv_mr&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cmd_mr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;RdmaContext&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      
    </item>
    
    <item>
      <title>实现RDMA库的运行时动态加载(对于client和benchmark)</title>
      <link>https://quanyeyang.github.io/zh-cn/valkey/feature-rdma-runtime-dynamic-loading/</link>
      <pubDate>Mon, 06 Jul 2026 16:56:17 +0800</pubDate>
      <author>quanyemostima@gmail.com (杨全烨)</author>
      <guid>https://quanyeyang.github.io/zh-cn/valkey/feature-rdma-runtime-dynamic-loading/</guid>
      <description>&lt;p&gt;两个PR：
&lt;a href=&#34;https://github.com/valkey-io/valkey/pull/3072&#34; target=&#34;_blank&#34;&gt;valkey主库修改&lt;/a&gt;
&lt;a href=&#34;https://github.com/valkey-io/libvalkey/pull/284&#34; target=&#34;_blank&#34;&gt;libvalkey上游&lt;/a&gt;
我们主要讲述这个在&lt;strong&gt;client&lt;/strong&gt;和benchmark上做RDMA的两个库的动态加载这两个问题,两个库&lt;code&gt;librdmacm&lt;/code&gt; &lt;code&gt;libibverbs&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;之后最好再阅读一下CSAPP关于动态链接的部分，之后还预计出一篇文章好好讲解一下程序的链接，也是一门大学问。
这个真的值得深挖。&lt;/p&gt;


&lt;h2 class=&#34;relative group&#34;&gt;背景 
    &lt;div id=&#34;%E8%83%8C%E6%99%AF&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%E8%83%8C%E6%99%AF&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;p&gt;最早是字节跳动在进行valkey Over RDMA的开发,
但是只做了对于server的解耦,
但是没有对于client和benchmark的解耦,
这就导致了Opensuse,linux的发行版引来了这样的问题:&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>valkey32bit构建下头文件顺序问题</title>
      <link>https://quanyeyang.github.io/zh-cn/valkey/bugfix-valkey-32bit-header-order/</link>
      <pubDate>Sun, 05 Jul 2026 19:28:49 +0800</pubDate>
      <author>quanyemostima@gmail.com (杨全烨)</author>
      <guid>https://quanyeyang.github.io/zh-cn/valkey/bugfix-valkey-32bit-header-order/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;这个PR非常有纪念意义，这是我们给Valkey提出的第一个PR。&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;同时关于静态链接的内容，都可以在&lt;strong&gt;CSAPPLinkLab&lt;/strong&gt;中进行学习。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/valkey-io/valkey/pull/2943&#34; target=&#34;_blank&#34;&gt;PR页面&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;代码层面就是加了很多&lt;code&gt;../fmacros.h&lt;/code&gt;并且server之前加上了一个验证。&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-C&#34; data-lang=&#34;C&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * Sanity check: we require large-file support. If include order caused
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * _FILE_OFFSET_BITS to be ignored, off_t may end up 32-bit on 32-bit builds,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * which will lead to ODR/LTO type mismatches. Fail fast at compile time.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;sys/types.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;static_assert&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;sizeof&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;off_t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;off_t must be 64-bit; ensure _FILE_OFFSET_BITS=64 is in effect before system headers&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 到这里为止所有的off_t偏移的定义都应该是8
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3 class=&#34;relative group&#34;&gt;&lt;strong&gt;第一部分：核心概念深度解析&lt;/strong&gt; 
    &lt;div id=&#34;%E7%AC%AC%E4%B8%80%E9%83%A8%E5%88%86%E6%A0%B8%E5%BF%83%E6%A6%82%E5%BF%B5%E6%B7%B1%E5%BA%A6%E8%A7%A3%E6%9E%90&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%E7%AC%AC%E4%B8%80%E9%83%A8%E5%88%86%E6%A0%B8%E5%BF%83%E6%A6%82%E5%BF%B5%E6%B7%B1%E5%BA%A6%E8%A7%A3%E6%9E%90&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h3&gt;


&lt;h3 class=&#34;relative group&#34;&gt;&lt;strong&gt;1. 什么是 ABI (Application Binary Interface)？&lt;/strong&gt; 
    &lt;div id=&#34;1-%E4%BB%80%E4%B9%88%E6%98%AF-abi-application-binary-interface&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#1-%E4%BB%80%E4%B9%88%E6%98%AF-abi-application-binary-interface&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;CSAPP 对应章节： 第 3 章（机器级代码），但概念贯穿全书。&lt;/strong&gt;&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>valkey-benchmark端RDMA协议的丢失唤醒问题</title>
      <link>https://quanyeyang.github.io/zh-cn/valkey/bugfix-benchmark-rdma-lost-wakeup/</link>
      <pubDate>Sun, 05 Jul 2026 19:24:12 +0800</pubDate>
      <author>quanyemostima@gmail.com (杨全烨)</author>
      <guid>https://quanyeyang.github.io/zh-cn/valkey/bugfix-benchmark-rdma-lost-wakeup/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/valkey-io/valkey/issues/3345#issuecomment-4084382404&#34; target=&#34;_blank&#34;&gt;https://github.com/valkey-io/valkey/issues/3345#issuecomment-4084382404&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;用户使用benchmark客户端GET有问题?初步分析就是丢失唤醒的问题.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;删除代码比加上代码牛逼.&lt;/p&gt;&lt;/blockquote&gt;


&lt;h3 class=&#34;relative group&#34;&gt;&lt;strong&gt;git清理&lt;/strong&gt; 
    &lt;div id=&#34;git%E6%B8%85%E7%90%86&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#git%E6%B8%85%E7%90%86&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; git clean &lt;span class=&#34;c1&#34;&gt;# 清理未跟踪的文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;git clean -nd src/unit&lt;/code&gt;&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Raft-based cluster bus (Cluster V2)</title>
      <link>https://quanyeyang.github.io/zh-cn/valkey/feature-raft-cluster-bus-v2/</link>
      <pubDate>Thu, 02 Jul 2026 23:24:33 +0800</pubDate>
      <author>quanyemostima@gmail.com (杨全烨)</author>
      <guid>https://quanyeyang.github.io/zh-cn/valkey/feature-raft-cluster-bus-v2/</guid>
      <description>&lt;p&gt;最近，valkey社区在尝试新的feature,Cluster总线通信方式利用Raft协议，笔者刚学完Raft和主从相关的内容，同时认领了一个issue。
于是想尝试多解决几个这里的问题，就深度研究一下。&lt;/p&gt;
&lt;p&gt;以下是几个社区中讨论的链接：
&lt;a href=&#34;https://github.com/valkey-io/valkey/issues/3856&#34; target=&#34;_blank&#34;&gt;父issue&lt;/a&gt;
分为多个subissues：我们总结一下：&lt;/p&gt;


&lt;h3 class=&#34;relative group&#34;&gt;1.核心底座：Raft 共识与状态机持久化 
    &lt;div id=&#34;1%E6%A0%B8%E5%BF%83%E5%BA%95%E5%BA%A7raft-%E5%85%B1%E8%AF%86%E4%B8%8E%E7%8A%B6%E6%80%81%E6%9C%BA%E6%8C%81%E4%B9%85%E5%8C%96&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#1%E6%A0%B8%E5%BF%83%E5%BA%95%E5%BA%A7raft-%E5%85%B1%E8%AF%86%E4%B8%8E%E7%8A%B6%E6%80%81%E6%9C%BA%E6%8C%81%E4%B9%85%E5%8C%96&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h3&gt;
&lt;p&gt;这是 Raft 算法最&lt;strong&gt;原教旨主义&lt;/strong&gt;的部分，确保集群在断电或崩溃后不丢失状态。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Valkey Over RDMA-支持多线程测试(新测试框架)</title>
      <link>https://quanyeyang.github.io/zh-cn/valkey/feature-rdma-multithread-tests/</link>
      <pubDate>Mon, 29 Jun 2026 17:13:42 +0800</pubDate>
      <author>quanyemostima@gmail.com (杨全烨)</author>
      <guid>https://quanyeyang.github.io/zh-cn/valkey/feature-rdma-multithread-tests/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;我就直接认为这是一个新的feature了，就是利用libvalkey的client客户端进行模拟的压测，同时是需要支持多线程的。&lt;/p&gt;&lt;/blockquote&gt;


&lt;h2 class=&#34;relative group&#34;&gt;本次修改的测试逻辑 
    &lt;div id=&#34;%E6%9C%AC%E6%AC%A1%E4%BF%AE%E6%94%B9%E7%9A%84%E6%B5%8B%E8%AF%95%E9%80%BB%E8%BE%91&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%E6%9C%AC%E6%AC%A1%E4%BF%AE%E6%94%B9%E7%9A%84%E6%B5%8B%E8%AF%95%E9%80%BB%E8%BE%91&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;这算是一个新的feature,我们需要提一个新的PR来解决问题。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;在&lt;code&gt;tests/rdma&lt;/code&gt;的目录下方，增加&lt;code&gt;libvalkey-test.c&lt;/code&gt;，直接使用&lt;code&gt;libvalkey&lt;/code&gt;的&lt;code&gt;client&lt;/code&gt;相关的API来进行测试即可。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>CVE-2026-25243 Invalid Memory Access in Redis RESTORE Command May Lead to Remote Code Execution</title>
      <link>https://quanyeyang.github.io/zh-cn/valkey/security-cve-2026-25243-restore-rce/</link>
      <pubDate>Wed, 27 May 2026 23:17:00 +0800</pubDate>
      <author>quanyemostima@gmail.com (杨全烨)</author>
      <guid>https://quanyeyang.github.io/zh-cn/valkey/security-cve-2026-25243-restore-rce/</guid>
      <description>&lt;h1 class=&#34;relative group&#34;&gt;CVE-2026-25243 — Invalid Memory Access in Redis RESTORE Command May Lead to Remote Code Execution 
    &lt;div id=&#34;cve-2026-25243--invalid-memory-access-in-redis-restore-command-may-lead-to-remote-code-execution&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#cve-2026-25243--invalid-memory-access-in-redis-restore-command-may-lead-to-remote-code-execution&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h1&gt;
&lt;p&gt;该漏洞的触发点位于 Redis 的 &lt;code&gt;RESTORE&lt;/code&gt; 命令。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>CVE-2026-27623 Pre-Authentication DOS from malformed RESP request</title>
      <link>https://quanyeyang.github.io/zh-cn/valkey/security-cve-2026-27623-resp-dos/</link>
      <pubDate>Tue, 26 May 2026 23:06:59 +0800</pubDate>
      <author>quanyemostima@gmail.com (杨全烨)</author>
      <guid>https://quanyeyang.github.io/zh-cn/valkey/security-cve-2026-27623-resp-dos/</guid>
      <description>&lt;h1 class=&#34;relative group&#34;&gt;CVE-2026-27623 — Pre-Authentication DOS from malformed RESP request 
    &lt;div id=&#34;cve-2026-27623--pre-authentication-dos-from-malformed-resp-request&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#cve-2026-27623--pre-authentication-dos-from-malformed-resp-request&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Valkey 预认证拒绝服务 | RESP 协议状态机 | CVSS 3.1: 7.5 HIGH | CWE-20 | 无需认证&lt;/strong&gt; | &lt;a href=&#34;#%e5%a4%8d%e7%8e%b0%e6%ad%a5%e9%aa%a4&#34;&gt;复现步骤&lt;/a&gt;&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>多线程下RDMA的崩溃问题</title>
      <link>https://quanyeyang.github.io/zh-cn/valkey/bugfix-multithread-rdma-crash/</link>
      <pubDate>Sun, 17 May 2026 10:48:06 +0800</pubDate>
      <author>quanyemostima@gmail.com (杨全烨)</author>
      <guid>https://quanyeyang.github.io/zh-cn/valkey/bugfix-multithread-rdma-crash/</guid>
      <description>&lt;p&gt;本文记录了作者尝试解决这个[CRASH] Does Valkey over RDMA not support I/O threads? #3112 的问题.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/valkey-io/valkey/issues/3112&#34; target=&#34;_blank&#34;&gt;https://github.com/valkey-io/valkey/issues/3112&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;总结一次实验的workflow,这是拉的战线最长的一次,前前后后整了一个多月还没merge进去.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;server端&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 解开当前进程的内存锁&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo prlimit --memlock&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;unlimited --pid &lt;span class=&#34;nv&#34;&gt;$$&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 创建在内存中工作的虚拟网卡&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo modprobe dummy
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo ip link add dummy0 &lt;span class=&#34;nb&#34;&gt;type&lt;/span&gt; dummy
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo ip link &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; dummy0 up
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 配置本地的IP&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo ip addr add 10.0.0.1/24 dev dummy0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 做RXE的绑定&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo rdma link add rxe_dummy &lt;span class=&#34;nb&#34;&gt;type&lt;/span&gt; rxe netdev dummy0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 停止本来运行的 valkey&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl stop valkey
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 编译一遍&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;nv&#34;&gt;BUILD_RDMA&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;yes &lt;span class=&#34;nv&#34;&gt;USE_FAST_FLOAT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;yes
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 跑server&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo ./src/valkey-server valkey.conf --rdma-bind 10.0.0.1 --rdma-port &lt;span class=&#34;m&#34;&gt;6379&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;client端&lt;/strong&gt;&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>为什么多线程会出现问题的总结</title>
      <link>https://quanyeyang.github.io/zh-cn/valkey/bugfix-multithread/</link>
      <pubDate>Fri, 15 May 2026 22:11:18 +0800</pubDate>
      <author>quanyemostima@gmail.com (杨全烨)</author>
      <guid>https://quanyeyang.github.io/zh-cn/valkey/bugfix-multithread/</guid>
      <description>&lt;p&gt;&lt;strong&gt;多线程下RDMA的崩溃问题&lt;/strong&gt;
&lt;strong&gt;多线程下的RDMA的崩溃问题(无锁队列IO模型)&lt;/strong&gt;
上述的两个问题都和RDMA通知模型相关.
对 socket/unix，&lt;code&gt;ConnectionType&lt;/code&gt; 里 &lt;code&gt;update_state&lt;/code&gt; 为 NULL，&lt;code&gt;connUpdateState&lt;/code&gt; 基本是空操作。
对 RDMA，&lt;code&gt;updateRdmaState&lt;/code&gt; 会 直接调用数据面：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-C&#34; data-lang=&#34;C&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;static&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;updateRdmaState&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;connection&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;conn&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;n&#34;&gt;rdma_connection&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rdma_conn&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rdma_connection&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;conn&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;nf&#34;&gt;connRdmaSetRwHandler&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;conn&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;nf&#34;&gt;connRdmaEventHandler&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;NULL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;rdma_conn&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;而 &lt;code&gt;connRdmaEventHandler&lt;/code&gt; 会 &lt;strong&gt;poll CQ&lt;/strong&gt;，并在未 postpone 时 循环调用 &lt;code&gt;read_handler&lt;/code&gt;（把已 DMA 到 &lt;code&gt;rx.addr&lt;/code&gt; 的数据交给上层）：&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>多线程下RDB文件crash</title>
      <link>https://quanyeyang.github.io/zh-cn/valkey/bugfix-multithread-rdb-crash/</link>
      <pubDate>Fri, 15 May 2026 22:10:35 +0800</pubDate>
      <author>quanyemostima@gmail.com (杨全烨)</author>
      <guid>https://quanyeyang.github.io/zh-cn/valkey/bugfix-multithread-rdb-crash/</guid>
      <description>&lt;p&gt;这个应该就是多线程的情况下才会发生的问题,之后再看.
这是我个人在做测试的时候发现valkey的一个新的问题,可以先试试
workflow可以这样:
首先在unstable上进行编译,先起一个服务器,但是不要更改valkey.conf,之后压测的时候应该默认会产生对应的RDB文件才对.
我们就在主线程上做测试看看是否会出现问题.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 解开当前进程的内存锁&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo prlimit --memlock&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;unlimited --pid &lt;span class=&#34;nv&#34;&gt;$$&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 创建在内存中工作的虚拟网卡&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo modprobe dummy
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo ip link add dummy0 &lt;span class=&#34;nb&#34;&gt;type&lt;/span&gt; dummy
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo ip link &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; dummy0 up
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 配置本地的IP&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo ip addr add 10.0.0.1/24 dev dummy0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 做RXE的绑定&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo rdma link add rxe_dummy &lt;span class=&#34;nb&#34;&gt;type&lt;/span&gt; rxe netdev dummy0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 停止本来运行的 valkey&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl stop valkey
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 编译一遍&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;nv&#34;&gt;BUILD_RDMA&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;yes &lt;span class=&#34;nv&#34;&gt;USE_FAST_FLOAT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;yes
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 跑server&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo ./src/valkey-server valkey.conf --rdma-bind 10.0.0.1 --rdma-port &lt;span class=&#34;m&#34;&gt;6379&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;之后我们起客户端做压测:&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Toefl</title>
      <link>https://quanyeyang.github.io/zh-cn/life/toefl/</link>
      <pubDate>Mon, 04 Aug 2025 09:57:24 +0800</pubDate>
      <author>quanyemostima@gmail.com (杨全烨)</author>
      <guid>https://quanyeyang.github.io/zh-cn/life/toefl/</guid>
      <description>&lt;h1 class=&#34;relative group&#34;&gt;TOEFL 
    &lt;div id=&#34;toefl&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#toefl&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;​	这个笔记用来记录托福的备考.我是报了一个新东方网课,但是肯定自己要好好准备,线下的课程太贵并且我懒得通勤,大概就是这样的.&lt;/p&gt;
&lt;p&gt;​	&lt;strong&gt;Practice makes perfect!!!&lt;/strong&gt;&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Web_Development</title>
      <link>https://quanyeyang.github.io/zh-cn/tech/web_development/</link>
      <pubDate>Fri, 01 Aug 2025 12:05:12 +0800</pubDate>
      <author>quanyemostima@gmail.com (杨全烨)</author>
      <guid>https://quanyeyang.github.io/zh-cn/tech/web_development/</guid>
      <description>&lt;h1 class=&#34;relative group&#34;&gt;Web_Development 
    &lt;div id=&#34;web_development&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#web_development&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;​	本文是关于&lt;strong&gt;web开发导论&lt;/strong&gt;的一些内容，主要是为了对于web开发有一个现代并且全面的认知，说来惭愧，笔者现在大二已经结束，但是对于web开发还是没有一个深刻的认知，仅仅停留在写过一些前端和Java代码上面，从这里作为起点，我们来开始对于Web开发的探索，希望能成为我dev的指明灯。&lt;/p&gt;
&lt;p&gt;​	这里就仅仅是&lt;strong&gt;通识性&lt;/strong&gt;的知识。仅作个人笔记使用。&lt;/p&gt;
&lt;p&gt;​	“什么是”，但是不是“怎么用”。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Env_setup_log</title>
      <link>https://quanyeyang.github.io/zh-cn/tech/env_setup_log/</link>
      <pubDate>Mon, 28 Jul 2025 12:23:03 +0800</pubDate>
      <author>quanyemostima@gmail.com (杨全烨)</author>
      <guid>https://quanyeyang.github.io/zh-cn/tech/env_setup_log/</guid>
      <description>&lt;h1 class=&#34;relative group&#34;&gt;logs 
    &lt;div id=&#34;logs&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#logs&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h1&gt;


&lt;h2 class=&#34;relative group&#34;&gt;archlinux 
    &lt;div id=&#34;archlinux&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#archlinux&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;​	关于安装和后期维护的问题.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Toeic</title>
      <link>https://quanyeyang.github.io/zh-cn/life/toeic/</link>
      <pubDate>Wed, 09 Jul 2025 21:55:55 +0800</pubDate>
      <author>quanyemostima@gmail.com (杨全烨)</author>
      <guid>https://quanyeyang.github.io/zh-cn/life/toeic/</guid>
      <description>&lt;h1 class=&#34;relative group&#34;&gt;Toeic备考 
    &lt;div id=&#34;toeic%E5%A4%87%E8%80%83&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#toeic%E5%A4%87%E8%80%83&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;​	看看能不能10天之内速通Toeic的简单记录，用的是新东方的1000题，因为看到网上都用这个。然后就是XDF的题目好像普遍难度偏大一些。&lt;/p&gt;
&lt;p&gt;​	估分就直接按照1道题目5分来算吧。暂定的目标分数是&lt;strong&gt;730/990&lt;/strong&gt;。&lt;/p&gt;&lt;/blockquote&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;index&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;听力&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;阅读&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;总分&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;1&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;375（错25个）&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;400（错20个，应该超时了，我靠）&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;775&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;2&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;385（错23个）&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;335（错33个，10个没写）&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;720&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;3&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;370（错26个）&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;335(错33个，但是写完了，我靠，绷不住)&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;705&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;4&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;385（错23个）&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;350（5个没写，错30个）&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;735&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;5&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;355（错29个）&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;335错33个（六个没写）&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;690&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;6（真题）&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;460（错8个）&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;420（错16个，刚好写完）&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;880（希望真题就这个水平）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;7&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;/&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;/&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;/&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;8&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;/&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;/&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;/&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;9&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;385（错23个，看来是没有什么变化了）&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;懒得写了&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;385 + ？&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;10&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;/&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;385（错23个，提前3min写完，状态最好的一集）&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;385&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;


&lt;h1 class=&#34;relative group&#34;&gt;Word 
    &lt;div id=&#34;word&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#word&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;​	说实话，刚考完N2,而且好久没有学过英语了，有点没有动力，但是不想浪费&lt;strong&gt;808元RMB&lt;/strong&gt;。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Japanese_N2</title>
      <link>https://quanyeyang.github.io/zh-cn/life/japanese_n2/</link>
      <pubDate>Mon, 07 Jul 2025 05:28:50 +0800</pubDate>
      <author>quanyemostima@gmail.com (杨全烨)</author>
      <guid>https://quanyeyang.github.io/zh-cn/life/japanese_n2/</guid>
      <description>&lt;h1 class=&#34;relative group&#34;&gt;Japanese_N2 
    &lt;div id=&#34;japanese_n2&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#japanese_n2&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;这是我在&lt;strong&gt;N2&lt;/strong&gt;考试之前的学习之中简单整理的一些错误点。&lt;/p&gt;
&lt;p&gt;这个可以简单理解成N2错题本。&amp;mdash;》如果考过了我会总结一下经验（备考的）&lt;/p&gt;
&lt;p&gt;我觉得这是很好的学习方法，说实话感觉整理迟了，在N1学习的时候我会系统的这样进行整理！&lt;/p&gt;
&lt;p&gt;日本語を勉強しましょう！&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;​	现在考完了，简单总结一下，大概基础错了6-7个，阅读错了两个（但是我认为阅读是这次比较难的部分，很多都拿不准，答案也是moji的回忆版本，应该差不多），听力错了3个（听力状态不错，虽然前一天晚上没怎么睡觉），总的来说肯定是能过，而且分数应该还挺高，半年左右不算白学（N2本身也不是算很难），之后就是冲N1了，一直考，直到考过了为止，继续加油吧！&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>DigitalLogicCircuits</title>
      <link>https://quanyeyang.github.io/zh-cn/notes/digitallogiccircuits/</link>
      <pubDate>Fri, 27 Jun 2025 21:34:27 +0800</pubDate>
      <author>quanyemostima@gmail.com (杨全烨)</author>
      <guid>https://quanyeyang.github.io/zh-cn/notes/digitallogiccircuits/</guid>
      <description>&lt;h1 class=&#34;relative group&#34;&gt;数字电路基础 
    &lt;div id=&#34;%E6%95%B0%E5%AD%97%E7%94%B5%E8%B7%AF%E5%9F%BA%E7%A1%80&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%E6%95%B0%E5%AD%97%E7%94%B5%E8%B7%AF%E5%9F%BA%E7%A1%80&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h1&gt;
&lt;p&gt;我对于学校数字电路实验的评教，今天遇到了一些事情，真的非常生气，我不写出来实在是难受：&lt;/p&gt;
&lt;p&gt;​	我校的以vivado为开发平台的数字电路实验是相当不合理的：&lt;/p&gt;
&lt;p&gt;​	1.学生对于vivado没有相当的基础，身为一名计算机学院的学生，对于计算机组成原理的重要性认知很清楚，但是对于硬件开发没有合理的认知水平，理论铺设不到位，对于使用的软件更是一知半解。所以我们的实验是怎么开展的呢，“抄代码”，对着截了很多模糊不清的图片的PPT，抄，抄有着“详细注释”的宋体代码，我们试图在西一楼106机房“抄”出来对于数字电路的认知，这是难以置信的。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>CSAPP:MallocLab</title>
      <link>https://quanyeyang.github.io/zh-cn/csapp/csappmalloclab/</link>
      <pubDate>Sun, 01 Jun 2025 18:18:00 +0800</pubDate>
      <author>quanyemostima@gmail.com (杨全烨)</author>
      <guid>https://quanyeyang.github.io/zh-cn/csapp/csappmalloclab/</guid>
      <description>&lt;h1 class=&#34;relative group&#34;&gt;Virtual Memory:MallocLab 
    &lt;div id=&#34;virtual-memorymalloclab&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#virtual-memorymalloclab&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;CSAPP中关于虚拟内存的一点简单笔记。&lt;/p&gt;&lt;/blockquote&gt;


&lt;h2 class=&#34;relative group&#34;&gt;1.物理和虚拟寻址 
    &lt;div id=&#34;1%E7%89%A9%E7%90%86%E5%92%8C%E8%99%9A%E6%8B%9F%E5%AF%BB%E5%9D%80&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#1%E7%89%A9%E7%90%86%E5%92%8C%E8%99%9A%E6%8B%9F%E5%AF%BB%E5%9D%80&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;p&gt;
    &lt;figure&gt;
      &lt;img class=&#34;my-0 rounded-md&#34; loading=&#34;lazy&#34; src=&#34;https://quanyeyang.github.io/img/image-20250513200943305.png&#34; alt=&#34;image-20250513200943305&#34; /&gt;
      
    &lt;/figure&gt;
&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>80X86:Assembly</title>
      <link>https://quanyeyang.github.io/zh-cn/notes/80x86assembly/</link>
      <pubDate>Sun, 11 May 2025 15:06:35 +0800</pubDate>
      <author>quanyemostima@gmail.com (杨全烨)</author>
      <guid>https://quanyeyang.github.io/zh-cn/notes/80x86assembly/</guid>
      <description>&lt;h1 class=&#34;relative group&#34;&gt;汇编语言复习 
    &lt;div id=&#34;%E6%B1%87%E7%BC%96%E8%AF%AD%E8%A8%80%E5%A4%8D%E4%B9%A0&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%E6%B1%87%E7%BC%96%E8%AF%AD%E8%A8%80%E5%A4%8D%E4%B9%A0&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;​	1.这是某学校汇编语言的课程内容，简单做一个复习的笔记，如果能帮到校友就更好了&amp;hellip;&amp;hellip;&lt;/p&gt;
&lt;p&gt;​	2.整体来看感觉内容不多，但是很杂很乱，容易一开始让人很不知所以然，再加上讲课老师感觉逻辑性不算很强，可能让人感觉有点劝退，但是这门课程本身还是相当重要的&amp;hellip;&amp;hellip;&lt;/p&gt;
&lt;p&gt;​	3.然后就是关于本课程的实验，我的评价就是善用AI，如果你觉得很难写，但是前提是你先要看得懂并且会用MASM工具来调试。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>AlgorithmDesign</title>
      <link>https://quanyeyang.github.io/zh-cn/notes/algorithmdesign/</link>
      <pubDate>Sun, 11 May 2025 15:06:21 +0800</pubDate>
      <author>quanyemostima@gmail.com (杨全烨)</author>
      <guid>https://quanyeyang.github.io/zh-cn/notes/algorithmdesign/</guid>
      <description>&lt;h1 class=&#34;relative group&#34;&gt;算法设计与分析 
    &lt;div id=&#34;%E7%AE%97%E6%B3%95%E8%AE%BE%E8%AE%A1%E4%B8%8E%E5%88%86%E6%9E%90&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%E7%AE%97%E6%B3%95%E8%AE%BE%E8%AE%A1%E4%B8%8E%E5%88%86%E6%9E%90&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;1.课太蠢，简单写一点复习笔记&lt;/p&gt;
&lt;p&gt;2.大量的数学笔记都是我复制下来的，我没有手打这么多公式的耐心，只能感谢那名陌生的同学了,原来的仓库https://github.com/DANNHIROAKI/XJTU-CS-Courses/tree/master,可能这篇文章的阅读体验相对会更好一点，因为数学公式会直接渲染并且我会多余做一些补充和更改，如果原作者看到并且觉得这样不好，您可以直接联系我删除。&lt;/p&gt;
&lt;p&gt;3.代码就会按照原书中来的，利用&lt;strong&gt;Java&lt;/strong&gt;来实现。&lt;/p&gt;
&lt;p&gt;4.&lt;a href=&#34;https://csdiy.wiki/%e6%95%b0%e6%8d%ae%e7%bb%93%e6%9e%84%e4%b8%8e%e7%ae%97%e6%b3%95/CS170/&#34; target=&#34;_blank&#34;&gt;https://csdiy.wiki/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95/CS170/&lt;/a&gt; 笔者非常后悔在学校老师狂念PPT的时候没有自学这个CS170,如果你还有机会，一定要看一看。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>CSAPP:LinkerLab</title>
      <link>https://quanyeyang.github.io/zh-cn/csapp/csapplinkerlab/</link>
      <pubDate>Sat, 19 Apr 2025 16:27:09 +0800</pubDate>
      <author>quanyemostima@gmail.com (杨全烨)</author>
      <guid>https://quanyeyang.github.io/zh-cn/csapp/csapplinkerlab/</guid>
      <description>&lt;h1 class=&#34;relative group&#34;&gt;CSAPP:LinkerLab 
    &lt;div id=&#34;csapplinkerlab&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#csapplinkerlab&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;CSAPP上关于链接的知识我也会放在这里&amp;hellip;&amp;hellip;&lt;/p&gt;
&lt;p&gt;本文图片大多来源于英文原版CSAPP。&lt;/p&gt;&lt;/blockquote&gt;


&lt;h2 class=&#34;relative group&#34;&gt;链接机制详解 
    &lt;div id=&#34;%E9%93%BE%E6%8E%A5%E6%9C%BA%E5%88%B6%E8%AF%A6%E8%A7%A3&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%E9%93%BE%E6%8E%A5%E6%9C%BA%E5%88%B6%E8%AF%A6%E8%A7%A3&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;​	有多详细？这很难定义吧，是否详细应当取决于读者本来的理解,linking本身就是看起来好像就是打包一下很简单的东西，但是涉及到的知识比较复杂，应用也相当广泛。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>CSAPP:CacheLab</title>
      <link>https://quanyeyang.github.io/zh-cn/csapp/csappcachelab/</link>
      <pubDate>Sun, 13 Apr 2025 18:04:22 +0800</pubDate>
      <author>quanyemostima@gmail.com (杨全烨)</author>
      <guid>https://quanyeyang.github.io/zh-cn/csapp/csappcachelab/</guid>
      <description>&lt;h1 class=&#34;relative group&#34;&gt;CSAPP:CacheLab 
    &lt;div id=&#34;csappcachelab&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#csappcachelab&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本次lab分为A和B两部分，我先看情况做，并且会部分引用我校助教撰写的一些内容以及思考题，首先我们要熟悉一下Cache的工作原理，关于这一部分的内容，你也可以看我的ComputerOrgnization中的内容（写的不怎么样，你最好还是看课本，而且我还建议你做一下课本上的习题），A部分是实现一个3级Cache，实现的过程中我们应当会对Cache的工作原理更加熟悉，B部分是优化矩阵转置函数，我认为会教会我们什么是Cahce友好的代码。&lt;/p&gt;
&lt;p&gt;注意：以下不会从零开始讲述Cache的知识，并且&lt;strong&gt;不要抄袭，不要抄袭，不要抄袭&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;Cache:计算机的世界无处不在的伟大思想&amp;hellip;&amp;hellip;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;熟悉：&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>CSAPP:OptimizationLab</title>
      <link>https://quanyeyang.github.io/zh-cn/csapp/csappoptimizationlab/</link>
      <pubDate>Thu, 10 Apr 2025 23:57:57 +0800</pubDate>
      <author>quanyemostima@gmail.com (杨全烨)</author>
      <guid>https://quanyeyang.github.io/zh-cn/csapp/csappoptimizationlab/</guid>
      <description>&lt;h1 class=&#34;relative group&#34;&gt;CSAPP:OptimizationLab 
    &lt;div id=&#34;csappoptimizationlab&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#csappoptimizationlab&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本次实验我们来优化一段计算多项式值的代码，并且亲自测量其性能，希望能加深同学们对机器特定优化的理解，同时为同学们提供测量性能的经验。&lt;/p&gt;
&lt;p&gt;基本材料都引用于我校的CSAPP实验指导书页面。&lt;/p&gt;
&lt;p&gt;同时也是考试的复习笔记。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;预习：&lt;/strong&gt;&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>IT:Solving_Problems</title>
      <link>https://quanyeyang.github.io/zh-cn/thinking/itsolving_problems/</link>
      <pubDate>Fri, 21 Mar 2025 18:05:17 +0800</pubDate>
      <author>quanyemostima@gmail.com (杨全烨)</author>
      <guid>https://quanyeyang.github.io/zh-cn/thinking/itsolving_problems/</guid>
      <description>&lt;h1 class=&#34;relative group&#34;&gt;&lt;strong&gt;关于IT行业的看法（IT另解笔记）&lt;/strong&gt; 
    &lt;div id=&#34;%E5%85%B3%E4%BA%8Eit%E8%A1%8C%E4%B8%9A%E7%9A%84%E7%9C%8B%E6%B3%95it%E5%8F%A6%E8%A7%A3%E7%AC%94%E8%AE%B0&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%E5%85%B3%E4%BA%8Eit%E8%A1%8C%E4%B8%9A%E7%9A%84%E7%9C%8B%E6%B3%95it%E5%8F%A6%E8%A7%A3%E7%AC%94%E8%AE%B0&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;1.学历在CS的行业不会成为任何优势（但是它重要），过硬的技术和能力才是，记清楚这一点，才不会盲目。请勿再将未来的希望寄托在你所在的学校身上了，你的一切，你的兴趣，都要自己费力去追寻&amp;hellip;&amp;hellip;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2.Caution!本篇博文是强烈带有主观意见的意识流笔记，部分观点可能跟不上时代（2021年），并且不代表笔者的全部观点，但是希望能对于在校的尚对于目标不明确的学生带来一些帮助，视频来源（https://space.bilibili.com/19658621），顺带推荐一下他的C语言视频，如果你还没有学过，或者已经工作但是有进一步理解的需要，学习一下这个视频，会颠覆你对于POP编程的认知。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3.随着我个人的阅历和经验的增长，我会不断更新这个文章的内容，直到它能够替代我对于这个行业的全部看法而不是简单的视频笔记，我个人的看法就是纯主观的，一个人或者一个组织都不可能给出所谓的“纯粹理性客观”这样的观点，如果真的是这样，那么很多历史怎么会被改写？总之，希望能帮助到你一点的同时也能满足我的分享欲。&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;


&lt;h2 class=&#34;relative group&#34;&gt;要明确的几个点 
    &lt;div id=&#34;%E8%A6%81%E6%98%8E%E7%A1%AE%E7%9A%84%E5%87%A0%E4%B8%AA%E7%82%B9&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%E8%A6%81%E6%98%8E%E7%A1%AE%E7%9A%84%E5%87%A0%E4%B8%AA%E7%82%B9&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;p&gt;专业不是职业。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>CSAPP:AttackLab</title>
      <link>https://quanyeyang.github.io/zh-cn/csapp/csappattacklab/</link>
      <pubDate>Thu, 20 Mar 2025 15:49:11 +0800</pubDate>
      <author>quanyemostima@gmail.com (杨全烨)</author>
      <guid>https://quanyeyang.github.io/zh-cn/csapp/csappattacklab/</guid>
      <description>&lt;h1 class=&#34;relative group&#34;&gt;CSAPP:AttackLab 
    &lt;div id=&#34;csappattacklab&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#csappattacklab&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;[!WARNING]&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;通过本实验，你将学习到利用安全性漏洞攻击操作系统和网络服务器的方法。本实验的目的是通过模拟攻击来增进对安全漏洞的理解和防范意识，了解安全漏洞的本质。本实验内容应仅用于学习目的，严禁用于任何非法或不道德的活动。&lt;/li&gt;
&lt;li&gt;本实验开始前，需要学习CS:APP3e第3.10.3节和第3.10.4节的知识。&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://arthals.ink/blog/attack-lab&#34; target=&#34;_blank&#34;&gt;https://arthals.ink/blog/attack-lab&lt;/a&gt; 你还是可以参考这位的博客。&lt;/li&gt;
&lt;/ol&gt;&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;scp -p -r 2236115135-ics@x86.ics.xjtu-ants.net:./attacklab-2236115135-1235135 ~/ //scp下载远程服务器上的文件，如果要本地开发这是好的办法
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;前三层是CI（代码注入攻击）攻击，后两层是ROP（返回导向编程）攻击。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>ComputerOrgnization</title>
      <link>https://quanyeyang.github.io/zh-cn/csapp/computerorgnization/</link>
      <pubDate>Mon, 10 Mar 2025 12:35:52 +0800</pubDate>
      <author>quanyemostima@gmail.com (杨全烨)</author>
      <guid>https://quanyeyang.github.io/zh-cn/csapp/computerorgnization/</guid>
      <description>&lt;h1 class=&#34;relative group&#34;&gt;&lt;strong&gt;Computer Organization&lt;/strong&gt; 
    &lt;div id=&#34;computer-organization&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#computer-organization&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;[!NOTE]&lt;/p&gt;
&lt;p&gt;在本篇之前，我已经实现了一个非常简单的CPU（感觉都是属于数字电路的内容，当然也是计组的一部分），课程笔记以及资源都来自于B站：Cs Primer。&lt;/p&gt;
&lt;p&gt;所以在这里只是简单记录一些感觉有必要的理论知识，还会不断补充。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>CSAPP:BombLab</title>
      <link>https://quanyeyang.github.io/zh-cn/csapp/csappbomblab/</link>
      <pubDate>Sun, 09 Mar 2025 18:11:55 +0800</pubDate>
      <author>quanyemostima@gmail.com (杨全烨)</author>
      <guid>https://quanyeyang.github.io/zh-cn/csapp/csappbomblab/</guid>
      <description>&lt;h1 class=&#34;relative group&#34;&gt;CSAPP:BombLab 
    &lt;div id=&#34;csappbomblab&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#csappbomblab&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;[!NOTE]&lt;/p&gt;
&lt;p&gt;本文主要参考博客：arthals.ink，如果你要学习方法，你只要看TA写的就可以了，我只看了前两层，    只是做个记录，我认为对于我来说很好的解决问题方式就是写注释(所以我这里有逐行的注释)。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;gdb&lt;strong&gt;指令&lt;/strong&gt;：&lt;/p&gt;</description>
      
    </item>
    
  </channel>
</rss>
