<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>memory</title>
    <link>https://mem.leabol.top/</link>
    <description>Recent content on memory</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Sat, 27 Jun 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://mem.leabol.top/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>心中的内核</title>
      <link>https://mem.leabol.top/posts/%E5%86%85%E6%A0%B8/%E5%BF%83%E4%B8%AD%E7%9A%84%E5%86%85%E6%A0%B8/</link>
      <pubDate>Sat, 27 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://mem.leabol.top/posts/%E5%86%85%E6%A0%B8/%E5%BF%83%E4%B8%AD%E7%9A%84%E5%86%85%E6%A0%B8/</guid>
      <description>&lt;h1 id=&#34;心中的内核--在阅读内核代码之前先理解内核&#34;&gt;心中的内核 —— 在阅读内核代码之前先理解内核&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;原文：&lt;a href=&#34;https://www.linkedin.com/in/moon-hee-lee/&#34;&gt;The Kernel in the Mind&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://mem.leabol.top/images/%E5%BF%83%E4%B8%AD%E7%9A%84%E5%86%85%E6%A0%B8/figure0-1.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;[TOC]&lt;/p&gt;
&lt;h3 id=&#34;介绍&#34;&gt;介绍&lt;/h3&gt;
&lt;p&gt;这并非一部教你编写内核代码的指南，而是一场探寻Linux内核设计思维的思想之旅。&lt;/p&gt;
&lt;p&gt;在系统编程的世界里，人们常常迷失于符号定义、头文件结构与实现细节的丛林中。然而剥离代码表象，内核实则是一个井然有序的响应式系统——它受上下文环境所规约，以分离原则为基石，从内存管理到任务调度的每一处设计，都浸透着精准的设计意图。&lt;/p&gt;</description>
    </item>
    <item>
      <title>riscv体系结构</title>
      <link>https://mem.leabol.top/posts/%E5%86%85%E6%A0%B8/riscv/</link>
      <pubDate>Mon, 22 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://mem.leabol.top/posts/%E5%86%85%E6%A0%B8/riscv/</guid>
      <description>&lt;h2 id=&#34;指令集isa微架构操作系统&#34;&gt;指令集(ISA)，微架构，操作系统&lt;/h2&gt;
&lt;p&gt;指令集简单来说就是一套语言规范，定义指令类型，寄存器，数据类型，还有cpu的管理模式等。而微架构是依据指令集设计出的处理器硬件结构与实现方案。相同的指令集设计出来的微架构可能完全不同，比如Intel和amd的芯片都是x86指令集。但是设计出来的cpu结构完全不同，性能和能耗也天差地别。影响cpu性能的大部分是微架构设计，工艺制程，系统级整合等，而指令集带来的差异往往只是小头。指令集的流行主要是商业和生态决定的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>xv6 分析与总结</title>
      <link>https://mem.leabol.top/posts/xv6/xv6%E5%88%86%E6%9E%90%E4%B8%8E%E6%80%BB%E7%BB%93/</link>
      <pubDate>Sat, 13 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://mem.leabol.top/posts/xv6/xv6%E5%88%86%E6%9E%90%E4%B8%8E%E6%80%BB%E7%BB%93/</guid>
      <description>&lt;h2 id=&#34;系统概述与启动流程&#34;&gt;系统概述与启动流程&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;(关注宏观状态流转：从 Machine Mode 到 Supervisor Mode，再到第一个用户进程的诞生)&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;h3 id=&#34;核心概念&#34;&gt;核心概念&lt;/h3&gt;
&lt;p&gt;启动流程的本质是&lt;strong&gt;特权级的逐级让渡&lt;/strong&gt;：从硬件最高特权（Machine Mode）出发，经过层层初始化和降权，最终将控制权交给最不信任的用户程序。整个过程是一条从&amp;quot;全权控制&amp;quot;到&amp;quot;受限执行&amp;quot;的信任链——每一步都在缩小 CPU 的权限范围，同时建立更多的软件抽象层。&lt;/p&gt;</description>
    </item>
    <item>
      <title>cpp的理解</title>
      <link>https://mem.leabol.top/posts/cpp/cpp/</link>
      <pubDate>Thu, 11 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://mem.leabol.top/posts/cpp/cpp/</guid>
      <description>&lt;p&gt;cpp这门语言与其他语言设计上的不同之处,在于cpp为了高效运行,没有采用在堆上分配对象通过GC管理对象。而是选择了一种更加高效但是更加困难的方式，通过尽量在栈上分配内存。因为栈上分配和释放内存只需要几条cpu指令就能完成，而在栈上则需要调用分配函数这需要更多的时间。而且栈的内存布局更加紧凑，对缓存更加的友好。但是也因为栈的先进先出的特性，这让对象的生命周期更加的难以管理，因为栈帧返回后直接就释放了。而且函数参数的传参也变得复杂，有很多的方式减少传参带来的开销，许多cpp特性就是为了解决这个问题产生的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>cpp线程的创建</title>
      <link>https://mem.leabol.top/posts/cpp/cpp%E7%BA%BF%E7%A8%8B/</link>
      <pubDate>Thu, 11 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://mem.leabol.top/posts/cpp/cpp%E7%BA%BF%E7%A8%8B/</guid>
      <description>&lt;h1 id=&#34;线程&#34;&gt;线程&lt;/h1&gt;
&lt;h2 id=&#34;线程的创建&#34;&gt;线程的创建&lt;/h2&gt;
&lt;p&gt;在cpp中线程的创建有两种形式&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;默认构造&lt;/li&gt;
&lt;li&gt;传入可调用对象如: 函数, 函数对象, 对象的成员函数, 对象的静态函数, lambda表达式&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;线程的构造函数&lt;strong&gt;会按值复制所有参数&lt;/strong&gt;,这点很重要, 对于想要传递引用的变量时,要使用&lt;code&gt;std::ref()&lt;/code&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>gdb/git的一些使用</title>
      <link>https://mem.leabol.top/posts/%E5%B7%A5%E5%85%B7/gdb-git/</link>
      <pubDate>Thu, 11 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://mem.leabol.top/posts/%E5%B7%A5%E5%85%B7/gdb-git/</guid>
      <description>&lt;h2 id=&#34;为ide配置代码转跳&#34;&gt;为ide配置代码转跳&lt;/h2&gt;
&lt;p&gt;所有的ide或者实现代码转跳,语法检查的功能都是依赖&lt;strong&gt;cmake,Makefile&lt;/strong&gt;等构建脚本中的编译选项的, 因为这些功能的实现需要知道项目的完整构建流程, 包括文件之间的依赖关系, 已经特殊的编译选项如不同的平台.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hash</title>
      <link>https://mem.leabol.top/posts/dsa/hash/</link>
      <pubDate>Thu, 11 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://mem.leabol.top/posts/dsa/hash/</guid>
      <description>&lt;h1 id=&#34;hash&#34;&gt;Hash&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;【C++ 哈希表查找口诀】&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;想知道有没有 key？
→ 用 count: &lt;code&gt; if (map.count(key))&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;想查并用它的 value？
→ 用 find:  &lt;code&gt;if (map.find(key) != map.end())&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;口诀：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;count 大于 0，就说明有&lt;/li&gt;
&lt;li&gt;find 不等于 end，就说明找到了&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;两数之和&#34;&gt;两数之和&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; vector&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; twoSum(vector&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&amp;amp;&lt;/span&gt; nums, &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; target) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        unordered_map&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; hashtable;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; i &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;; i &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; nums.size(); i&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt;){
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;auto&lt;/span&gt; it  &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; hashtable.find(target &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; nums[i]);&lt;span style=&#34;color:#75715e&#34;&gt;//判断是否存在
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (it &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; hashtable.end()){
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; {i, it&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;second};
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            hashtable[nums[i]] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; i;&lt;span style=&#34;color:#75715e&#34;&gt;// 添加元素,  这里的添加顺序不可提前,因为我想做的是先查找,如果先添加会影响这一次查找
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; {};
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>IO设备</title>
      <link>https://mem.leabol.top/posts/%E5%86%85%E6%A0%B8/io%E8%AE%BE%E5%A4%87/</link>
      <pubDate>Thu, 11 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://mem.leabol.top/posts/%E5%86%85%E6%A0%B8/io%E8%AE%BE%E5%A4%87/</guid>
      <description>&lt;p&gt;计算机与物理世界交互的方式，通过各种io设备，能够使用计算机做任何事&lt;/p&gt;
&lt;p&gt;就像人操作各种机器一样，机器提供各种开关和按钮，仪表和指示灯，进料口和出料口。计算机中的io设备将这些物理操作抽象成了寄存器和地址，通过访问或设置不同的寄存器和地址实现和io设备的交互&lt;/p&gt;</description>
    </item>
    <item>
      <title>OS</title>
      <link>https://mem.leabol.top/posts/%E5%86%85%E6%A0%B8/os/</link>
      <pubDate>Thu, 11 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://mem.leabol.top/posts/%E5%86%85%E6%A0%B8/os/</guid>
      <description>&lt;p&gt;计算机中的硬件, 软件,操作系统都是可以看作一个&lt;strong&gt;状态机&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;先讲os, os的模型简单说就是一个管理多个软件(状态机)的一个状态机.&lt;/p&gt;
&lt;p&gt;os的每个状态就是当前时间下的所有其他进程的状态, 在单核处理器下, 每次os的状态转移时会随机选择一个程序运行下一步,这就是&lt;strong&gt;调度&lt;/strong&gt;. os的状态机中除了进程外,还有为了进程通信的缓冲区.&lt;/p&gt;</description>
    </item>
    <item>
      <title>OS简介</title>
      <link>https://mem.leabol.top/posts/%E5%86%85%E6%A0%B8/%E7%AE%80%E4%BB%8B/</link>
      <pubDate>Thu, 11 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://mem.leabol.top/posts/%E5%86%85%E6%A0%B8/%E7%AE%80%E4%BB%8B/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;这是一个关于linux的一种自我的想象, 是我自己为了更好的理解linux而写的一种笔记, 我通过不同的视角,来描述这个程序的世界, 主要的目的不是为了完全掌握或者完整的类比操作系统的所有结构. 我的目的只是在于对os的各个部分有一个更加直观的理解, 这种理解是一种直观的, 表面的理解, 因此他并不能提高自己的linux编程水平, 就像来到一个新的城市, 我可以直观的了解城市的大致样貌, 但是关于城市是如何事无巨细的运行的, 这必须要真实的去体验才能真正了解.&lt;/p&gt;</description>
    </item>
    <item>
      <title>RISC-V trap / syscall / trampoline 机制完整解析</title>
      <link>https://mem.leabol.top/posts/xv6/risc-v-trap-%E6%9C%BA%E5%88%B6%E5%AE%8C%E6%95%B4%E8%A7%A3%E6%9E%90/</link>
      <pubDate>Thu, 11 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://mem.leabol.top/posts/xv6/risc-v-trap-%E6%9C%BA%E5%88%B6%E5%AE%8C%E6%95%B4%E8%A7%A3%E6%9E%90/</guid>
      <description>&lt;h1 id=&#34;risc-v-trap--syscall--trampoline-机制完整解析&#34;&gt;RISC-V Trap / Syscall / Trampoline 机制完整解析&lt;/h1&gt;
&lt;hr&gt;
&lt;h1 id=&#34;一整体流程概览&#34;&gt;一、整体流程概览&lt;/h1&gt;
&lt;h2 id=&#34;11-总览&#34;&gt;1.1 总览&lt;/h2&gt;
&lt;p&gt;用户态通过 &lt;code&gt;ecall&lt;/code&gt; 触发异常 → 硬件最小保存 → 跳转到 &lt;code&gt;stvec&lt;/code&gt; → trampoline 完成上下文保存 + 切页表 → 进入内核 → 执行 syscall → 再通过 trampoline 返回用户态。&lt;/p&gt;</description>
    </item>
    <item>
      <title>tmux的常用指令</title>
      <link>https://mem.leabol.top/posts/%E5%B7%A5%E5%85%B7/tmux/</link>
      <pubDate>Thu, 11 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://mem.leabol.top/posts/%E5%B7%A5%E5%85%B7/tmux/</guid>
      <description>&lt;h2 id=&#34;tmux的常用指令自己配置&#34;&gt;tmux的常用指令(自己配置)&lt;/h2&gt;
&lt;h3 id=&#34;prefix&#34;&gt;prefix&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Prefix = Ctrl+a（因为我们把默认 Ctrl+b 改了）&lt;/li&gt;
&lt;li&gt;“Prefix + x”意思是先按 Ctrl+a，松开后再按 x&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;常用操作&#34;&gt;常用操作&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;新建窗口&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Prefix + c&lt;/li&gt;
&lt;li&gt;作用：开一个新窗口，并且继承当前目录&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;&lt;strong&gt;水平/垂直分屏&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Prefix + -&lt;/li&gt;
&lt;li&gt;作用：上下分屏（vertical split）&lt;/li&gt;
&lt;li&gt;Prefix + |&lt;/li&gt;
&lt;li&gt;作用：左右分屏（horizontal split）&lt;/li&gt;
&lt;li&gt;另外你配置里还保留了：
&lt;ul&gt;
&lt;li&gt;Prefix + &amp;quot;&lt;/li&gt;
&lt;li&gt;Prefix + %
这两个也会在当前目录分屏&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;&lt;strong&gt;面板间移动（Vim 风格）&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Prefix + h：切到左边 pane&lt;/li&gt;
&lt;li&gt;Prefix + j：切到下边 pane&lt;/li&gt;
&lt;li&gt;Prefix + k：切到上边 pane&lt;/li&gt;
&lt;li&gt;Prefix + l：切到右边 pane&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;&lt;strong&gt;切换窗口&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Alt + Left：上一个窗口&lt;/li&gt;
&lt;li&gt;Alt + Right：下一个窗口&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;&lt;strong&gt;重命名窗口&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Prefix + ,&lt;/li&gt;
&lt;li&gt;然后输入新名字回车&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;6&#34;&gt;
&lt;li&gt;&lt;strong&gt;进入复制模式（Vi）&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Prefix + Enter：进入 copy-mode&lt;/li&gt;
&lt;li&gt;在 copy-mode 里：
&lt;ul&gt;
&lt;li&gt;v：开始选择&lt;/li&gt;
&lt;li&gt;y：复制并退出 copy-mode&lt;/li&gt;
&lt;li&gt;Y：复制到系统剪贴板并退出（前提装了 wl-copy 或 xclip）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;7&#34;&gt;
&lt;li&gt;&lt;strong&gt;重载配置&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Prefix + r&lt;/li&gt;
&lt;li&gt;作用：不重启 tmux，立即重新加载配置&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;8&#34;&gt;
&lt;li&gt;&lt;strong&gt;发送前缀给程序（很少用）&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Prefix + Ctrl+a&lt;/li&gt;
&lt;li&gt;作用：把 Ctrl+a 传给 pane 里的程序（比如你在嵌套 tmux 时会用到）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;你这份配置里“自动生效”的项（不需要按键）&lt;/p&gt;</description>
    </item>
    <item>
      <title>travel_xv6</title>
      <link>https://mem.leabol.top/posts/xv6/travel_xv6/</link>
      <pubDate>Thu, 11 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://mem.leabol.top/posts/xv6/travel_xv6/</guid>
      <description>&lt;h2 id=&#34;系统调用syscallecall&#34;&gt;系统调用syscall(ecall)&lt;/h2&gt;
&lt;h3 id=&#34;1用户态的准备工作&#34;&gt;1.用户态的准备工作&lt;/h3&gt;
&lt;p&gt;cpu核心在用户线程(进程)上工作, pc(程序计数器寄存器)指向下一个执行的用户态指令(.text), sp(栈指针寄存器)指向当前用户态线程的栈顶,用于分割栈帧和栈帧中变量的定位.&lt;/p&gt;</description>
    </item>
    <item>
      <title>tty</title>
      <link>https://mem.leabol.top/posts/%E5%86%85%E6%A0%B8/tty/</link>
      <pubDate>Thu, 11 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://mem.leabol.top/posts/%E5%86%85%E6%A0%B8/tty/</guid>
      <description>&lt;p&gt;tty 所有终端设备的泛称  pty 伪终端  pts 伪终端从属  terminal 终端模拟器&lt;/p&gt;
&lt;p&gt;terminal,一个输入输出设备, 在现代os中已经抽象成了控制终端**(controlling terminal)&lt;strong&gt;, 可以由伪终端,虚拟控制台,串口终端,usb串口担任&lt;/strong&gt;控制终端**. 它可以&lt;/p&gt;</description>
    </item>
    <item>
      <title>xv6总览图</title>
      <link>https://mem.leabol.top/posts/xv6/xv6%E6%80%BB%E8%A7%88%E5%9B%BE/</link>
      <pubDate>Thu, 11 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://mem.leabol.top/posts/xv6/xv6%E6%80%BB%E8%A7%88%E5%9B%BE/</guid>
      <description>&lt;h2 id=&#34;系统总览&#34;&gt;系统总览&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&#34;00-overview&#34; loading=&#34;lazy&#34; src=&#34;https://mem.leabol.top/images/xv6%E6%80%BB%E8%A7%88/00-overview.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;进程管理&#34;&gt;进程管理&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&#34;02-process&#34; loading=&#34;lazy&#34; src=&#34;https://mem.leabol.top/images/xv6%E6%80%BB%E8%A7%88/02-process.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;内存管理&#34;&gt;内存管理&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&#34;03-memory&#34; loading=&#34;lazy&#34; src=&#34;https://mem.leabol.top/images/xv6%E6%80%BB%E8%A7%88/03-memory.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;文件系统&#34;&gt;文件系统&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&#34;04-filesystem&#34; loading=&#34;lazy&#34; src=&#34;https://mem.leabol.top/images/xv6%E6%80%BB%E8%A7%88/04-filesystem.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;trap&#34;&gt;trap&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&#34;05-trap&#34; loading=&#34;lazy&#34; src=&#34;https://mem.leabol.top/images/xv6%E6%80%BB%E8%A7%88/05-trap.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;系统调用&#34;&gt;系统调用&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&#34;06-syscall&#34; loading=&#34;lazy&#34; src=&#34;https://mem.leabol.top/images/xv6%E6%80%BB%E8%A7%88/06-syscall.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;驱动&#34;&gt;驱动&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&#34;07-devices&#34; loading=&#34;lazy&#34; src=&#34;https://mem.leabol.top/images/xv6%E6%80%BB%E8%A7%88/07-devices.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;用户函数&#34;&gt;用户函数&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&#34;08-userspace&#34; loading=&#34;lazy&#34; src=&#34;https://mem.leabol.top/images/xv6%E6%80%BB%E8%A7%88/08-userspace.png&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>三个基础排序</title>
      <link>https://mem.leabol.top/posts/dsa/%E4%B8%89%E4%B8%AA%E5%9F%BA%E7%A1%80%E6%8E%92%E5%BA%8F/</link>
      <pubDate>Thu, 11 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://mem.leabol.top/posts/dsa/%E4%B8%89%E4%B8%AA%E5%9F%BA%E7%A1%80%E6%8E%92%E5%BA%8F/</guid>
      <description>&lt;h2 id=&#34;选择排序&#34;&gt;选择排序&lt;/h2&gt;
&lt;p&gt;​	&lt;strong&gt;在i~n-1范围内,找到最小值并放在i的位置上, 然后在i+1 ~ n-1范围内继续&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; i &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;; i &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; n &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;; i&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt;){
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; min &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; i;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; j &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; i &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;; j &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; n; j&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt;){
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (arr[j] &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; arr[min]){
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;			min &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; j;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	swap(arr[i], arr[j]);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;冒泡排序&#34;&gt;冒泡排序&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;在0~i范围内, 相邻位置较大的数向下滚动, 最大值最终来到i的位置,然后0 ~ i-1范围继续&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>二分查找</title>
      <link>https://mem.leabol.top/posts/dsa/%E4%BA%8C%E5%88%86%E6%90%9C%E7%B4%A2/</link>
      <pubDate>Thu, 11 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://mem.leabol.top/posts/dsa/%E4%BA%8C%E5%88%86%E6%90%9C%E7%B4%A2/</guid>
      <description>&lt;h2 id=&#34;二分查找&#34;&gt;二分查找&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;在有序数组中确定num的存在&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&#34;二分查找的两种写法&#34;&gt;二分查找的两种写法&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// 左闭右开
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//更适合找边界、插入位置等复杂问题
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;searchInsert&lt;/span&gt;(vector&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&amp;amp;&lt;/span&gt; nums, &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; target) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; left &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; right &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; nums.size();&lt;span style=&#34;color:#75715e&#34;&gt;// !!
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; (left &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; right) {&lt;span style=&#34;color:#75715e&#34;&gt;// !!
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; mid &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; left &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; ((right &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; left) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;);&lt;span style=&#34;color:#75715e&#34;&gt;// &amp;gt;&amp;gt;运算的优先级低于+
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (nums[mid] &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; target)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; mid;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (nums[mid] &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; target)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                left &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; mid &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;&lt;span style=&#34;color:#75715e&#34;&gt;// !!
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                right &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; mid;&lt;span style=&#34;color:#75715e&#34;&gt;// !!
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; left;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// 闭区间
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//更适合标准查找、简单理解
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;searchInsert&lt;/span&gt;(vector&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&amp;amp;&lt;/span&gt; nums, &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; target) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; left &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; right &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; nums.size() &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;&lt;span style=&#34;color:#75715e&#34;&gt;// !!
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; (left &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;=&lt;/span&gt; right) {&lt;span style=&#34;color:#75715e&#34;&gt;// !!
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; mid &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; left &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; ((right &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; left) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (nums[mid] &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; target)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; mid;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (nums[mid] &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; target)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                left &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; mid &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;&lt;span style=&#34;color:#75715e&#34;&gt;// !!
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                right &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; mid &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;&lt;span style=&#34;color:#75715e&#34;&gt;// !!
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; left;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol&gt;
&lt;li&gt;在有序数组中找到&amp;gt;=num的最左位置&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;findLeft&lt;/span&gt;(vector&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&amp;amp;&lt;/span&gt; nums, &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; target) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; left &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; right &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; nums.size() &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;&lt;span style=&#34;color:#75715e&#34;&gt;// !!
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;    	&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; ans &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; (left &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;=&lt;/span&gt; right) {&lt;span style=&#34;color:#75715e&#34;&gt;// !!
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; mid &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; left &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; ((right &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; left) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (nums[mid] &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;=&lt;/span&gt; target)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                ans &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; mid;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                right &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; mid &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                left &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; mid &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;&lt;span style=&#34;color:#75715e&#34;&gt;// !!
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; ans;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol&gt;
&lt;li&gt;在有序数组中找到&amp;lt;=num的最右位置&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;findRight&lt;/span&gt;(vector&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&amp;amp;&lt;/span&gt; nums, &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; target) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; left &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; right &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; nums.size() &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;&lt;span style=&#34;color:#75715e&#34;&gt;// !!
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;    	&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; ans &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; (left &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;=&lt;/span&gt; right) {&lt;span style=&#34;color:#75715e&#34;&gt;// !!
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; mid &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; left &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; ((right &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; left) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (nums[mid] &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;=&lt;/span&gt; target)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                ans &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; mid;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                left &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; mid &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                right &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; mid &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;&lt;span style=&#34;color:#75715e&#34;&gt;// !!
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; ans;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>内核存储栈</title>
      <link>https://mem.leabol.top/posts/%E5%86%85%E6%A0%B8/%E5%86%85%E6%A0%B8-%E5%AD%98%E5%82%A8/</link>
      <pubDate>Thu, 11 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://mem.leabol.top/posts/%E5%86%85%E6%A0%B8/%E5%86%85%E6%A0%B8-%E5%AD%98%E5%82%A8/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;Linux-storage-stack-diagram_v6.18&#34; loading=&#34;lazy&#34; src=&#34;https://mem.leabol.top/images/%E5%86%85%E6%A0%B8-%E5%AD%98%E5%82%A8/Linux-storage-stack-diagram_v6.18.png&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>内核结构图</title>
      <link>https://mem.leabol.top/posts/%E5%86%85%E6%A0%B8/%E5%86%85%E6%A0%B8%E5%9B%BE/</link>
      <pubDate>Thu, 11 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://mem.leabol.top/posts/%E5%86%85%E6%A0%B8/%E5%86%85%E6%A0%B8%E5%9B%BE/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;bccBPF Tracing&#34; loading=&#34;lazy&#34; src=&#34;https://mem.leabol.top/images/%E5%86%85%E6%A0%B8%E5%9B%BE/bccBPF-Tracing.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;benchmark &#34; loading=&#34;lazy&#34; src=&#34;https://mem.leabol.top/images/%E5%86%85%E6%A0%B8%E5%9B%BE/benchmark.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;BPF &#34; loading=&#34;lazy&#34; src=&#34;https://mem.leabol.top/images/%E5%86%85%E6%A0%B8%E5%9B%BE/BPF.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;bpftraceeBPF&#34; loading=&#34;lazy&#34; src=&#34;https://mem.leabol.top/images/%E5%86%85%E6%A0%B8%E5%9B%BE/bpftraceeBPF.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;observability perf-tools&#34; loading=&#34;lazy&#34; src=&#34;https://mem.leabol.top/images/%E5%86%85%E6%A0%B8%E5%9B%BE/observability-perf-tools.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;observability sar&#34; loading=&#34;lazy&#34; src=&#34;https://mem.leabol.top/images/%E5%86%85%E6%A0%B8%E5%9B%BE/observability-sar.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;observability tools&#34; loading=&#34;lazy&#34; src=&#34;https://mem.leabol.top/images/%E5%86%85%E6%A0%B8%E5%9B%BE/observability-tools.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;performance&#34; loading=&#34;lazy&#34; src=&#34;https://mem.leabol.top/images/%E5%86%85%E6%A0%B8%E5%9B%BE/performance.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;tuning &#34; loading=&#34;lazy&#34; src=&#34;https://mem.leabol.top/images/%E5%86%85%E6%A0%B8%E5%9B%BE/tuning.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;v2-1ae6a81556274bdf23396628a7784d31_r&#34; loading=&#34;lazy&#34; src=&#34;https://mem.leabol.top/images/%E5%86%85%E6%A0%B8%E5%9B%BE/v2-1ae6a81556274bdf23396628a7784d31_r.jpg&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>内核网络</title>
      <link>https://mem.leabol.top/posts/%E5%86%85%E6%A0%B8/%E5%86%85%E6%A0%B8-%E7%BD%91%E7%BB%9C/</link>
      <pubDate>Thu, 11 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://mem.leabol.top/posts/%E5%86%85%E6%A0%B8/%E5%86%85%E6%A0%B8-%E7%BD%91%E7%BB%9C/</guid>
      <description>&lt;h2 id=&#34;重要的数据结构&#34;&gt;重要的数据结构&lt;/h2&gt;
&lt;h3 id=&#34;struct-sockaddr&#34;&gt;struct sockaddr&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;通信用的地址表, 记录了使用什么来通信和目的地址&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;​	这是一个在套接字编程中用来表示&amp;quot;地址&amp;quot;的通用结构, 核心作用是为不同的通行提供一个统一的地址表示接口&lt;/p&gt;</description>
    </item>
    <item>
      <title>双指针</title>
      <link>https://mem.leabol.top/posts/dsa/double_pointer/</link>
      <pubDate>Thu, 11 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://mem.leabol.top/posts/dsa/double_pointer/</guid>
      <description>&lt;h1 id=&#34;双指针&#34;&gt;双指针&lt;/h1&gt;
&lt;h2 id=&#34;快慢指针&#34;&gt;快慢指针&lt;/h2&gt;
&lt;h4 id=&#34;删除有序数组中的重复项&#34;&gt;删除&lt;strong&gt;有序&lt;/strong&gt;数组中的重复项&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;一个有序数组nums，原地删除重复出现的元素，使得出现次数超过两次的元素只出现两次 ，返回删除后数组的新长度&lt;/p&gt;&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;removeDuplicates&lt;/span&gt;(vector&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&amp;amp;&lt;/span&gt; nums) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; n &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; nums.size();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (n &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; n;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; slow &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; fast &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;; fast &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; n; &lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt;fast){
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (nums[fast] &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; nums[slow&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;]){&lt;span style=&#34;color:#75715e&#34;&gt;// fast 是读指针，不是写指针。我们无法知道前面已经写了多少个相同的值。只有 slow 才能记录我们已经保留了多少个相同的值。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;                nums[slow&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; nums[fast];
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; slow;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;移除元素&#34;&gt;移除元素&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;在数组中,原地移除所有数值等于val的元素&lt;/p&gt;</description>
    </item>
    <item>
      <title>基数与序数的规律</title>
      <link>https://mem.leabol.top/posts/dsa/%E5%9F%BA%E6%95%B0%E4%B8%8E%E5%BA%8F%E6%95%B0%E7%9A%84%E8%A7%84%E5%BE%8B/</link>
      <pubDate>Thu, 11 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://mem.leabol.top/posts/dsa/%E5%9F%BA%E6%95%B0%E4%B8%8E%E5%BA%8F%E6%95%B0%E7%9A%84%E8%A7%84%E5%BE%8B/</guid>
      <description>&lt;h2 id=&#34;基数与序数的规律&#34;&gt;基数与序数的规律&lt;/h2&gt;
&lt;p&gt;​	&lt;strong&gt;对于一个数据, 要先判断是基数还是序数, 如果要计数,还要考虑是否包括边界&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;基数: 绝对的,有一个基底数, 日常生活中基底是1; 编程中一般是0; 常见的基数概念有 数量, 个数, 体积, 面积, 时间段, 年龄(周岁), 分数&lt;/li&gt;
&lt;li&gt;序数: 相对的, 表示先后顺序, 常见的概念: 位次, 时间点
&lt;ul&gt;
&lt;li&gt;端点的开闭规律: 全开&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;​	基本的转换规律: &lt;code&gt; 基数 = 序数 - based + 1&lt;/code&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>堆的核心算法解析</title>
      <link>https://mem.leabol.top/posts/dsa/heap_core_algorithm/</link>
      <pubDate>Thu, 11 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://mem.leabol.top/posts/dsa/heap_core_algorithm/</guid>
      <description>&lt;h1 id=&#34;堆的核心算法解析&#34;&gt;堆的核心算法解析&lt;/h1&gt;
&lt;h2 id=&#34;核心要点&#34;&gt;核心要点&lt;/h2&gt;
&lt;p&gt;这个精简版堆只保留了&lt;strong&gt;最核心的两个算法&lt;/strong&gt;：&lt;/p&gt;
&lt;h3 id=&#34;节点索引计算公式堆的基础&#34;&gt;节点索引计算公式（堆的基础）&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-txt&#34; data-lang=&#34;txt&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;父节点索引 = (当前索引 - 1) / 2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;左子节点索引 = 当前索引 * 2 + 1  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;右子节点索引 = 当前索引 * 2 + 2
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;核心算法1-上浮调整-heapifyup&#34;&gt;核心算法1: 上浮调整 (heapifyUp)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;用途&lt;/strong&gt;: 插入新元素后维护堆性质
&lt;strong&gt;原理&lt;/strong&gt;: 新元素从末尾开始，与父节点比较，如果优先级更高就向上交换&lt;/p&gt;</description>
    </item>
    <item>
      <title>并发</title>
      <link>https://mem.leabol.top/posts/%E5%86%85%E6%A0%B8/%E5%B9%B6%E5%8F%91/</link>
      <pubDate>Thu, 11 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://mem.leabol.top/posts/%E5%86%85%E6%A0%B8/%E5%B9%B6%E5%8F%91/</guid>
      <description>&lt;p&gt;每个线程会在进程的堆上创建的，栈之间有隔离区。&lt;/p&gt;
&lt;p&gt;栈是默认线程独占的，而堆是共享资源，很多函数会有的缓冲区就在堆中的他是共享的。&lt;/p&gt;
&lt;p&gt;每个线程栈和共享资源都可以看作是一个状态机。&lt;/p&gt;</description>
    </item>
    <item>
      <title>并发架构与同步原语</title>
      <link>https://mem.leabol.top/posts/cpp/%E5%B9%B6%E5%8F%91%E6%9E%B6%E6%9E%84%E4%B8%8E%E5%90%8C%E6%AD%A5%E5%8E%9F%E8%AF%AD/</link>
      <pubDate>Thu, 11 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://mem.leabol.top/posts/cpp/%E5%B9%B6%E5%8F%91%E6%9E%B6%E6%9E%84%E4%B8%8E%E5%90%8C%E6%AD%A5%E5%8E%9F%E8%AF%AD/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;为了追求极限性能，cpu硬件搞出了独立缓存(L1/L2)和乱序执行，但也留下了“数据不同步”和“顺序错乱”的烂摊子。硬件用MESI协议和内存屏障指令来修补。编程语言为了抹平不同平台(xv6/arm)的差异，制定了内存模型契约，让程序员通过指定内存序(relaxed/acquire/release/sc)来指挥编译器和cpu自动插入屏障。而程序员利用这些契约和底层的硬件CAS指令，最终构建出了无锁算法以及互斥锁等同步原语，为多线程并发提供了正确同步的基础设施。&lt;/p&gt;</description>
    </item>
    <item>
      <title>循环数组</title>
      <link>https://mem.leabol.top/posts/dsa/%E5%BE%AA%E7%8E%AF%E6%95%B0%E7%BB%84/</link>
      <pubDate>Thu, 11 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://mem.leabol.top/posts/dsa/%E5%BE%AA%E7%8E%AF%E6%95%B0%E7%BB%84/</guid>
      <description>&lt;h2 id=&#34;循环数组&#34;&gt;循环数组&lt;/h2&gt;
&lt;p&gt;需要三个变量:&lt;strong&gt;头下标l,尾下标r,队列的size&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;范围[l, r)&lt;/strong&gt;,  &lt;strong&gt;size== r-l&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;加入元素: 判断&lt;strong&gt;size&amp;lt;capacity&lt;/strong&gt;, 将x放入尾部, 尾部++(如果超过数组边界,返回到数组开头) size++&lt;/p&gt;</description>
    </item>
    <item>
      <title>调试记录：xv6 用户程序内存布局冲突异常</title>
      <link>https://mem.leabol.top/posts/xv6/%E8%B0%83%E8%AF%95%E8%AE%B0%E5%BD%95xv6-%E7%94%A8%E6%88%B7%E7%A8%8B%E5%BA%8F%E5%86%85%E5%AD%98%E5%B8%83%E5%B1%80%E5%86%B2%E7%AA%81%E5%BC%82%E5%B8%B8/</link>
      <pubDate>Thu, 11 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://mem.leabol.top/posts/xv6/%E8%B0%83%E8%AF%95%E8%AE%B0%E5%BD%95xv6-%E7%94%A8%E6%88%B7%E7%A8%8B%E5%BA%8F%E5%86%85%E5%AD%98%E5%B8%83%E5%B1%80%E5%86%B2%E7%AA%81%E5%BC%82%E5%B8%B8/</guid>
      <description>&lt;h2 id=&#34;-调试记录xv6-用户程序内存布局冲突异常&#34;&gt;🛠️ 调试记录：xv6 用户程序内存布局冲突异常&lt;/h2&gt;
&lt;h3 id=&#34;1-问题描述-description&#34;&gt;1. 问题描述 (Description)&lt;/h3&gt;
&lt;p&gt;在 xv6 实验环境中，向内核添加自定义系统调用（Syscall）并编写用户态测试程序（Test Case）时，程序在系统调用逻辑执行完毕后，无法正常返回用户态继续执行。表现为进程卡死或触发硬件级页错误（Page Fault），而代码逻辑本身（内核实现）经检查无误。&lt;/p&gt;</description>
    </item>
    <item>
      <title>进程与通信</title>
      <link>https://mem.leabol.top/posts/%E5%86%85%E6%A0%B8/%E8%BF%9B%E7%A8%8B/</link>
      <pubDate>Thu, 11 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://mem.leabol.top/posts/%E5%86%85%E6%A0%B8/%E8%BF%9B%E7%A8%8B/</guid>
      <description>&lt;p&gt;不同的进程在各自的房间内运行, 每个房间有自己的编号&lt;code&gt;pid&lt;/code&gt;, 进程之间互不干涉, 房间内有许多种与外界通信的方式, 他们有各自的用途和特性, 分布在墙壁上; 房间内还分成多个区域, 分别是: &lt;code&gt;代码区(.text)&lt;/code&gt;,  &lt;code&gt;已初始化的全局/静态数据区(.data)&lt;/code&gt;, &lt;code&gt;未初始化的全局/静态数据区(.bss)&lt;/code&gt;, &lt;code&gt;堆&lt;/code&gt;, &lt;code&gt;栈&lt;/code&gt;, &lt;code&gt;内存映射区&lt;/code&gt;, &lt;code&gt;环境变量与命令行参数区&lt;/code&gt;, &lt;code&gt; 内核空间&lt;/code&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>链表</title>
      <link>https://mem.leabol.top/posts/dsa/link/</link>
      <pubDate>Thu, 11 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://mem.leabol.top/posts/dsa/link/</guid>
      <description>&lt;h1 id=&#34;链表&#34;&gt;链表&lt;/h1&gt;
&lt;h2 id=&#34;删除特定节点&#34;&gt;删除特定节点&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ListNode&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;removeElements&lt;/span&gt;(ListNode&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; head, &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; val) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        ListNode dummy(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, head);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        ListNode&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; cur &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;dummy;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; (cur&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;next) {&lt;span style=&#34;color:#75715e&#34;&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (cur&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;next&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;val &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; val) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                ListNode&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; tmp &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; cur&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;next;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                cur&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;next &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; cur&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;next&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;next;&lt;span style=&#34;color:#75715e&#34;&gt;//比条件可以多一个next
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;delete&lt;/span&gt; tmp;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            } &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                cur &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; cur&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;next;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; dummy.next;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;两两交换相邻节点&#34;&gt;两两交换相邻节点&lt;/h2&gt;
&lt;p&gt;​	在改变单链表时,&lt;strong&gt;优先改变上游的指针&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ListNode&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;swapPairs&lt;/span&gt;(ListNode&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; head) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#f92672&#34;&gt;!&lt;/span&gt;head &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!&lt;/span&gt;head&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;next)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; head;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        ListNode dummy(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, head);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        ListNode&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; cur &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;dummy;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; (cur&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;next &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; cur&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;next&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;next) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            ListNode&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; p1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; cur&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;next;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            ListNode&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; p2 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; cur&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;next&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;next;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            cur&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;next &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; p2;&lt;span style=&#34;color:#75715e&#34;&gt;//先改头-&amp;gt;p2  cur--&amp;gt;p1--&amp;gt;p2--&amp;gt;other
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;            p1&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;next &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; p2&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;next;&lt;span style=&#34;color:#75715e&#34;&gt;//在改p1-&amp;gt;other
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;            p2&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;next &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; p1;&lt;span style=&#34;color:#75715e&#34;&gt;//最后在p2-&amp;gt;p1;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;            cur &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; p1;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; dummy.next;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;合并有序链表&#34;&gt;合并有序链表&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ListNode&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; val;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ListNode &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;next;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ListNode() &lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; val(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;), next(&lt;span style=&#34;color:#66d9ef&#34;&gt;nullptr&lt;/span&gt;) {}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ListNode(&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; x) &lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; val(x), next(&lt;span style=&#34;color:#66d9ef&#34;&gt;nullptr&lt;/span&gt;) {}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ListNode(&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; x, ListNode &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;next) &lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; val(x), next(next) {}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;};
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Solution&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ListNode&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; mergeTwoLists(ListNode&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; l1, ListNode&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; l2) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;// 创建一个哑节点作为新链表的起点
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;        ListNode &lt;span style=&#34;color:#a6e22e&#34;&gt;dummy&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        ListNode&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; curr &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;dummy;  &lt;span style=&#34;color:#75715e&#34;&gt;// 当前指针用于构建新链表
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;// 同时遍历两个链表
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; (l1 &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; l2) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (l1&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;val &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;=&lt;/span&gt; l2&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;val) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                curr&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;next &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; l1;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                l1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; l1&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;next;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            } &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                curr&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;next &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; l2;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                l2 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; l2&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;next;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            curr &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; curr&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;next;  &lt;span style=&#34;color:#75715e&#34;&gt;// 移动当前指针
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;// 将剩余部分直接连接到新链表末尾
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;        curr&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;next &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (l1 &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nullptr&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt; l1 : l2;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;// 返回合并后的头节点
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; dummy.next;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;};
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;环形链表&#34;&gt;环形链表&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ListNode&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; val;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ListNode &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;next;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ListNode(&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; x) &lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; val(x), next(&lt;span style=&#34;color:#66d9ef&#34;&gt;nullptr&lt;/span&gt;) {}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;};
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Solution&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;bool&lt;/span&gt; hasCycle(ListNode &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;head) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;// 边界情况：空链表或只有一个节点且无环
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (head &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nullptr&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; head&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;next &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nullptr&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; false;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;// 初始化快慢指针
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;        ListNode &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;slow &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; head;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        ListNode &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;fast &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; head;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;// 快指针及其下一个节点都非空时继续循环
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; (fast &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nullptr&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; fast&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;next &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nullptr&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            slow &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; slow&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;next;                  &lt;span style=&#34;color:#75715e&#34;&gt;// 慢指针每次走一步
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;            fast &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; fast&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;next&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;next;            &lt;span style=&#34;color:#75715e&#34;&gt;// 快指针每次走两步
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (slow &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; fast) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#75715e&#34;&gt;// 快慢指针相遇，说明存在环
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; true;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;// 遍历结束未相遇，说明没有环
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; false;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;};
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;在有序链表中删除相同元素&#34;&gt;在有序链表中删除相同元素&lt;/h2&gt;
&lt;p&gt;​	在链表的循环中, 判断条件一般是所有指针中最前面的指针&lt;/p&gt;</description>
    </item>
    <item>
      <title>网络协议栈</title>
      <link>https://mem.leabol.top/posts/%E5%86%85%E6%A0%B8/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE%E6%A0%88/</link>
      <pubDate>Mon, 26 May 2025 00:00:00 +0000</pubDate>
      <guid>https://mem.leabol.top/posts/%E5%86%85%E6%A0%B8/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE%E6%A0%88/</guid>
      <description>&lt;p&gt;现代操作系统的内核（如 Linux 内核）中有一个专门的模块叫做：&lt;/p&gt;
&lt;h1 id=&#34;网络协议栈network-stack&#34;&gt;网络协议栈（Network Stack)&lt;/h1&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://mem.leabol.top/images/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE%E6%A0%88/image-20251012194550481.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;主要职责详解&#34;&gt;主要职责详解&lt;/h2&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;职责&lt;/th&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;类比说明&lt;/th&gt;
          &lt;th&gt;技术术语&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;1. 接收和发送数据包&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;公司前台接收快递 &amp;amp; 发送包裹&lt;/td&gt;
          &lt;td&gt;数据链路层、IP 层、传输层&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;2. IP 地址管理&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;给每个员工分配邮箱地址&lt;/td&gt;
          &lt;td&gt;IPv4 / IPv6 地址配置&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;3. 路由选择&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;快递要走哪条路线最短最快&lt;/td&gt;
          &lt;td&gt;路由表（Routing Table）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;4. 封装与解封装&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;包裹加标签 / 拆标签&lt;/td&gt;
          &lt;td&gt;数据封装（Encapsulation）与解封装（Decapsulation）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;5. 传输控制（TCP）&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;控制文件是否完整送达&lt;/td&gt;
          &lt;td&gt;TCP 流量控制、拥塞控制&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;6. 端口号管理&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;不同部门接收不同类型的快递&lt;/td&gt;
          &lt;td&gt;端口绑定、监听、转发&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;7. 安全防护（防火墙）&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;保安检查包裹内容&lt;/td&gt;
          &lt;td&gt;Netfilter / iptables / nftables&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;8. NAT 转换&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;公司统一出口代理&lt;/td&gt;
          &lt;td&gt;Network Address Translation&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;9. 域名解析支持&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;内部电话簿查询联系方式&lt;/td&gt;
          &lt;td&gt;DNS 解析缓存、本地 hosts&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;10. 支持多种协议&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;公司支持各种沟通方式（电话、邮件、视频会议）&lt;/td&gt;
          &lt;td&gt;支持 TCP、UDP、ICMP、HTTP、HTTPS、FTP 等&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id=&#34;类比图操作系统网络部门的组织架构&#34;&gt;类比图：操作系统网络部门的组织架构&lt;/h2&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;小组&lt;/th&gt;
          &lt;th&gt;类比角色&lt;/th&gt;
          &lt;th&gt;职责&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;套接字接口组（Socket Layer）&lt;/td&gt;
          &lt;td&gt;客户接待员&lt;/td&gt;
          &lt;td&gt;接收进程请求（如浏览器访问网页）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;传输组（TCP / UDP）&lt;/td&gt;
          &lt;td&gt;快递打包组&lt;/td&gt;
          &lt;td&gt;控制可靠传输或快速发送&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;网络组（IP 层）&lt;/td&gt;
          &lt;td&gt;邮政分拣中心&lt;/td&gt;
          &lt;td&gt;决定发往哪个城市（IP 地址）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;链路组（MAC 层）&lt;/td&gt;
          &lt;td&gt;快递站&lt;/td&gt;
          &lt;td&gt;决定发给哪个局域网内的目标主机&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;路由组（Routing）&lt;/td&gt;
          &lt;td&gt;导航调度中心&lt;/td&gt;
          &lt;td&gt;选择最优路径（下一跳）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;设备驱动组（NIC Driver）&lt;/td&gt;
          &lt;td&gt;快递员&lt;/td&gt;
          &lt;td&gt;实际把包裹送出去（通过网卡）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;安全组（Netfilter / Firewall）&lt;/td&gt;
          &lt;td&gt;保安检查岗&lt;/td&gt;
          &lt;td&gt;检查是否允许通行&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;NAT 组&lt;/td&gt;
          &lt;td&gt;公司代理出口&lt;/td&gt;
          &lt;td&gt;统一管理内部员工对外通信&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;DNS 缓存组&lt;/td&gt;
          &lt;td&gt;内部电话簿管理员&lt;/td&gt;
          &lt;td&gt;记录域名与 IP 的对应关系&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Linux 的网络部分是一个庞大的子系统，主要包括以下几个关键模块：&lt;/p&gt;</description>
    </item>
    <item>
      <title>为什么叫补码</title>
      <link>https://mem.leabol.top/posts/%E7%AE%97%E6%B3%95/%E5%8E%9F%E7%A0%81-%E5%8F%8D%E7%A0%81%E5%92%8C%E8%A1%A5%E7%A0%81/</link>
      <pubDate>Mon, 17 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://mem.leabol.top/posts/%E7%AE%97%E6%B3%95/%E5%8E%9F%E7%A0%81-%E5%8F%8D%E7%A0%81%E5%92%8C%E8%A1%A5%E7%A0%81/</guid>
      <description>&lt;h3 id=&#34;为什么叫补码twos-complement&#34;&gt;为什么叫补码(Two&amp;rsquo;s complement)&lt;/h3&gt;
&lt;p&gt;计算机的加减法运算天生是一个&lt;a href=&#34;https://zhida.zhihu.com/search?content_id=190505781&amp;amp;content_type=Answer&amp;amp;match_order=1&amp;amp;q=%E6%A8%A12%5EN&amp;amp;zhida_source=entity&#34;&gt;模2^N&lt;/a&gt;的&lt;a href=&#34;https://zhida.zhihu.com/search?content_id=190505781&amp;amp;content_type=Answer&amp;amp;match_order=1&amp;amp;q=%E5%90%8C%E4%BD%99%E7%B1%BB&amp;amp;zhida_source=entity&#34;&gt;同余类&lt;/a&gt;上的运算，满2^N会抛弃进位，那表示有符号数时使用同余类代表很正常吧，比如-1 = 2^N -1 (mod 2^N)，-2 = 2^N-2 (mod 2^N)，这实际上就是&lt;a href=&#34;https://zhida.zhihu.com/search?content_id=190505781&amp;amp;content_type=Answer&amp;amp;match_order=1&amp;amp;q=%E8%A1%A5%E7%A0%81&amp;amp;zhida_source=entity&#34;&gt;补码&lt;/a&gt;了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>关于位图存储与数组下标存储的探讨</title>
      <link>https://mem.leabol.top/posts/os/%E5%85%B3%E4%BA%8E%E4%BD%8D%E5%9B%BE%E5%AD%98%E5%82%A8%E4%B8%8E%E6%95%B0%E7%BB%84%E4%B8%8B%E6%A0%87%E5%AD%98%E5%82%A8%E7%9A%84%E6%8E%A2%E8%AE%A8/</link>
      <pubDate>Mon, 17 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://mem.leabol.top/posts/os/%E5%85%B3%E4%BA%8E%E4%BD%8D%E5%9B%BE%E5%AD%98%E5%82%A8%E4%B8%8E%E6%95%B0%E7%BB%84%E4%B8%8B%E6%A0%87%E5%AD%98%E5%82%A8%E7%9A%84%E6%8E%A2%E8%AE%A8/</guid>
      <description>&lt;h1 id=&#34;关于位图存储与数组下标存储的探讨&#34;&gt;关于位图存储与数组下标存储的探讨&lt;/h1&gt;
&lt;p&gt;最近在看《编程珠玑》，书中的第一章提到了位图。位图存储使用二进制位的位数信息，来表示数字。例如，存储1、3、4、6、8，这五个数字， 可以使用&amp;lt;1, 0, 1, 1, 0, 1, 0, 1&amp;gt;这样的向量来表示，这样可以大大减少存储空间， 只用了一个字节（8bit），就可以存储原来需要的8个数字才能表示的信息。&lt;/p&gt;</description>
    </item>
    <item>
      <title>集合 列表 数组</title>
      <link>https://mem.leabol.top/posts/%E7%AE%97%E6%B3%95/%E9%9B%86%E5%90%88%E5%88%97%E8%A1%A8%E5%92%8C%E6%95%B0%E7%BB%84/</link>
      <pubDate>Mon, 17 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://mem.leabol.top/posts/%E7%AE%97%E6%B3%95/%E9%9B%86%E5%90%88%E5%88%97%E8%A1%A8%E5%92%8C%E6%95%B0%E7%BB%84/</guid>
      <description>&lt;h3 id=&#34;集合&#34;&gt;&lt;em&gt;集合&lt;/em&gt;&lt;/h3&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href=&#34;https://baike.baidu.com/item/%E9%9B%86%E5%90%88/2908117?fr=aladdin&#34;&gt;集合&lt;/a&gt;一般被定义为：由一个或多个确定的元素所构成的整体。
集合有什么特性呢？&lt;/p&gt;
&lt;p&gt;首先，&lt;strong&gt;集合里的元素类型不一定相同&lt;/strong&gt;。 你可以将商品看作一个集合，也可以将整个商店看作一个集合，这个商店中有人或者其他物品也没有关系。&lt;/p&gt;</description>
    </item>
    <item>
      <title>file descriptor</title>
      <link>https://mem.leabol.top/posts/os/%E6%96%87%E4%BB%B6%E6%8F%8F%E8%BF%B0%E7%AC%A6/</link>
      <pubDate>Mon, 20 Jan 2025 00:00:00 +0000</pubDate>
      <guid>https://mem.leabol.top/posts/os/%E6%96%87%E4%BB%B6%E6%8F%8F%E8%BF%B0%E7%AC%A6/</guid>
      <description>&lt;h1 id=&#34;理解linux的file-descriptor文件描述符&#34;&gt;理解Linux的file descriptor(文件描述符)&lt;/h1&gt;
&lt;p&gt;​		我们知道在Linux系统中一切皆可以看成是文件，文件又可分为：普通文件、目录文件、链接文件和设备文件。在操作这些所谓的文件的时候，我们每操作一次就找一次名字，这会耗费大量的时间和效率。所以Linux中规定每一个文件对应一个索引，这样要操作文件的时候，我们直接找到索引就可以对其进行操作了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>linux select函数</title>
      <link>https://mem.leabol.top/posts/os/linux-select%E5%87%BD%E6%95%B0/</link>
      <pubDate>Mon, 20 Jan 2025 00:00:00 +0000</pubDate>
      <guid>https://mem.leabol.top/posts/os/linux-select%E5%87%BD%E6%95%B0/</guid>
      <description>&lt;h1 id=&#34;linux-select函数&#34;&gt;linux select函数&lt;/h1&gt;
&lt;p&gt;在Linux中，我们可以使用select函数实现I/O端口的复用，传递给 select函数的参数会告诉内核：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;我们所关心的文件描述符&lt;/p&gt;</description>
    </item>
    <item>
      <title>Makefile 的基本概念</title>
      <link>https://mem.leabol.top/posts/%E5%B7%A5%E5%85%B7/makefile/</link>
      <pubDate>Mon, 20 Jan 2025 00:00:00 +0000</pubDate>
      <guid>https://mem.leabol.top/posts/%E5%B7%A5%E5%85%B7/makefile/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Makefile&lt;/strong&gt; 是 make 工具的配置文件，主要用于定义如何构建和管理项目的编译过程。Makefile 是 C/C++ 编译项目中的重要工具，尤其在多文件、多模块的项目中，为了方便复杂项目的管理，可以通过自动化规则提高编译效率。&lt;/p&gt;</description>
    </item>
    <item>
      <title>一些网站</title>
      <link>https://mem.leabol.top/posts/%E4%B8%80%E4%BA%9B%E7%BD%91%E7%AB%99/</link>
      <pubDate>Mon, 20 Jan 2025 00:00:00 +0000</pubDate>
      <guid>https://mem.leabol.top/posts/%E4%B8%80%E4%BA%9B%E7%BD%91%E7%AB%99/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://www.ruanyifeng.com/blog/2010/10/why_lisp_is_superior.html&#34;&gt;为什么Lisp语言如此先进?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://norvig.com/&#34;&gt;一个前辈的官网&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>文件控制函数</title>
      <link>https://mem.leabol.top/posts/os/linux-fcntl%E5%87%BD%E6%95%B0/</link>
      <pubDate>Mon, 20 Jan 2025 00:00:00 +0000</pubDate>
      <guid>https://mem.leabol.top/posts/os/linux-fcntl%E5%87%BD%E6%95%B0/</guid>
      <description>&lt;h1 id=&#34;文件控制函数--file-control&#34;&gt;文件控制函数  file control&lt;/h1&gt;
&lt;h2 id=&#34;功能描述&#34;&gt;功能描述&lt;/h2&gt;
&lt;p&gt;fcntl函数可以用来对已打开的文件描述符进行各种控制操作, 以改变已打开文件的的各种属性&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;头文件&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;&amp;lt;unistd.h&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;&amp;lt;fcntl.h&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;函数原型&#34;&gt;&lt;strong&gt;函数原型&lt;/strong&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fcntl&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; fd, &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; cmd);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fcntl&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; fd, &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; cmd, &lt;span style=&#34;color:#66d9ef&#34;&gt;long&lt;/span&gt; arg);         
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;c
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fcntl&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; fd, &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; cmd, &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; flock &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;lock);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;描述&#34;&gt;&lt;strong&gt;描述&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;fcntl()针对(文件)描述符提供控制.参数fd是被参数cmd操作(如下面的描述)的描述符.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
