<?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>Posts on ExampleSite</title>
    <link>https://blog.993123852.xyz/posts/</link>
    <description>Recent content in Posts on ExampleSite</description>
    <image>
      <title>ExampleSite</title>
      <url>https://blog.993123852.xyz/img/cover.jpg</url>
      <link>https://blog.993123852.xyz/img/cover.jpg</link>
    </image>
    <generator>Hugo -- 0.155.3</generator>
    <language>en</language>
    <lastBuildDate>Mon, 06 Apr 2026 19:23:14 +0800</lastBuildDate>
    <atom:link href="https://blog.993123852.xyz/posts/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>TCP</title>
      <link>https://blog.993123852.xyz/posts/net/tcp/</link>
      <pubDate>Mon, 06 Apr 2026 19:23:14 +0800</pubDate>
      <guid>https://blog.993123852.xyz/posts/net/tcp/</guid>
      <description>&lt;h2 id=&#34;osi-七层模型&#34;&gt;OSI 七层模型&lt;/h2&gt;
&lt;h3 id=&#34;1-概念&#34;&gt;&lt;strong&gt;1. 概念&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;OSI（Open Systems Interconnection）由 &lt;strong&gt;ISO&lt;/strong&gt; 提出&lt;/li&gt;
&lt;li&gt;目标：实现不同厂商设备互联&lt;/li&gt;
&lt;li&gt;将网络通信划分为 &lt;strong&gt;7 层&lt;/strong&gt;，每层负责特定功能&lt;/li&gt;
&lt;li&gt;特点：&lt;strong&gt;分层、独立、协作、模块化&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;2-七层模型逐层总结自下而上&#34;&gt;&lt;strong&gt;2. 七层模型逐层总结（自下而上）&lt;/strong&gt;&lt;/h3&gt;
&lt;h4 id=&#34;-物理层physical-layer&#34;&gt;&lt;strong&gt;① 物理层（Physical Layer）&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;核心职责：传输比特流（0/1）&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;定义电气特性、接口规范、信号电压、速率&lt;/li&gt;
&lt;li&gt;不关心数据含义，只负责“电信号”传输&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;典型：&lt;/strong&gt; 网线、光纤、RJ45、电压电流&lt;/p&gt;
&lt;h4 id=&#34;-数据链路层data-link-layer&#34;&gt;&lt;strong&gt;② 数据链路层（Data Link Layer）&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;核心职责：将比特流封装成帧，实现相邻节点可靠传输&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;差错检测（CRC）&lt;/li&gt;
&lt;li&gt;流量控制、帧同步&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;典型：&lt;/strong&gt; MAC 地址、以太网、ARP&lt;/p&gt;
&lt;h4 id=&#34;-网络层network-layer&#34;&gt;&lt;strong&gt;③ 网络层（Network Layer）&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;核心职责：逻辑寻址 + 路由选择&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;决定数据包从源到目的的路径&lt;/li&gt;
&lt;li&gt;跨网络转发&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;典型：&lt;/strong&gt; IP 地址、IP 协议、路由协议&lt;/p&gt;
&lt;h4 id=&#34;-传输层transport-layer&#34;&gt;&lt;strong&gt;④ 传输层（Transport Layer）&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;核心职责：端到端通信&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;数据分段、重组&lt;/li&gt;
&lt;li&gt;提供可靠或不可靠传输&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;典型：&lt;/strong&gt; TCP（可靠）、UDP（实时）、端口号&lt;/p&gt;
&lt;h4 id=&#34;-会话层session-layer&#34;&gt;&lt;strong&gt;⑤ 会话层（Session Layer）&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;核心职责：建立、管理、终止会话&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;会话状态控制&lt;/li&gt;
&lt;li&gt;同步、恢复&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;典型：&lt;/strong&gt; 会话管理、断点续传（概念）&lt;/p&gt;
&lt;h4 id=&#34;-表示层presentation-layer&#34;&gt;&lt;strong&gt;⑥ 表示层（Presentation Layer）&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;核心职责：数据格式转换&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;编码、加密、解密、压缩&lt;/li&gt;
&lt;li&gt;屏蔽不同系统的数据表示差异&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;典型：&lt;/strong&gt; ASCII、UTF-8、压缩、SSL/TLS（概念上）&lt;/p&gt;</description>
    </item>
    <item>
      <title>App</title>
      <link>https://blog.993123852.xyz/posts/linuxapp/app/</link>
      <pubDate>Sun, 05 Apr 2026 20:53:07 +0800</pubDate>
      <guid>https://blog.993123852.xyz/posts/linuxapp/app/</guid>
      <description>&lt;h2 id=&#34;-pthread_create-创建线程的核心流程&#34;&gt;🧵 &lt;code&gt;pthread_create()&lt;/code&gt; 创建线程的核心流程&lt;/h2&gt;
&lt;h3 id=&#34;1-准备线程控制块tcb&#34;&gt;1. 准备线程控制块（TCB）&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;内核分配线程控制块（Thread Control Block），保存线程的基本信息：
&lt;ul&gt;
&lt;li&gt;线程 ID&lt;/li&gt;
&lt;li&gt;状态（就绪、运行、阻塞等）&lt;/li&gt;
&lt;li&gt;寄存器上下文（PC、SP 等）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;如果传入了 &lt;code&gt;pthread_attr_t&lt;/code&gt;，则根据属性设置栈大小、调度策略等。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;2-分配线程栈空间&#34;&gt;2. 分配线程栈空间&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;每个线程有独立的栈，用于函数调用和局部变量。&lt;/li&gt;
&lt;li&gt;默认大小由系统决定，可通过 &lt;code&gt;attr&lt;/code&gt; 修改。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;3-初始化线程上下文&#34;&gt;3. 初始化线程上下文&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;设置程序计数器（PC）指向入口函数 &lt;code&gt;start_routine&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;初始化栈指针（SP）和寄存器。&lt;/li&gt;
&lt;li&gt;将参数 &lt;code&gt;arg&lt;/code&gt; 传递给入口函数。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;4-加入调度器&#34;&gt;4. 加入调度器&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;内核把新线程放入 &lt;strong&gt;可运行队列&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;根据调度策略（如 &lt;code&gt;SCHED_OTHER&lt;/code&gt;、&lt;code&gt;SCHED_FIFO&lt;/code&gt;、&lt;code&gt;SCHED_RR&lt;/code&gt;）等待 CPU 调度。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;5-返回线程-id&#34;&gt;5. 返回线程 ID&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;pthread_create()&lt;/code&gt; 返回 0 表示成功。&lt;/li&gt;
&lt;li&gt;用户态获得线程 ID，可用于 &lt;code&gt;pthread_join()&lt;/code&gt; 或 &lt;code&gt;pthread_detach()&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;6-线程开始执行&#34;&gt;6. 线程开始执行&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;CPU 调度器选择该线程运行。&lt;/li&gt;
&lt;li&gt;执行入口函数 &lt;code&gt;start_routine(arg)&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;执行结束后调用 &lt;code&gt;pthread_exit()&lt;/code&gt; 或隐式退出。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;注意事项&#34;&gt;注意事项&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;共享地址空间&lt;/strong&gt;：所有线程共享进程的堆、全局变量。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;独立栈&lt;/strong&gt;：每个线程有自己的栈和寄存器上下文。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;资源释放&lt;/strong&gt;：如果不调用 &lt;code&gt;pthread_join()&lt;/code&gt; 或 &lt;code&gt;pthread_detach()&lt;/code&gt;，线程退出后资源不会自动释放，可能导致内存泄漏。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;总结口诀&#34;&gt;总结口诀&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TCB → 栈 → 上下文 → 调度器 → 返回 ID → 执行入口函数&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>IPC</title>
      <link>https://blog.993123852.xyz/posts/os/ipc/</link>
      <pubDate>Sat, 04 Apr 2026 22:14:18 +0800</pubDate>
      <guid>https://blog.993123852.xyz/posts/os/ipc/</guid>
      <description>&lt;p&gt;下面我把你这两节内容 &lt;strong&gt;（死锁与活锁 + 中断上下文中能否使用互斥锁）&lt;/strong&gt; 结合你当前页面中的知识，再加上操作系统并发控制的完整理解，整理成一份 &lt;strong&gt;结构清晰、适合八股文/面试的总结版&lt;/strong&gt;。&lt;br&gt;
我保持你要求的 &lt;strong&gt;Markdown 最大二级标题&lt;/strong&gt;。&lt;/p&gt;
&lt;hr&gt;</description>
    </item>
    <item>
      <title>Interupt</title>
      <link>https://blog.993123852.xyz/posts/os/interupt/</link>
      <pubDate>Sat, 04 Apr 2026 21:54:44 +0800</pubDate>
      <guid>https://blog.993123852.xyz/posts/os/interupt/</guid>
      <description>&lt;h1 id=&#34;中断&#34;&gt;中断&lt;/h1&gt;
&lt;h2 id=&#34;中断上下文interrupt-context&#34;&gt;中断上下文（Interrupt Context）&lt;/h2&gt;
&lt;p&gt;中断上下文是指 &lt;strong&gt;CPU 在处理中断（硬件中断或软件中断）时所处的特殊执行环境&lt;/strong&gt;。&lt;br&gt;
在这个环境中，CPU 会暂停当前进程/线程，转而执行中断服务例程（ISR）。&lt;/p&gt;
&lt;p&gt;中断上下文是操作系统中 &lt;strong&gt;最高优先级、最敏感、最严格&lt;/strong&gt; 的执行环境。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&#34;4191-中断上下文的特点&#34;&gt;4.19.1 中断上下文的特点&lt;/h3&gt;
&lt;h4 id=&#34;1-实时性强&#34;&gt;1. 实时性强&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;中断必须 &lt;strong&gt;立即响应&lt;/strong&gt; 外设事件（如网卡、定时器、中断控制器）。&lt;/li&gt;
&lt;li&gt;ISR 必须 &lt;strong&gt;短小精悍&lt;/strong&gt;，尽快退出，避免影响系统实时性。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;2-非阻塞不能睡眠&#34;&gt;2. 非阻塞（不能睡眠）&lt;/h4&gt;
&lt;p&gt;在中断上下文中 &lt;strong&gt;绝对不能阻塞&lt;/strong&gt;，包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;不能 sleep / msleep&lt;/li&gt;
&lt;li&gt;不能等待锁（mutex、semaphore）&lt;/li&gt;
&lt;li&gt;不能执行可能阻塞的 I/O&lt;/li&gt;
&lt;li&gt;不能调用 schedule()&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;原因：&lt;br&gt;
阻塞会导致中断无法结束，系统无法继续调度，严重影响稳定性。&lt;/p&gt;
&lt;h4 id=&#34;3-不允许调度&#34;&gt;3. 不允许调度&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;中断上下文中 &lt;strong&gt;调度被禁止&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;ISR 不能主动让出 CPU，也不能被调度器切走。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;4-不可重入一般情况&#34;&gt;4. 不可重入（一般情况）&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;一个中断处理程序执行期间，&lt;strong&gt;同类型中断不会再次进入&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;某些系统支持中断嵌套（高优先级中断打断低优先级），但必须谨慎使用。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&#34;4192-中断上下文的执行流程&#34;&gt;4.19.2 中断上下文的执行流程&lt;/h3&gt;
&lt;h4 id=&#34;1-中断发生&#34;&gt;1. 中断发生&lt;/h4&gt;
&lt;p&gt;硬件设备或软件触发 IRQ。&lt;/p&gt;
&lt;h4 id=&#34;2-保存当前进程状态&#34;&gt;2. 保存当前进程状态&lt;/h4&gt;
&lt;p&gt;CPU 保存：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PC（程序计数器）&lt;/li&gt;
&lt;li&gt;寄存器&lt;/li&gt;
&lt;li&gt;内核栈指针&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些信息用于中断返回后恢复执行。&lt;/p&gt;
&lt;h4 id=&#34;3-执行中断处理程序isr&#34;&gt;3. 执行中断处理程序（ISR）&lt;/h4&gt;
&lt;p&gt;ISR 负责：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;读取设备寄存器&lt;/li&gt;
&lt;li&gt;清除中断标志&lt;/li&gt;
&lt;li&gt;将数据放入缓冲区&lt;/li&gt;
&lt;li&gt;通知下半部（如软中断、tasklet、workqueue）&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;4-恢复原任务&#34;&gt;4. 恢复原任务&lt;/h4&gt;
&lt;p&gt;ISR 完成后：&lt;/p&gt;</description>
    </item>
    <item>
      <title>OS</title>
      <link>https://blog.993123852.xyz/posts/os/os/</link>
      <pubDate>Sat, 04 Apr 2026 21:14:20 +0800</pubDate>
      <guid>https://blog.993123852.xyz/posts/os/os/</guid>
      <description>&lt;h1 id=&#34;多线程编程&#34;&gt;多线程编程&lt;/h1&gt;
&lt;hr&gt;
&lt;h2 id=&#34;多进程内存共享可能存在的问题及处理方法&#34;&gt;多进程内存共享可能存在的问题及处理方法&lt;/h2&gt;
&lt;h3 id=&#34;1-内存一致性问题memory-consistency&#34;&gt;1. 内存一致性问题（Memory Consistency）&lt;/h3&gt;
&lt;p&gt;多个进程可能缓存共享数据，导致：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A 进程写入的数据，B 进程读不到（缓存未同步）&lt;/li&gt;
&lt;li&gt;多核 CPU 上出现乱序执行导致读写顺序不一致&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;本质原因：&lt;/strong&gt;&lt;br&gt;
进程之间没有自动的缓存一致性保证，需要显式同步。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&#34;2-并发访问问题race-condition&#34;&gt;2. 并发访问问题（Race Condition）&lt;/h3&gt;
&lt;p&gt;多个进程同时读写共享变量时，会出现：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;数据竞争（Data Race）&lt;/li&gt;
&lt;li&gt;写覆盖写&lt;/li&gt;
&lt;li&gt;读到中间状态的数据&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;例如两个进程同时执行 &lt;code&gt;counter++&lt;/code&gt;，可能导致最终值错误。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&#34;3-同步问题lack-of-synchronization&#34;&gt;3. 同步问题（Lack of Synchronization）&lt;/h3&gt;
&lt;p&gt;共享内存本身不带同步机制，进程之间必须自行协调：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;谁先读？&lt;/li&gt;
&lt;li&gt;谁先写？&lt;/li&gt;
&lt;li&gt;写完是否通知其他进程？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果没有同步，就会出现混乱。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&#34;4-死锁问题deadlock&#34;&gt;4. 死锁问题（Deadlock）&lt;/h3&gt;
&lt;p&gt;如果多个进程使用锁不当，会出现：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A 等 B 的锁&lt;/li&gt;
&lt;li&gt;B 等 A 的锁&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最终所有进程都卡住。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&#34;5-内存泄漏与资源未释放&#34;&gt;5. 内存泄漏与资源未释放&lt;/h3&gt;
&lt;p&gt;共享内存属于系统资源，如果：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;创建后未 &lt;code&gt;shmctl(..., IPC_RMID)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;POSIX &lt;code&gt;shm_unlink()&lt;/code&gt; 未调用&lt;/li&gt;
&lt;li&gt;Windows &lt;code&gt;CloseHandle()&lt;/code&gt; 未调用&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;就会导致系统资源泄漏。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;处理方法&#34;&gt;处理方法&lt;/h2&gt;
&lt;h3 id=&#34;1-使用-ipc-同步机制必备&#34;&gt;1. 使用 IPC 同步机制（必备）&lt;/h3&gt;
&lt;p&gt;共享内存必须配合同步机制使用：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;信号量（Semaphore）&lt;/strong&gt;：最常用的进程同步方式&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;互斥锁（Mutex）&lt;/strong&gt;：POSIX 支持 &lt;em&gt;进程间互斥锁&lt;/em&gt;（需要放在共享内存中）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;读写锁（RWLock）&lt;/strong&gt;：读多写少场景&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;条件变量（Condition Variable）&lt;/strong&gt;：用于事件通知&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;示例（POSIX 信号量）：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Leetcode</title>
      <link>https://blog.993123852.xyz/posts/leetcode/</link>
      <pubDate>Wed, 01 Apr 2026 15:00:01 +0800</pubDate>
      <guid>https://blog.993123852.xyz/posts/leetcode/</guid>
      <description>&lt;h1 id=&#34;动态规划&#34;&gt;动态规划&lt;/h1&gt;
&lt;h2 id=&#34;heading&#34;&gt;&lt;a href=&#34;https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-cooldown/description&#34;&gt;[309]买卖股票的最佳时机含冷冻期&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;给定一个整数数组prices，其中第  prices[i] 表示第 i 天的股票价格 。​&lt;/p&gt;
&lt;p&gt;设计一个算法计算出最大利润。在满足以下约束条件下，你可以尽可能地完成更多的交易（多次买卖一支股票）:&lt;/p&gt;
&lt;p&gt;卖出股票后，你无法在第二天买入股票 (即冷冻期为 1 天)。
注意：你不能同时参与多笔交易（你必须在再次购买前出售掉之前的股票）。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;hold(持有)
&lt;ul&gt;
&lt;li&gt;keep hold
&lt;ul&gt;
&lt;li&gt;保持持有&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;selled
&lt;ul&gt;
&lt;li&gt;把持有的买了
&lt;ul&gt;
&lt;li&gt;price + hold&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;selled(不持有，在冷静期)
&lt;ul&gt;
&lt;li&gt;sell
&lt;ul&gt;
&lt;li&gt;出冷静期&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;sell(不持有，可以卖)
&lt;ul&gt;
&lt;li&gt;keep sell
&lt;ul&gt;
&lt;li&gt;继续不持有&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;hold
&lt;ul&gt;
&lt;li&gt;买入
&lt;ul&gt;
&lt;li&gt;sell - price&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Solution&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;public&lt;/span&gt;&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;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;maxProfit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vector&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;prices&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;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hold&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;prices&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;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sell&lt;/span&gt; &lt;span class=&#34;o&#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;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;selled&lt;/span&gt; &lt;span class=&#34;o&#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&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;for&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vector&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;iterator&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;it&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;prices&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;begin&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;it&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;prices&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;end&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;n&#34;&gt;it&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;tmp&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hold&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;it&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;hold&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;max&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hold&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sell&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;it&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;sell&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;max&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sell&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;selled&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;selled&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tmp&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;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;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;max&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sell&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;selled&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;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;h1 id=&#34;回溯&#34;&gt;回溯&lt;/h1&gt;
&lt;h2 id=&#34;17电话号码的字母组合&#34;&gt;&lt;a href=&#34;https://leetcode.cn/problems/letter-combinations-of-a-phone-number/description&#34;&gt;17.电话号码的字母组合&lt;/a&gt;&lt;/h2&gt;</description>
    </item>
    <item>
      <title>Yaku</title>
      <link>https://blog.993123852.xyz/posts/majan/yaku/</link>
      <pubDate>Tue, 31 Mar 2026 14:38:07 +0800</pubDate>
      <guid>https://blog.993123852.xyz/posts/majan/yaku/</guid>
      <description>&lt;hr&gt;
&lt;h1 id=&#34;-日麻全部役种从常用到偏僻&#34;&gt;🀄 &lt;strong&gt;日麻全部役种（从常用到偏僻）&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;下面按类别整理：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;一番役（常用）&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;二番役（中级）&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;三番以上（高级）&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;役满（大役）&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;复合役满（双倍役满等）&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;特殊役（部分规则限定）&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;一常用的一番役最常见&#34;&gt;&lt;strong&gt;一、常用的一番役（最常见）&lt;/strong&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;th&gt;说明&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;立直（リーチ）&lt;/td&gt;
          &lt;td&gt;1&lt;/td&gt;
          &lt;td&gt;必须门清&lt;/td&gt;
          &lt;td&gt;宣告立直&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;门前清自摸（门清ツモ）&lt;/td&gt;
          &lt;td&gt;1&lt;/td&gt;
          &lt;td&gt;必须门清&lt;/td&gt;
          &lt;td&gt;门清自摸&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;断幺九（タンヤオ）&lt;/td&gt;
          &lt;td&gt;1&lt;/td&gt;
          &lt;td&gt;无&lt;/td&gt;
          &lt;td&gt;无幺九无字牌&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;平和（ピンフ）&lt;/td&gt;
          &lt;td&gt;1&lt;/td&gt;
          &lt;td&gt;必须门清&lt;/td&gt;
          &lt;td&gt;全顺子+两面听&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;一发（イッパツ）&lt;/td&gt;
          &lt;td&gt;1&lt;/td&gt;
          &lt;td&gt;必须立直&lt;/td&gt;
          &lt;td&gt;一巡内和牌&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;场风/自风刻（役牌）&lt;/td&gt;
          &lt;td&gt;1&lt;/td&gt;
          &lt;td&gt;无&lt;/td&gt;
          &lt;td&gt;风刻子&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;三元牌（白发中）&lt;/td&gt;
          &lt;td&gt;1&lt;/td&gt;
          &lt;td&gt;无&lt;/td&gt;
          &lt;td&gt;白/发/中刻子&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;一杯口（イーペーコー）&lt;/td&gt;
          &lt;td&gt;1&lt;/td&gt;
          &lt;td&gt;必须门清&lt;/td&gt;
          &lt;td&gt;同顺两组&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;幺九牌&#34;&gt;幺九牌&lt;/h3&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&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;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;&lt;img alt=&#34;一万&#34; loading=&#34;lazy&#34; src=&#34;https://blog.993123852.xyz/rima/41px-1m.png&#34;&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;img alt=&#34;九万&#34; loading=&#34;lazy&#34; src=&#34;https://blog.993123852.xyz/rima/41px-9m.png&#34;&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;img alt=&#34;一坨&#34; loading=&#34;lazy&#34; src=&#34;https://blog.993123852.xyz/rima/41px-1p.png&#34;&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;img alt=&#34;九坨&#34; loading=&#34;lazy&#34; src=&#34;https://blog.993123852.xyz/rima/41px-9p.png&#34;&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;img alt=&#34;一条&#34; loading=&#34;lazy&#34; src=&#34;https://blog.993123852.xyz/rima/41px-1s.png&#34;&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;img alt=&#34;九条&#34; loading=&#34;lazy&#34; src=&#34;https://blog.993123852.xyz/rima/41px-9s.png&#34;&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;img alt=&#34;东&#34; loading=&#34;lazy&#34; src=&#34;https://blog.993123852.xyz/rima/41px-1z.png&#34;&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;img alt=&#34;南&#34; loading=&#34;lazy&#34; src=&#34;https://blog.993123852.xyz/rima/41px-2z.png&#34;&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;img alt=&#34;西&#34; loading=&#34;lazy&#34; src=&#34;https://blog.993123852.xyz/rima/41px-3z.png&#34;&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;img alt=&#34;北&#34; loading=&#34;lazy&#34; src=&#34;https://blog.993123852.xyz/rima/41px-4z.png&#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;&lt;img alt=&#34;白&#34; loading=&#34;lazy&#34; src=&#34;https://blog.993123852.xyz/rima/41px-5z.png&#34;&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;img alt=&#34;发&#34; loading=&#34;lazy&#34; src=&#34;https://blog.993123852.xyz/rima/41px-6z.png&#34;&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;img alt=&#34;中&#34; loading=&#34;lazy&#34; src=&#34;https://blog.993123852.xyz/rima/41px-7z.png&#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;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;二二番役中级常见&#34;&gt;&lt;strong&gt;二、二番役（中级常见）&lt;/strong&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;七对子（チートイツ）&lt;/td&gt;
          &lt;td&gt;2（门清限定）&lt;/td&gt;
          &lt;td&gt;七个对子&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;对对和（トイトイ）&lt;/td&gt;
          &lt;td&gt;2&lt;/td&gt;
          &lt;td&gt;全刻子&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;三色同顺&lt;/td&gt;
          &lt;td&gt;2 / 1&lt;/td&gt;
          &lt;td&gt;三门同样顺子&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;一气通贯（イッツー）&lt;/td&gt;
          &lt;td&gt;2 / 1&lt;/td&gt;
          &lt;td&gt;123+456+789&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;混全带幺九（チャンタ）&lt;/td&gt;
          &lt;td&gt;2 / 1&lt;/td&gt;
          &lt;td&gt;每组含幺九或字&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;三暗刻&lt;/td&gt;
          &lt;td&gt;2&lt;/td&gt;
          &lt;td&gt;三个暗刻&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;小三元&lt;/td&gt;
          &lt;td&gt;2&lt;/td&gt;
          &lt;td&gt;两个三元刻+三元雀头&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;混老头&lt;/td&gt;
          &lt;td&gt;2&lt;/td&gt;
          &lt;td&gt;全幺九牌组成&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id=&#34;三三番以上高级役&#34;&gt;&lt;strong&gt;三、三番以上（高级役）&lt;/strong&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;混一色（ホンイツ）&lt;/td&gt;
          &lt;td&gt;3 / 2&lt;/td&gt;
          &lt;td&gt;一色+字牌&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;二杯口（リャンペーコー）&lt;/td&gt;
          &lt;td&gt;3（门清限定）&lt;/td&gt;
          &lt;td&gt;两个一杯口&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;清一色（チンイツ）&lt;/td&gt;
          &lt;td&gt;6 / 5&lt;/td&gt;
          &lt;td&gt;全一色&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id=&#34;四役满大役&#34;&gt;&lt;strong&gt;四、役满（大役）&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;这些都是 &lt;strong&gt;13 番以上&lt;/strong&gt;，直接算役满，不加宝牌。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cmemory</title>
      <link>https://blog.993123852.xyz/posts/c/cmemory/</link>
      <pubDate>Tue, 31 Mar 2026 01:41:08 +0800</pubDate>
      <guid>https://blog.993123852.xyz/posts/c/cmemory/</guid>
      <description>&lt;h2 id=&#34;mallocfree-使用时可能出现的问题&#34;&gt;malloc、free 使用时可能出现的问题&lt;/h2&gt;
&lt;h3 id=&#34;1-内存泄漏memory-leak&#34;&gt;1. 内存泄漏（Memory Leak）&lt;/h3&gt;
&lt;h4 id=&#34;现象&#34;&gt;现象&lt;/h4&gt;
&lt;p&gt;内存泄漏是指动态分配的内存未被释放，导致程序运行时内存无法被回收，随着时间推移，程序占用的内存会不断增大，最终可能导致内存耗尽或程序崩溃。&lt;/p&gt;
&lt;p&gt;分配的内存没有被 free，导致程序占用的内存越来越多。&lt;/p&gt;
&lt;h4 id=&#34;为什么会发生&#34;&gt;为什么会发生&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;malloc/calloc 分配的内存不会自动释放&lt;/li&gt;
&lt;li&gt;忘记 free&lt;/li&gt;
&lt;li&gt;提前 return 导致 free 没执行&lt;/li&gt;
&lt;li&gt;指针被覆盖导致无法 free&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;解决&#34;&gt;解决&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;每个 malloc 都要有对应的 free&lt;/li&gt;
&lt;li&gt;复杂函数中使用“统一出口”模式&lt;/li&gt;
&lt;li&gt;工程中可使用内存检测工具（valgrind）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;2-双重释放double-free&#34;&gt;2. 双重释放（Double Free）&lt;/h3&gt;
&lt;h4 id=&#34;现象-1&#34;&gt;现象&lt;/h4&gt;
&lt;p&gt;同一块内存被 free 两次，导致未定义行为，可能直接崩溃。&lt;/p&gt;
&lt;h4 id=&#34;为什么会发生-1&#34;&gt;为什么会发生&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;free 后指针仍然指向旧地址&lt;/li&gt;
&lt;li&gt;程序逻辑重复释放同一指针&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;解决-1&#34;&gt;解决&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;free 后将指针置为 NULL&lt;/li&gt;
&lt;li&gt;避免多个指针指向同一块动态内存&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;3-悬挂指针dangling-pointer&#34;&gt;3. 悬挂指针（Dangling Pointer）&lt;/h3&gt;
&lt;h4 id=&#34;现象-2&#34;&gt;现象&lt;/h4&gt;
&lt;p&gt;指针指向的内存已经被释放，但指针仍然被使用。&lt;/p&gt;
&lt;h4 id=&#34;为什么会发生-2&#34;&gt;为什么会发生&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;free 后继续使用该指针&lt;/li&gt;
&lt;li&gt;指向栈上临时变量的指针在函数返回后继续使用&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;解决-2&#34;&gt;解决&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;free 后置 NULL&lt;/li&gt;
&lt;li&gt;避免返回局部变量地址&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;4-内存不足out-of-memory&#34;&gt;4. 内存不足（Out of Memory）&lt;/h3&gt;
&lt;h4 id=&#34;现象-3&#34;&gt;现象&lt;/h4&gt;
&lt;p&gt;malloc 返回 NULL，但程序没有检查，继续使用该指针导致崩溃。&lt;/p&gt;
&lt;h4 id=&#34;为什么会发生-3&#34;&gt;为什么会发生&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;系统内存不足&lt;/li&gt;
&lt;li&gt;分配过大内存块&lt;/li&gt;
&lt;li&gt;内存碎片化导致无法分配连续空间&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;解决-3&#34;&gt;解决&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;始终检查 malloc 返回值&lt;/li&gt;
&lt;li&gt;对大内存使用 mmap 或内存池&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;5-未初始化内存&#34;&gt;5. 未初始化内存&lt;/h3&gt;
&lt;h4 id=&#34;现象-4&#34;&gt;现象&lt;/h4&gt;
&lt;p&gt;malloc 分配的内存内容是随机值，使用这些值会导致不可预测行为。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Milkvduo256 Python Lib</title>
      <link>https://blog.993123852.xyz/posts/milkvduo256-python-lib/</link>
      <pubDate>Tue, 17 Feb 2026 20:43:19 +0800</pubDate>
      <guid>https://blog.993123852.xyz/posts/milkvduo256-python-lib/</guid>
      <description>&lt;p&gt;添加文件结构&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;buildroot-2021.05
&lt;ul&gt;
&lt;li&gt;package
&lt;ul&gt;
&lt;li&gt;python-numpy
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;python-numpy.mk&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;python-numpy.hash&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Config.in&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;configs
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;milkv-duo256m-sd_musl_riscv64_defconfig&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;BR2_PACKAGE_PYTHON_NUMPY=y&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Pve Win11</title>
      <link>https://blog.993123852.xyz/posts/pve-win11/</link>
      <pubDate>Thu, 12 Feb 2026 13:37:10 +0800</pubDate>
      <guid>https://blog.993123852.xyz/posts/pve-win11/</guid>
      <description>&lt;h1 id=&#34;pve91安装windows25h2&#34;&gt;PVE9.1安装windows25H2&lt;/h1&gt;
&lt;h2 id=&#34;材料&#34;&gt;材料&lt;/h2&gt;
&lt;p&gt;windows11 25H2 : windows 官网F12改为移动版，即可获得下载链接
&lt;a href=&#34;https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/&#34;&gt;virtio-win链接&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>虚函数与内联</title>
      <link>https://blog.993123852.xyz/posts/cpp/virtualcpp/</link>
      <pubDate>Tue, 10 Feb 2026 10:03:02 +0800</pubDate>
      <guid>https://blog.993123852.xyz/posts/cpp/virtualcpp/</guid>
      <description>&lt;h2 id=&#34;多态是如何实现的vtable&#34;&gt;多态是如何实现的（VTable）？​&lt;/h2&gt;
&lt;p&gt;在 C++ 中，&lt;strong&gt;多态性&lt;/strong&gt; 是面向对象编程（OOP）的核心特性之一，它允许程序在运行时根据对象的实际类型来决定调用哪个方法。&lt;strong&gt;虚函数&lt;/strong&gt; 是实现多态的关键，C++ 通过 虚函数表（VTable） 和 虚函数指针（VPtr） 来实现多态性。&lt;/p&gt;
&lt;h3 id=&#34;多态的定义&#34;&gt;多态的定义​&lt;/h3&gt;
&lt;p&gt;多态性是指同一操作作用于不同的对象时，能够产生不同的行为。在 C++ 中，主要有两种类型的多态：​&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;编译时多态（如函数重载、运算符重载）​&lt;/li&gt;
&lt;li&gt;运行时多态（通过虚函数和继承实现）​
C++ 的 运行时多态 是通过 虚函数 来实现的，虚函数使得基类和派生类的对象能够在运行时动态地决定调用哪一个函数。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;虚函数与多态的关系&#34;&gt;虚函数与多态的关系​&lt;/h3&gt;
&lt;p&gt;虚函数的作用​&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;当我们在基类中声明一个函数为虚函数（使用 virtual 关键字），它就可以在派生类中被重写（覆盖）。​&lt;/li&gt;
&lt;li&gt;如果通过基类指针或引用调用虚函数，程序会根据对象的实际类型来决定调用哪个版本的函数（即派生类的重写版本，而不是基类的版本），从而实现多态。​
虚函数调用的关键：​
虚函数调用的实现依赖于 C++ 的 虚函数表（VTable） 机制。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;vtable虚函数表&#34;&gt;VTable（虚函数表）​&lt;/h3&gt;
&lt;p&gt;什么是 VTable？​
VTable 是一个指针表，存储了类中所有虚函数的地址。每一个包含虚函数的类都会有一张虚函数表。编译器在编译时为每个类生成一个 VTable，存储了该类所有虚函数的地址（即函数指针）。​&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;VTable 的工作原理​
&lt;ul&gt;
&lt;li&gt;每个包含虚函数的类都会有一个 虚函数表（VTable），这个表的大小与类中的虚函数数目相同。​&lt;/li&gt;
&lt;li&gt;每个对象（含有虚函数的类的对象）都会有一个 虚指针（VPtr），它指向该类的 VTable。​&lt;/li&gt;
&lt;li&gt;当调用虚函数时，程序会通过对象的 VPtr 查找虚函数表，然后跳转到正确的虚函数地址，从而实现动态绑定（即运行时选择函数）。​
VTable 的示意图​
假设有一个基类 Base 和一个派生类 Derived，它们都有虚函数 foo()。​
​&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Base&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;err&#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;public&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;err&#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;virtual&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;foo&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 class=&#34;err&#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;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Base foo&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;endl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;err&#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;err&#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;err&#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;err&#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;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Derived&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Base&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;err&#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;public&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;err&#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;void&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;foo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;override&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;err&#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;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Derived foo&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;endl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;err&#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;err&#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;err&#34;&gt;​&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;• Base 类的 VTable 可能会包含指向 &lt;code&gt;Base::foo()&lt;/code&gt; 的函数指针。​
• Derived 类的 VTable 会包含指向 &lt;code&gt;Derived::foo()&lt;/code&gt; 的函数指针。​
当我们通过基类指针调用 foo() 时，C++ 通过 虚指针（VPtr） 确定实际调用的是 &lt;code&gt;Derived::foo()&lt;/code&gt;，而不是 &lt;code&gt;Base::foo()&lt;/code&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>My First Post</title>
      <link>https://blog.993123852.xyz/posts/my-first-post/</link>
      <pubDate>Mon, 09 Feb 2026 19:47:19 +0800</pubDate>
      <guid>https://blog.993123852.xyz/posts/my-first-post/</guid>
      <description>&lt;p&gt;欢迎体验 Hugo 博客！这是我的第一篇文章。&lt;/p&gt;
&lt;h2 id=&#34;博客命令&#34;&gt;博客命令&lt;/h2&gt;
&lt;p&gt;所有小点，全部像你要求的那样 “简短但展开”，每一点都解释清楚“为什么”，但不啰嗦。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
