<?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>沐风的博客</title><link>https://blog.muwinds.com/</link><description>Recent content on 沐风的博客</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Tue, 08 Sep 2026 21:53:47 +0800</lastBuildDate><atom:link href="https://blog.muwinds.com/index.xml" rel="self" type="application/rss+xml"/><item><title>leetcode 复健 1232. 缀点成线</title><link>https://blog.muwinds.com/archives/401/</link><pubDate>Tue, 08 Sep 2026 21:53:47 +0800</pubDate><guid>https://blog.muwinds.com/archives/401/</guid><description>&lt;p&gt;给定一个整数数组 &lt;code&gt;coordinates&lt;/code&gt; ，其中 &lt;code&gt;coordinates[i] = [x, y]&lt;/code&gt; ， &lt;code&gt;[x, y]&lt;/code&gt; 表示横坐标为 &lt;code&gt;x&lt;/code&gt;、纵坐标为 &lt;code&gt;y&lt;/code&gt; 的点。请你来判断，这些点是否在该坐标系中属于同一条直线上。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;示例 1：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://assets.leetcode.cn/aliyun-lc-upload/uploads/2019/10/19/untitled-diagram-2.jpg"&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;输入：coordinates = [[1,2],[2,3],[3,4],[4,5],[5,6],[6,7]]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;输出：true
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;示例 2：&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>leetcode 复健：54螺旋矩阵</title><link>https://blog.muwinds.com/archives/395/</link><pubDate>Wed, 05 Aug 2026 22:56:26 +0800</pubDate><guid>https://blog.muwinds.com/archives/395/</guid><description>&lt;p&gt;说来感慨，大一那会儿这题都是有手就行的，现在手撕都费劲了，有个思路就了不得了。&lt;/p&gt;
&lt;p&gt;给你一个 &lt;code&gt;m&lt;/code&gt; 行 &lt;code&gt;n&lt;/code&gt; 列的矩阵 &lt;code&gt;matrix&lt;/code&gt; ，请按照 &lt;strong&gt;顺时针螺旋顺序&lt;/strong&gt; ，返回矩阵中的所有元素。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;示例 1：&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>leetcode 复健：1041</title><link>https://blog.muwinds.com/archives/392/</link><pubDate>Sat, 01 Aug 2026 23:40:57 +0800</pubDate><guid>https://blog.muwinds.com/archives/392/</guid><description>&lt;p&gt;在无限的平面上，机器人最初位于 &lt;code&gt;(0, 0)&lt;/code&gt; 处，面朝北方。注意:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;北方向&lt;/strong&gt; 是y轴的正方向。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;南方向&lt;/strong&gt; 是y轴的负方向。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;东方向&lt;/strong&gt; 是x轴的正方向。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;西方向&lt;/strong&gt; 是x轴的负方向。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;机器人可以接受下列三条指令之一：&lt;/p&gt;</description></item><item><title>Inagora 爬虫实习面试记录</title><link>https://blog.muwinds.com/archives/390/</link><pubDate>Sat, 01 Aug 2026 23:10:44 +0800</pubDate><guid>https://blog.muwinds.com/archives/390/</guid><description>&lt;p&gt;一面：&lt;/p&gt;
&lt;p&gt;面试问项目啥的直接跳过，说说问的技术问题：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;浏览器里除了会保存 cookie 信息以外还会保存什么其他信息吗？&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这个问题我当时答得磕磕绊绊的，只说了有个 local storage 然后还会保存一些 css 这种信息用来提高多次加载的速度以外没回答出什么。正常的回答如下：&lt;/p&gt;</description></item><item><title>pi agent 不显示 xhigh 和 max 的解决方法</title><link>https://blog.muwinds.com/archives/389/</link><pubDate>Tue, 28 Jul 2026 20:52:04 +0800</pubDate><guid>https://blog.muwinds.com/archives/389/</guid><description>&lt;p&gt;最近开始使用 pi 的 coding agent，发现没法通过 shift+tab 来调整 effort level 到 xhigh 和 max，pi 的 settings 里也没有&lt;/p&gt;
&lt;p&gt;让 pi 自己解决，很快就好了&lt;/p&gt;
&lt;p&gt;直接把 thinkingLevelMap 放在模型对象下，并且在 max 键上也做映射（否则 max 级别不会出现）：&lt;/p&gt;</description></item><item><title>Leetcode 复健2: 389</title><link>https://blog.muwinds.com/archives/387/</link><pubDate>Sat, 18 Jul 2026 23:03:29 +0800</pubDate><guid>https://blog.muwinds.com/archives/387/</guid><description>&lt;p&gt;给定两个字符串 &lt;code&gt;s&lt;/code&gt; 和 &lt;code&gt;t&lt;/code&gt; ，它们只包含小写字母。&lt;/p&gt;
&lt;p&gt;字符串 &lt;code&gt;t&lt;/code&gt; 由字符串 &lt;code&gt;s&lt;/code&gt; 随机重排，然后在随机位置添加一个字母。&lt;/p&gt;
&lt;p&gt;请找出在 &lt;code&gt;t&lt;/code&gt; 中被添加的字母。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;示例 1：&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;输入：s = &amp;#34;abcd&amp;#34;, t = &amp;#34;abcde&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;输出：&amp;#34;e&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;解释：&amp;#39;e&amp;#39; 是那个被添加的字母。
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;示例 2：&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Leetcode 复健1: 1768</title><link>https://blog.muwinds.com/archives/385/</link><pubDate>Sat, 18 Jul 2026 22:42:19 +0800</pubDate><guid>https://blog.muwinds.com/archives/385/</guid><description>&lt;p&gt;之前面一个中小厂不太顺利，回过头来发现我 vibe coding 太多导致基本的数据结构已经还给院长了，自己手写一个费劲的很，打算从 easy 难度的恢复一下，重走长征路&lt;/p&gt;
&lt;p&gt;&lt;a href="https://leetcode.cn/problems/merge-strings-alternately/"&gt;1768. 交替合并字符串&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;给你两个字符串 &lt;code&gt;word1&lt;/code&gt; 和 &lt;code&gt;word2&lt;/code&gt; 。请你从 &lt;code&gt;word1&lt;/code&gt; 开始，通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长，就将多出来的字母追加到合并后字符串的末尾。&lt;/p&gt;</description></item><item><title>Z100 DCU 上 vLLM CUDA Graph 推理优化实践</title><link>https://blog.muwinds.com/archives/380/</link><pubDate>Mon, 15 Jun 2026 09:25:04 +0800</pubDate><guid>https://blog.muwinds.com/archives/380/</guid><description>&lt;p&gt;我们在海光 Z100 DCU (gfx906) 上对 vLLM 推理框架的 CUDA Graph 功能进行了完整的测试验证。本文记录开启 CUDA Graph + torch.compile 的具体配置、性能数据和关键发现。&lt;/p&gt;
&lt;h2 id="测试环境"&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;服务器&lt;/td&gt;
&lt;td&gt;scnet&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPU&lt;/td&gt;
&lt;td&gt;1x 海光 Z100 DCU (gfx906), 16 GiB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Python&lt;/td&gt;
&lt;td&gt;3.10.12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PyTorch&lt;/td&gt;
&lt;td&gt;2.10.0+das.opt1.dtk2604&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;vLLM&lt;/td&gt;
&lt;td&gt;0.18.1+das.3266200.dtk2604&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Triton&lt;/td&gt;
&lt;td&gt;3.4.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;模型&lt;/td&gt;
&lt;td&gt;Qwen3.5-4B (BF16)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="两种配置对比"&gt;两种配置对比&lt;/h2&gt;
&lt;h3 id="baselineenforce_eagertrue禁用-cuda-graph"&gt;Baseline：enforce_eager=True（禁用 CUDA Graph）&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;compilation_config.mode = CompilationMode.NONE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cudagraph_mode = CUDAGraphMode.NONE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;启用 custom fusions（norm_quant、act_quant）&lt;/li&gt;
&lt;li&gt;模型加载时间：~125s&lt;/li&gt;
&lt;li&gt;显存占用：~13.25 GiB&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="cuda-graph--compileenforce_eagerfalse"&gt;CUDA Graph + Compile：enforce_eager=False&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;compilation_config.mode = VLLM_COMPILE&lt;/code&gt;（Inductor backend）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cudagraph_mode = FULL_AND_PIECEWISE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;compile_ranges_endpoints: [8192]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cudagraph_capture_sizes: [1, 2]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;禁用 custom fusions（与 compile 不兼容）&lt;/li&gt;
&lt;li&gt;模型加载时间：~172s（编译开销）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;显存占用：~14.5 GiB&lt;/strong&gt;（多出 ~1.3 GiB 用于 Graph 缓冲）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;关键：CUDA Graph 模式&lt;strong&gt;不要传 &amp;ndash;enforce-eager&lt;/strong&gt;，去掉该参数后 vLLM 自动启用 VLLM_COMPILE + FULL_AND_PIECEWISE CUDA Graph。&lt;/p&gt;</description></item><item><title>海光 Z100 DCU微基准测试：功耗、温度与计算特性分析</title><link>https://blog.muwinds.com/archives/373/</link><pubDate>Tue, 09 Jun 2026 16:57:35 +0800</pubDate><guid>https://blog.muwinds.com/archives/373/</guid><description>&lt;p&gt;本文记录了我们使用自研微基准测试工具对 4× 海光 Z100 DCU 进行的一系列测试结果。&lt;/p&gt;
&lt;h2 id="测试环境"&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GPU&lt;/td&gt;
&lt;td&gt;4× 海光 Z100 DCU，每张 16GB，合计 64GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPU 架构&lt;/td&gt;
&lt;td&gt;gfx906 (Vega 20 / GCN 5.1)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DTK 版本&lt;/td&gt;
&lt;td&gt;DTK 26.04 (DCC2602-0317)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PyTorch&lt;/td&gt;
&lt;td&gt;2.10.0+das.opt1.dtk2604&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;测试工具&lt;/td&gt;
&lt;td&gt;dcu_benchmark.py（基于 hy-smi 遥测采样）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;采样间隔&lt;/td&gt;
&lt;td&gt;1 秒&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;矩阵规模&lt;/td&gt;
&lt;td&gt;4096 × 4096（Matmul 测试）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;向量规模&lt;/td&gt;
&lt;td&gt;64M 元素（Elementwise / 访存测试）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="测试项目"&gt;测试项目&lt;/h2&gt;
&lt;p&gt;我们使用 dcu_benchmark.py 在 4 张 Z100 上同时运行了以下 8 个微基准测试，每个测试持续约 20 秒，并在测试前后记录了空闲状态的基线数据：&lt;/p&gt;</description></item><item><title>海光 Z100 DCU 适配 vLLM 运行 Qwen3.5-27B 完整总结</title><link>https://blog.muwinds.com/archives/370/</link><pubDate>Mon, 08 Jun 2026 16:37:41 +0800</pubDate><guid>https://blog.muwinds.com/archives/370/</guid><description>&lt;h2 id="环境信息"&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GPU&lt;/td&gt;
&lt;td&gt;4× 海光 Z100 DCU，每张 16GB，合计 64GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPU 架构&lt;/td&gt;
&lt;td&gt;gfx906 (Vega 20 / GCN 5.1)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DTK 版本&lt;/td&gt;
&lt;td&gt;DTK 26.04 (DCC2602-0317)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Python&lt;/td&gt;
&lt;td&gt;3.10.12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PyTorch&lt;/td&gt;
&lt;td&gt;2.10.0+das.opt1.dtk2604&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;vLLM&lt;/td&gt;
&lt;td&gt;0.18.1+das.3266200.dtk2604&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Triton&lt;/td&gt;
&lt;td&gt;3.4.0（从源码编译，替换原 3.4.0+git1ef59765）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;transformers&lt;/td&gt;
&lt;td&gt;5.5.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;flash_attn&lt;/td&gt;
&lt;td&gt;2.8.3+das&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;上述镜像可以去海光社区：&lt;a href="https://developer.sourcefind.cn/modelzoo/list/qwen3.5_vllm/detail?post_id=46176b42-0c0b-11f1-a49f-0242ac150003"&gt;https://developer.sourcefind.cn/modelzoo/list/qwen3.5_vllm/detail?post_id=46176b42-0c0b-11f1-a49f-0242ac150003&lt;/a&gt; 获得&lt;/p&gt;</description></item><item><title>训练小参数LLM将优化器从AdamW换成Muon的尝试</title><link>https://blog.muwinds.com/archives/365/</link><pubDate>Sun, 31 May 2026 11:39:40 +0800</pubDate><guid>https://blog.muwinds.com/archives/365/</guid><description>&lt;p&gt;最近社区都在说 Muon 用在 LLM 上的训练效果要比 AdamW 好很多，这里根据 Kimi 的论文（http://arxiv.org/abs/2502.16982）和仓库做了一些尝试。&lt;/p&gt;
&lt;p&gt;选用模型：minimind，Github 链接：https://github.com/jingyaogong/minimind&lt;/p&gt;</description></item><item><title>记忆回溯：C++ map</title><link>https://blog.muwinds.com/archives/360/</link><pubDate>Sun, 08 Mar 2026 22:32:55 +0800</pubDate><guid>https://blog.muwinds.com/archives/360/</guid><description>&lt;p&gt;&lt;code&gt;map&lt;/code&gt; 是有序键值对容器，它的元素的键是唯一的．搜索、移除和插入操作拥有对数复杂度．&lt;code&gt;map&lt;/code&gt; 通常实现为 红黑树（红黑树是一种自平衡的二叉搜索树．每个节点额外存储了一个 color 字段 (&amp;ldquo;RED&amp;rdquo; or &amp;ldquo;BLACK&amp;rdquo;)，用于确保树在插入和删除时保持平衡）．&lt;/p&gt;</description></item><item><title>实习的记忆记录5：Vibe Coding</title><link>https://blog.muwinds.com/archives/359/</link><pubDate>Fri, 06 Mar 2026 11:24:51 +0800</pubDate><guid>https://blog.muwinds.com/archives/359/</guid><description>&lt;p&gt;每天上班到单位打开电脑，除了 vscode 和 idea 以外就是打开claude code和codex（因为 mentor 也希望我能习惯用 AI 写代码），因此记录一些 vibe coding 需要注意的事儿。&lt;/p&gt;
&lt;p&gt;日常工作中的 vibe coding 其实就是 agentic engineering，让 LLM 决策和写代码的过程本身不可控，这时候就要参考线性规划问题的思路，也就是要给 LLM 上约束，接下来我将参考我的实习内容说说如何优化我们的 vibe coding&lt;/p&gt;</description></item><item><title>实习的记忆记录4：git stash</title><link>https://blog.muwinds.com/archives/358/</link><pubDate>Thu, 05 Mar 2026 17:37:05 +0800</pubDate><guid>https://blog.muwinds.com/archives/358/</guid><description>&lt;p&gt;由于有写了一半但是又得有同时修另外一个分支代码的需求，所以就得用stash了&lt;/p&gt;
&lt;p&gt;当你执行 &lt;code&gt;git stash&lt;/code&gt; 时，Git 会做两件事：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;保存&lt;/strong&gt;：将你当前**工作区（Working Directory）&lt;strong&gt;和&lt;/strong&gt;暂存区（Staging Area）**中所有已跟踪文件的修改保存到一个栈（Stack）中。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;还原&lt;/strong&gt;：将你的工作目录还原到上一次提交（&lt;code&gt;HEAD&lt;/code&gt;）时的干净状态。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;此时，你的工作区是干净的，你可以随意切换分支。&lt;/p&gt;</description></item><item><title>实习的记忆记录3：Windows 配置 Claude Code 解决 settings.json 不生效</title><link>https://blog.muwinds.com/archives/355/</link><pubDate>Tue, 24 Feb 2026 13:52:33 +0800</pubDate><guid>https://blog.muwinds.com/archives/355/</guid><description>&lt;p&gt;转载自：&lt;a href="https://frytea.com/archives/1616/"&gt;https://frytea.com/archives/1616/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;默认情况下 Windows 安装的 &lt;code&gt;Claude Code&lt;/code&gt; 会从这个位置读取配置：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;C:\Users\&amp;lt;YOUR_NAME&amp;gt;\.claude
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;其他系统则类似的找到 &lt;code&gt;~/.claude&lt;/code&gt; 路径。&lt;/p&gt;
&lt;p&gt;官方流程在安装结束后就完成了，可以直接登录使用。如果需要修改配置将 &lt;code&gt;Claude Code&lt;/code&gt; 接入第三方 API，就需要修改这里的 &lt;code&gt;settings.json&lt;/code&gt; 配置文件，可以使用 &lt;code&gt;CC-Switch&lt;/code&gt; 或是手动编写，但是修改后会发现不生效。&lt;/p&gt;</description></item><item><title>实习的记忆记录 2：使用 Git 提交 PR</title><link>https://blog.muwinds.com/archives/353/</link><pubDate>Mon, 16 Feb 2026 11:15:32 +0800</pubDate><guid>https://blog.muwinds.com/archives/353/</guid><description>&lt;p&gt;以往用 Github 也是差不多这个流程，但是总是忘……&lt;/p&gt;
&lt;p&gt;正常的流程：先 Fork 然后 Clone 到本地，做修改后提交 Commit 再 Push 到自己的仓库，确保没冲突后再发起 Pull Request。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Fork 仓库到自己的 GitHub&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/你的用户名/仓库.git
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; 仓库
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 添加上游仓库&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git remote add upstream https://github.com/原仓库地址.git
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 同步最新代码&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git fetch upstream
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git rebase upstream/main
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git checkout -b feat/add-new-component &lt;span class="c1"&gt;# 创建描述性的分支名&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git add 具体文件 &lt;span class="c1"&gt;# 避免 git add .&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git commit -m &lt;span class="s2"&gt;&amp;#34;feat: 添加登录表单验证&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 推送与创建 PR&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git push origin feat/add-new-component
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;注意：如果要开新的功能，就自己再开新的分支并同步上游代码然后再去改，这个分支相关的 PR 被合并后就可以删掉这个分支了&lt;/p&gt;</description></item><item><title>实习的记忆记录 1：Docker Compose</title><link>https://blog.muwinds.com/archives/352/</link><pubDate>Sat, 14 Feb 2026 23:47:51 +0800</pubDate><guid>https://blog.muwinds.com/archives/352/</guid><description>&lt;p&gt;正式开始接触项目开发的第一天就是把项目从公司内网的机器上迁移到阿里云的公网机器上，组长让我写 Dockerfile 和 Docker Compose 开始折腾 CI/CD Pipeline 了。&lt;/p&gt;
&lt;p&gt;Dockerfile好写，毕竟上学的时候写过，但是我用 Docker 一般也是以调试为主，很少有需要编排的需求，也就没写过 Docker Compose，所以我就要开始折腾 Docker Compose 相关的内容了。&lt;/p&gt;</description></item><item><title>ubuntu 卸载CUDA Toolkit</title><link>https://blog.muwinds.com/archives/351/</link><pubDate>Fri, 13 Feb 2026 23:27:53 +0800</pubDate><guid>https://blog.muwinds.com/archives/351/</guid><description>&lt;p&gt;转自CSDN,&lt;a href="https://blog.csdn.net/qq_39918087/article/details/143957089"&gt;https://blog.csdn.net/qq_39918087/article/details/143957089&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;一票只知道教怎么装，现在nv都提供runfile了，复制一下指令喝杯水的工夫就装上去了还用你教啊？倒是卸载就没几个人出正经教程的。&lt;/p&gt;
&lt;p&gt;1、To remove CUDA Toolkit:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get --purge remove &lt;span class="s2"&gt;&amp;#34;*cuda*&amp;#34;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;*cublas*&amp;#34;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;*cufft*&amp;#34;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;*cufile*&amp;#34;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;*curand*&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;*cusolver*&amp;#34;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;*cusparse*&amp;#34;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;*gds-tools*&amp;#34;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;*npp*&amp;#34;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;*nvjpeg*&amp;#34;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;nsight*&amp;#34;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;*nvvm*&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;2.检查以下，到/usr/local/ 查看是否还有cuda相关文件夹。&lt;/p&gt;</description></item><item><title>Machine Learning 记录 3</title><link>https://blog.muwinds.com/archives/332/</link><pubDate>Thu, 29 Jan 2026 23:52:44 +0800</pubDate><guid>https://blog.muwinds.com/archives/332/</guid><description>&lt;p&gt;什么是深度学习呢？深度学习是一种以深层计算堆栈为特征的机器学习方法。正是这种计算的深度使得深度学习模型能够分解在最具挑战性的真实世界数据集中发现的复杂和层次化的模式。&lt;/p&gt;</description></item><item><title>Machine Learning 记录 2</title><link>https://blog.muwinds.com/archives/323/</link><pubDate>Thu, 29 Jan 2026 23:07:42 +0800</pubDate><guid>https://blog.muwinds.com/archives/323/</guid><description>&lt;h2 id="缺失值处理"&gt;缺失值处理&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;1) 一个简单的选项：删除包含缺失值的列&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;最简单的选择是删除包含缺失值的列。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.muwinds.com/wp-content/uploads/2026/01/image-3.png"&gt;&lt;img loading="lazy" src="https://blog.muwinds.com/wp-content/uploads/2026/01/image-3-1024x211.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;除非被删除列中的大多数值缺失，否则这种方法会使模型丢失大量（潜在有用！）的信息。举一个极端的例子，考虑一个包含10,000行的数据集，其中一列缺少一个条目。这种方法会完全删除该列！&lt;/p&gt;</description></item><item><title>Machine Learning记录1</title><link>https://blog.muwinds.com/archives/319/</link><pubDate>Thu, 22 Jan 2026 00:21:48 +0800</pubDate><guid>https://blog.muwinds.com/archives/319/</guid><description>&lt;p&gt;记录写kaggle练习时记录的东西&lt;/p&gt;
&lt;h2 id="最基础的决策树模型"&gt;最基础的决策树模型&lt;/h2&gt;
&lt;p&gt;下面是假设：&lt;/p&gt;
&lt;p&gt;你的表弟靠房地产投机赚了数百万美元。他因为你对数据科学感兴趣，所以提出和你合伙做生意。他出资，你则提供预测不同房屋价值的模型。&lt;/p&gt;</description></item><item><title>中航信（航旅纵横）：运维开发面试记录</title><link>https://blog.muwinds.com/archives/316/</link><pubDate>Tue, 06 Jan 2026 00:16:15 +0800</pubDate><guid>https://blog.muwinds.com/archives/316/</guid><description>&lt;p&gt;第一次遇到技术面，由于我问题没答上来几道并且时间排不开，所以无疾而终……&lt;/p&gt;
&lt;p&gt;这个岗位的背景：会用Linux进行定位和调试，需要用Python+Django技术栈编写一些简单的运维工具。&lt;/p&gt;</description></item><item><title>Ubuntu安装kali源</title><link>https://blog.muwinds.com/archives/313/</link><pubDate>Fri, 31 Oct 2025 19:00:41 +0800</pubDate><guid>https://blog.muwinds.com/archives/313/</guid><description>&lt;p&gt;这是个很奇怪的需求，但是还是有&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;deb http://http.kali.org/kali kali-rolling main contrib non-free&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; sudo tee /etc/apt/sources.list.d/kali.list
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget -q -O - https://archive.kali.org/archive-key.asc &lt;span class="p"&gt;|&lt;/span&gt; sudo apt-key add -
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;当然了，也有移除kali源的&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo rm /etc/apt/sources.list.d/kali.list
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>各种距离算法小记</title><link>https://blog.muwinds.com/archives/282/</link><pubDate>Tue, 07 Oct 2025 23:57:57 +0800</pubDate><guid>https://blog.muwinds.com/archives/282/</guid><description>&lt;p&gt;最近在翻一些距离算法并考虑他们的GPU并行化实现，记录一下。&lt;/p&gt;
&lt;p&gt;这里从图片转成向量开始，利用opencv配合torchvision，转成tensor还是比较容易的。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;cv2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;torchvision.transforms.functional&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;F&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;torchvision.transforms&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;T&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;image&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cv2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;imread&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;test_pic1.png&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;image&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="n"&gt;image&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;shape&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;img1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;F&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;to_tensor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;image&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;img1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="n"&gt;img1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;shape&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;img1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="https://blog.muwinds.com/wp-content/uploads/2025/10/image-9.png"&gt;&lt;img loading="lazy" src="https://blog.muwinds.com/wp-content/uploads/2025/10/image-9.png"&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Accuracy、Recall、Precission、F1 Score分别是什么？</title><link>https://blog.muwinds.com/archives/280/</link><pubDate>Sun, 28 Sep 2025 03:12:45 +0800</pubDate><guid>https://blog.muwinds.com/archives/280/</guid><description>&lt;p&gt;无论是打数模还是单纯的搞机器学习，都需要对最后训练结果进行分析，这时候常用的四个指标：准确率、召回率、精确率、F1分数。&lt;/p&gt;
&lt;p&gt;作为指标，一定会涉及几个方面&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;用来描述什么&lt;/li&gt;
&lt;li&gt;如何计算的&lt;/li&gt;
&lt;li&gt;指标的意义是什么&lt;br&gt;
那为了计算这几个指标，我们需要了解什么是TP、TN、FP、FN&lt;br&gt;
用识别苹果举例&lt;br&gt;
假设我们有100张照片：&lt;br&gt;
其中有40张是真的苹果照片称之为正样本。&lt;br&gt;
另外60张不是苹果照片称之为负样本。&lt;br&gt;
模型预测可能有四种情况：&lt;/li&gt;
&lt;li&gt;预测是苹果，实际是苹果，TruePositive (TP)&lt;/li&gt;
&lt;li&gt;预测是苹果，实际不是苹果，FalsePositive (FP)&lt;/li&gt;
&lt;li&gt;预测不是苹果，实际是苹果，FalseNegative (FN)&lt;/li&gt;
&lt;li&gt;预测不是苹果，实际也不是苹果，TrueNegative (TN)&lt;br&gt;
True or False =有没有猜对&lt;br&gt;
Positive or Negative 表示猜的结果 是不是正类，是苹果为正类。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;假设：&lt;/p&gt;</description></item><item><title>在 Git Bash 中设置 Conda</title><link>https://blog.muwinds.com/archives/277/</link><pubDate>Thu, 25 Sep 2025 21:46:08 +0800</pubDate><guid>https://blog.muwinds.com/archives/277/</guid><description>&lt;p&gt;下面的内容转载自&lt;a href="https://discuss.codecademy.com/t/setting-up-conda-in-git-bash/534473"&gt;https://discuss.codecademy.com/t/setting-up-conda-in-git-bash/534473&lt;/a&gt;，本人测试效果相当好&lt;/p&gt;
&lt;h4 id="a-open-git-bash-a打开-git-bash"&gt;A) Open Git Bash A）打开 Git Bash&lt;/h4&gt;
&lt;p&gt;Now that you have an idea of how &lt;code&gt;conda&lt;/code&gt; should look, go ahead and open Git Bash. As you can see, there is nothing on the prompt to indicate whether you are inside an active &lt;code&gt;conda&lt;/code&gt; environment or not. Unfortunately, it’s not quite that simple. If you type &lt;code&gt;conda list&lt;/code&gt; in Git Bash, you will receive an error that looks something like this:&lt;br&gt;
现在你已经了解了 &lt;code&gt;conda&lt;/code&gt; 应该是什么样子，继续打开 Git Bash。正如你所见，提示符上没有任何内容表明你是否处于活动的 &lt;code&gt;conda&lt;/code&gt; 环境中。不幸的是，事情并没有那么简单。如果你在 Git Bash 中输入 &lt;code&gt;conda list&lt;/code&gt; ，你会收到类似这样的错误：&lt;/p&gt;</description></item><item><title>体系基础部分整理</title><link>https://blog.muwinds.com/archives/268/</link><pubDate>Wed, 24 Sep 2025 23:56:00 +0800</pubDate><guid>https://blog.muwinds.com/archives/268/</guid><description>&lt;h2 id="a并行计算与并行结构"&gt;A.并行计算与并行结构&lt;/h2&gt;
&lt;p&gt;在所有四类计算机设计中，多级并行化现在是主要动力，功耗和成本是主要限制因素。在应用中基本上有两种并行性：&lt;/p&gt;
&lt;p&gt;1.数据级并行（DLP），产生的原因是有许多数据项可以同时操作。&lt;/p&gt;</description></item><item><title>我的PowerShell配置方法</title><link>https://blog.muwinds.com/archives/267/</link><pubDate>Sun, 21 Sep 2025 16:05:54 +0800</pubDate><guid>https://blog.muwinds.com/archives/267/</guid><description>&lt;p&gt;这里把我的powershell的配置方法做一个整理，我的系统环境是Windows10 22H2&lt;/p&gt;
&lt;p&gt;1.关闭ps脚本安全策略&lt;/p&gt;
&lt;p&gt;因为我主用conda做环境配置（里面的带的库配置还是很全的，用着好使），powershell默认的配置是限制conda的ps脚本运行的，所以得关掉这个配置。&lt;/p&gt;</description></item><item><title>删除某网盘附带的“智能看图”</title><link>https://blog.muwinds.com/archives/265/</link><pubDate>Sun, 31 Aug 2025 09:28:05 +0800</pubDate><guid>https://blog.muwinds.com/archives/265/</guid><description>&lt;p&gt;转载自&lt;a href="https://xzonn.top/posts/Remove-Intelligent-Image-Viewer.html"&gt;https://xzonn.top/posts/Remove-Intelligent-Image-Viewer.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;某网盘更新到7.58版本之后附带了一个“智能看图”软件，关联了一堆常见图片格式。这个软件的名字前面加了个空格，所以在默认程序列表里很靠前。目前该网盘里没有删除这个功能的设置，所以需要手动编辑一下注册表，先按 &lt;code&gt;Win&lt;/code&gt; + &lt;code&gt;R&lt;/code&gt; 打开“运行”窗口，输入&lt;code&gt;regedit&lt;/code&gt;并回车，打开注册表编辑器，&lt;br&gt;
然后删除以下项目：&lt;/p&gt;</description></item><item><title>Next.js+CDN首页无法清除缓存问题</title><link>https://blog.muwinds.com/archives/261/</link><pubDate>Tue, 15 Jul 2025 05:10:57 +0800</pubDate><guid>https://blog.muwinds.com/archives/261/</guid><description>&lt;p&gt;问题如题，我的CDN为Cloudflare，即便是去Cloudflare控制台清除缓存也无济于事&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.muwinds.com/wp-content/uploads/2025/07/image-1.png"&gt;&lt;img loading="lazy" src="https://blog.muwinds.com/wp-content/uploads/2025/07/image-1-1024x382.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;百度和谷歌也没什么有效的解决方案，最后有朋友提醒我去把反向代理层也就是Nginx的缓存清除，问题解决。&lt;/p&gt;</description></item><item><title>记录一波Android studio安装报错缺失文件</title><link>https://blog.muwinds.com/archives/258/</link><pubDate>Sat, 12 Jul 2025 23:56:15 +0800</pubDate><guid>https://blog.muwinds.com/archives/258/</guid><description>&lt;p&gt;&lt;a href="https://blog.muwinds.com/wp-content/uploads/2025/07/image.png"&gt;&lt;img loading="lazy" src="https://blog.muwinds.com/wp-content/uploads/2025/07/image.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;在某些环境安装AS的时候，比如网吧安装会有此类弹窗提示说；当前aehd.sys无法复制&lt;/p&gt;
&lt;p&gt;这个原因的是权限不足导致安装as错误&lt;/p&gt;
&lt;p&gt;解决方法：下载或者弹窗的浏览按钮复制aehd.sys到系统盘路径的：C:\Windows\System32\drivers&lt;/p&gt;</description></item><item><title>理解PID控制算法</title><link>https://blog.muwinds.com/archives/245/</link><pubDate>Sun, 29 Jun 2025 01:39:52 +0800</pubDate><guid>https://blog.muwinds.com/archives/245/</guid><description>&lt;p&gt;PID控制算法，可以将其看作是一个 &lt;strong&gt;“不断尝试缩小目标与现状之间差距”的智能调节器&lt;/strong&gt;。它广泛应用于工业控制（如温度、压力、流量控制）、机器人、自动驾驶、无人机稳定系统等需要精确调节物理量的场景。&lt;/p&gt;</description></item><item><title>数学建模笔记-最优化问题</title><link>https://blog.muwinds.com/archives/145/</link><pubDate>Sat, 28 Jun 2025 12:51:56 +0800</pubDate><guid>https://blog.muwinds.com/archives/145/</guid><description>&lt;h2 id="一基本概念"&gt;一、基本概念&lt;/h2&gt;
&lt;p&gt;最优化：首先是一种理念，其次才是一种方法，它所追求的是一种“至善”之道，一种追求卓越的精神。&lt;br&gt;
例子：小明同学，烧一壶水要8分钟，灌开水要1分钟，取牛奶和报纸要5分钟，整理书包要6分钟，为了尽快做完这些事，怎样安排才能使时间最少？最少需要几分钟？&lt;/p&gt;</description></item><item><title>线性回归&amp;Logistic Model</title><link>https://blog.muwinds.com/archives/210/</link><pubDate>Tue, 17 Jun 2025 12:18:39 +0800</pubDate><guid>https://blog.muwinds.com/archives/210/</guid><description>&lt;p&gt;&lt;strong&gt;线性回归模型&lt;/strong&gt;，它是统计学和机器学习中最基础、最核心的预测模型之一，主要用于解决&lt;strong&gt;回归问题&lt;/strong&gt;，即预测一个&lt;strong&gt;连续的数值型输出&lt;/strong&gt;。&lt;/p&gt;
&lt;h3 id="核心思想建立输入与输出之间的线性关系"&gt;核心思想：建立“输入”与“输出”之间的线性关系&lt;/h3&gt;
&lt;p&gt;线性回归的核心目标非常直观：&lt;strong&gt;假设并建模目标变量 &lt;code&gt;y&lt;/code&gt;（因变量、输出）与一个或多个预测变量 &lt;code&gt;x&lt;/code&gt;（自变量、特征、输入）之间存在的线性关系。&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>PowerShell进去到conda的虚拟环境base特别慢（实现conda环境懒加载）</title><link>https://blog.muwinds.com/archives/208/</link><pubDate>Sun, 15 Jun 2025 15:43:20 +0800</pubDate><guid>https://blog.muwinds.com/archives/208/</guid><description>&lt;ol&gt;
&lt;li&gt;打开powershell输入命令，找到powershell配置文件&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$PROFILE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="2"&gt;
&lt;li&gt;有conda init加载导致powershell很慢的时候，配置文件如下：&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;#region conda initialize&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# !! Contents within this block are managed by &amp;#39;conda init&amp;#39; !!&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;If&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Test-Path&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;D:\tool\Anaconda\Scripts\conda.exe&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;(&amp;amp;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;path\to\conda.exe&amp;#34;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;shell.powershell&amp;#34;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;hook&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;Out-String&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="p"&gt;?{&lt;/span&gt;&lt;span class="nv"&gt;$_&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;Invoke-Expression&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;#endregion&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;实现conda环境懒加载，只需把内容换成如下即可（此后执行&lt;code&gt;conda activate 环境名&lt;/code&gt;时会自动初始化conda，无需预先加载）&lt;/p&gt;</description></item><item><title>KMP算法</title><link>https://blog.muwinds.com/archives/207/</link><pubDate>Sun, 15 Jun 2025 11:51:05 +0800</pubDate><guid>https://blog.muwinds.com/archives/207/</guid><description>&lt;p&gt;KMP算法（Knuth-Morris-Pratt）是一种高效的字符串匹配算法，它通过避免回溯主串指针来实现O(n+m)的时间复杂度。要深入理解KMP算法，需要掌握其核心思想——&lt;strong&gt;部分匹配表（Pi数组）&lt;strong&gt;和&lt;/strong&gt;匹配过程中的智能回退机制&lt;/strong&gt;。&lt;/p&gt;</description></item><item><title>Smoke Test冒烟测试理解</title><link>https://blog.muwinds.com/archives/204/</link><pubDate>Tue, 27 May 2025 23:51:11 +0800</pubDate><guid>https://blog.muwinds.com/archives/204/</guid><description>&lt;h3 id="一定义与核心目的"&gt;&lt;strong&gt;一、定义与核心目的&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;本质&lt;/strong&gt;：一种轻量级、快速执行的验证性测试，用于检测系统&lt;strong&gt;核心功能&lt;/strong&gt;是否可运行。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;目标&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;快速发现&lt;strong&gt;阻断性缺陷&lt;/strong&gt;（Blocking Bug），确保被测对象（如新构建的版本）具备进一步测试的价值。&lt;/li&gt;
&lt;li&gt;避免在不可用的版本上浪费时间和资源执行深度测试。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;隐喻来源&lt;/strong&gt;：源自硬件测试，类比电路板通电后若冒烟则说明存在严重故障，需立即停止测试。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="二适用场景"&gt;&lt;strong&gt;二、适用场景&lt;/strong&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;持续集成（CI）&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;代码提交后触发自动化冒烟测试，验证构建是否通过基础检查（如编译成功、服务启动）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;版本发布前&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;上线前最后一轮验证，确保主流程（如用户登录、支付）未因最新修改而崩溃。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;环境迁移后&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;新部署环境中快速确认系统是否可访问（如数据库连接、API网关响应）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="三测试范围设计原则"&gt;&lt;strong&gt;三、测试范围设计原则&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;最小化覆盖&lt;/strong&gt;：仅测试最关键路径（Critical Path），而非全量功能。
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;示例&lt;/em&gt;：
&lt;ul&gt;
&lt;li&gt;电商平台：用户登录 → 商品搜索 → 加入购物车 → 结算 → 支付。&lt;/li&gt;
&lt;li&gt;金融系统：账户查询 → 转账 → 交易记录查看。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&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;h3 id="四执行逻辑与流程"&gt;&lt;strong&gt;四、执行逻辑与流程&lt;/strong&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;前置条件&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;被测对象已完成部署（如新版本安装、环境配置）。&lt;/li&gt;
&lt;li&gt;准备测试数据（如测试账号、基础商品信息）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;执行步骤&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;自动化脚本&lt;/strong&gt;（推荐）：通过工具（如Postman、Selenium）执行预设用例，5-15分钟内完成。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;手动检查&lt;/strong&gt;（应急场景）：人工点击主流程，观察日志或界面反馈。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;通过标准&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;核心功能无崩溃（如HTTP 500错误）、无阻塞性错误（如数据库连接失败）。&lt;/li&gt;
&lt;li&gt;&lt;em&gt;注意&lt;/em&gt;：不要求功能完全正确，仅需确认“可测试性”（Testability）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="五与企业级测试策略的关联"&gt;&lt;strong&gt;五、与企业级测试策略的关联&lt;/strong&gt;&lt;/h3&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;strong&gt;Smoke Test&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;验证核心功能可用性&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;strong&gt;Regression Test&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;确保修改未破坏现有功能&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;strong&gt;Performance Test&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;评估系统负载能力&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="六典型案例分析"&gt;&lt;strong&gt;六、典型案例分析&lt;/strong&gt;&lt;/h3&gt;
&lt;h4 id="场景银行核心系统版本升级"&gt;&lt;strong&gt;场景：银行核心系统版本升级&lt;/strong&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;冒烟测试设计&lt;/strong&gt;：
&lt;ol&gt;
&lt;li&gt;用户登录（验证身份认证服务正常）。&lt;/li&gt;
&lt;li&gt;账户余额查询（验证数据库连接与核心交易接口）。&lt;/li&gt;
&lt;li&gt;单笔转账（验证交易引擎与风控规则引擎）。&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;失败处理&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;若转账接口返回“系统忙”，标记构建失败并通知开发团队，暂停后续测试。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="工具链示例"&gt;&lt;strong&gt;工具链示例&lt;/strong&gt;：&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;API测试&lt;/strong&gt;：Postman + Newman（批量运行Collection）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;前端测试&lt;/strong&gt;：Cypress（自动化模拟用户点击）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;流水线集成&lt;/strong&gt;：Jenkins调用测试脚本，通过钉钉/邮件发送结果。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="七常见误区与避坑指南"&gt;&lt;strong&gt;七、常见误区与避坑指南&lt;/strong&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;误区：冒烟测试 = 简单测试&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;纠正&lt;/strong&gt;：冒烟测试是策略性筛选，需基于业务风险设计，非随机选择用例。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;误区：仅用于开发阶段&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;纠正&lt;/strong&gt;：生产环境变更（如配置更新、热修复）后同样需要冒烟测试。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;陷阱：忽视环境差异性&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;规避&lt;/strong&gt;：确保测试数据与环境配置与生产环境一致（如使用影子表隔离测试数据）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="八进阶实践"&gt;&lt;strong&gt;八、进阶实践&lt;/strong&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;：若连续3次构建冒烟测试失败，自动回滚至上一个稳定版本。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;通过以上框架，可系统化掌握冒烟测试的核心逻辑，并针对企业级场景设计高效验证方案。&lt;/p&gt;</description></item><item><title>操作系统用户态和内核态</title><link>https://blog.muwinds.com/archives/203/</link><pubDate>Tue, 27 May 2025 17:49:20 +0800</pubDate><guid>https://blog.muwinds.com/archives/203/</guid><description>&lt;h3 id="一核心概念与设计意义"&gt;&lt;strong&gt;一、核心概念与设计意义&lt;/strong&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;用户态（User Mode）&lt;/strong&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;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;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;内核态（Kernel Mode）&lt;/strong&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;ul&gt;
&lt;li&gt;&lt;strong&gt;最高权限&lt;/strong&gt;：可执行所有CPU指令（包括特权指令），直接访问所有内存地址和硬件资源。&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;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;区分意义&lt;/strong&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;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="二切换机制与实现细节"&gt;&lt;strong&gt;二、切换机制与实现细节&lt;/strong&gt;&lt;/h3&gt;
&lt;h4 id="切换触发条件"&gt;&lt;strong&gt;切换触发条件&lt;/strong&gt;&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;主动切换（系统调用）&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;流程&lt;/strong&gt;：用户程序通过系统调用（如&lt;code&gt;read()&lt;/code&gt;）请求内核服务 → CPU执行&lt;code&gt;syscall&lt;/code&gt;指令 → 保存用户态寄存器（RIP、RSP等） → 跳转至内核入口函数。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;示例&lt;/strong&gt;：&lt;code&gt;read()&lt;/code&gt;函数的执行涉及：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;参数传递&lt;/strong&gt;：文件描述符（&lt;code&gt;rdi&lt;/code&gt;）、缓冲区地址（&lt;code&gt;rsi&lt;/code&gt;）、数据长度（&lt;code&gt;rdx&lt;/code&gt;）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;系统调用号&lt;/strong&gt;：通过&lt;code&gt;rax&lt;/code&gt;寄存器指定（如Linux x86-64中&lt;code&gt;__NR_read=0&lt;/code&gt;）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;被动切换（中断与异常）&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;中断&lt;/strong&gt;：外部设备触发（如时钟中断、磁盘I/O完成），CPU暂停当前任务处理中断。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;异常&lt;/strong&gt;：程序错误（如缺页异常、除零错误），CPU强制切换到内核态处理。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;恢复流程&lt;/strong&gt;：内核处理完成后，通过&lt;code&gt;iret&lt;/code&gt;指令恢复用户态上下文。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id="上下文切换细节"&gt;&lt;strong&gt;上下文切换细节&lt;/strong&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;栈切换&lt;/strong&gt;：用户态使用用户栈，内核态使用内核栈。切换时保存用户栈指针（&lt;code&gt;ss3&lt;/code&gt;/&lt;code&gt;rsp3&lt;/code&gt;）到内核栈，并加载内核栈指针（&lt;code&gt;ss0&lt;/code&gt;/&lt;code&gt;rsp0&lt;/code&gt;）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;寄存器保存&lt;/strong&gt;：CPU自动保存&lt;code&gt;RIP&lt;/code&gt;（指令指针）、&lt;code&gt;RFLAGS&lt;/code&gt;（状态标志）等寄存器到内核栈。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;权限级别变更&lt;/strong&gt;：x86架构中，用户态为Ring 3，内核态为Ring 0。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="三实际应用与性能影响"&gt;&lt;strong&gt;三、实际应用与性能影响&lt;/strong&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;典型场景&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;系统调用&lt;/strong&gt;：文件读写（&lt;code&gt;read()&lt;/code&gt;/&lt;code&gt;write()&lt;/code&gt;）、进程创建（&lt;code&gt;fork()&lt;/code&gt;）、网络通信（&lt;code&gt;send()&lt;/code&gt;/&lt;code&gt;recv()&lt;/code&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;mmap()&lt;/code&gt;）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;性能优化考量&lt;/strong&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;code&gt;sendfile()&lt;/code&gt;），避免用户态与内核态间的多次数据拷贝。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>What is hypervisor?</title><link>https://blog.muwinds.com/archives/202/</link><pubDate>Sat, 24 May 2025 21:24:43 +0800</pubDate><guid>https://blog.muwinds.com/archives/202/</guid><description>&lt;h2 id="what-are-hypervisors"&gt;What are hypervisors?&lt;/h2&gt;
&lt;p&gt;A hypervisor is a software that enables multiple &lt;a href="https://www.ibm.com/think/topics/virtual-machines"&gt;virtual machines (VMs)&lt;/a&gt;—each with its own operating system (OS)—to run on one physical server. The hypervisor pools and allocates physical computing resources as needed by the VM, enabling efficiency, flexibility and scalability&lt;/p&gt;
&lt;p&gt;Sometimes called a virtual machine monitor (VMM), the hypervisor manages VMs as they run alongside each other. It separates VMs from each other logically, assigning each its own slice of the underlying computing power, memory and storage. This prevents the VMs from interfering with each other. For example, if one OS suffers a crash or a security compromise, the others survive.&lt;/p&gt;</description></item><item><title>C/C++编译的四个阶段</title><link>https://blog.muwinds.com/archives/199/</link><pubDate>Thu, 22 May 2025 15:55:45 +0800</pubDate><guid>https://blog.muwinds.com/archives/199/</guid><description>&lt;p&gt;C/C++程序的编译过程分为四个关键阶段：&lt;strong&gt;预处理（Preprocessing）、编译（Compilation）、汇编（Assembly）和链接（Linking）&lt;/strong&gt;。每个阶段承担不同任务，最终将源代码转换为可执行文件。&lt;/p&gt;</description></item><item><title>并发编程三大特性——原子性、可见性、有序性</title><link>https://blog.muwinds.com/archives/190/</link><pubDate>Mon, 19 May 2025 16:41:28 +0800</pubDate><guid>https://blog.muwinds.com/archives/190/</guid><description>&lt;h2 id="a原子性"&gt;A.原子性&lt;/h2&gt;
&lt;p&gt;**即一个操作或者多个操作，要么全部执行并且执行的过程不会被任何因素打断，要么就都不执行。**原子性确保对共享资源的操作不会被其他线程干扰，从而避免数据不一致性（如竞态条件）&lt;/p&gt;</description></item><item><title>双指针</title><link>https://blog.muwinds.com/archives/152/</link><pubDate>Sun, 04 May 2025 15:18:24 +0800</pubDate><guid>https://blog.muwinds.com/archives/152/</guid><description>&lt;p&gt;双指针顾名思义，就是同时使用两个指针，在序列、链表结构上指向的是位置，在树、图结构中指向的是节点，通过或同向移动，或相向移动来维护、统计信息。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://leetcode.cn/problems/subarray-product-less-than-k/"&gt;713. 乘积小于 K 的子数组&lt;/a&gt;&lt;/p&gt;</description></item><item><title>什么是消息验证码 MAC？</title><link>https://blog.muwinds.com/archives/151/</link><pubDate>Fri, 02 May 2025 23:48:16 +0800</pubDate><guid>https://blog.muwinds.com/archives/151/</guid><description>&lt;p&gt;有两个人 A 和 B。 A 通过网络向 B 发送一条消息。B 收到了之后，怎么确认：&lt;/p&gt;
&lt;p&gt;1.这条消息没有被中间人篡改过&lt;/p&gt;
&lt;p&gt;2.这条消息确实来自于 A，而不是某个 C 伪造出来的&lt;/p&gt;
&lt;p&gt;答案就是使用 MAC。A 在发送消息时，计算出该消息的 MAC 值，并将其一起发送给 B。B 收到之后，便可以根据 MAC 确认 1 和 2.&lt;/p&gt;</description></item><item><title>Authorization Code 授权原理和实现方法</title><link>https://blog.muwinds.com/archives/150/</link><pubDate>Fri, 02 May 2025 23:46:23 +0800</pubDate><guid>https://blog.muwinds.com/archives/150/</guid><description>&lt;p&gt;Oauth2.0 定义了几种授权流程，其中最重要、也最基础的是 Authorization Code 授权。先看流程图：&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://img2020.cnblogs.com/blog/419544/202106/419544-20210609172848603-384012851.png"&gt;&lt;/p&gt;
&lt;p&gt;　　1，用户访问 A 网站&lt;/p&gt;
&lt;p&gt;　　2，A 打开 B 的授权页面&lt;/p&gt;
&lt;p&gt;　　3，用户看到授权界面，输入账号密码进行授权&lt;/p&gt;
&lt;p&gt;　　4，B 验证用户是合法的之后，生成一个 authorization code，然后通过 302 跳转的方式，把这个 code 发送给 A&lt;/p&gt;</description></item><item><title>VS Code+platformio配置ESP32-S3-N16R8（8MB PSRAM + 16MB FLASH）工程</title><link>https://blog.muwinds.com/archives/148/</link><pubDate>Thu, 01 May 2025 07:41:37 +0800</pubDate><guid>https://blog.muwinds.com/archives/148/</guid><description>&lt;h2 id="一背景"&gt;一、背景&lt;/h2&gt;
&lt;p&gt;platformio现有的板子库里面没有ESP32-S3-N16R8（8MB PSRAM + 16MB FLASH）的开发板模型，直接强行套用，要么就是解锁不了8MB PSRAM，要么就下载后运行不起来。但是Arduino可以正常解锁。&lt;/p&gt;</description></item><item><title>位运算记录</title><link>https://blog.muwinds.com/archives/143/</link><pubDate>Mon, 14 Apr 2025 13:40:20 +0800</pubDate><guid>https://blog.muwinds.com/archives/143/</guid><description>&lt;p&gt;在现代计算机中，所有数据都以二进制形式存储，即 0 和 1 两种状态。计算机对二进制数据进行的运算（如加、减、乘、除）被称为位运算，即对二进制数的每一位进行操作的运算。&lt;/p&gt;
&lt;p&gt;为了更好地理解位运算，举个简单的例子：假设我们有如下代码进行两个整数的加法运算：&lt;/p&gt;</description></item><item><title>前途一片阴暗，好凉快</title><link>https://blog.muwinds.com/archives/133/</link><pubDate>Sun, 13 Apr 2025 15:55:38 +0800</pubDate><guid>https://blog.muwinds.com/archives/133/</guid><description>&lt;p&gt;前途一片阴暗，好凉快，人生一波三折，好便宜，生活千疮百孔，好透气。工作天天加班，好充实。忙的焦头烂额，好暖和。工资少得可怜，好携带。人生一贫如洗，好干净。计划又泡汤了，泡汤很舒服啊，因为太多人对我蹬鼻子上脸，导致我的面部比较扁平，我是被害的，话到嘴边又咽了下去，每天以此获得饱腹感&lt;/p&gt;</description></item><item><title>stringstream用法整理</title><link>https://blog.muwinds.com/archives/128/</link><pubDate>Wed, 09 Apr 2025 20:06:17 +0800</pubDate><guid>https://blog.muwinds.com/archives/128/</guid><description>&lt;p&gt;一部分转载自巴哈姆特：&lt;a href="https://home.gamer.com.tw/creationDetail.php?sn=4114818"&gt;https://home.gamer.com.tw/creationDetail.php?sn=4114818&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;stringstream是一個C++底下的類別，專門拿來讀取字串並且處理，很多時候拿來做字串的切割，或者是int跟string類別之間的轉換。&lt;/p&gt;</description></item><item><title>接入Cloudflare的网站发现部分css和js加载不出来的解决方法</title><link>https://blog.muwinds.com/archives/127/</link><pubDate>Wed, 09 Apr 2025 20:05:07 +0800</pubDate><guid>https://blog.muwinds.com/archives/127/</guid><description>&lt;p&gt;问题如题，本博客也有过这个问题&lt;/p&gt;
&lt;p&gt;按f12发现这部分交由static.cloudflareinsight.com/beacon.min.js进行加载，现代的浏览器都有严格cors的策略了，咋可能加载的出来……&lt;/p&gt;</description></item><item><title>惠普m1216打印机无法安装驱动无法打印</title><link>https://blog.muwinds.com/archives/126/</link><pubDate>Wed, 09 Apr 2025 20:04:41 +0800</pubDate><guid>https://blog.muwinds.com/archives/126/</guid><description>&lt;p&gt;给打印机插到打印的电脑上，开始安装驱动，卡在这里：&lt;/p&gt;
&lt;p&gt;&lt;img alt="image.png" loading="lazy" src="https://blog.muwinds.com/wp-content/uploads/2025/03/202503221742616376130990.png"&gt;&lt;/p&gt;
&lt;p&gt;在此之前我插到自己的电脑装过驱动试过，卡个2分钟也就装上了， 我也就没管出去吃饭了，结果吃完一小时再回来还是这个鬼窗口，我就觉得事情不对了。&lt;/p&gt;</description></item><item><title>Windows 11睡眠自动关机解决</title><link>https://blog.muwinds.com/archives/125/</link><pubDate>Wed, 09 Apr 2025 20:04:09 +0800</pubDate><guid>https://blog.muwinds.com/archives/125/</guid><description>&lt;p&gt;Windows11改变了睡眠的几个状态，取消了hibernate机制，但没有针对hybrid sleep机制作出改变，所以导致睡眠久了卡在hibernate（以及一些各种古怪问题）上导致内核崩溃自动关机&lt;/p&gt;</description></item><item><title>git忽略文件相关问题</title><link>https://blog.muwinds.com/archives/124/</link><pubDate>Wed, 09 Apr 2025 20:03:20 +0800</pubDate><guid>https://blog.muwinds.com/archives/124/</guid><description>&lt;p&gt;vscode运行python脚本的时候会出现很多__pycache__文件夹，内含.pyc文件，上传git时这些文件没必要传上去，所以需要在gitignore中加入规则。&lt;/p&gt;</description></item><item><title>记录模板题：图论-树：最近公共祖先（LCA）</title><link>https://blog.muwinds.com/archives/123/</link><pubDate>Wed, 09 Apr 2025 20:02:53 +0800</pubDate><guid>https://blog.muwinds.com/archives/123/</guid><description>&lt;p&gt;&lt;img alt="image.png" loading="lazy" src="https://blog.muwinds.com/wp-content/uploads/2025/02/202502091739100275557208.png"&gt;&lt;/p&gt;
&lt;p&gt;模板题：洛谷p3379&lt;/p&gt;
&lt;h2 id="题目描述"&gt;题目描述&lt;/h2&gt;
&lt;p&gt;如题，给定一棵有根多叉树，请求出指定两个点直接最近的公共祖先。&lt;/p&gt;
&lt;h2 id="输入格式"&gt;输入格式&lt;/h2&gt;
&lt;p&gt;第一行包含三个正整数 N,M,S&lt;em&gt;N&lt;/em&gt;,&lt;em&gt;M&lt;/em&gt;,&lt;em&gt;S&lt;/em&gt;，分别表示树的结点个数、询问的个数和树根结点的序号。&lt;/p&gt;</description></item><item><title>Windows平台Python aiodns模块异步代码无法执行</title><link>https://blog.muwinds.com/archives/122/</link><pubDate>Wed, 09 Apr 2025 20:01:17 +0800</pubDate><guid>https://blog.muwinds.com/archives/122/</guid><description>&lt;p&gt;首先放一下原先的异步函数代码：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@staticmethod&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;check_subdomain&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;domain&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;异步子域名枚举&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;resolver&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;aiodns&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DNSResolver&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;found&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;app/1knames.txt&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;subdomains&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="ne"&gt;FileNotFoundError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Subdomain dictionary not found&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;False&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;semaphore&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;asyncio&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Semaphore&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 限制并发量&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;_query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;semaphore&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;full_domain&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;domain&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;full_domain&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;a_records&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;resolver&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;full_domain&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;A&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;a_records&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;found&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;full_domain&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="n"&gt;aiodns&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DNSError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;pass&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;cname_records&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;resolver&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;full_domain&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;CNAME&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;cname_records&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;found&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;full_domain&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="n"&gt;aiodns&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DNSError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;pass&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;batch_size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;subdomains&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;batch_size&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;batch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;subdomains&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;batch_size&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;tasks&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;_query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;sub&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;batch&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;asyncio&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gather&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;assets_table&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;AssetsTable&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;host&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;domain&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;subdomain&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;found&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;assets_info&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;AssetsInfo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;assets_table&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;assets_info&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;update_host_info&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;乍一看没啥问题，但是如果在windows下跑起来就会发现啥输出都没有，如果一步步调试就会神奇的发现卡在第一行初始化&lt;/p&gt;</description></item><item><title>题解：蓝桥例题3260最大区间和</title><link>https://blog.muwinds.com/archives/121/</link><pubDate>Wed, 09 Apr 2025 19:59:45 +0800</pubDate><guid>https://blog.muwinds.com/archives/121/</guid><description>&lt;p&gt;先发题目内容：&lt;/p&gt;
&lt;h3 id="问题描述"&gt;问题描述&lt;/h3&gt;
&lt;p&gt;小明是一名勇敢的冒险家，他在一次探险途中发现了一组神秘的宝石，这些宝石的价值都不同。但是，他发现这些宝石会随着时间的推移逐渐失去价值，因此他必须在规定的次数内对它们进行处理。&lt;/p&gt;</description></item><item><title>前缀和 &amp; 差分</title><link>https://blog.muwinds.com/archives/120/</link><pubDate>Wed, 09 Apr 2025 19:58:57 +0800</pubDate><guid>https://blog.muwinds.com/archives/120/</guid><description>&lt;p&gt;C++ 标准库中实现了前缀和函数 std::partial_sum，定义于头文件 &lt;numeric&gt; 中。&lt;/p&gt;
&lt;p&gt;一个经典的例题：&lt;/p&gt;
&lt;p&gt;&lt;img alt="image.png" loading="lazy" src="https://blog.muwinds.com/wp-content/uploads/2025/02/202502051738737737464851.png"&gt;&lt;/p&gt;
&lt;p&gt;暴力当然直接TLE&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;//这段代码是能拿50分的，大规模会有超时问题&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;//没有很好的利用前缀和&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="nx"&gt;include&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;bits&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;stdc&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;using&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;namespace&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;std&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;cin&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;vector&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nx"&gt;cin&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push_back&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;cin&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;l&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;cin&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;l&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;l&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;cout&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;endl&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;将上面代码的加起来的过程给优化一下，在输入阶段就将数组改写成前缀和的形式，输出的时候只要s[r]-s[l-1]就可以了&lt;/p&gt;</description></item><item><title>在vscode MinGW GCC C++编译环境下使用httplib.h编译报错</title><link>https://blog.muwinds.com/archives/119/</link><pubDate>Wed, 09 Apr 2025 19:57:51 +0800</pubDate><guid>https://blog.muwinds.com/archives/119/</guid><description>&lt;p&gt;来源：&lt;a href="https://www.zkea.net/blog/detail/vscode-mingw-gcc-httplib.html"&gt;在vscode MinGW GCC C++编译环境下使用httplib.h发送http请求 (zkea.net)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;在vscode MinGW GCC C++编译环境下使用&lt;a href="https://github.com/yhirose/cpp-httplib"&gt;httplib.h&lt;/a&gt;，在编译时报错：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;undefined reference to `__imp_closesocket'&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;cpp-httplib是C++的一个http类库，使用它可以很方便的实现http请求，但在vs code环境下编译会报错，原因是因为没有引用&lt;code&gt;ws2_32.lib&lt;/code&gt;，在visual studio环境下，会自动引用这个库：&lt;/p&gt;</description></item><item><title>Adobe系列软件出现This unlicensed Photoshop app has been disabled.禁止使用</title><link>https://blog.muwinds.com/archives/118/</link><pubDate>Wed, 09 Apr 2025 19:57:18 +0800</pubDate><guid>https://blog.muwinds.com/archives/118/</guid><description>&lt;p&gt;This unlicensed Photoshop app has been disabled.&lt;/p&gt;
&lt;p&gt;最近adobe好像更新了什么，大面积出现未经授权许可禁止使用。（这两年的官方盗版被一网打尽了）&lt;/p&gt;
&lt;p&gt;解决方法&lt;/p&gt;
&lt;p&gt;原理：禁止Adobe启动时候的联网审查→禁止Adobe联网&lt;/p&gt;</description></item><item><title>go gin框架实现限流</title><link>https://blog.muwinds.com/archives/117/</link><pubDate>Wed, 09 Apr 2025 19:56:49 +0800</pubDate><guid>https://blog.muwinds.com/archives/117/</guid><description>&lt;p&gt;接手一个项目，甲方希望在项目中实现指定用户的限流，这需要我们在go项目中实现一个限流器。&lt;/p&gt;
&lt;p&gt;限流器的实现有很多经典的思想，不过令牌桶的思路简单，运行效率高，它是以恒定的速度往木桶里加入令牌，木桶满了则不再加入令牌。&lt;/p&gt;</description></item><item><title>如何理解k8s中limit限制cpu单位官方对单位的解释：</title><link>https://blog.muwinds.com/archives/115/</link><pubDate>Wed, 09 Apr 2025 19:56:00 +0800</pubDate><guid>https://blog.muwinds.com/archives/115/</guid><description>&lt;p&gt;&lt;a href="https://v1-14.docs.kubernetes.io/zh/docs/tasks/configure-pod-container/assign-cpu-resource/#cpu-%E5%8D%95%E4%BD%8D"&gt;https://v1-14.docs.kubernetes.io/zh/docs/tasks/configure-pod-container/assign-cpu-resource/#cpu-%E5%8D%95%E4%BD%8D&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;requests：代表容器启动请求的资源限制，分配的资源必须要达到此要求&lt;/p&gt;
&lt;p&gt;limits：代表最多可以请求多少资源&lt;/p&gt;
&lt;p&gt;单位m：CPU的计量单位叫毫核(m)。一个节点的CPU核心数量乘以1000，得到的就是节点总的CPU总数量。如，一个节点有两个核，那么该节点的CPU总量为2000m。&lt;/p&gt;</description></item><item><title>PKU HPCGame 2nd WriteUp</title><link>https://blog.muwinds.com/archives/113/</link><pubDate>Wed, 09 Apr 2025 19:50:05 +0800</pubDate><guid>https://blog.muwinds.com/archives/113/</guid><description>&lt;h3 id="1签到题"&gt;1.签到题&lt;/h3&gt;
&lt;h3 id="答案的第一位是"&gt;&lt;em&gt;答案的第一位是**1&lt;/em&gt;&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;second number is eight&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;*叁：*&lt;em&gt;9&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;最后一个是八&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;第一题：1 8 9 8（北京大学的创校时间xD），这读完都知道在哪吧……&lt;/p&gt;
&lt;h3 id="2小北问答"&gt;2.小北问答&lt;/h3&gt;
&lt;p&gt;1某厂的CPU采用了大小核架构，大核有超线程，小核没有超线程。已知物理核心数为12，逻辑核心数为16，大核数量为____，小核数量为____。&lt;/p&gt;</description></item><item><title>数据结构——堆（Heap）大根堆、小根堆</title><link>https://blog.muwinds.com/archives/111/</link><pubDate>Wed, 09 Apr 2025 19:39:56 +0800</pubDate><guid>https://blog.muwinds.com/archives/111/</guid><description>&lt;p&gt;转载：&lt;a href="https://www.cnblogs.com/wangchaowei/p/8288216.html"&gt;https://www.cnblogs.com/wangchaowei/p/8288216.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Heap是一种数据结构具有以下的特点：&lt;/p&gt;
&lt;p&gt;1）完全二叉树；&lt;/p&gt;
&lt;p&gt;2）heap中存储的值是偏序；&lt;/p&gt;
&lt;p&gt;Min-heap: 父节点的值小于或等于子节点的值；&lt;/p&gt;
&lt;p&gt;Max-heap: 父节点的值大于或等于子节点的值；&lt;/p&gt;
&lt;p&gt;&lt;img alt="image.png" loading="lazy" src="https://blog.muwinds.com/wp-content/uploads/2025/01/202501311738323816689956.png"&gt;&lt;/p&gt;
&lt;h3 id="堆的存储"&gt;堆的存储：&lt;/h3&gt;
&lt;p&gt;一般都用数组来表示堆，i结点的父结点下标就为(i–1)/2。它的左右子结点下标分别为2 * i + 1和2 * i + 2。如第0个结点左右子结点下标分别为1和2。&lt;/p&gt;</description></item><item><title>ikuai+OpenWrt旁路由模式配置ipv6</title><link>https://blog.muwinds.com/archives/110/</link><pubDate>Wed, 09 Apr 2025 19:39:35 +0800</pubDate><guid>https://blog.muwinds.com/archives/110/</guid><description>&lt;p&gt;openwrt主路由模式下的ipv6能力太差，同时对大量连接数的处理性能也不是很好，最后无奈换成了ikuai主路由+openwrt旁路由的模式&lt;/p&gt;
&lt;p&gt;之前介绍过&lt;a href="https://blog.muwinds.com/post/71.html"&gt;旁路由模式&lt;/a&gt;，但是说的有点小问题，其实旁路由模式也可以使用ipv6，同样的，独臂路由是用作主路由，而不是作为旁路网关。&lt;/p&gt;
&lt;p&gt;由于博客的机器（和nas在一起的）是ipv6源站，镜像源的更新需要走旁路由，以及无线路由器也是指向旁路网关以方便用梯子的，所以得让走旁路网关的机器也能分配到ipv6地址。&lt;/p&gt;</description></item><item><title>OpenWrt旁路由配置wireguard+校园网白嫖教程</title><link>https://blog.muwinds.com/archives/109/</link><pubDate>Wed, 09 Apr 2025 19:39:03 +0800</pubDate><guid>https://blog.muwinds.com/archives/109/</guid><description>&lt;p&gt;*本身这篇博文是为了我上大学为了减少校园网的费用所预备的，结果上大学后发现校园网不要钱……&lt;/p&gt;
&lt;p&gt;WireGuard是一款极其简单、快速、现代化的VPN，采用最先进的加密技术。它的目标是比IPsec更快、更简单、更精简、更有用，同时避免了配置上巨大的头痛。它比OpenVPN的性能高得多。WireGuard被设计为一种通用VPN，用于在嵌入式接口和超级计算机上运行，适用于许多不同的情况。它最初是为Linux内核发布的，现在是跨平台的（Windows、macOS、BSD、iOS、Android），可广泛部署。它目前正在大力开发中，但它可能已经被视为行业中最安全、最容易使用和最简单的VPN解决方案。&lt;/p&gt;</description></item><item><title>Python3 Linux发行版读取系统版本</title><link>https://blog.muwinds.com/archives/108/</link><pubDate>Wed, 09 Apr 2025 19:37:39 +0800</pubDate><guid>https://blog.muwinds.com/archives/108/</guid><description>&lt;p&gt;开发机环境切换到openEuler，测试了一下宝塔的功能，除了因为发行版问题基本上mysql，nginx，php的安装都需要编译安装以外。其实就没什么问题了，甚至连docker都是正常的&lt;/p&gt;</description></item><item><title>Redis详知详解</title><link>https://blog.muwinds.com/archives/107/</link><pubDate>Wed, 09 Apr 2025 19:36:52 +0800</pubDate><guid>https://blog.muwinds.com/archives/107/</guid><description>&lt;p&gt;来自知乎文章：&lt;a href="https://zhuanlan.zhihu.com/p/628425925"&gt;Redis详知详解 - 知乎 (zhihu.com)&lt;/a&gt;在这里做一些改动方便阅读&lt;/p&gt;
&lt;h2 id="redis学习"&gt;Redis学习&lt;/h2&gt;
&lt;h2&gt;&lt;/h2&gt;
&lt;p&gt;三大主线：&lt;/p&gt;
&lt;p&gt;1.高性能：线程模型，数据结构，持久化，网络框架&lt;/p&gt;
&lt;p&gt;2.高可靠性：主从复制，哨兵机制&lt;/p&gt;
&lt;p&gt;3.高可拓展：数据分片，负载均衡&lt;/p&gt;</description></item><item><title>OpenWrt无损扩大分区</title><link>https://blog.muwinds.com/archives/106/</link><pubDate>Wed, 09 Apr 2025 19:35:58 +0800</pubDate><guid>https://blog.muwinds.com/archives/106/</guid><description>&lt;p&gt;如果用openwrt默认镜像的，应该知道官方给的默认img镜像大小只有128M，安装的分区也自然只有128M&lt;/p&gt;
&lt;p&gt;因此，安装后我们需要扩大一下分区。&lt;/p&gt;
&lt;p&gt;下面来自openwrt官方文档：&lt;a href="https://openwrt.org/docs/guide-user/installation/openwrt_x86#expanding_root_partition"&gt;[OpenWrt 维基]x86 硬件上的 OpenWrt（PC/VM/服务器）&lt;/a&gt;&lt;/p&gt;</description></item><item><title>OpenWrt安装Passwall</title><link>https://blog.muwinds.com/archives/105/</link><pubDate>Wed, 09 Apr 2025 19:35:25 +0800</pubDate><guid>https://blog.muwinds.com/archives/105/</guid><description>&lt;p&gt;官方给的安装文档太过精简，缺少必要的东西，补充一下&lt;/p&gt;
&lt;p&gt;1.安装前请先在openwrt弄好梯子，保证可以访问sourceforge&lt;/p&gt;
&lt;p&gt;2.更换openwrt默认带的dnsmasq到dnsmasq_full版本：&lt;/p&gt;</description></item><item><title>ikuai配置手动限速实测无效的解决方法</title><link>https://blog.muwinds.com/archives/104/</link><pubDate>Wed, 09 Apr 2025 19:34:35 +0800</pubDate><guid>https://blog.muwinds.com/archives/104/</guid><description>&lt;p&gt;&lt;img alt="image.png" loading="lazy" src="https://blog.muwinds.com/wp-content/uploads/2024/04/202404051712323351130181.png"&gt;&lt;/p&gt;
&lt;p&gt;家庭环境：北京移动，上行120Mbps，下行1000Mbps，开启桥接，默认fullcone NAT环境&lt;/p&gt;
&lt;p&gt;我本人还跑pcdn，但是也有时候需要vpn到家里来访问家里的文件，需要优先保证我访问到的家里的vpn的速度和稳定性&lt;/p&gt;</description></item><item><title>华为OpenEuler通过vscode连接远程开发报错</title><link>https://blog.muwinds.com/archives/103/</link><pubDate>Wed, 09 Apr 2025 19:34:11 +0800</pubDate><guid>https://blog.muwinds.com/archives/103/</guid><description>&lt;p&gt;根据报错可知，是openEuler的ssh配置禁止了TCP转发&lt;/p&gt;
&lt;p&gt;调整/etc/ssh/sshd_config配置文件，将AllowTcpForwarding前面的升号去除即可&lt;/p&gt;</description></item><item><title>ProxmoxVE降频节能控温</title><link>https://blog.muwinds.com/archives/102/</link><pubDate>Wed, 09 Apr 2025 19:33:53 +0800</pubDate><guid>https://blog.muwinds.com/archives/102/</guid><description>&lt;p&gt;部分内容和转载自：&lt;a href="http://fisherworks.cn/?p=2568"&gt;ProxmoxVE软路由降频节能控温 | 渔人小径 (fisherworks.cn)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;前些日子想把我all in one电费降下来（毕竟跑PCDN没多少钱，能多赚点是一点）孙总告诉我说为啥不装windows10？配置节能模式功耗这不嘎嘎降？&lt;/p&gt;</description></item><item><title>Docker国内镜像源</title><link>https://blog.muwinds.com/archives/101/</link><pubDate>Wed, 09 Apr 2025 19:30:03 +0800</pubDate><guid>https://blog.muwinds.com/archives/101/</guid><description>&lt;p&gt;畜生的dockerhub让我的nas自动走ipv6是难绷的&lt;/p&gt;
&lt;p&gt;&lt;img alt="image.png" loading="lazy" src="https://blog.muwinds.com/wp-content/uploads/2024/07/202407231721729871282352.png"&gt;&lt;/p&gt;
&lt;p&gt;由于临时急用，我选择找镜像源&lt;/p&gt;
&lt;h2 id="dockerhub国内镜像源列表"&gt;DockerHub国内镜像源列表&lt;/h2&gt;
&lt;p&gt;此列表只收录无需限定条件的DockerHub镜像源，感谢这些公益服务者。&lt;/p&gt;
&lt;p&gt;2024年6月18日 亲测可用&lt;/p&gt;</description></item><item><title>RHEL系修改主机名方法</title><link>https://blog.muwinds.com/archives/100/</link><pubDate>Wed, 09 Apr 2025 19:18:54 +0800</pubDate><guid>https://blog.muwinds.com/archives/100/</guid><description>&lt;p&gt;管理工具：hostnamectl&lt;/p&gt;
&lt;p&gt;&lt;img alt="image.png" loading="lazy" src="https://blog.muwinds.com/wp-content/uploads/2023/09/202309101694344022436130.png"&gt;&lt;/p&gt;
&lt;p&gt;输入下面的指令修改主机名：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hostnamectl set-hostname 主机名
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt="image.png" loading="lazy" src="https://blog.muwinds.com/wp-content/uploads/2023/09/202309101694344069497429.png"&gt;&lt;/p&gt;</description></item><item><title>Passwall无法访问gstatic等问题</title><link>https://blog.muwinds.com/archives/99/</link><pubDate>Wed, 09 Apr 2025 19:18:23 +0800</pubDate><guid>https://blog.muwinds.com/archives/99/</guid><description>&lt;p&gt;下载笔记本的恢复镜像的时候发现：&lt;/p&gt;
&lt;p&gt;&lt;img alt="image.png" loading="lazy" src="https://blog.muwinds.com/wp-content/uploads/2023/09/202309241695541342894098.png"&gt;&lt;/p&gt;
&lt;p&gt;选择google账户登录的时候点不动选择的按钮&lt;/p&gt;
&lt;p&gt;按F12查看的时候发现：ssl.gstatic.com无响应&lt;/p&gt;
&lt;p&gt;我将passwall等一系列设置成强制代理gstatic后仍无法解决&lt;/p&gt;</description></item><item><title>conda : 无法将“conda”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。</title><link>https://blog.muwinds.com/archives/98/</link><pubDate>Wed, 09 Apr 2025 19:17:49 +0800</pubDate><guid>https://blog.muwinds.com/archives/98/</guid><description>&lt;p&gt;Anaconda默认安装路径：&lt;/p&gt;
&lt;p&gt;C:\Users\username\anaconda&lt;/p&gt;
&lt;p&gt;增加环境变量：&lt;/p&gt;
&lt;p&gt;G:\ProgramData\Anaconda3&lt;/p&gt;
&lt;p&gt;G:\ProgramData\Anaconda3\Scripts&lt;/p&gt;
&lt;p&gt;G:\ProgramData\Anaconda3\Library\bin&lt;/p&gt;
&lt;p&gt;&lt;img alt="image.png" loading="lazy" src="https://blog.muwinds.com/wp-content/uploads/2023/09/202309241695548511791595.png"&gt;&lt;/p&gt;</description></item><item><title>交换机&amp;VLAN</title><link>https://blog.muwinds.com/archives/95/</link><pubDate>Wed, 09 Apr 2025 19:15:13 +0800</pubDate><guid>https://blog.muwinds.com/archives/95/</guid><description>&lt;h2 id="为什么需要vlan"&gt;为什么需要VLAN&lt;/h2&gt;
&lt;p&gt;早期以太网是一种基于CSMA/CD（Carrier Sense Multiple Access/Collision Detection）的共享通讯介质的数据网络通讯技术。当主机数目较多时会导致冲突严重、广播泛滥、性能显著下降甚至造成网络不可用等问题。通过二层设备实现LAN互连虽然可以解决冲突严重的问题，但仍然不能隔离广播报文和提升网络质量。&lt;/p&gt;</description></item><item><title>Windows10和Windows11快速关闭自动更新大法</title><link>https://blog.muwinds.com/archives/94/</link><pubDate>Wed, 09 Apr 2025 19:12:54 +0800</pubDate><guid>https://blog.muwinds.com/archives/94/</guid><description>&lt;p&gt;win+r输入cmd打开命令提示符，输入指令：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;reg&lt;/span&gt; &lt;span class="n"&gt;add&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="n"&gt;FlightSettingsMaxPauseDays&lt;/span&gt; &lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="n"&gt;reg_dword&lt;/span&gt; &lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="mf"&gt;5000&lt;/span&gt; &lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt="image.png" loading="lazy" src="https://blog.muwinds.com/wp-content/uploads/2024/01/202401141705199223830546.png"&gt;&lt;/p&gt;
&lt;p&gt;然后去设置-&amp;gt;windows更新-&amp;gt;高级选项，调整暂停更新的时间&lt;/p&gt;
&lt;p&gt;&lt;img alt="image.png" loading="lazy" src="https://blog.muwinds.com/wp-content/uploads/2024/01/202401141705199267793368.png"&gt;&lt;/p&gt;</description></item><item><title>php如何理解严格模式declare(strict_types=1)？</title><link>https://blog.muwinds.com/archives/93/</link><pubDate>Wed, 09 Apr 2025 19:10:47 +0800</pubDate><guid>https://blog.muwinds.com/archives/93/</guid><description>&lt;p&gt;严格模式的写法：&lt;/p&gt;
&lt;p&gt;PHP&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;decleare&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;strict_type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;严格模式的声明需要放到php文件的最顶端，否则会抛出错误：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Fatal error: strict_types declaration must be the very first statement in the script
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这个声明的类型属于是没有错误去制造错误，主要就是检测变量的类型&lt;code&gt;type&lt;/code&gt;，如果不对，就会报错。值得特别说明的是：如果没有定义严格模式的话，这些类型错误很有可能都是可以接受的，并不会报错。&lt;/p&gt;</description></item><item><title>VS Code: 代码词汇报错</title><link>https://blog.muwinds.com/archives/91/</link><pubDate>Wed, 09 Apr 2025 19:07:19 +0800</pubDate><guid>https://blog.muwinds.com/archives/91/</guid><description>&lt;p&gt;&lt;img alt="enter image description here" loading="lazy" src="https://blog.muwinds.com/wp-content/uploads/2023/06/202306251687689384126783.png"&gt;&lt;/p&gt;
&lt;p&gt;不得不吐槽一句：VSCode这个词汇检查弱智如word，大哥，动一动脑子好好改改……&lt;/p&gt;
&lt;p&gt;简单朴素的解决方法：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Go to setting &lt;em&gt;(Ctrl+,)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;type &lt;code&gt;cSpell.diagnosticLevel&lt;/code&gt; in a search box&lt;/li&gt;
&lt;li&gt;change the option to &lt;strong&gt;Hint&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;转载：https://stackoverflow.com/questions/50309834/vs-code-enable-inline-spell-checker-but-disable-spell-check-in-the-problems&lt;/p&gt;</description></item><item><title>OpenWrt旁路由/独臂路由配置</title><link>https://blog.muwinds.com/archives/90/</link><pubDate>Wed, 09 Apr 2025 19:05:44 +0800</pubDate><guid>https://blog.muwinds.com/archives/90/</guid><description>&lt;p&gt;在介绍旁路由配置之前，先说一下旁路由原理：&lt;/p&gt;
&lt;p&gt;&lt;img alt="在这里插入图片描述" loading="lazy" src="https://blog.muwinds.com/wp-content/uploads/2023/07/202307021688274015971941.png"&gt;&lt;/p&gt;
&lt;p&gt;你可以很清楚的看出：旁路由的网络接入与其他终端设备无异，你可以把他理解为一个普通的设备，这个设备负责数据交换的处理。&lt;/p&gt;
&lt;p&gt;大多数人装openwrt是为了翻墙，广告过滤，实际上这玩意儿行为管理的能力也不太行……&lt;/p&gt;</description></item><item><title>python selector网页含有tbody表格，输出返回空列表</title><link>https://blog.muwinds.com/archives/89/</link><pubDate>Wed, 09 Apr 2025 19:05:16 +0800</pubDate><guid>https://blog.muwinds.com/archives/89/</guid><description>&lt;p&gt;在搓外汇API的时候，需要弄BOC爬虫去爬汇率数据，每次浏览器检查都是正常的，但在用bs4的selector后就是返回空列表：&lt;/p&gt;
&lt;p&gt;&lt;img alt="image.png" loading="lazy" src="https://blog.muwinds.com/wp-content/uploads/2023/07/202307061688633615883089.png"&gt;&lt;/p&gt;
&lt;p&gt;百度翻了半天，简单说一下原因：如果不是浏览器渲染的话，是不会渲染tbody的，就和下面的这个图一样&lt;/p&gt;</description></item><item><title>php Swoole 在supervisor或systemd下高并发频发redis mysql连接失败</title><link>https://blog.muwinds.com/archives/88/</link><pubDate>Wed, 09 Apr 2025 19:04:08 +0800</pubDate><guid>https://blog.muwinds.com/archives/88/</guid><description>&lt;p&gt;*前提：在你操作之前请先按照Swoole官方操作文档对内核修改完成后再看本文：&lt;/p&gt;
&lt;p&gt;文档地址：&lt;a href="https://wiki.swoole.com/#/other/sysctl"&gt;https://wiki.swoole.com/#/other/sysctl&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;汇率的API写好了，Swoole内网测试并发总会发生诸如redis went away的问题而导致502，当redis在同步模式下运行的时候无此问题，仅在Swoole一键协程化的时候出现：&lt;/p&gt;</description></item><item><title>php Swoole和FPM性能对比</title><link>https://blog.muwinds.com/archives/87/</link><pubDate>Wed, 09 Apr 2025 19:01:20 +0800</pubDate><guid>https://blog.muwinds.com/archives/87/</guid><description>&lt;p&gt;早闻Swoole因其持久化的特性有高性能高并发和语法简单的特点，突发奇想试着把汇率API项目的API部分用Swoole处理，在这里对比一下两者的性能差异&lt;/p&gt;
&lt;p&gt;服务器配置：&lt;img alt="image.png" loading="lazy" src="https://blog.muwinds.com/wp-content/uploads/2023/07/202307181689673249802427.png"&gt;&lt;/p&gt;</description></item><item><title>pve网卡速度慢的可能解决方法（包括不限于SMB速度异常慢等）</title><link>https://blog.muwinds.com/archives/86/</link><pubDate>Wed, 09 Apr 2025 18:58:50 +0800</pubDate><guid>https://blog.muwinds.com/archives/86/</guid><description>&lt;p&gt;如果pve网卡并非直通模式，请把虚拟网卡的Model处改成pve的virtIO:&lt;/p&gt;
&lt;p&gt;&lt;img alt="image.png" loading="lazy" src="https://blog.muwinds.com/wp-content/uploads/2023/07/202307201689821210644477.png"&gt;&lt;/p&gt;
&lt;p&gt;通常情况下这就可以跑满，即使你的网卡型号和model处吻合。&lt;/p&gt;
&lt;p&gt;接下来是诊断过程：&lt;/p&gt;
&lt;p&gt;当我做完全盘映射并做好Samba正在导入数据，发现写入只有可怜的50M/s（我家是千兆网，顺序写入就算是机械也不可能这么慢），读取更是炸裂，只有10M/s&lt;/p&gt;</description></item><item><title>Proxmox VE直通硬盘（全盘映射方式）</title><link>https://blog.muwinds.com/archives/85/</link><pubDate>Wed, 09 Apr 2025 18:57:47 +0800</pubDate><guid>https://blog.muwinds.com/archives/85/</guid><description>&lt;p&gt;打开pve的shell，输入：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ls /dev/disk/by-id
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt="image.png" loading="lazy" src="https://blog.muwinds.com/wp-content/uploads/2023/07/202307201689821363370150.png"&gt;&lt;/p&gt;
&lt;p&gt;我要将最上方的ata-ST400做全盘映射到ID为101的主机：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;qm &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="m"&gt;101&lt;/span&gt; -scsi1 /dev/disk/by-id/ata-ST4000VX000-2AG166_ZDH0687G
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;接下来去PVE后台看是否映射成功：&lt;/p&gt;
&lt;p&gt;&lt;img alt="image.png" loading="lazy" src="https://blog.muwinds.com/wp-content/uploads/2023/07/202307201689821504627353.png"&gt;&lt;/p&gt;</description></item><item><title>Proxmox VE登陆的时候提示没有有效的订阅You do not have a valid subscription for this server.</title><link>https://blog.muwinds.com/archives/84/</link><pubDate>Wed, 09 Apr 2025 18:57:09 +0800</pubDate><guid>https://blog.muwinds.com/archives/84/</guid><description>&lt;p&gt;KVM用的proxmox是免费版社区版的，所以每次都提示这个没有有效的订阅挺烦的！&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://blog.muwinds.com/wp-content/uploads/2023/07/202307211689918403569901.png"&gt;&lt;/p&gt;
&lt;h1 id="解决方法"&gt;解决方法：&lt;/h1&gt;
&lt;p&gt;修改文件/usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js&lt;/p&gt;</description></item><item><title>PVE管理后台提示报错apt-get update failed解决方法</title><link>https://blog.muwinds.com/archives/83/</link><pubDate>Wed, 09 Apr 2025 18:56:36 +0800</pubDate><guid>https://blog.muwinds.com/archives/83/</guid><description>&lt;p&gt;&lt;img alt="image.png" loading="lazy" src="https://blog.muwinds.com/wp-content/uploads/2023/07/202307261690381778292229.png"&gt;&lt;/p&gt;
&lt;p&gt;基本上还是PVE没有企业订阅的问题，下面说解决方法，版本适合PVE7：&lt;/p&gt;
&lt;p&gt;使用nano，/etc/apt/sources.list.d/pve-enterprise.list下：&lt;/p&gt;</description></item><item><title>OpenWrt ARP缓存溢出问题解决</title><link>https://blog.muwinds.com/archives/81/</link><pubDate>Wed, 09 Apr 2025 14:11:34 +0800</pubDate><guid>https://blog.muwinds.com/archives/81/</guid><description>&lt;p&gt;旁路由做了FullconeNAT之后，比特彗星测试结果还是PortStrictedFullconeNAT，同时通过dmesg进行内核诊断，我发现日志总是爆出ARP缓存溢出的错误：&lt;/p&gt;</description></item><item><title>支付系统下MySQL超时问题</title><link>https://blog.muwinds.com/archives/80/</link><pubDate>Wed, 09 Apr 2025 14:08:20 +0800</pubDate><guid>https://blog.muwinds.com/archives/80/</guid><description>&lt;p&gt;现在跑的支付系统在处理客户问题查询订单的时候经常查询超时锁表……&lt;/p&gt;
&lt;p&gt;支付系统的在数据库的特性是高更新频率，当我在排查问题的时候看到了query cache，去google了一下：&lt;/p&gt;</description></item><item><title>电阻与电源消耗电功率问题</title><link>https://blog.muwinds.com/archives/79/</link><pubDate>Wed, 09 Apr 2025 14:06:38 +0800</pubDate><guid>https://blog.muwinds.com/archives/79/</guid><description>&lt;p&gt;高中物理必修电学会用到一个结论，就是当R=r时（R为路端总电阻，r为电源内阻）电源的输出功率最大&lt;/p&gt;
&lt;p&gt;这个结论并没有要求证明，但是我没证明过程我记不住&lt;/p&gt;
&lt;p&gt;故在这里简单证明一下：&lt;/p&gt;</description></item><item><title>中学电学必修：电表电路原理</title><link>https://blog.muwinds.com/archives/78/</link><pubDate>Wed, 09 Apr 2025 14:05:59 +0800</pubDate><guid>https://blog.muwinds.com/archives/78/</guid><description>&lt;p&gt;初中的时候老师告诉我们看电压表电流表在电路里时，将电流表充当导线，电压表充当断路。&lt;/p&gt;
&lt;p&gt;这里简单说一下原因。&lt;/p&gt;
&lt;p&gt;任何一个电压表和电流表都由灵敏电流计配合大电阻组成：&lt;/p&gt;
&lt;p&gt;&lt;img alt="image.png" loading="lazy" src="https://blog.muwinds.com/wp-content/uploads/2023/03/202303271679868903484000.png"&gt;&lt;/p&gt;
&lt;p&gt;原理图可以看出：电流表中的R用来分G的电流，并以此来达到更大的量程；电压表的R用来分G的电压，也可以得到更大的量程。&lt;/p&gt;</description></item><item><title>Hyper-v 配置 NAT + 端口映射</title><link>https://blog.muwinds.com/archives/76/</link><pubDate>Wed, 09 Apr 2025 14:04:14 +0800</pubDate><guid>https://blog.muwinds.com/archives/76/</guid><description>&lt;p&gt;本指南将引导你完成：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;创建 NAT 网络&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;ul&gt;
&lt;li&gt;Windows 10 周年更新或更高版本&lt;/li&gt;
&lt;li&gt;已启用 Hyper-V（单击&lt;a href="https://link.zhihu.com/?target=https%3A//docs.microsoft.com/zh-cn/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v"&gt;此处&lt;/a&gt; 查看相关说明）&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;注意：目前，每台主机仅限一个 NAT 网络。 有关 Windows NAT (WinNAT) 实现、功能和限制的更多详细信息，请参考 &lt;a href="https://link.zhihu.com/?target=https%3A//techcommunity.microsoft.com/t5/Virtualization/Windows-NAT-WinNAT-Capabilities-and-limitations/ba-p/382303"&gt;WinNAT capabilities and limitations blog&lt;/a&gt;（WinNAT 功能和限制日志）&lt;/p&gt;</description></item><item><title>Cloudflare ZeroTrust Tunnel提示反向解析无效</title><link>https://blog.muwinds.com/archives/75/</link><pubDate>Wed, 09 Apr 2025 13:50:36 +0800</pubDate><guid>https://blog.muwinds.com/archives/75/</guid><description>&lt;p&gt;报错如下：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Error looking up Cloudflare edge IPs: the DNS query failed &lt;span class="nv"&gt;error&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;lookup _v2-origintunneld._tcp.argotunnel.com on **.1:53: no such host&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2022-09-15T08:24:12Z ERR Please try the following things to diagnose this issue:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2022-09-15T08:24:12Z ERR 1. ensure that argotunnel.com is returning &lt;span class="s2"&gt;&amp;#34;origintunneld&amp;#34;&lt;/span&gt; service records.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2022-09-15T08:24:12Z ERR Run your system&lt;span class="s1"&gt;&amp;#39;s equivalent of: dig srv _origintunneld._tcp.argotunnel.com
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;2022-09-15T08:24:12Z ERR 2. ensure that your DNS resolver is not returning compressed SRV records.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;2022-09-15T08:24:12Z ERR See GitHub issue https://github.com/golang/go/issues/27546
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;2022-09-15T08:24:12Z ERR For example, you could use Cloudflare&amp;#39;&lt;/span&gt;s 1.1.1.1 as your resolver:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2022-09-15T08:24:12Z ERR https://developers.cloudflare.com/1.1.1.1/setting-up-1.1.1.1/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2022-09-15T08:24:12Z INF Tunnel server stopped
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2022-09-15T08:24:12Z ERR Initiating shutdown &lt;span class="nv"&gt;error&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Could not lookup srv records on _v2-origintunneld._tcp.argotunnel.com: lookup _v2-origintunneld._tcp.argotunnel.com on **.1:53: no such host&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2022-09-15T08:24:12Z INF Metrics server stopped
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果是OpenWRT&lt;/p&gt;</description></item><item><title>Zerotier配合Nginx实现内网穿透</title><link>https://blog.muwinds.com/archives/74/</link><pubDate>Wed, 09 Apr 2025 13:49:41 +0800</pubDate><guid>https://blog.muwinds.com/archives/74/</guid><description>&lt;p&gt;之前博客网站一直用的家里机器配合香港Azure做frp内网穿透，用CF CDN进行数据分发，不提frp的虚拟局域网模式在跨国数据传输时面临的数据审查和路由方向会给速度及稳定性造成非常大的影响，其可能有的内存溢出和服务重启时的持续掉线问题也是很抓狂的，在这里，使用zerotier为两机打洞连接p2p，使用nginx进行反向代理来进行内网穿透。&lt;/p&gt;</description></item><item><title>离线下载Aria2搭建</title><link>https://blog.muwinds.com/archives/73/</link><pubDate>Wed, 09 Apr 2025 13:47:52 +0800</pubDate><guid>https://blog.muwinds.com/archives/73/</guid><description>&lt;p&gt;2024.02.03更新：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;不如比特彗星，ipv6支持一坨狗屎，比特彗星也有远程下载，这就是个垃圾&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;安装还是很方便的，直接一个yum就行了&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;yum install -y aria2
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然后创建一个配置文件：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /etc/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo mkdir aria2 &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; aria2 &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;touch aria2.conf &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; touch aria2.session
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;配置文件内容：&lt;/p&gt;</description></item><item><title>CentOS设置开机启动</title><link>https://blog.muwinds.com/archives/72/</link><pubDate>Wed, 09 Apr 2025 13:42:54 +0800</pubDate><guid>https://blog.muwinds.com/archives/72/</guid><description>&lt;p&gt;AIO出现了硬盘问题，重启后发现离线下载服务没有开机自启，快速给开一下：&lt;/p&gt;
&lt;p&gt;先写一个开机自启的脚本：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#!/bin/sh
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#chkconfig: 2345 80 90&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#description:aria2开机自启&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aria2c --conf-path&lt;span class="o"&gt;=&lt;/span&gt;/etc/aria2/aria2.conf -D
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;脚本第一行 “#!/bin/sh” 告诉系统使用的shell；&lt;br&gt;
脚本第二行 “#chkconfig: 2345 80 90” 表示在2/3/4/5运行级别启动，启动序号(S80)，关闭序号(K90)；&lt;br&gt;
脚本第三行 表示的是服务的描述信息&lt;br&gt;
&lt;strong&gt;注意：&lt;/strong&gt; 第二行和第三行必写，否则会出现如“服务 autostart.sh 不支持 chkconfig”这样的错误。&lt;/p&gt;</description></item><item><title>yarn构建提示Error: error:0308010C:digital envelope routines::unsupported的解决方法</title><link>https://blog.muwinds.com/archives/70/</link><pubDate>Wed, 09 Apr 2025 13:40:40 +0800</pubDate><guid>https://blog.muwinds.com/archives/70/</guid><description>&lt;p&gt;&lt;a href="https://blog.muwinds.com/wp-content/uploads/2025/04/image-12.png"&gt;&lt;img loading="lazy" src="https://blog.muwinds.com/wp-content/uploads/2025/04/image-12.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这个是SSL套件的问题，输入下面的指令切换一下就好了：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$env&lt;/span&gt;:NODE_OPTIONS &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;--openssl-legacy-provider&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>node-saas问题</title><link>https://blog.muwinds.com/archives/69/</link><pubDate>Wed, 09 Apr 2025 13:39:48 +0800</pubDate><guid>https://blog.muwinds.com/archives/69/</guid><description>&lt;p&gt;构建vue项目的时候报错：&lt;/p&gt;
&lt;p&gt;&lt;img alt="image.png" loading="lazy" src="https://blog.muwinds.com/wp-content/uploads/2023/02/202302021675333331740729.png"&gt;&lt;/p&gt;
&lt;p&gt;很简单，nodejs版本太新了，直接换到dart-sass&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;yarn remove node-sass
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;yarn add sass
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>记录一个远古垃圾系统的维护</title><link>https://blog.muwinds.com/archives/68/</link><pubDate>Wed, 09 Apr 2025 13:39:10 +0800</pubDate><guid>https://blog.muwinds.com/archives/68/</guid><description>&lt;p&gt;这次接手的是tp框架的远古收款系统，开局几个ajax认不上我已经习以为常了，反手把php版本改成7.0就恢复正常（7.0算是个兼容版本 5.x的和7.x都兼容一点 各位穷途末路了可以试试）&lt;/p&gt;</description></item><item><title>雨云CDN清除指定文件的缓存</title><link>https://blog.muwinds.com/archives/65/</link><pubDate>Wed, 09 Apr 2025 13:38:41 +0800</pubDate><guid>https://blog.muwinds.com/archives/65/</guid><description>&lt;p&gt;雨云的CDN并没有给用户清除缓存的选项，想清除缓存的话其实挺麻烦的。&lt;/p&gt;
&lt;p&gt;通过浏览器对网站的请求头我们可以看到，CDN的服务器是apache apisix&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.muwinds.com/wp-content/uploads/2025/04/image-10.png"&gt;&lt;img loading="lazy" src="https://blog.muwinds.com/wp-content/uploads/2025/04/image-10.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;通过查阅apisix有关缓存的文档，我们可以发现清除缓存的方法：&lt;/p&gt;</description></item><item><title>OpenWrt无法保存配置无法生效的解决方法</title><link>https://blog.muwinds.com/archives/64/</link><pubDate>Wed, 09 Apr 2025 13:36:54 +0800</pubDate><guid>https://blog.muwinds.com/archives/64/</guid><description>&lt;p&gt;原因：意外断电导致硬盘卡在只读状态&lt;/p&gt;
&lt;p&gt;进入openwrt后台按回车输入下面命令，重新挂载即可：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mount -o remount rw /
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;2024.07.10更新：&lt;/p&gt;
&lt;p&gt;换了官方固件后因为要拆下来换机箱散热器又是一次意外断电，卡在了只读状态，但是这次重新挂载无用了。&lt;/p&gt;</description></item><item><title>centos分区挂载磁盘</title><link>https://blog.muwinds.com/archives/61/</link><pubDate>Tue, 08 Apr 2025 00:17:58 +0800</pubDate><guid>https://blog.muwinds.com/archives/61/</guid><description>&lt;p&gt;准备建个nas服务，大容量的硬盘是必不可少的。去经理那拿了块4T的硬盘，以后有需要我再加吧。&lt;/p&gt;
&lt;p&gt;硬盘硬件上的安装很简单，插两根线拧螺丝就行了。&lt;/p&gt;
&lt;p&gt;接下来说的是挂到系统&lt;/p&gt;
&lt;p&gt;先查看一下盘子是不是安装上了：&lt;/p&gt;</description></item><item><title>centos（RHEL）开启samba</title><link>https://blog.muwinds.com/archives/60/</link><pubDate>Tue, 08 Apr 2025 00:16:08 +0800</pubDate><guid>https://blog.muwinds.com/archives/60/</guid><description>&lt;p&gt;samba是玩nas经常用的服务了，这里说一下怎么安装：&lt;/p&gt;
&lt;p&gt;登录机器，yum安装：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;yum install samba
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; samba
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;配置方法：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vi /etc/samba/smb.conf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;nasdata&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;comment&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; nasdata 备注
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;available&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; yes
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;browseable&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; yes
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;public&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; yes
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;writable&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; yes
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; /nasdata 共享文件夹路径
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;writable&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; yes 是否可以写入
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;windows映射一下：&lt;/p&gt;</description></item><item><title>快速且简单通用的批量转码方法</title><link>https://blog.muwinds.com/archives/58/</link><pubDate>Tue, 08 Apr 2025 00:14:31 +0800</pubDate><guid>https://blog.muwinds.com/archives/58/</guid><description>&lt;p&gt;前情提要：MC服务器迁移到HomeServer后，突然有一天玩家跟我说挑战功能全是乱码，我打开挑战文件一看：&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.muwinds.com/wp-content/uploads/2025/04/image-9.png"&gt;&lt;img loading="lazy" src="https://blog.muwinds.com/wp-content/uploads/2025/04/image-9-1024x425.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;而且挑战文件都在一个文件夹共有291个，一个个扔到npp里面转成utf8也不是事儿。&lt;/p&gt;</description></item><item><title>PVE删除订阅提示</title><link>https://blog.muwinds.com/archives/50/</link><pubDate>Tue, 08 Apr 2025 00:12:51 +0800</pubDate><guid>https://blog.muwinds.com/archives/50/</guid><description>&lt;p&gt;每次登录PVE的网页后台就看到那个烦人的订阅提示，这里关掉他&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /usr/share/javascript/proxmox-widget-toolkit
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cp proxmoxlib.js proxmoxlib.js.bak
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nano proxmoxlib.js
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ssh链接pve的机器后 输入上面三行命令会打开一个文件，按ctrl+w查找No valid subscription&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.muwinds.com/wp-content/uploads/2025/04/image-8.png"&gt;&lt;img loading="lazy" src="https://blog.muwinds.com/wp-content/uploads/2025/04/image-8-1024x773.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;将前面的“Ext.Msg.show({”更改成“void({”后，按ctrl+o回车保存，按ctrl+x退出，清除pve后台cookie并再次登录检查提示是否存在&lt;/p&gt;</description></item><item><title>颐和园 2022年7月16</title><link>https://blog.muwinds.com/archives/51/</link><pubDate>Tue, 08 Apr 2025 00:11:31 +0800</pubDate><guid>https://blog.muwinds.com/archives/51/</guid><description>&lt;p&gt;这趟颐和园逛得很值，初中游颐和园属实没想到只逛到长廊就&lt;strong&gt;原路&lt;/strong&gt;返回了，那时候包含对学校其他事情的一些怨念，就决定我以后一定要自己游一次颐和园&lt;/p&gt;
&lt;p&gt;正好一个在海淀离颐和园近的朋友约我线下见面，趁这时候去颐和园咯。&lt;/p&gt;</description></item><item><title>vue react spa页面刷新404解决</title><link>https://blog.muwinds.com/archives/48/</link><pubDate>Tue, 08 Apr 2025 00:04:46 +0800</pubDate><guid>https://blog.muwinds.com/archives/48/</guid><description>&lt;p&gt;vwo50.com部署上线以来有70个人在里面求v了一波50&lt;/p&gt;
&lt;p&gt;这几天把服务器从azure迁到all in one，部署上线发现个问题&lt;/p&gt;
&lt;p&gt;就是原先的donate短链接打不开，随机到的短链接刷新之后失效&lt;/p&gt;</description></item><item><title>RHEL系跑MC服务器</title><link>https://blog.muwinds.com/archives/38/</link><pubDate>Mon, 07 Apr 2025 23:59:04 +0800</pubDate><guid>https://blog.muwinds.com/archives/38/</guid><description>&lt;p&gt;2025.04.07更新：时过境迁，CentOS都没了，令人感慨……不过RockyLinux的配置方法大同小异&lt;/p&gt;
&lt;p&gt;以前都是windows 现在把朋友的MC服务器换到all in one上打算用centos配，主要是以下几个原因：&lt;/p&gt;</description></item><item><title>PVE双网口实践</title><link>https://blog.muwinds.com/archives/21/</link><pubDate>Mon, 07 Apr 2025 23:05:29 +0800</pubDate><guid>https://blog.muwinds.com/archives/21/</guid><description>&lt;p&gt;由于新三的科学能力太差（属实没想到一科学就卡），故打算自组一台软路由，顺便弄成了一台all in one&lt;/p&gt;
&lt;p&gt;拓补图：&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://blog.muwinds.com/wp-content/uploads/2025/04/image-1024x484.png"&gt;&lt;/p&gt;
&lt;p&gt;（随手画了个 你看着难受跟我有啥关系）&lt;/p&gt;
&lt;p&gt;机器被奸商城老板坑了，600块整了个e5 2630l+x79寨板，是纯纯的冤种&lt;/p&gt;</description></item></channel></rss>