<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>MEREDITH'S LOG</title>
    <link>https://meredith2328.github.io/</link>
    <description>pixel · minimal · notes</description>
    <atom:link href="https://meredith2328.github.io/rss.xml" rel="self" type="application/rss+xml"/>
    <language>zh-CN</language>
    <generator>pilog</generator>
      <item>
        <title>用 pilog 搭建像素风博客</title>
        <link>https://meredith2328.github.io/posts/tech/pixel-blog.html</link>
        <guid isPermaLink="false">https://meredith2328.github.io/posts/tech/pixel-blog.html</guid>
        <pubDate>Thu, 30 Jul 2026 00:00:00 -0000</pubDate>
        <description>&lt;p&gt;一套个人自制的轻量静态博客框架：读取 &lt;code&gt;blogs/&lt;/code&gt; 目录下的 Markdown，生成卡片 / 清单 / 图谱三种视图，主题复刻 Chrome 断网页的像素美学。&lt;/p&gt;</description>
      </item>
      <item>
        <title>断网小恐龙，入住博客角落</title>
        <link>https://meredith2328.github.io/posts/notes/dino-game.html</link>
        <guid isPermaLink="false">https://meredith2328.github.io/posts/notes/dino-game.html</guid>
        <pubDate>Wed, 15 Jul 2026 00:00:00 -0000</pubDate>
        <description>&lt;p&gt;主页右下角藏着一只 Chrome 断网页小恐龙。点开它，就可以在写博客的间隙跑两步： 空格 / ↑：跳跃 ↓：下蹲（空中可急降） Enter：重新开始 游戏整体复刻了 Chromium 官方的像素配色与手感，也定义了本站的视觉语言：灰白底、锐利直角、没有多余的圆角。 想直接玩，点这里：开始游戏。&lt;/p&gt;</description>
      </item>
      <item>
        <title>一篇用来演示超长标题在卡片与图谱节点中如何显示与自动截断的示例文章</title>
        <link>https://meredith2328.github.io/posts/notes/long-title-demo.html</link>
        <guid isPermaLink="false">https://meredith2328.github.io/posts/notes/long-title-demo.html</guid>
        <pubDate>Fri, 10 Jul 2026 00:00:00 -0000</pubDate>
        <description>&lt;p&gt;图谱节点已经加大，可以容纳更长的标题；当标题仍然超出节点宽度时，末尾会用 ... 截断，悬停节点可以看到完整标题。 这篇示例本身没有更多内容，它的任务已经完成了。&lt;/p&gt;</description>
      </item>
      <item>
        <title>结合nanovllm的FlashAttention和PagedAttention主要原理概述</title>
        <link>https://meredith2328.github.io/posts/cs/ml/nanovllm.html</link>
        <guid isPermaLink="false">https://meredith2328.github.io/posts/cs/ml/nanovllm.html</guid>
        <pubDate>Sat, 16 May 2026 00:00:00 -0000</pubDate>
        <description>&lt;p&gt;总结：FlashAttention用于降低Attention计算阶段预存的显存消耗（内部计算范畴）， PagedAttention用于高效管理推理的KV Cache（外部推理范畴）。 FlashAttention： 问题：标准 Attention 需要存储 N×N 的中间矩阵，显存 O(N²) 解决：分块 + 在线 softmax，显存降到 O(N) 关键：外循环 Q 块，内循环 K、V 块，在线更新 m、l、O PagedAttention： 问题：预分配连续显存导致大量浪费（内部碎片 + 外部碎片）…&lt;/p&gt;</description>
      </item>
      <item>
        <title>做了一个叫notegotya的五线谱识谱练习玩具</title>
        <link>https://meredith2328.github.io/posts/toy/notegotya.html</link>
        <guid isPermaLink="false">https://meredith2328.github.io/posts/toy/notegotya.html</guid>
        <pubDate>Sat, 16 May 2026 00:00:00 -0000</pubDate>
        <description>&lt;p&gt;因为想学一下低音谱号，顺便再多熟练熟练不熟悉的高音谱号的读谱，所以做了个小玩具出来。 把谱面难度调低还挺好玩的 → notegotya&lt;/p&gt;</description>
      </item>
      <item>
        <title>从原始Softmax到在线Softmax</title>
        <link>https://meredith2328.github.io/posts/cs/ml/softmax.html</link>
        <guid isPermaLink="false">https://meredith2328.github.io/posts/cs/ml/softmax.html</guid>
        <pubDate>Thu, 09 Apr 2026 00:00:00 -0000</pubDate>
        <description>&lt;p&gt;撰写了原始的softmax、数值稳定的softmax、在线softmax的公式及其简单代码呈现。 我们讨论的起点是原始的softmax形式： $$pj = \frac{e^{zj}}{\sumk e^{zk}}.$$ 为保证数值稳定，令 m := \maxk zk, 则 softmax 可等价改写为数值稳定的softmax形式： pj = \frac{e^{zj - m}}{\sumk e^{zk - m}}. 其实就是给分子分母的 $z$ 先减去 $m$ ，然后再使用exp函数，相当于给 $pj$…&lt;/p&gt;</description>
      </item>
      <item>
        <title>给机器学习系统课程做了一下中文翻译</title>
        <link>https://meredith2328.github.io/posts/toy/fudan-mlsys-cn.html</link>
        <guid isPermaLink="false">https://meredith2328.github.io/posts/toy/fudan-mlsys-cn.html</guid>
        <pubDate>Wed, 25 Mar 2026 00:00:00 -0000</pubDate>
        <description>&lt;p&gt;在线阅读： MLSys 中文翻译 搞到网页上方便阅读。 原网页链接： MLSys 课程名称：复旦大学2025-2026春机器学习系统课程（尚笠老师）&lt;/p&gt;</description>
      </item>
      <item>
        <title>怎么估算LLM训练的内存和计算需求？推一推、测一测</title>
        <link>https://meredith2328.github.io/posts/cs/ml/LLMestimate2.html</link>
        <guid isPermaLink="false">https://meredith2328.github.io/posts/cs/ml/LLMestimate2.html</guid>
        <pubDate>Thu, 12 Mar 2026 00:00:00 -0000</pubDate>
        <description>&lt;p&gt;本部分适合于知道AdamW更新流程、但没有尝试推导过peak memory和计算量、计算时间的朋友。 A{per\layer} ≈ 9BLd + 2BhL^2 C ≈ 6 × P × D Problem (adamwAccounting): Resource accounting for training with AdamW 接下来我们计算一下使用AdamW需要多少内存和计算。tensor一律使用float32。 (a) 运行AdamW的peak memory是多少？…&lt;/p&gt;</description>
      </item>
      <item>
        <title>从SGD到AdamW，优化器怎么发展过来的？</title>
        <link>https://meredith2328.github.io/posts/cs/ml/optimizer.html</link>
        <guid isPermaLink="false">https://meredith2328.github.io/posts/cs/ml/optimizer.html</guid>
        <pubDate>Wed, 11 Mar 2026 00:00:00 -0000</pubDate>
        <description>&lt;p&gt;Adam = Momentum + RMSProp 本文可以省流成以下几句话： SGD往梯度下降的方向更新权重。 SGD+Momentum把梯度累积起来、得到了方向，一直同向就更新快一点，变向就慢一点。 AdaGrad把梯度的平方累积起来，让出现得频繁却梯度值很小的步长更大。 RMSProp给AdaGrad加了一个衰减系数，不看整个历史、只看近期历史，防止学习率消失。 Adam = Momentum + RMSProp。 AdamW解决了在使用Adam时应该怎么做权重衰减。 $$ \theta{t+1} =…&lt;/p&gt;</description>
      </item>
      <item>
        <title>值得顺便掌握一下的那些linux指令</title>
        <link>https://meredith2328.github.io/posts/cs/linux-command.html</link>
        <guid isPermaLink="false">https://meredith2328.github.io/posts/cs/linux-command.html</guid>
        <pubDate>Tue, 10 Mar 2026 00:00:00 -0000</pubDate>
        <description>&lt;p&gt;命令行能够即时地做很多事情，甚至代表一种简洁而切题的计算机哲学。 为了直接进入正题，省略诸如 cd 这样的广为人知的基础指令，直接看那些显著提升体验的东西。 用于查看磁盘空间。使用场景比如训模型会保存很多中间文件，可以这样看看需要清理哪些。 比如 fuse-overlayfs 是这个实例本身的存储， shared-nvme 是它的外接可持久化存储，使用率分别为 50% 和 40% 。 至于要看哪几个文件最大，可以和 ncdu 这样的工具搭配使用。 查找关键词，关键词可以写正则。…&lt;/p&gt;</description>
      </item>
      <item>
        <title>CS336 Assignment 1 前半段记录：架构</title>
        <link>https://meredith2328.github.io/posts/cs/ml/CS336-hw1-1.html</link>
        <guid isPermaLink="false">https://meredith2328.github.io/posts/cs/ml/CS336-hw1-1.html</guid>
        <pubDate>Tue, 10 Mar 2026 00:00:00 -0000</pubDate>
        <description>&lt;p&gt;从分词开始，搭建起Transformer架构。 BPE tokenizer Transformer LM The cross-entropy loss function and the AdamW optimizer The training loop (support: serilizing, loading model, optimizer state) 4.1 Cross-entropy loss 实现交叉熵损失。 4.2 The SGD Optimizer 基础的随机梯度下降优化器的原理。 4.3…&lt;/p&gt;</description>
      </item>
      <item>
        <title>CS336 Assignment 1 后半段记录：实验</title>
        <link>https://meredith2328.github.io/posts/cs/ml/CS336-hw1-2.html</link>
        <guid isPermaLink="false">https://meredith2328.github.io/posts/cs/ml/CS336-hw1-2.html</guid>
        <pubDate>Tue, 10 Mar 2026 00:00:00 -0000</pubDate>
        <description>&lt;p&gt;已经搭建起了训练循环，接下来做一些实验。训得有多快？有多好？ 之前的实现接口不是很好用，更进一步包装了一下，并麻烦GPT帮我优化了naive实现。 由于 testtokenizer 中 import resource 这个库只能在linux中使用，决定将核心代码拷贝到linux环境下进行测试。 而为了保证实现的正确性，在原来的windows环境下利用gpt撰写了 testtokenizerwindows.py 用于替换。 成功通过了所有测试。 在实际的训练过程中大约有如下的日志： 5.1 Data Loader…&lt;/p&gt;</description>
      </item>
      <item>
        <title>WanDB基础使用教程总结</title>
        <link>https://meredith2328.github.io/posts/cs/ml/wandb.html</link>
        <guid isPermaLink="false">https://meredith2328.github.io/posts/cs/ml/wandb.html</guid>
        <pubDate>Sun, 08 Mar 2026 00:00:00 -0000</pubDate>
        <description>&lt;p&gt;WanDB是一个python库/日志托管平台，帮我们详细记录并整理了训练过程中的各种参数和指标变化， 省去了需要自己详细记录日志、绘制图表的麻烦，并且可以做超参数搜索等进阶用法。 整合入训练循环的最小模板： 在W&amp;amp;B quickstart中提到了两款产品，我们主要使用的是前者，用于记录acc、loss、运行环境和模型权重等日志信息，并且便于做简单的绘图。 wanDB最本源的使用方式是通过 wandb.log 函数，记录 epoch， accuracy 和 loss ，只要在相关的地方把变量传给它就行。…&lt;/p&gt;</description>
      </item>
      <item>
        <title>怎么估算LLM的参数量和训练FLOPs？推一推、测一测</title>
        <link>https://meredith2328.github.io/posts/cs/ml/LLMestimate.html</link>
        <guid isPermaLink="false">https://meredith2328.github.io/posts/cs/ml/LLMestimate.html</guid>
        <pubDate>Tue, 03 Mar 2026 00:00:00 -0000</pubDate>
        <description>&lt;p&gt;本Blog适合于知道 Transformer 基础结构、但没有尝试推导过参数量和FLOPs的朋友。 省流：P ≈ 12Nd^2 + Vd 本文的LLM基于Transformer Decoder结构，以 GPT2-XL 为例。它有以下超参数设置： 实测得到的可训练参数量为 1,557,611,200 = 1.56B。 以下是使用HuggingFace Transformers库实际加载了GPT2 XL并统计可训练参数量的结果。代码见下述附录A。 可训练参数量的估算公式为： $$12Nd^2+Vd$$ 其中 $N$…&lt;/p&gt;</description>
      </item>
      <item>
        <title>【数据结构与算法4】LeetCode HOT 100 in Python（前50）</title>
        <link>https://meredith2328.github.io/posts/cs/algo/algorithm-4.html</link>
        <guid isPermaLink="false">https://meredith2328.github.io/posts/cs/algo/algorithm-4.html</guid>
        <pubDate>Mon, 02 Mar 2026 00:00:00 -0000</pubDate>
        <description>&lt;p&gt;哈希，双指针，滑动窗口，子串，数组，矩阵，链表，二叉树，图。 需要什么就哈希记录什么。 对双指针的理解是：两个指针向中间收缩的问题，收缩的一般是“不收缩的话，后续搜索得到的解均不符合题意”的那个指针。 专题3 滑动窗口 对滑动窗口的理解是：处理移动窗口前后的差分。 链表的一个重要工具是prev指针，用于指示前一个节点。 需要返回索引，所以记录索引。 在遍历的同时，将已遍历过的元素索引记录在哈希表中，即可确定与当前元素组成两数之和的数是否存在。 49 字母异位词分组 相当于把所有字符串s按照sorted(s)分组。…&lt;/p&gt;</description>
      </item>
      <item>
        <title>【数据结构与算法5】LeetCode HOT 100 in Python（后50）</title>
        <link>https://meredith2328.github.io/posts/cs/algo/algorithm-5.html</link>
        <guid isPermaLink="false">https://meredith2328.github.io/posts/cs/algo/algorithm-5.html</guid>
        <pubDate>Mon, 02 Mar 2026 00:00:00 -0000</pubDate>
        <description>&lt;p&gt;回溯、二分查找、栈、堆、贪心、动态规划、多维动态规划、技巧。 大致目的是完整地、成体系地过， 然后对关键点仔细地、反复地揣摩把握， 最终目标是任意抽出一道、均能有很好的理解。 专题11 二分查找 专题15 动态规划 专题16 多维动态规划 回溯模板：结束条件，遍历选择，做出选择。 回溯需要考虑当前start时可以做哪些选择。 17 电话号码的字母组合 回溯需要考虑当前位置可以做出哪些选择。 （集合中元素可以重复使用，不同位置元素不同） 重复使用通过传入相同的i实现。 变式：组合总和II…&lt;/p&gt;</description>
      </item>
      <item>
        <title>贴贴棋（reverseChess）介绍</title>
        <link>https://meredith2328.github.io/posts/toy/reverseChess.html</link>
        <guid isPermaLink="false">https://meredith2328.github.io/posts/toy/reverseChess.html</guid>
        <pubDate>Thu, 26 Feb 2026 00:00:00 -0000</pubDate>
        <description>&lt;p&gt;在线游玩：贴贴棋 贴贴棋是一个10x10的黑白棋变体小游戏，纯HTML（JavaScript）。最主要的规则如下： （复制）如果走到的地方周围三面为空（不考虑移动前的位置，因为总是为空，下同），则任取一面置黑色。 （同化）如果一面有白棋、两面为空，则将白棋和任意一面空的同时置为黑色。 （保留）如果两面有白棋、一面为空，则啥也不做。 （被同化）如果三面有白棋，则踩过去自己变白棋。 如果某方无路可走，或者只剩一个棋子，则游戏结束，确定胜负。…&lt;/p&gt;</description>
      </item>
      <item>
        <title>用einops包替换掉PyTorch的大部分矩阵变换函数</title>
        <link>https://meredith2328.github.io/posts/cs/ml/einops.html</link>
        <guid isPermaLink="false">https://meredith2328.github.io/posts/cs/ml/einops.html</guid>
        <pubDate>Mon, 09 Feb 2026 00:00:00 -0000</pubDate>
        <description>&lt;p&gt;只是 rearrange ，reduce ， repeat 和 einsum 这四个函数而已。 爱因斯坦求和标记：Einops tutorial, part 1: basics - Einops rearrange 函数：以更可读的方式重排、合并或拆分维度。 在这种计算机视觉的上下文里还挺合适的，分别是batch channel height width这样的实际语义，做调整时保持语义会很有利于阅读。 reduce 函数：这个真的很好读，一看就是对channel维度做了mean操作。 repeat…&lt;/p&gt;</description>
      </item>
      <item>
        <title>【数据结构与算法3】基础数据结构与算法模板整理</title>
        <link>https://meredith2328.github.io/posts/cs/algo/algorithm-3.html</link>
        <guid isPermaLink="false">https://meredith2328.github.io/posts/cs/algo/algorithm-3.html</guid>
        <pubDate>Sun, 18 Jan 2026 00:00:00 -0000</pubDate>
        <description>&lt;p&gt;参考：《深入浅出程序设计竞赛（基础篇）（汪楚奇）》。 （可参考：数据结构（C++模板实现）） 基本上知道思路之后大部分代码都是自己完整写出来的（部分难题和跳过的题目除外），然后再补了一点细节。 往后推的同时，还需要加强巩固一些重点的专题，做做课后习题： 学过某个知识了，不代表这个知识已经掌握甚至融会贯通了。做题是为了这个目的，而不是堆数字：“增加题量”。 整本书粗略地学习了一遍，框架已经搭起来了，之后就是提熟练度了。完结撒花！！ 基础篇跟进阶篇看起来有这么多东西，为什么甚至没有网络流…&lt;/p&gt;</description>
      </item>
      <item>
        <title>【数据结构与算法2】算法篇：用3x2审视算法课的算法部分</title>
        <link>https://meredith2328.github.io/posts/cs/algo/algorithm-2.html</link>
        <guid isPermaLink="false">https://meredith2328.github.io/posts/cs/algo/algorithm-2.html</guid>
        <pubDate>Mon, 05 Jan 2026 00:00:00 -0000</pubDate>
        <description>&lt;p&gt;总而言之是叽里呱啦一些《算法导论》笔记 基础算法案例，分治，比较算法与随机化，动态规划，贪心，最短路径， 网络流，回溯，在线算法，P/NP，近似算法 直觉+过程+伪代码： 上下文、复杂度， 边界、核心设置， 不变量、自然语言解释。 Lec1 数学基础√ Lec2 分治√ Lec3 比较算法与随机化√ Lec4 哈希 不太能用这个结构讲√ Lec5 布隆过滤器 不太能用这个结构讲 Lec6 动态规划必须可以√ Lec7 贪心可以√ Lec8 摊还分析主要是数学分析方法，略过√ Lec9 最短路径可以√ Lec10…&lt;/p&gt;</description>
      </item>
      <item>
        <title>minitorch</title>
        <link>https://meredith2328.github.io/posts/cs/ml/minitorch.html</link>
        <guid isPermaLink="false">https://meredith2328.github.io/posts/cs/ml/minitorch.html</guid>
        <pubDate>Mon, 05 Jan 2026 00:00:00 -0000</pubDate>
        <description>&lt;p&gt;项目文档链接：MiniTorch 项目仓库：minitorch/minitorch: The full minitorch student suite. 我的实现：Meredith2328/minitorch: The full minitorch student suite. （完成√并整理√了Fundamentals, ML Primer, AutoDiff, Tensors, 完成了Efficiency部分，未涉及Networks部分。）…&lt;/p&gt;</description>
      </item>
      <item>
        <title>【数据结构与算法1】数学篇：从几个专题审视算法课的数学部分</title>
        <link>https://meredith2328.github.io/posts/cs/algo/algorithm-1.html</link>
        <guid isPermaLink="false">https://meredith2328.github.io/posts/cs/algo/algorithm-1.html</guid>
        <pubDate>Sun, 04 Jan 2026 00:00:00 -0000</pubDate>
        <description>&lt;p&gt;总而言之是噼里啪啦一些《算法导论》笔记 时间复杂度，求和公式，分治，哈希，摊还分析，在线算法与竞争分析，线性规划与单纯形法 Lec1 复杂度的严格证明√ Lec2 求和公式，1/n和ln n的关系整理√ Lec2 各种分治递归求解方法及其练习√ Lec4 哈希和布隆过滤器的分析√ Lec8 摊还分析√ Lec12 在线算法及竞争性分析√ Lec13 线性规划与单纯形法√ ps. 感觉Lec4 哈希和Lec5 布隆过滤器写得太糙了 回头可以连带简单实验和分析搞一个整体一点的小专题 $\Theta…&lt;/p&gt;</description>
      </item>
      <item>
        <title>Career advice 丨 职业建议（翻译自 Terence Tao 的博客）</title>
        <link>https://meredith2328.github.io/posts/toy/career-advice-by-tao.html</link>
        <guid isPermaLink="false">https://meredith2328.github.io/posts/toy/career-advice-by-tao.html</guid>
        <pubDate>Fri, 01 Aug 2025 00:00:00 -0000</pubDate>
        <description>&lt;p&gt;Career advice | What's new 作者：陶哲轩（Terence Tao） 声明：本页面中的“我”指原作者。仅为了方便个人查阅、而将原页面做了中文翻译，并修订了一些过时链接。翻译时间为2025年8月1日。未取得原作者的版权同意，仅供个人学习使用。一切版权归原作者所有。 以下是我收集的关于数学学术职业问题的各种建议，大致按建议在哪个阶段最适用进行排序（当然，有些建议也适用于多个阶段）。…&lt;/p&gt;</description>
      </item>
      <item>
        <title>IEEE754 浮点数与十进制数互相转换流程及例子</title>
        <link>https://meredith2328.github.io/posts/cs/ieee754.html</link>
        <guid isPermaLink="false">https://meredith2328.github.io/posts/cs/ieee754.html</guid>
        <pubDate>Tue, 17 Jun 2025 00:00:00 -0000</pubDate>
        <description>&lt;p&gt;原来只是精度、数量级，再加上偏移量这个从无符号数到有符号数的工程实现。 浮点数从未如此简单。 （不是） 十进制数转浮点数步骤： 十进制转二进制，如$10.001{2}$。 二进制转二进制的科学计数法表示（$1.xxx2 \times 2^{yyy}$），如$1.001{2} \times 2^1$，根据指数$yyy$参考下述“规格化和非规格化判断”。 根据二进制的科学计数法表示，参考下述“M和E是多少”，写出s, exp, frac。 浮点数转十进制数步骤：反过来…&lt;/p&gt;</description>
      </item>
      <item>
        <title>十派的玩具箱有哪些内容？</title>
        <link>https://meredith2328.github.io/posts/cs/10pi.html</link>
        <guid isPermaLink="false">https://meredith2328.github.io/posts/cs/10pi.html</guid>
        <pubDate>Fri, 30 Aug 2024 00:00:00 -0000</pubDate>
        <description>&lt;p&gt;顾名思义，玩具箱就应该是玩具箱。 知识笔记、工具笔记、写出的小玩意儿，都是玩具。 有时候玩玩具是为了写blog，有时候写blog是为了玩玩具。 任何批评和建议均会受到最热烈的欢迎： Issues / pipipi2328@gmail.com 主要集中于深度学习常用的工具。 Linux好用的指令 写的奇怪的小玩意儿。 notegotya freshdan 有时还会翻译或转载一些我觉得很有趣的内容。 陶哲轩的职业建议 You and Your Research - Richard Hamming…&lt;/p&gt;</description>
      </item>
      <item>
        <title>freshdan 新生wiki项目</title>
        <link>https://meredith2328.github.io/posts/toy/freshdan-xin-sheng-wiki-xiang-mu.html</link>
        <guid isPermaLink="false">https://meredith2328.github.io/posts/toy/freshdan-xin-sheng-wiki-xiang-mu.html</guid>
        <pubDate>Mon, 26 Aug 2024 00:00:00 -0000</pubDate>
        <description>&lt;p&gt;已发布至 freshdan 假期内跟 @Jingyijun 老师聊天时画了这个饼，和 @CodingMizore 激烈交流、以及参考了 @Cameudis 老师的意见之后，终于成为一个比较完整的项目。 当前涉及“怎样选课、各类课程简介、GPA介绍、搜集信息、常用资源介绍、大学与自学”共计六部分内容，基本把我能想到的比较重要的东西都涵盖到了。作为读了两遍大一的双倍小登，读大一这个事情我还是比较有经验的（雾）之后有什么其他应当写的，大概需要朋友们提提建议。…&lt;/p&gt;</description>
      </item>
      <item>
        <title>CSAPP: shelllab</title>
        <link>https://meredith2328.github.io/posts/cs/csapp/csapp-shelllab.html</link>
        <guid isPermaLink="false">https://meredith2328.github.io/posts/cs/csapp/csapp-shelllab.html</guid>
        <pubDate>Thu, 27 Jun 2024 00:00:00 -0000</pubDate>
        <description>&lt;p&gt;以test16为例，其余效果相似。 根据课本，我们在编写信号处理程序时应当遵守以下规则类怪谈： 我们为了阻塞信号，提供的主要函数有： 课本（中文）8.4.6节（P525）提供了不回收后台子进程的eval缺陷版本，在此之上加入信号处理： 改变全局变量前后需要阻塞和取消阻塞全部信号，保证原子性； 在使用Fork之前阻塞SIGCHLD，防止子进程在fork之后、addjob之前终止并被handler回收。同时要在子进程中取消阻塞SIGCHLD。 上述两条信号处理是基于下列文档提示的。 eval block:…&lt;/p&gt;</description>
      </item>
      <item>
        <title>CSAPP: cachelab</title>
        <link>https://meredith2328.github.io/posts/cs/csapp/csapp-cachelab.html</link>
        <guid isPermaLink="false">https://meredith2328.github.io/posts/cs/csapp/csapp-cachelab.html</guid>
        <pubDate>Wed, 05 Jun 2024 00:00:00 -0000</pubDate>
        <description>&lt;p&gt;由于测试程序driver.py是python2程序，首先需要安装python2。流程如下： 从Python官网（https://www.python.org/downloads/release/python-2718/）下载Python2的源码包(.tar.xz)并解压，进入解压后的目录。 安装python2依赖。 进入源码目录，逐一执行以下指令进行构建和安装。 通过查看版本号，验证Python2安装是否成功。 另外为了执行driver.py，需要用apt安装valgrind。…&lt;/p&gt;</description>
      </item>
      <item>
        <title>CSAPP: attacklab</title>
        <link>https://meredith2328.github.io/posts/cs/csapp/csapp-attacklab.html</link>
        <guid isPermaLink="false">https://meredith2328.github.io/posts/cs/csapp/csapp-attacklab.html</guid>
        <pubDate>Wed, 15 May 2024 00:00:00 -0000</pubDate>
        <description>&lt;p&gt;这个lab不用打断点方便很多。 末尾加 -q 是不发送到评测服务器。 我们要做的事情类似于phase3，如下： 此时我们要解决以下问题： 0x556400b8 本来是我们用于存放字符串的位置（执行的命令之后），但是我们现在此位置未知。 首先类似于phase4，将我们所需注入的代码： mov 字符串地址,%rdi 和执行touch3拆解为：（伪代码） 那么接下来只要考虑如何获取到存放的字符串地址。分析farm发现： gadget为我们提供了addxy指令，区别于其他所有指令，可能会完整用到该指令。结合课本…&lt;/p&gt;</description>
      </item>
      <item>
        <title>CSAPP: bomblab</title>
        <link>https://meredith2328.github.io/posts/cs/csapp/csapp-bomblab.html</link>
        <guid isPermaLink="false">https://meredith2328.github.io/posts/cs/csapp/csapp-bomblab.html</guid>
        <pubDate>Tue, 30 Apr 2024 00:00:00 -0000</pubDate>
        <description>&lt;p&gt;各phase答案: 读入整数，整数，字符串 b secretphase rdi: &amp;amp;inputstr rbx: rax=int(inputstr)=inputint rax: inputint - 1 u&amp;lt;=3e8, so 1 ≤ inputint ≤ 3e9 esi: inputint x/512x 0x604110 8 32 (50) 6 16 2d 6b 1 7 14 23 28 2f(47) 63 3e9(1001) 要求fun7的返回值为1 参数1: edi=edx，开始时是树的根节点 参数2:…&lt;/p&gt;</description>
      </item>
      <item>
        <title>CSAPP: datalab</title>
        <link>https://meredith2328.github.io/posts/cs/csapp/csapp-datalab.html</link>
        <guid isPermaLink="false">https://meredith2328.github.io/posts/cs/csapp/csapp-datalab.html</guid>
        <pubDate>Tue, 30 Apr 2024 00:00:00 -0000</pubDate>
        <description>&lt;p&gt;对于浮点数部分，额外写了笔记，欢迎参阅： IEEE754浮点数与十进制数互相转换流程及例子 直接考虑所求的两种情况。 利用对称差公式：x ^ y = (x&amp;amp;\y) | (y&amp;amp;\x)， 我们需要取这两种情况，所以取两次反， 并将其中一次取反运用于狄·摩根律完成从|到&amp;amp;的转换，即得所求为 ((x &amp;amp; y) &amp;amp; (y &amp;amp; x))。 考虑反面的另外两种情况。 x和y均为1或0时，x^y返回0。单独取这两种情况即为 (x &amp;amp; y) | (\x &amp;amp; \y)。 取其反面即为( (x &amp;amp; y) | (\x &amp;amp; \y) )。…&lt;/p&gt;</description>
      </item>
      <item>
        <title>友情链接们</title>
        <link>https://meredith2328.github.io/posts/toy/friends.html</link>
        <guid isPermaLink="false">https://meredith2328.github.io/posts/toy/friends.html</guid>
        <pubDate>Tue, 30 Apr 2024 00:00:00 -0000</pubDate>
        <description>&lt;p&gt;TLP's Blog 星间纪行 - 不著名星际贡献者不完全记录 Xia's Blog&lt;/p&gt;</description>
      </item>
      <item>
        <title>为什么神乐光很萌？</title>
        <link>https://meredith2328.github.io/posts/toy/KaguraHikari.html</link>
        <guid isPermaLink="false">https://meredith2328.github.io/posts/toy/KaguraHikari.html</guid>
        <pubDate>Sun, 07 Jan 2024 00:00:00 -0000</pubDate>
        <description>&lt;p&gt;by. 看少女歌剧看魔怔了的十派 如何界定神乐光的萌点？ 首先可以盖棺定论地说，神乐光绝对不是“傲娇”一词就能概括的。 事实上，对比于“傲娇”一词的起源明日香，神乐光无论傲和娇都是“不称职”的。假定傲娇一词针对的对象是其在意的人，eva对应男主，神乐光对应华恋，神乐光从来没有对华恋冷言相向，也没有在突破特定阈值时突然展现出“娇”的姿态。 神乐光平日里始终是冷冷、捉摸不透的表情，虽然这种情况下更可能是在发呆。或许用“谜语人”一词更好形容她——带有电波感又内心坚定的无口天然少女，这是我想到的不吝用词的界定。…&lt;/p&gt;</description>
      </item>
      <item>
        <title>CS61A disc03 递归</title>
        <link>https://meredith2328.github.io/posts/cs/61a/cs61a-disc03.html</link>
        <guid isPermaLink="false">https://meredith2328.github.io/posts/cs/61a/cs61a-disc03.html</guid>
        <pubDate>Wed, 30 Aug 2023 00:00:00 -0000</pubDate>
        <description>&lt;p&gt;依旧遵从disc01的案例-过程-抽象-实现的思路。 为了简化本blog及之后的blog，对于部分题目，首先会省略写出实现后、代入案例检验的过程；也可能会只取一个案例做分析，其他案例请自行思考；还可能会省略从案例抽象出某些符号的观察思考过程，直接给出实现。 在分析案例时可能会尽量将案例拆分开、遵照由简单到复杂的思考过程。如果某些步骤整合后一次性给出不易理解，可以尝试自行拆分。…&lt;/p&gt;</description>
      </item>
      <item>
        <title>CS61A disc04 树的递归</title>
        <link>https://meredith2328.github.io/posts/cs/61a/cs61a-disc04.html</link>
        <guid isPermaLink="false">https://meredith2328.github.io/posts/cs/61a/cs61a-disc04.html</guid>
        <pubDate>Wed, 30 Aug 2023 00:00:00 -0000</pubDate>
        <description>&lt;p&gt;For the following questions, don't start trying to write code right away. Instead, start by describing the recursive case in words. Some examples: In fib from lecture, the recursive case is to add together the previous two Fibonacci numbers. In doubleeights…&lt;/p&gt;</description>
      </item>
      <item>
        <title>CS61A disc05 迭代、时空复杂度</title>
        <link>https://meredith2328.github.io/posts/cs/61a/cs61a-disc05.html</link>
        <guid isPermaLink="false">https://meredith2328.github.io/posts/cs/61a/cs61a-disc05.html</guid>
        <pubDate>Wed, 30 Aug 2023 00:00:00 -0000</pubDate>
        <description>&lt;p&gt;使用try-except块是为了在循环内调用next(t)足够多次、通过StopIteration退出循环时将其处理掉。 用for还是很直接的，重点提一下用yield from构造生成函数的递归。 首先理解yield from，它是使用另外一个迭代器，效果类似于 for item in iterable: yield item。…&lt;/p&gt;</description>
      </item>
      <item>
        <title>CS61A disc07 树、链表</title>
        <link>https://meredith2328.github.io/posts/cs/61a/cs61a-disc07.html</link>
        <guid isPermaLink="false">https://meredith2328.github.io/posts/cs/61a/cs61a-disc07.html</guid>
        <pubDate>Wed, 30 Aug 2023 00:00:00 -0000</pubDate>
        <description>&lt;p&gt;左子树的所有节点的值都小于等于父节点的值， 右子树的所有节点的值都大于父节点的值。 Solution 1 Solution 2 Hint写得很清楚，摘抄一下。 Hint: Approach Place the division pattern from the example above in a while statement: While constructing the decimal expansion, store the tail for each n in a dictionary keyed by…&lt;/p&gt;</description>
      </item>
      <item>
        <title>CS61A disc01 “迭代与抽象”</title>
        <link>https://meredith2328.github.io/posts/cs/61a/cs61a-disc01.html</link>
        <guid isPermaLink="false">https://meredith2328.github.io/posts/cs/61a/cs61a-disc01.html</guid>
        <pubDate>Mon, 17 Jul 2023 00:00:00 -0000</pubDate>
        <description>&lt;p&gt;Discussion 1 | CS 61A Summer 2024 eg. race(3, 4) 以下先考虑前10min中构造无限循环。 第一个条件显然不符合我们的需要。 因为第二个条件是 tortoise - hare ，若其为负值、则仍可以继续循环。 0-4min 由于y&amp;gt;x，hare=my &amp;gt; tortoise=mx，不可能追上。 5-9min 此时 hare=5y ，tortoise=mx, m = 6, ..., 10，恰好追上即mx=5y，即6x=5y, 7x=5y, 8x=5y, 9x=5y,…&lt;/p&gt;</description>
      </item>
      <item>
        <title>CS61A disc02 高阶函数</title>
        <link>https://meredith2328.github.io/posts/cs/61a/cs61a-disc02.html</link>
        <guid isPermaLink="false">https://meredith2328.github.io/posts/cs/61a/cs61a-disc02.html</guid>
        <pubDate>Mon, 17 Jul 2023 00:00:00 -0000</pubDate>
        <description>&lt;p&gt;Discussion 2 | CS 61A Summer 2024 这里的等号是数学等号，不是赋值↓ (lambda x:3)(4) = 3 (lambda x: 2 3 x)(5) = 30 对Environment Diagram不太有兴趣，Q2和Q3就跳过了qwq 思路：还是符合上一次disc提到的解决问题的迭代与抽象方式。 首先取makekeeper(5)(iseven)，描述它的执行过程： makekeeper(5)返回一个这样的函数，它的循环变量i从1到5递增，如果cond(i)，则打印i。…&lt;/p&gt;</description>
      </item>
      <item>
        <title>自设</title>
        <link>https://meredith2328.github.io/posts/toy/zi-she.html</link>
        <guid isPermaLink="false">https://meredith2328.github.io/posts/toy/zi-she.html</guid>
        <pubDate>Sat, 13 Aug 2022 00:00:00 -0000</pubDate>
        <description>&lt;p&gt;人设绝赞完善中！ ⋯⋯ 等等等等（以下省略一万字以上） 按照ACG顺序介绍，这一部分是一边听 向着无尽之灰/限りなく灰色へ 一边写的。 bilibili：十派的追番列表 大约是2020年10月开始相对较大规模地看番剧，该属性持续至今。 看番列表中“日常番”类型相对较多。 几乎没有接触过战斗番等类型，欢迎推荐。 相比于“追番”更喜欢“补番”，所以会把一部分番点了红心之后放置到更完再看。(也可能一直不看 比如赛马娘2（2024.1.7补：虽然依旧没有补 赛马娘第一季和赛马娘第二季 ，但是ROAD TO THE TOP…&lt;/p&gt;</description>
      </item>
  </channel>
</rss>
