<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>MingSage</title>
  
  
  <link href="https://mingsage.top/atom.xml" rel="self"/>
  
  <link href="https://mingsage.top/"/>
  <updated>2026-06-06T05:48:28.030Z</updated>
  <id>https://mingsage.top/</id>
  
  <author>
    <name>MingSage</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>NoJournal — 用一个好问题，替代空白页</title>
    <link href="https://mingsage.top/2026/06/01/2026-06-02-NoJournal-%E7%94%A8%E4%B8%80%E4%B8%AA%E5%A5%BD%E9%97%AE%E9%A2%98%E6%9B%BF%E4%BB%A3%E7%A9%BA%E7%99%BD%E9%A1%B5/2026-06-02-NoJournal-%E7%94%A8%E4%B8%80%E4%B8%AA%E5%A5%BD%E9%97%AE%E9%A2%98%E6%9B%BF%E4%BB%A3%E7%A9%BA%E7%99%BD%E9%A1%B5/"/>
    <id>https://mingsage.top/2026/06/01/2026-06-02-NoJournal-%E7%94%A8%E4%B8%80%E4%B8%AA%E5%A5%BD%E9%97%AE%E9%A2%98%E6%9B%BF%E4%BB%A3%E7%A9%BA%E7%99%BD%E9%A1%B5/2026-06-02-NoJournal-%E7%94%A8%E4%B8%80%E4%B8%AA%E5%A5%BD%E9%97%AE%E9%A2%98%E6%9B%BF%E4%BB%A3%E7%A9%BA%E7%99%BD%E9%A1%B5/</id>
    <published>2026-06-01T16:00:00.000Z</published>
    <updated>2026-06-06T05:48:28.030Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>每次打开日记 App，面对一片空白，打了三行又删掉两行，最后关掉。这不是你的问题，是产品的问题。</p></blockquote><p><strong>日记的门槛从来不是”写”，而是”不知道写什么”。</strong> NoJournal 把这个逻辑反过来——AI 不问”你想写什么”，它直接问一个问题。你回答。它再问。<br>像朋友聊天一样，三五个来回，一篇日记就出来了。</p><p>然后发到 flomo。你不用写一个字。</p><p style="text-align:center;margin:20px 0;">  <a href="nojournal.zip" download style="display:inline-block;padding:12px 28px;background:#2d96bd;color:#fff;border-radius:6px;text-decoration:none;font-size:16px;font-weight:bold;">📦 下载 nojournal.zip</a></p><hr><h2 id="为什么是”问”而不是”写”"><a href="#为什么是”问”而不是”写”" class="headerlink" title="为什么是”问”而不是”写”"></a>为什么是”问”而不是”写”</h2><p>人类天生不擅长面对空白页，但天生擅长回答问题。你问一个人”今天过得怎么样”，他能说十分钟。你给他一个空白文本框让他”开始写日记”，他十秒就想关掉。</p><p>这不是意志力问题，是交互范式问题。<strong>问题是触发器，空白页是阻力器。</strong></p><p>NoJournal 做的就是把”写”的认知负担转移到”答”的自然反应上。</p><hr><h2 id="怎么用"><a href="#怎么用" class="headerlink" title="怎么用"></a>怎么用</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">写日记</span><br></pre></td></tr></table></figure><p>一句话就行。然后：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br></pre></td><td class="code"><pre><span class="line">AI: 工作、生活、随便？</span><br><span class="line"></span><br><span class="line">你: 工作</span><br><span class="line"></span><br><span class="line">AI: 晚上十点了。今天有什么事在你脑子里转？</span><br><span class="line"></span><br><span class="line">你: 加班改bug改到头秃</span><br><span class="line"></span><br><span class="line">AI: 什么bug这么难搞？</span><br><span class="line"></span><br><span class="line">你: 时区问题，搞了三小时才发现</span><br><span class="line"></span><br><span class="line">AI: 发现那一刻什么感觉？</span><br><span class="line"></span><br><span class="line">你: 又气又好笑</span><br><span class="line"></span><br><span class="line">AI: [生成日记并展示]</span><br><span class="line"></span><br><span class="line">     6月2日</span><br><span class="line"></span><br><span class="line">     一个时区bug，三小时。发现是少写了一个转换的时候，</span><br><span class="line">     又气又好笑——感觉自己像个傻子。</span><br><span class="line"></span><br><span class="line">     #编程日常</span><br><span class="line"></span><br><span class="line">    有哪里想改的吗？</span><br><span class="line"></span><br><span class="line">你: 挺好</span><br><span class="line"></span><br><span class="line">AI: 要发到 flomo 吗？</span><br><span class="line"></span><br><span class="line">你: 发</span><br><span class="line"></span><br><span class="line">AI: [已发送] 明天这个时候，我还来问你。</span><br></pre></td></tr></table></figure><p>就这么简单。</p><hr><h2 id="设计哲学"><a href="#设计哲学" class="headerlink" title="设计哲学"></a>设计哲学</h2><p>这个 skill 经过了 11 位跨领域思考者（其实是AI + Skills）的辩论和打磨——张一鸣、Steve Jobs、Paul Graham、孙武、Ilya Sutskever、Taleb、Karpathy、Feynman、Munger、Naval、Musk。从中沉淀了三条核心原则：</p><h3 id="1-框裱，不是重写"><a href="#1-框裱，不是重写" class="headerlink" title="1. 框裱，不是重写"></a>1. 框裱，不是重写</h3><p>AI 的工作是<strong>整理</strong>你说的话，不是替你写一篇好文章。保留你的用词、你的语气、你独特的说法。把”又气又好笑”写成”既挫败又释然”是准确了，但那是另一个人写的日记。</p><p><strong>像你请朋友帮你整理日记。朋友不会把你的话翻译成另一种语言。</strong></p><h3 id="2-留存-质量"><a href="#2-留存-质量" class="headerlink" title="2. 留存 &gt; 质量"></a>2. 留存 &gt; 质量</h3><p>目标不是今天这篇日记写得多好，而是你明天还来。用户不想展开的话题就跳过，不凑轮数。最短的素材——哪怕三句话——也能生成一篇好日记。</p><h3 id="3-一比特信息决定精度"><a href="#3-一比特信息决定精度" class="headerlink" title="3. 一比特信息决定精度"></a>3. 一比特信息决定精度</h3><p>开场先问”工作、生活、随便？”这不是闲聊。一个比特的分类信息，能让后续问题的精度高一个数量级。你不会用”今天团队协作怎么样”去问一个刚失恋的人。</p><hr><h2 id="工作流"><a href="#工作流" class="headerlink" title="工作流"></a>工作流</h2><table><thead><tr><th>步骤</th><th>做什么</th><th>设计理由</th></tr></thead><tbody><tr><td><strong>分流</strong></td><td>“工作、生活、随便？”</td><td>一比特信息，锚定对话领域</td></tr><tr><td><strong>锚定</strong></td><td>“周一了，这周有什么不一样？”</td><td>时空事件锚定，给空白一个支点</td></tr><tr><td><strong>追问</strong></td><td>事实 → 感受 → 意义</td><td>像朋友聊天，不像记者采访</td></tr><tr><td><strong>生成</strong></td><td>先复述原话指纹，自动定风格</td><td>框裱不是重写，第一人称</td></tr><tr><td><strong>eval</strong></td><td>“有哪里想改的吗？”</td><td>编辑口吻而非客服口吻，立刻改</td></tr><tr><td><strong>发送</strong></td><td>POST 到 flomo</td><td>一键发送，markdown 格式</td></tr><tr><td><strong>埋钩</strong></td><td>“明天这个时候，我还来问你”</td><td>创造下次对话的预期</td></tr></tbody></table><hr><h2 id="安装"><a href="#安装" class="headerlink" title="安装"></a>安装</h2><p><a href="nojournal.zip">📥 下载 nojournal.zip</a></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 解压到 Claude Code skills 目录</span></span><br><span class="line">unzip nojournal.zip -d ~/.claude/skills/nojournal</span><br></pre></td></tr></table></figure><h3 id="配置-flomo-发送（可选）"><a href="#配置-flomo-发送（可选）" class="headerlink" title="配置 flomo 发送（可选）"></a>配置 flomo 发送（可选）</h3><p>获取你的 flomo API 链接：flomo App → 设置 → API → 复制</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Windows</span></span><br><span class="line">setx FLOMO_API_URL <span class="string">&quot;https://flomoapp.com/iwh/你的ID/你的token/&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># macOS / Linux</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&#x27;export FLOMO_API_URL=&quot;https://flomoapp.com/iwh/你的ID/你的token/&quot;&#x27;</span> &gt;&gt; ~/.bashrc</span><br></pre></td></tr></table></figure><p>未设置 <code>FLOMO_API_URL</code> 时，日记生成后提示配置，不阻塞使用。</p><hr><h2 id="文件结构"><a href="#文件结构" class="headerlink" title="文件结构"></a>文件结构</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">~/.claude/skills/nojournal/</span><br><span class="line">├── SKILL.md          # 主流程（7步工作流）</span><br><span class="line">├── voice.md          # 日记生成原则：框裱不是重写</span><br><span class="line">├── flomo-send.md     # flomo API 发送逻辑</span><br><span class="line">└── README.md         # 你正在看的这个文件</span><br></pre></td></tr></table></figure><hr><h2 id="致谢-很抽象"><a href="#致谢-很抽象" class="headerlink" title="致谢(很抽象)"></a>致谢(很抽象)</h2><ul><li>设计经过 11 位跨领域思考者的辩论和打磨：张一鸣（三字分流）、Steve Jobs（事件锚定）、Paul Graham（原话指纹 + eval措辞）、孙武（时空锚定 + 发后埋钩）、Andrej Karpathy（eval闭环）、Richard Feynman（voice.md 框裱原则）、查理·芒格（极致精简）、Nassim Taleb、Naval Ravikant、Ilya Sutskever、Elon Musk</li><li>flomo API 环境变量设计借鉴 <a href="https://github.com/alchaincyf/weread-skills">weread-skills</a></li></ul><hr><p><em>如果你今天没什么想说的——试试对 AI 大喊一声 我要写日记。它先开口。</em></p>]]></content>
    
    
      
      
    <summary type="html">&lt;blockquote&gt;
&lt;p&gt;每次打开日记 App，面对一片空白，打了三行又删掉两行，最后关掉。这不是你的问题，是产品的问题。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;日记的门槛从来不是”写”，而是”不知道写什么”。&lt;/strong&gt; NoJournal 把这</summary>
      
    
    
    
    <category term="SKILL开发" scheme="https://mingsage.top/categories/SKILL%E5%BC%80%E5%8F%91/"/>
    
    
  </entry>
  
  <entry>
    <title>关于 Git 的一些理解——从命令到本质</title>
    <link href="https://mingsage.top/2026/05/27/2026-05-28-%E5%85%B3%E4%BA%8E%20Git%20%E7%9A%84%E4%B8%80%E4%BA%9B%E7%90%86%E8%A7%A3%E2%80%94%E2%80%94%E4%BB%8E%E5%91%BD%E4%BB%A4%E5%88%B0%E6%9C%AC%E8%B4%A8/"/>
    <id>https://mingsage.top/2026/05/27/2026-05-28-%E5%85%B3%E4%BA%8E%20Git%20%E7%9A%84%E4%B8%80%E4%BA%9B%E7%90%86%E8%A7%A3%E2%80%94%E2%80%94%E4%BB%8E%E5%91%BD%E4%BB%A4%E5%88%B0%E6%9C%AC%E8%B4%A8/</id>
    <published>2026-05-27T16:00:00.000Z</published>
    <updated>2026-06-06T05:48:28.030Z</updated>
    
    <content type="html"><![CDATA[<h2 id="起因"><a href="#起因" class="headerlink" title="起因"></a>起因</h2><p>虽然已经熟悉 Git 各种命令行操作，但还是被一种莫名的内驱力推动着，去系统地了解 Git 的底层原理。</p><blockquote><p>Git 本质上不是“版本控制软件”。<br>它更像：<strong>一个基于 immutable object + 指针的数据库</strong>。</p></blockquote><h2 id="Git-的数据结构本质"><a href="#Git-的数据结构本质" class="headerlink" title="Git 的数据结构本质"></a>Git 的数据结构本质</h2><p>计算机的一切都是数据结构，一切实现都基于数据结构。<br>Git 也不例外——它的核心就是 <code>.git</code> 目录下的那套对象存储机制。</p><p><code>commit</code>、<code>tree</code>、<code>blob</code>——Git 的本质就在于 <code>.git</code> 目录里这些对象的组织方式。</p><ul><li><strong>blob</strong>：保存文件内容本身</li><li><strong>tree</strong>：保存目录结构，以及文件名到 blob 的映射</li><li><strong>commit</strong>：保存一次快照，指向对应的 tree，并记录父 commit、作者和提交信息</li></ul><p>所以 Git 记录的不是“文件改了几行”这种直觉上的差异，而是一组对象之间的引用关系。<br>版本历史也不是线性的文本记录，而是一张由 commit 串起来的对象图。</p><h3 id="stash-与栈"><a href="#stash-与栈" class="headerlink" title="stash 与栈"></a><code>stash</code> 与栈</h3><p>以 <code>git stash</code> 为例，它保留工作记录使用的其实是<strong>栈</strong>的数据结构：</p><ul><li><code>git stash</code>：把当前工作区修改保存成一个 commit-like 对象，压入栈顶（push）</li><li><code>git stash pop</code>：恢复并删除栈顶元素（pop &#x3D; 恢复 + 删除）</li><li><code>git stash apply</code>：相当于 <code>peek()</code>，不删除，只取出来用</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 压栈：保存当前修改</span></span><br><span class="line">git stash</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看栈中内容</span></span><br><span class="line">git stash list</span><br><span class="line"><span class="comment"># stash@&#123;0&#125;: WIP on main: a1b2c3d some commit</span></span><br><span class="line"><span class="comment"># stash@&#123;1&#125;: WIP on main: e4f5g6h another commit</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 出栈：恢复最近一次 stash 并删除</span></span><br><span class="line">git stash pop</span><br><span class="line"></span><br><span class="line"><span class="comment"># 只读：恢复最近一次 stash 但不删除</span></span><br><span class="line">git stash apply</span><br></pre></td></tr></table></figure><p>理解了这一点，<code>stash</code> 系列命令就不再是需要死记硬背的操作，<br>而是栈这一经典数据结构的自然体现。</p><h2 id="Git学习推荐资源"><a href="#Git学习推荐资源" class="headerlink" title="Git学习推荐资源"></a>Git学习推荐资源</h2><ol><li><a href="https://www.liaoxuefeng.com/wiki/896043488029600">廖雪峰的 Git 教程</a>——适合快速入门，覆盖面广</li><li><a href="https://git-scm.com/book/zh/v2">Pro Git</a>——Git 官方书籍，系统全面</li><li><a href="https://jwiegley.github.io/git-from-the-bottom-up/">git-from-the-bottom-up</a>——从底层构建理解 Git</li><li><a href="https://www.bilibili.com/video/BV18ZiFB3EUy/">原来我一点也不懂 Git</a>——B 站视频，根据 <code>.git</code> 目录讲解 Git 的本质</li></ol><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>很多工具我们用了很久，<br>但只有理解了它的数据结构和底层设计，<br>那些“记不住”的命令才会真正变得自然而然。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;起因&quot;&gt;&lt;a href=&quot;#起因&quot; class=&quot;headerlink&quot; title=&quot;起因&quot;&gt;&lt;/a&gt;起因&lt;/h2&gt;&lt;p&gt;虽然已经熟悉 Git 各种命令行操作，但还是被一种莫名的内驱力推动着，去系统地了解 Git 的底层原理。&lt;/p&gt;
&lt;blockquote&gt;
</summary>
      
    
    
    
    <category term="开发工具" scheme="https://mingsage.top/categories/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7/"/>
    
    <category term="Git" scheme="https://mingsage.top/categories/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7/Git/"/>
    
    
  </entry>
  
  <entry>
    <title>WSL 镜像网络模式配置</title>
    <link href="https://mingsage.top/2026/05/26/2026-05-27-WSL%20%E9%95%9C%E5%83%8F%E7%BD%91%E7%BB%9C%E6%A8%A1%E5%BC%8F%E9%85%8D%E7%BD%AE/"/>
    <id>https://mingsage.top/2026/05/26/2026-05-27-WSL%20%E9%95%9C%E5%83%8F%E7%BD%91%E7%BB%9C%E6%A8%A1%E5%BC%8F%E9%85%8D%E7%BD%AE/</id>
    <published>2026-05-26T16:00:00.000Z</published>
    <updated>2026-06-06T05:48:28.030Z</updated>
    
    <content type="html"><![CDATA[<hr><p>在使用 WSL 2 的过程中，网络问题往往是最让人头疼的部分。无论是局域网内的其他设备想要访问 WSL 中运行的服务，还是在 VPN 环境下遇到了 DNS 解析失败，这些问题都可以通过切换到镜像网络模式来解决。</p><h2 id="什么是镜像模式"><a href="#什么是镜像模式" class="headerlink" title="什么是镜像模式"></a>什么是镜像模式</h2><p>WSL 2 本质上是一个运行在 Hyper-V 上的轻量级虚拟机，默认采用 NAT 网络模式，拥有独立的虚拟子网 IP（<code>172.x.x.x</code>），与宿主机网络隔离。这导致外部设备无法直接访问 WSL 中的服务，VPN 环境下还经常出现 DNS 解析失败的问题。</p><p>镜像模式（Mirrored Networking）是微软在 Windows 11 中引入的网络模式。它的核心思路是直接将 Windows 宿主机的网络接口状态同步到 Linux 内核中，彻底消除虚拟子网带来的隔离问题：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">┌────────────────────────────────────────────────────────┐</span><br><span class="line">│                    Windows 主机                        │</span><br><span class="line">│                                                        │</span><br><span class="line">│  ┌──────────────────────────────────────────────────┐  │</span><br><span class="line">│  │             WSL 2 虚拟机 (镜像)                  │  │</span><br><span class="line">│  │                                                  │  │</span><br><span class="line">│  │   eth0: 与宿主机共享相同局域网 IP                │  │</span><br><span class="line">│  │   直接暴露在 Windows 防火墙中                    │  │</span><br><span class="line">│  └──────────────────────────────────────────────────┘  │</span><br><span class="line">│             │                                          │</span><br><span class="line">│             │  (网络接口直接同步)                      │</span><br><span class="line">│             ▼                                          │</span><br><span class="line">│  ┌──────────────────────────────────────────────────┐  │</span><br><span class="line">│  │            物理网络 / Internet                   │  │</span><br><span class="line">│  └──────────────────────────────────────────────────┘  │</span><br><span class="line">└────────────────────────────────────────────────────────┘</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>镜像模式的优势如下：</p><ul><li>与宿主机共享相同的局域网 IP 地址</li><li>原生支持 IPv6</li><li>VPN 兼容性显著提升，不再出现 DNS 丢包问题</li><li>局域网内其他设备可以直接发现和访问 WSL 中的服务</li><li>Windows 防火墙规则直接作用于 WSL 中的应用</li><li>无需手动配置端口转发</li></ul><h2 id="配置-wslconfig"><a href="#配置-wslconfig" class="headerlink" title="配置 .wslconfig"></a>配置 .wslconfig</h2><p>镜像模式属于全局配置，需要在 Windows 用户目录下编辑 <code>.wslconfig</code> 文件。</p><p><strong>第一步</strong>：打开文件资源管理器，导航到 Windows 用户目录：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">C:\Users\&lt;您的用户名&gt;\</span><br></pre></td></tr></table></figure><p><strong>第二步</strong>：在该目录下查找名为 <code>.wslconfig</code> 的文件。如果文件不存在，手动创建一个（注意文件名前面的点号不能漏掉）。</p><p><strong>第三步</strong>：用记事本或任意文本编辑器打开 <code>.wslconfig</code>，写入以下内容：</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">[wsl2]</span></span><br><span class="line"><span class="comment"># 启用镜像网络模式 - 这是最重要的配置</span></span><br><span class="line"><span class="attr">networkingMode</span>=mirrored</span><br><span class="line"><span class="comment"># 启用 DNS 隧道，防止 VPN 环境下域名解析失效</span></span><br><span class="line"><span class="attr">dnsTunneling</span>=<span class="literal">true</span></span><br><span class="line"><span class="comment"># 强制 WSL 使用 Windows 的 HTTP 代理设置</span></span><br><span class="line"><span class="attr">autoProxy</span>=<span class="literal">true</span></span><br><span class="line"><span class="comment"># 启用集成防火墙支持</span></span><br><span class="line"><span class="attr">firewall</span>=<span class="literal">true</span></span><br><span class="line"></span><br><span class="line"><span class="section">[experimental]</span></span><br><span class="line"><span class="comment"># 自动回收闲置内存，优化性能</span></span><br><span class="line"><span class="attr">autoMemoryReclaim</span>=gradual</span><br><span class="line"><span class="comment"># 支持主机回环地址访问</span></span><br><span class="line"><span class="attr">hostAddressLoopback</span>=<span class="literal">true</span></span><br></pre></td></tr></table></figure><p>各项配置的含义如下：</p><ul><li><code>networkingMode=mirrored</code>：启用镜像网络模式，这是整份配置中最关键的一行</li><li><code>dnsTunneling=true</code>：通过 DNS 隧道技术解决 VPN 环境下的域名解析问题</li><li><code>autoProxy=true</code>：让 WSL 自动继承 Windows 系统的 HTTP 代理设置</li><li><code>firewall=true</code>：启用 Windows 防火墙对 WSL 流量的集成管理</li><li><code>autoMemoryReclaim=gradual</code>：实验性功能，允许系统逐步回收 WSL 占用的闲置内存</li><li><code>hostAddressLoopback=true</code>：实验性功能，支持通过主机回环地址访问 WSL 服务</li></ul><p><strong>第四步</strong>：保存文件后，在 Windows 终端中执行以下命令以应用配置：</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wsl <span class="literal">--shutdown</span></span><br></pre></td></tr></table></figure><p><strong>第五步</strong>：等待大约 8 秒，确保虚拟机彻底关闭，然后重新启动 WSL。</p><h3 id="验证配置是否生效"><a href="#验证配置是否生效" class="headerlink" title="验证配置是否生效"></a>验证配置是否生效</h3><p>进入 WSL 后，执行以下命令来验证网络模式是否已经切换为镜像模式：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看网络接口信息</span></span><br><span class="line">ip addr show</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看路由表</span></span><br><span class="line">ip route show</span><br><span class="line"></span><br><span class="line"><span class="comment"># 测试与局域网网关的连通性</span></span><br><span class="line">ping 192.168.1.1</span><br></pre></td></tr></table></figure><p>如果配置成功，<code>ip addr show</code> 的输出中应该能看到 WSL 与 Windows 使用了相同的局域网 IP 地址段。</p><h2 id="防火墙配置"><a href="#防火墙配置" class="headerlink" title="防火墙配置"></a>防火墙配置</h2><p>切换到镜像模式后，WSL 中的应用会直接暴露在 Windows 防火墙规则之下。如果需要在局域网内访问 WSL 中运行的服务（例如端口 <code>18789</code>），就需要为对应的端口添加防火墙放行规则。</p><h3 id="标准防火墙命令（推荐）"><a href="#标准防火墙命令（推荐）" class="headerlink" title="标准防火墙命令（推荐）"></a>标准防火墙命令（推荐）</h3><p>对于镜像模式，最简单的方式是使用标准的 Windows 防火墙命令。以管理员身份打开 PowerShell，执行以下命令：</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 创建入站规则，允许指定端口的 TCP 流量</span></span><br><span class="line"><span class="built_in">New-NetFirewallRule</span> <span class="literal">-DisplayName</span> <span class="string">&quot;OpenClaw-Service&quot;</span> <span class="literal">-Direction</span> Inbound <span class="literal">-Action</span> Allow <span class="literal">-Protocol</span> TCP <span class="literal">-LocalPort</span> <span class="number">18789</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 验证规则是否创建成功</span></span><br><span class="line"><span class="built_in">Get-NetFirewallRule</span> <span class="literal">-DisplayName</span> <span class="string">&quot;OpenClaw-Service&quot;</span> | <span class="built_in">Format-Table</span></span><br></pre></td></tr></table></figure><p>如果需要删除已经创建的规则：</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">Remove-NetFirewallRule</span> <span class="literal">-DisplayName</span> <span class="string">&quot;OpenClaw-Service&quot;</span></span><br></pre></td></tr></table></figure><h3 id="Hyper-V-防火墙命令"><a href="#Hyper-V-防火墙命令" class="headerlink" title="Hyper-V 防火墙命令"></a>Hyper-V 防火墙命令</h3><p>如果需要更细粒度地管理 WSL 2 的网络流量，可以使用 Hyper-V 防火墙命令。不过在此之前，需要先获取当前系统的 VMCreatorId：</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看当前系统所有已注册的 VM 创建者</span></span><br><span class="line"><span class="built_in">Get-NetFirewallHyperVVMCreator</span></span><br></pre></td></tr></table></figure><p>需要注意的是，输出中的 GUID（例如 <code>{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}</code>）因系统而异，不能直接照搬网上的示例。获取到正确的 VMCreatorId 后，可以执行：</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 配置默认入站策略</span></span><br><span class="line"><span class="built_in">Get-NetFirewallHyperVVMCreator</span> | <span class="built_in">ForEach-Object</span> &#123;</span><br><span class="line">    <span class="built_in">Set-NetFirewallHyperVVMSetting</span> <span class="literal">-Name</span> <span class="variable">$_</span>.Name <span class="literal">-DefaultInboundAction</span> Allow</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment"># 创建细粒度的端口规则</span></span><br><span class="line"><span class="built_in">New-NetFirewallHyperVRule</span> <span class="literal">-DisplayName</span> <span class="string">&quot;OpenClaw-Service&quot;</span> <span class="literal">-Direction</span> Inbound <span class="literal">-Action</span> Allow <span class="literal">-Protocol</span> TCP <span class="literal">-LocalPorts</span> <span class="number">18789</span></span><br></pre></td></tr></table></figure><h3 id="验证端口连通性"><a href="#验证端口连通性" class="headerlink" title="验证端口连通性"></a>验证端口连通性</h3><p>无论使用哪种方法配置防火墙，都可以通过以下命令验证端口是否已经正常开放：</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 使用 Test-NetConnection 测试端口</span></span><br><span class="line"><span class="built_in">Test-NetConnection</span> <span class="literal">-ComputerName</span> localhost <span class="literal">-Port</span> <span class="number">18789</span></span><br></pre></td></tr></table></figure><p>如果 <code>TcpTestSucceeded</code> 返回 <code>True</code>，说明端口已经可以正常访问。</p><h2 id="小结"><a href="#小结" class="headerlink" title="小结"></a>小结</h2><p>镜像网络模式几乎在所有方面都优于默认的 NAT 模式。配置过程也很简单，只需要编辑一个 <code>.wslconfig</code> 文件，然后重启 WSL 即可生效。切换后如果需要在局域网内访问 WSL 中的服务，再配合 Windows 防火墙添加对应的端口放行规则就可以了。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;hr&gt;
&lt;p&gt;在使用 WSL 2 的过程中，网络问题往往是最让人头疼的部分。无论是局域网内的其他设备想要访问 WSL 中运行的服务，还是在 VPN 环境下遇到了 DNS 解析失败，这些问题都可以通过切换到镜像网络模式来解决。&lt;/p&gt;
&lt;h2 id=&quot;什么是镜像模式&quot;&gt;&lt;a hr</summary>
      
    
    
    
    <category term="开发工具" scheme="https://mingsage.top/categories/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7/"/>
    
    <category term="玩转Windows" scheme="https://mingsage.top/categories/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7/%E7%8E%A9%E8%BD%ACWindows/"/>
    
    <category term="WSL2" scheme="https://mingsage.top/categories/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7/%E7%8E%A9%E8%BD%ACWindows/WSL2/"/>
    
    
  </entry>
  
  <entry>
    <title>解决 Codex 五次重连问题：配置代理环境变量</title>
    <link href="https://mingsage.top/2026/05/26/2026-05-27-%E8%A7%A3%E5%86%B3%20Codex%20%E4%BA%94%E6%AC%A1%E9%87%8D%E8%BF%9E%E9%97%AE%E9%A2%98%EF%BC%9A%E9%85%8D%E7%BD%AE%E4%BB%A3%E7%90%86%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F/"/>
    <id>https://mingsage.top/2026/05/26/2026-05-27-%E8%A7%A3%E5%86%B3%20Codex%20%E4%BA%94%E6%AC%A1%E9%87%8D%E8%BF%9E%E9%97%AE%E9%A2%98%EF%BC%9A%E9%85%8D%E7%BD%AE%E4%BB%A3%E7%90%86%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F/</id>
    <published>2026-05-26T16:00:00.000Z</published>
    <updated>2026-06-06T05:48:28.030Z</updated>
    
    <content type="html"><![CDATA[<p>在 Windows 环境使用 Codex 时，如果网络没有正确走代理，最直观的现象就是请求一直失败，终端里反复出现重连提示，直到触发五次重连后放弃。</p><p>这通常不是 Codex 本身的问题，而是 Codex 进程没有拿到可用的代理环境变量。解决方法是新建 <code>~/.codex/.env</code>，把本地代理写进去。</p><h2 id="问题现象"><a href="#问题现象" class="headerlink" title="问题现象"></a>问题现象</h2><ul><li>Codex 请求模型时长时间无响应</li><li>终端反复提示重试或重新连接</li><li>五次重连后仍然失败</li><li>浏览器能联网，但 Codex 不能稳定连接</li></ul><p>如果本机代理客户端已经打开，而 Codex 仍然五次重连，大概率就是代理变量没有生效。</p><h2 id="解决方法"><a href="#解决方法" class="headerlink" title="解决方法"></a>解决方法</h2><p>在 <code>~/.codex/.env</code> 写入：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">https_proxy=&quot;http://127.0.0.1:7890&quot;</span><br><span class="line">http_proxy=&quot;http://127.0.0.1:7890&quot;</span><br><span class="line">all_proxy=&quot;socks5://127.0.0.1:7890&quot;</span><br></pre></td></tr></table></figure><p>Windows PowerShell 可以直接执行：</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">New-Item</span> <span class="literal">-ItemType</span> Directory <span class="literal">-Force</span> <span class="string">&quot;<span class="variable">$HOME</span>\.codex&quot;</span></span><br><span class="line"><span class="string">@&#x27;</span></span><br><span class="line"><span class="string">https_proxy=&quot;http://127.0.0.1:7890&quot;</span></span><br><span class="line"><span class="string">http_proxy=&quot;http://127.0.0.1:7890&quot;</span></span><br><span class="line"><span class="string">all_proxy=&quot;socks5://127.0.0.1:7890&quot;</span></span><br><span class="line"><span class="string">&#x27;@</span> | <span class="built_in">Set-Content</span> <span class="literal">-Encoding</span> utf8 <span class="string">&quot;<span class="variable">$HOME</span>\.codex\.env&quot;</span></span><br></pre></td></tr></table></figure><p>写完后重启 Codex。<code>.env</code> 一般只在进程启动时读取，已经运行的 Codex 不会自动感知新配置。</p><h2 id="仍然重连怎么办"><a href="#仍然重连怎么办" class="headerlink" title="仍然重连怎么办"></a>仍然重连怎么办</h2><ul><li>代理客户端是否已经启动</li><li>端口是否真的是 <code>7890</code></li><li>代理客户端是否允许本机程序访问</li><li>Codex 是否已经完全退出并重新打开</li></ul><p>也可以临时测试代理是否可用：</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="variable">$env:https_proxy</span> = <span class="string">&quot;http://127.0.0.1:7890&quot;</span></span><br><span class="line"><span class="built_in">curl</span> https://api.openai.com</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;在 Windows 环境使用 Codex 时，如果网络没有正确走代理，最直观的现象就是请求一直失败，终端里反复出现重连提示，直到触发五次重连后放弃。&lt;/p&gt;
&lt;p&gt;这通常不是 Codex 本身的问题，而是 Codex 进程没有拿到可用的代理环境变量。解决方法是新建 &lt;cod</summary>
      
    
    
    
    <category term="开发工具" scheme="https://mingsage.top/categories/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7/"/>
    
    <category term="玩转Codex" scheme="https://mingsage.top/categories/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7/%E7%8E%A9%E8%BD%ACCodex/"/>
    
    
  </entry>
  
  <entry>
    <title>PowerShell通过 $PROFILE 函数式设置代理</title>
    <link href="https://mingsage.top/2026/05/23/2026-05-24-PowerShell%E9%80%9A%E8%BF%87%20$PROFILE%20%E5%87%BD%E6%95%B0%E5%BC%8F%E8%AE%BE%E7%BD%AE%E4%BB%A3%E7%90%86/"/>
    <id>https://mingsage.top/2026/05/23/2026-05-24-PowerShell%E9%80%9A%E8%BF%87%20$PROFILE%20%E5%87%BD%E6%95%B0%E5%BC%8F%E8%AE%BE%E7%BD%AE%E4%BB%A3%E7%90%86/</id>
    <published>2026-05-23T16:00:00.000Z</published>
    <updated>2026-06-06T05:48:28.030Z</updated>
    
    <content type="html"><![CDATA[<p>在 Windows 开发环境里，经常会遇到一些命令行工具需要走代理的情况，比如 <code>git</code>、<code>npm</code>、<code>scoop</code>、<code>curl</code> 等。如果每次都手动输入环境变量，既麻烦又容易忘。</p><p>PowerShell 的 PROFILE 可以理解为启动配置文件，对应的内置变量是 <code>$PROFILE</code>。每次打开 PowerShell 时，它都会自动加载这个文件里的内容。因此，可以把常用函数写进 <code>$PROFILE</code>，以后只需要输入一个简单命令，就能快速开启、关闭或查看代理状态。</p><h2 id="查看-PROFILE-路径"><a href="#查看-PROFILE-路径" class="headerlink" title="查看 PROFILE 路径"></a>查看 PROFILE 路径</h2><p>在 PowerShell 中执行：</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="variable">$PROFILE</span></span><br></pre></td></tr></table></figure><p>如果只是想确认文件是否已经存在，可以执行：</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">Test-Path</span> <span class="variable">$PROFILE</span></span><br></pre></td></tr></table></figure><p>如果返回 <code>False</code>，说明当前还没有创建配置文件。</p><h2 id="创建-PROFILE-文件"><a href="#创建-PROFILE-文件" class="headerlink" title="创建 PROFILE 文件"></a>创建 PROFILE 文件</h2><p>可以使用下面的命令创建：</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">New-Item</span> <span class="literal">-Path</span> <span class="variable">$PROFILE</span> <span class="literal">-Type</span> File <span class="literal">-Force</span></span><br></pre></td></tr></table></figure><p>然后用编辑器打开它：</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">notepad <span class="variable">$PROFILE</span></span><br></pre></td></tr></table></figure><p>如果你使用 VS Code，也可以：</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">code <span class="variable">$PROFILE</span></span><br></pre></td></tr></table></figure><h2 id="添加代理函数"><a href="#添加代理函数" class="headerlink" title="添加代理函数"></a>添加代理函数</h2><p>把下面这段内容放进 <code>$PROFILE</code> 文件中：</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">proxy</span></span> &#123;</span><br><span class="line">    <span class="variable">$env:http_proxy</span> = <span class="string">&quot;http://127.0.0.1:7890&quot;</span></span><br><span class="line">    <span class="variable">$env:https_proxy</span> = <span class="string">&quot;http://127.0.0.1:7890&quot;</span></span><br><span class="line">    [<span class="type">System.Net.WebRequest</span>]::DefaultWebProxy = <span class="built_in">New-Object</span> System.Net.WebProxy(<span class="string">&quot;http://127.0.0.1:7890&quot;</span>)</span><br><span class="line">    <span class="built_in">Write-Host</span> <span class="string">&quot;Proxy enabled: http://127.0.0.1:7890&quot;</span> <span class="literal">-ForegroundColor</span> Green</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">unproxy</span></span> &#123;</span><br><span class="line">    <span class="variable">$env:http_proxy</span> = <span class="variable">$null</span></span><br><span class="line">    <span class="variable">$env:https_proxy</span> = <span class="variable">$null</span></span><br><span class="line">    [<span class="type">System.Net.WebRequest</span>]::DefaultWebProxy = <span class="variable">$null</span></span><br><span class="line">    <span class="built_in">Write-Host</span> <span class="string">&quot;Proxy disabled&quot;</span> <span class="literal">-ForegroundColor</span> Yellow</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">check-proxy</span></span> &#123;</span><br><span class="line">    <span class="keyword">if</span> (<span class="variable">$env:http_proxy</span> <span class="operator">-or</span> <span class="variable">$env:https_proxy</span>) &#123;</span><br><span class="line">        <span class="built_in">Write-Host</span> <span class="string">&quot;Current proxy settings:&quot;</span> <span class="literal">-ForegroundColor</span> Cyan</span><br><span class="line">        <span class="built_in">Write-Host</span> <span class="string">&quot;HTTP Proxy: <span class="variable">$env:http_proxy</span>&quot;</span></span><br><span class="line">        <span class="built_in">Write-Host</span> <span class="string">&quot;HTTPS Proxy: <span class="variable">$env:https_proxy</span>&quot;</span></span><br><span class="line">    &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">        <span class="built_in">Write-Host</span> <span class="string">&quot;No proxy is currently set.&quot;</span> <span class="literal">-ForegroundColor</span> Cyan</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>这段配置提供了三个函数：</p><ul><li><code>proxy</code>：开启当前 PowerShell 会话的 HTTP&#x2F;HTTPS 代理。</li><li><code>unproxy</code>：关闭当前 PowerShell 会话的代理。</li><li><code>check-proxy</code>：查看当前代理环境变量是否已经设置。</li></ul><p>这里的代理地址是：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">http://127.0.0.1:7890</span><br></pre></td></tr></table></figure><p>如果你的代理软件端口不是 <code>7890</code>，需要把代码里的端口改成自己的实际端口。</p><h2 id="重新加载配置"><a href="#重新加载配置" class="headerlink" title="重新加载配置"></a>重新加载配置</h2><p>保存 <code>$PROFILE</code> 文件后，可以关闭 PowerShell 再重新打开，也可以直接执行：</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">. <span class="variable">$PROFILE</span></span><br></pre></td></tr></table></figure><p>注意前面有一个点和空格，表示重新加载当前配置文件。</p><h2 id="使用方法"><a href="#使用方法" class="headerlink" title="使用方法"></a>使用方法</h2><p>开启代理：</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">proxy</span><br></pre></td></tr></table></figure><p>查看代理状态：</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">check<span class="literal">-proxy</span></span><br></pre></td></tr></table></figure><p>关闭代理：</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">unproxy</span><br></pre></td></tr></table></figure><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><p>如果执行脚本时提示权限不足，可能是 PowerShell 执行策略限制。可以先查看当前策略：</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">Get-ExecutionPolicy</span></span><br></pre></td></tr></table></figure><p>如果需要允许当前用户运行本地脚本，可以执行：</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">Set-ExecutionPolicy</span> RemoteSigned <span class="literal">-Scope</span> CurrentUser</span><br></pre></td></tr></table></figure><p>一般来说，设置到 <code>CurrentUser</code> 就足够了，不需要修改整个系统的策略。</p><h2 id="小结"><a href="#小结" class="headerlink" title="小结"></a>小结</h2><p>把代理配置写进 PowerShell <code>$PROFILE</code> 后，日常使用会轻松很多。需要代理时输入 <code>proxy</code>，不用时输入 <code>unproxy</code>，再用 <code>check-proxy</code> 检查状态，整个流程会比反复手动设置环境变量清爽得多。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;在 Windows 开发环境里，经常会遇到一些命令行工具需要走代理的情况，比如 &lt;code&gt;git&lt;/code&gt;、&lt;code&gt;npm&lt;/code&gt;、&lt;code&gt;scoop&lt;/code&gt;、&lt;code&gt;curl&lt;/code&gt; 等。如果每次都手动输入环境变量，既麻烦又容易忘。&lt;/</summary>
      
    
    
    
    <category term="开发工具" scheme="https://mingsage.top/categories/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7/"/>
    
    <category term="玩转Windows" scheme="https://mingsage.top/categories/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7/%E7%8E%A9%E8%BD%ACWindows/"/>
    
    
  </entry>
  
  <entry>
    <title>少折腾，生命苦短</title>
    <link href="https://mingsage.top/2026/05/23/2026-05-24-%E5%B0%91%E6%8A%98%E8%85%BE%EF%BC%8C%E7%94%9F%E5%91%BD%E8%8B%A6%E7%9F%AD/"/>
    <id>https://mingsage.top/2026/05/23/2026-05-24-%E5%B0%91%E6%8A%98%E8%85%BE%EF%BC%8C%E7%94%9F%E5%91%BD%E8%8B%A6%E7%9F%AD/</id>
    <published>2026-05-23T16:00:00.000Z</published>
    <updated>2026-06-06T05:48:28.030Z</updated>
    
    <content type="html"><![CDATA[<p>今天我删掉了一些不必要的仓库和博客系统。</p><p>这件事看起来很小，但对我来说是一次提醒：我总是容易把“搭建系统”误认为“开始创作”。换框架、换主题、改部署、研究插件，这些事情都有一种很强的欺骗性。它们让人感觉自己在前进，但最后真正留下来的内容可能是零。</p><p>所以我想返璞归真。</p><p>博客最重要的不是系统，不是主题，不是技术栈，而是内容。如果没有持续写下来的东西，再漂亮的域名和页面也只是空壳。</p><p>技术也会给人一种错觉：凡事都应该自己 code 出来。能自己写，就不该用现成的；能折腾，就不该花钱。</p><p>但这其实不总是理性。</p><p>自己的时间也是有价值的。很多时候，花一点钱，用一个成熟方案，反而是在节省更稀缺的东西：注意力、精力和连续性。</p><p>DIY 很适合学习，但不一定适合所有目标。如果目标是写作，那就应该把时间花在写作上。如果目标是表达，那就应该减少表达之前的阻碍。</p><p>我不想再让博客变成一个永远施工的项目。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;今天我删掉了一些不必要的仓库和博客系统。&lt;/p&gt;
&lt;p&gt;这件事看起来很小，但对我来说是一次提醒：我总是容易把“搭建系统”误认为“开始创作”。换框架、换主题、改部署、研究插件，这些事情都有一种很强的欺骗性。它们让人感觉自己在前进，但最后真正留下来的内容可能是零。&lt;/p&gt;
&lt;p</summary>
      
    
    
    
    <category term="随想录" scheme="https://mingsage.top/categories/%E9%9A%8F%E6%83%B3%E5%BD%95/"/>
    
    
  </entry>
  
  <entry>
    <title>知识越触手可及，知识越触不可及</title>
    <link href="https://mingsage.top/2026/05/19/2026-05-20-%E7%9F%A5%E8%AF%86%E8%B6%8A%E8%A7%A6%E6%89%8B%E5%8F%AF%E5%8F%8A%EF%BC%8C%E7%9F%A5%E8%AF%86%E8%B6%8A%E8%A7%A6%E4%B8%8D%E5%8F%AF%E5%8F%8A/"/>
    <id>https://mingsage.top/2026/05/19/2026-05-20-%E7%9F%A5%E8%AF%86%E8%B6%8A%E8%A7%A6%E6%89%8B%E5%8F%AF%E5%8F%8A%EF%BC%8C%E7%9F%A5%E8%AF%86%E8%B6%8A%E8%A7%A6%E4%B8%8D%E5%8F%AF%E5%8F%8A/</id>
    <published>2026-05-19T16:00:00.000Z</published>
    <updated>2026-06-06T05:48:28.030Z</updated>
    
    <content type="html"><![CDATA[<p>最近在听《杜素娟的会客厅》播客时，了解到刘军强老师的《写作是门手艺》。这本书让我重新想起之前反复冒出来的一个判断：</p><blockquote><p>知识越触手可及，知识越触不可及。</p></blockquote><p>这句话听起来有点矛盾，但它恰好解释了互联网和 AI 时代的学习困境。</p><h2 id="知识变近了"><a href="#知识变近了" class="headerlink" title="知识变近了"></a>知识变近了</h2><p>过去获取知识是一件有门槛的事。</p><p>你需要找到书，找到老师，找到资料，甚至要去特定的图书馆、课堂、学校，才能接触到某些知识。</p><p>但现在不一样了。</p><p>互联网让资料变得容易搜索，公开课让课程变得容易旁听，AI 又进一步降低了提问、翻译、总结和解释的成本。很多过去需要绕很远才能碰到的知识，现在几乎可以被直接摆到眼前。</p><p>从这个意义上说，互联网和 AI 的发展，本质上是让知识变得更触手可及了。</p><p>这当然是好事。</p><p>但问题也从这里开始。</p><h2 id="学习变难了"><a href="#学习变难了" class="headerlink" title="学习变难了"></a>学习变难了</h2><p>知识容易获取，不等于知识容易掌握。</p><p>甚至在某种意义上，知识越容易获取，真正的学习反而越难发生。</p><p>因为知识如果只是躺在那里，它就只是信息。你收藏了一篇文章，关注了一个博主，保存了一份书单，问 AI 要了一段总结，这些都不等于你真的学会了什么。</p><p>真正的学习需要主动进入。</p><p>它需要你停下来读，需要你把概念放进自己的经验里理解，需要你写下来、讲出来、用起来，也需要你在不懂的时候继续追问。</p><p>而这些动作都很慢。</p><p>它们不符合信息流的节奏，也不符合即时反馈的快感。越是在知识大爆炸的时代，人越容易停留在“我知道有这么个东西”的层面，却很少真正走到“我理解了它，并且能使用它”的层面。</p><p>所以，学习的难点已经不只是“找不到知识”，而是“如何让知识真正进入自己”。</p><h2 id="隐性知识不会被下载"><a href="#隐性知识不会被下载" class="headerlink" title="隐性知识不会被下载"></a>隐性知识不会被下载</h2><p>有一个容易被忽略的区别：显性知识和隐性知识。</p><p>显性知识是可以被写出来、讲出来、搜索到的东西。比如一个概念的定义，一套方法的步骤，一本书的摘要，一段代码的解释。这些东西很适合被互联网传播，也很适合被 AI 整理。</p><p>但真正影响一个人能力的，往往还有大量隐性知识。</p><p>比如如何判断一个观点有没有问题，如何在复杂材料里抓住重点，如何写出有力量的表达，如何在具体场景里做取舍，如何知道一个答案“看起来对但其实不够好”。这些东西很难被完整写进教程里，也很难通过一次搜索直接获得。</p><p>隐性知识不是被下载的，而是在实践中长出来的。</p><p>它来自反复阅读后的语感，来自写作时暴露出来的逻辑漏洞，来自做项目时踩过的坑，来自和别人讨论时被挑战、被修正的瞬间。</p><p>所以，AI 可以让显性知识更容易抵达我们，但它并不会自动把隐性知识长到我们身上。真正的学习，恰恰是在显性知识之外，继续通过实践、表达和反思，把那些说不清但用得上的东西慢慢练出来。</p><p>这也是为什么我越来越警惕两种状态：一种是收藏癖，一种是 AI 发烧友。</p><p>收藏癖不断保存资料，却很少真正消化；AI 发烧友不断追逐新工具，却不一定把问题想得更深。它们都会制造一种“我在学习”的感觉，但如果没有阅读、思考、实践和输出，最后留下的只是更多链接、更多工具、更多未完成的待办。</p><p>一个收藏癖和 AI 发烧友，是不会自动具备这些能力的。</p><h2 id="珍惜触发你学习的点"><a href="#珍惜触发你学习的点" class="headerlink" title="珍惜触发你学习的点"></a>珍惜触发你学习的点</h2><p>这也是为什么我觉得要珍惜那些触发你学习的点。</p><p>一本书，一期播客，一句话，一个问题，一次聊天，一个项目里卡住的 bug，都可能成为学习的入口。</p><p>这些入口很重要。</p><p>因为主动学习往往不是从一个宏大的计划开始的，而是从某个具体的触动开始的。你突然意识到一个概念有意思，突然发现一个问题解释不通，突然觉得某句话击中了自己，于是你愿意多查一点、多想一点、多写一点。</p><p>这时候，知识才不是外部世界里冷冰冰的材料，而是变成了和你有关的东西。</p><p>学习真正开始的地方，通常不是资料最完整的地方，而是你好奇心被点燃的地方。</p><h2 id="写作是主动学习"><a href="#写作是主动学习" class="headerlink" title="写作是主动学习"></a>写作是主动学习</h2><p>《写作是门手艺》这本书给我的另一个提醒是：写作不是学习之后的展示，而是学习本身的一部分。</p><p>很多时候，我们以为自己懂了，是因为脑子里有一些模糊的感觉。但只要一写下来，就会发现逻辑哪里断了，概念哪里虚了，例子哪里撑不住。</p><p>写作会迫使人把散乱的想法排成顺序。</p><p>它要求你给观点找理由，给理由找证据，给证据找到合适的位置。这个过程不是简单地输出，而是在重新组织自己的大脑。</p><p>所以在 AI 时代，写作的价值没有下降，反而变得更重要。</p><p>AI 可以帮我们更快地获得材料、解释概念、整理信息，但它不能替我们完成主动理解。真正决定一个人是否学到了东西的，仍然是他有没有把知识放进自己的思考结构里。</p><p>写作就是这样一种结构化思考的训练。</p><h2 id="雕刻大脑"><a href="#雕刻大脑" class="headerlink" title="雕刻大脑"></a>雕刻大脑</h2><p>刘军强老师在播客里有一句话我很喜欢：</p><blockquote><p>「你在健身房里撸铁，是在雕刻你的肌肉。而在 AI 时代，雕刻大脑最好的方式，就是写作和思考。」</p></blockquote><p>这句话很准确。</p><p>AI 时代不缺知识，不缺答案，不缺资料。真正稀缺的是主动学习的能力，是把信息变成理解、把理解变成表达、把表达变成行动的能力。</p><p>知识越触手可及，越不能只是伸手拿一下就算了。</p><p>要读，要想，要写，要用。</p><p>只有这样，知识才不会只是躺在互联网和 AI 的回答里，而是真的长进自己的身体里。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;最近在听《杜素娟的会客厅》播客时，了解到刘军强老师的《写作是门手艺》。这本书让我重新想起之前反复冒出来的一个判断：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;知识越触手可及，知识越触不可及。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这句话听起来有点矛盾，但它恰好解释了互联网</summary>
      
    
    
    
    <category term="随想录" scheme="https://mingsage.top/categories/%E9%9A%8F%E6%83%B3%E5%BD%95/"/>
    
    
  </entry>
  
  <entry>
    <title>铡刀</title>
    <link href="https://mingsage.top/2025/12/19/2025-12-20-%E9%93%A1%E5%88%80/"/>
    <id>https://mingsage.top/2025/12/19/2025-12-20-%E9%93%A1%E5%88%80/</id>
    <published>2025-12-19T16:00:00.000Z</published>
    <updated>2026-06-06T05:48:28.030Z</updated>
    
    <content type="html"><![CDATA[<p>​他路过一棵挺拔的树<br>第一反应不是赞美它的高度<br>却俯身寻找根部的虫蛀</p><p>仿佛只要找到缺陷<br>他便获得了与卓越平坐的豁免权</p><p>为了不让世界显得过于高耸<br>他总携一把隐形的铡刀<br>——用嫉妒校准，流言开刃<br>在暗处挥舞，专削高过额头的枝条</p><p>​于是，在他的臆想里，森林消失了<br>只剩下满地整齐划一的荒芜</p><blockquote><p>他用的不是园丁的修枝剪，是暴民的铡刀。<br>诗不是物理实验报告。诗要的是意象的准确，不是工具使用的可行性。</p></blockquote>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;​他路过一棵挺拔的树&lt;br&gt;第一反应不是赞美它的高度&lt;br&gt;却俯身寻找根部的虫蛀&lt;/p&gt;
&lt;p&gt;仿佛只要找到缺陷&lt;br&gt;他便获得了与卓越平坐的豁免权&lt;/p&gt;
&lt;p&gt;为了不让世界显得过于高耸&lt;br&gt;他总携一把隐形的铡刀&lt;br&gt;——用嫉妒校准，流言开刃&lt;br&gt;在暗处挥舞，专削高</summary>
      
    
    
    
    <category term="随想录" scheme="https://mingsage.top/categories/%E9%9A%8F%E6%83%B3%E5%BD%95/"/>
    
    
  </entry>
  
  <entry>
    <title>草木无情，看观者之心</title>
    <link href="https://mingsage.top/2025/12/02/2025-12-03-%E8%8D%89%E6%9C%A8%E6%97%A0%E6%83%85%EF%BC%8C%E7%9C%8B%E8%A7%82%E8%80%85%E4%B9%8B%E5%BF%83/"/>
    <id>https://mingsage.top/2025/12/02/2025-12-03-%E8%8D%89%E6%9C%A8%E6%97%A0%E6%83%85%EF%BC%8C%E7%9C%8B%E8%A7%82%E8%80%85%E4%B9%8B%E5%BF%83/</id>
    <published>2025-12-02T16:00:00.000Z</published>
    <updated>2026-06-06T05:48:28.030Z</updated>
    
    <content type="html"><![CDATA[<p>初入武大时，曾参演一部名为《璎珞》的情景剧。剧目聚焦抗战时期，讲述汤商皓校长坚守珞珈、护校抗日的往事。演出那日，台上台下共情共振，掌声与欢呼漫过樱顶的月光，成为青春里一段温热的记忆。然终因剧中出现樱花与日本兵的意象，这部广受师生喜爱的作品，最终被悄然雪藏。想来，百年学府的敏感，亦藏着对历史重量的审慎。</p><p>樱花于武大，究竟是怎样的存在？网上常有尖锐声讨，斥其为”汉奸之花”；可每至三月樱飞，樱顶石阶仍挤满赏春之人，粉白花瓣簌簌落下，映着络绎不绝的身影。这看似矛盾的景象，恰是历史留给今人的叩问。</p><p>关于樱花的源流，史料已有定论：武大现存樱花，多半是日军侵占珞珈山时所植，所谓周总理捐赠的品种，如今已寥寥无几。抗战胜利后，武大人回迁校园，面对这些沾染着侵略印记的草木，争议随之而来。有人主张尽数伐去，以泄国耻之愤，这份慷慨激昂，实属人之常情；却也有老教授力排众议，坚持留存——他们说，刀斧斩去的是草木，斩不去的是记忆；唯有让这些樱花年年绽放，方能时时警醒后人：勿忘山河破碎之痛，铭记家国蒙难之耻。</p><p>焚毁或砍伐，是痛快淋漓的决绝；而选择留存，更需穿越历史迷雾的勇气与胸襟。草木本无灵，既承载不了侵略的罪孽，也代表不了所谓的”亲善”，其意义终究由人赋予。</p><p>如今每到樱花季，粉雪漫枝的景致，既为师生与游人铺就了诗意画卷，也为珞珈山刻下了不可磨灭的历史注脚。当春风拂过樱枝，花瓣轻颤间，是”自强弘毅”的校训在回响：赏的是繁花，记的是国殇，励的是来人。那些曾因樱花意象而雪藏的《璎珞》故事，那些关于留存与砍伐的争议，终究都化作了对历史的敬畏——唯有正视过往，方能从容前行；唯有铭记耻辱，方能守护荣光。</p><p>樱花不语，珞珈有声。这漫山粉白，既是风景，亦是教材，在岁岁枯荣中，诉说着一座学府的风骨与一个民族的记忆。</p><p>草木无情，看观者之心。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;初入武大时，曾参演一部名为《璎珞》的情景剧。剧目聚焦抗战时期，讲述汤商皓校长坚守珞珈、护校抗日的往事。演出那日，台上台下共情共振，掌声与欢呼漫过樱顶的月光，成为青春里一段温热的记忆。然终因剧中出现樱花与日本兵的意象，这部广受师生喜爱的作品，最终被悄然雪藏。想来，百年学府的敏</summary>
      
    
    
    
    <category term="随想录" scheme="https://mingsage.top/categories/%E9%9A%8F%E6%83%B3%E5%BD%95/"/>
    
    
  </entry>
  
  <entry>
    <title>关于学术诚信-Academic Integrity</title>
    <link href="https://mingsage.top/2025/11/04/2025-11-05-%E5%85%B3%E4%BA%8E%E5%AD%A6%E6%9C%AF%E8%AF%9A%E4%BF%A1-Academic%20Integrity/"/>
    <id>https://mingsage.top/2025/11/04/2025-11-05-%E5%85%B3%E4%BA%8E%E5%AD%A6%E6%9C%AF%E8%AF%9A%E4%BF%A1-Academic%20Integrity/</id>
    <published>2025-11-04T16:00:00.000Z</published>
    <updated>2026-06-06T05:48:28.026Z</updated>
    
    <content type="html"><![CDATA[<p>今晚观看《<strong>深入理解计算机系统</strong>》（也就是大名鼎鼎的 CSAPP）网课时，第一节课就着重强调了 Academic Integrity，即学术诚信。</p><p>这让我有些触动。</p><p>学术诚信并不只是“不要抄袭”这么简单。它更像是一条底线：承认自己的能力边界，尊重他人的劳动成果，也尊重学习本身。一个人可以暂时学得慢，可以暂时做得不够好，但如果把虚假的成果当作能力，把侥幸当作聪明，最终损耗的是自己的判断力和人格。</p><p>反观一些高校里的风气，很多时候最令人无奈的并不是规则不够清楚，而是大家对规则的轻慢：作业互相复制，实验报告东拼西凑，考试前后交换所谓“资料”。久而久之，诚实的人反而像是吃亏的人。</p><p>但我越来越觉得，他人是否选择捷径，并不应该成为自己放弃原则的理由。学术诚信首先是一种自我约束，也是一种长期主义。真正属于自己的东西，必须经过理解、思考和实践，别人拿不走，自己也骗不了。</p><p>一些箴言：</p><ul><li>你只能改变自己，做自己认为正确的事情。</li><li>远离烂人。</li><li>他人之得非己之失。</li><li>天生万物以养人，人无一物以报天。</li></ul>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;今晚观看《&lt;strong&gt;深入理解计算机系统&lt;/strong&gt;》（也就是大名鼎鼎的 CSAPP）网课时，第一节课就着重强调了 Academic Integrity，即学术诚信。&lt;/p&gt;
&lt;p&gt;这让我有些触动。&lt;/p&gt;
&lt;p&gt;学术诚信并不只是“不要抄袭”这么简单。它更像是一条</summary>
      
    
    
    
    <category term="随想录" scheme="https://mingsage.top/categories/%E9%9A%8F%E6%83%B3%E5%BD%95/"/>
    
    
  </entry>
  
  <entry>
    <title>Shellcode实践</title>
    <link href="https://mingsage.top/2025/10/28/2025-10-28-Shellcode%E5%AE%9E%E8%B7%B5/"/>
    <id>https://mingsage.top/2025/10/28/2025-10-28-Shellcode%E5%AE%9E%E8%B7%B5/</id>
    <published>2025-10-28T11:02:37.000Z</published>
    <updated>2026-06-06T05:48:28.026Z</updated>
    
    <content type="html"><![CDATA[<h2 id="Shellcode"><a href="#Shellcode" class="headerlink" title="Shellcode"></a>Shellcode</h2><blockquote><p>Shellcode泛指在exploited进程中执行的恶意代码。</p></blockquote><p>基本特征如下：</p><ol><li><p>位置无关代码：Shellcode必须能够在内存的任何位置正确执行，不依赖固定内存地址</p></li><li><p>不含空字节：空字节（\x00）通常会被认为是字符串终止符，导致代码截断</p></li><li><p>紧凑高效：通常需要在有限的空间内完成复杂功能</p></li><li><p>直接系统调用：绕过高级API，直接与操作系统内核交互</p></li></ol><h2 id="弹窗显示信息具体实现步骤"><a href="#弹窗显示信息具体实现步骤" class="headerlink" title="弹窗显示信息具体实现步骤"></a>弹窗显示信息具体实现步骤</h2><h3 id="安装-metasploit-框架并配置环境变量"><a href="#安装-metasploit-框架并配置环境变量" class="headerlink" title="安装 metasploit 框架并配置环境变量"></a>安装 metasploit 框架并配置环境变量</h3><h3 id="关闭Windows系统防护"><a href="#关闭Windows系统防护" class="headerlink" title="关闭Windows系统防护"></a>关闭Windows系统防护</h3><h3 id="利用metaspolit框架的payload生成工具msfvenom生成弹窗程序的shellcode"><a href="#利用metaspolit框架的payload生成工具msfvenom生成弹窗程序的shellcode" class="headerlink" title="利用metaspolit框架的payload生成工具msfvenom生成弹窗程序的shellcode"></a>利用metaspolit框架的payload生成工具msfvenom生成弹窗程序的shellcode</h3><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">msfvenom <span class="literal">-p</span> windows/x64/messagebox TEXT=<span class="string">&quot;Student ID: xxx Name: xxx&quot;</span> TITLE=<span class="string">&quot;Student Info&quot;</span> <span class="operator">-f</span> c <span class="literal">-b</span> <span class="string">&#x27;\x00&#x27;</span> <span class="literal">-a</span> x64</span><br></pre></td></tr></table></figure><h3 id="编写c语言程序执行shellcode"><a href="#编写c语言程序执行shellcode" class="headerlink" title="编写c语言程序执行shellcode"></a>编写c语言程序执行shellcode</h3><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;windows.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">unsigned</span> <span class="type">char</span> shellcode[] = &#123;&#125;; <span class="comment">//这里输入生成的shellcode</span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span> &#123;</span><br><span class="line">    LPVOID exec = VirtualAlloc(<span class="number">0</span>, <span class="keyword">sizeof</span>(shellcode), MEM_COMMIT, PAGE_EXECUTE_READWRITE);</span><br><span class="line">    <span class="built_in">memcpy</span>(exec, shellcode, <span class="keyword">sizeof</span>(shellcode));</span><br><span class="line">    ((<span class="type">void</span>(*)())exec)();</span><br><span class="line">    VirtualFree(exec, <span class="number">0</span>, MEM_RELEASE);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h3 id="运行后实现弹窗效果"><a href="#运行后实现弹窗效果" class="headerlink" title="运行后实现弹窗效果"></a>运行后实现弹窗效果</h3><h2 id="参考书籍"><a href="#参考书籍" class="headerlink" title="参考书籍"></a>参考书籍</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https://www.exploit-db.com/docs/english/13019-shell-code-for-beginners.pdf</span><br></pre></td></tr></table></figure><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https://wizardforcel.gitbooks.io/q-buffer-overflow-tutorial/content/index.html</span><br></pre></td></tr></table></figure><h2 id="实践收获"><a href="#实践收获" class="headerlink" title="实践收获"></a>实践收获</h2><h3 id="了解Shellcode概念及实现"><a href="#了解Shellcode概念及实现" class="headerlink" title="了解Shellcode概念及实现"></a>了解Shellcode概念及实现</h3><h3 id="了解并使用metasploit-框架"><a href="#了解并使用metasploit-框架" class="headerlink" title="了解并使用metasploit 框架"></a>了解并使用metasploit 框架</h3>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;Shellcode&quot;&gt;&lt;a href=&quot;#Shellcode&quot; class=&quot;headerlink&quot; title=&quot;Shellcode&quot;&gt;&lt;/a&gt;Shellcode&lt;/h2&gt;&lt;blockquote&gt;
&lt;p&gt;Shellcode泛指在exploited进程中执行的恶意</summary>
      
    
    
    
    <category term="技术实践" scheme="https://mingsage.top/categories/%E6%8A%80%E6%9C%AF%E5%AE%9E%E8%B7%B5/"/>
    
    
  </entry>
  
  <entry>
    <title>CCF-CSP 备考攻略</title>
    <link href="https://mingsage.top/2025/09/18/2025-09-19-CCF-CSP%20%E5%A4%87%E8%80%83%E6%94%BB%E7%95%A5/"/>
    <id>https://mingsage.top/2025/09/18/2025-09-19-CCF-CSP%20%E5%A4%87%E8%80%83%E6%94%BB%E7%95%A5/</id>
    <published>2025-09-18T16:00:00.000Z</published>
    <updated>2026-06-06T05:48:28.026Z</updated>
    
    <content type="html"><![CDATA[<h2 id="一、参考资料"><a href="#一、参考资料" class="headerlink" title="一、参考资料"></a>一、参考资料</h2><ol><li><a href="https://www.bilibilicom/video/BV1oK411W7st?vd_source=5ac3785fd0d6aca466cc724d9c504fb0">【程序媛营业】CSP从入门到放弃——CCF优秀大学生的CSP认证高分经验分享</a></li></ol><h2 id="二、CSP考察内容概述"><a href="#二、CSP考察内容概述" class="headerlink" title="二、CSP考察内容概述"></a>二、CSP考察内容概述</h2><h3 id="2-1-程序设计基础"><a href="#2-1-程序设计基础" class="headerlink" title="2.1 程序设计基础"></a>2.1 程序设计基础</h3><ul><li>逻辑与数学运算</li><li>分支循环</li><li>过程调用(递归)</li><li>字符串操作</li><li>文件操作等</li></ul><h3 id="2-2-数据结构"><a href="#2-2-数据结构" class="headerlink" title="2.2 数据结构"></a>2.2 数据结构</h3><ul><li>线性表（数组、队列、栈、链表）</li><li>树（堆、排序二叉树）</li><li>哈希表，集合</li><li>图</li></ul><h3 id="2-3-算法与算法设计策略"><a href="#2-3-算法与算法设计策略" class="headerlink" title="2.3 算法与算法设计策略"></a>2.3 算法与算法设计策略</h3><ul><li>排序与查找</li><li>枚举，贪心策略</li><li>分治策略</li><li>递推与递归</li><li>动态规划</li><li>搜索</li><li>图论算法</li><li>计算几何</li><li>字符串算法</li><li>随机算法，近似算法等</li></ul><h2 id="三、各题目特点与应对策略"><a href="#三、各题目特点与应对策略" class="headerlink" title="三、各题目特点与应对策略"></a>三、各题目特点与应对策略</h2><h3 id="3-1-难度概述"><a href="#3-1-难度概述" class="headerlink" title="3.1 难度概述"></a>3.1 难度概述</h3><p>难度呈幂次增长（第一题难度n，第二题难度n²，第三题难度n³……）</p><h3 id="3-2-第一题（基础题）"><a href="#3-2-第一题（基础题）" class="headerlink" title="3.2 第一题（基础题）"></a>3.2 第一题（基础题）</h3><ul><li>输入 输出 if-else 一层循环</li><li>20行代码左右</li><li>注意细节，容易丢10分<ul><li>long long 类型</li><li>边界条件</li><li>特殊情况</li></ul></li><li>会用文件读入很重要<ul><li>可以节省大量在终端敲入数据的时间  <figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="built_in">freopen</span>(<span class="string">&quot;in.txt&quot;</span>,<span class="string">&quot;r&quot;</span>,stdin);</span><br></pre></td></tr></table></figure></li></ul></li><li>宏定义简化for循环书写耗时  <figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">define</span> _for(i,a,b) for(int i = a;i &lt; b;i++)</span></span><br></pre></td></tr></table></figure></li><li>声明数组大小的时候最好用const定义的伪常量方便修改  <figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">const</span> <span class="type">int</span> N = <span class="number">1007</span>;</span><br><span class="line"><span class="type">int</span> Num[N], Sum[N];</span><br><span class="line"><span class="type">char</span> str[N];</span><br></pre></td></tr></table></figure></li><li>一般是数值方面的问题（一群整数）基本一个for循环可以解决的了，比较简单，学过C语言基本可以得分</li></ul><h3 id="3-3-第二题：小模拟（基础）"><a href="#3-3-第二题：小模拟（基础）" class="headerlink" title="3.3 第二题：小模拟（基础）"></a>3.3 第二题：小模拟（基础）</h3><ul><li>多重循环 接近n²复杂度</li><li>一般是时序题 通常要排序</li><li>简单的数学运算</li><li>对多元数组的熟练运用</li><li>学会STL可能会有奇效 <ul><li><a href="https://io.zouht.com/154.html">大佬的STL笔记</a></li></ul></li><li>最少得需要两个For循环，要说两个For循环也不难，难就难在一般是时序题、通常要排序，而且要用到多元数据</li><li>例如18年3月的第二题碰撞的小球，涉及到长度、个数、时间、速度等不同单位的数据</li></ul><h3 id="3-4-第三题：大模拟（进阶）"><a href="#3-4-第三题：大模拟（进阶）" class="headerlink" title="3.4 第三题：大模拟（进阶）"></a>3.4 第三题：大模拟（进阶）</h3><ul><li>熟练掌握各种输入函数和字符串处理</li><li>熟练掌握dfs bfs</li><li>会设计复杂的层次化结构</li><li>要相信题目本身不难，只是变态而已</li><li>文明考试，请勿砸显示器、摔键盘</li><li>一般会是字符串的处理，而且一般是对复杂文本的处理</li><li><strong>最好使用C++里边的String类做字符串处理</strong>，如果要自己用c语言写字符串处理函数，不仅不一定写对，而且还会相当麻烦，浪费时间</li></ul><h3 id="3-5-第四题"><a href="#3-5-第四题" class="headerlink" title="3.5 第四题"></a>3.5 第四题</h3><ul><li>一般会用到高等数据结构，比如树、图</li><li>需要用到的算法也不是课本上学到的简单算法，得用更高级一点的时间、空间效率更高一点的算法</li></ul><h3 id="3-6-第五题"><a href="#3-6-第五题" class="headerlink" title="3.6 第五题"></a>3.6 第五题</h3><ul><li>一般是纯粹的算法题</li><li>但是算法难度一般是ACM级别的，所以经过ACM训练的训练员也不一定能拿满分</li></ul><h2 id="四、备考准备指南"><a href="#四、备考准备指南" class="headerlink" title="四、备考准备指南"></a>四、备考准备指南</h2><h3 id="4-1-训练资料选择"><a href="#4-1-训练资料选择" class="headerlink" title="4.1 训练资料选择"></a>4.1 训练资料选择</h3><ul><li>ACM题库</li><li>CCF-CSP真题，总结每年题型</li></ul><h3 id="4-2-参考书籍推荐"><a href="#4-2-参考书籍推荐" class="headerlink" title="4.2 参考书籍推荐"></a>4.2 参考书籍推荐</h3><p>CCF-CSP考试是可以带书进去的：</p><ul><li>如果对语法掌握不熟练的话可以带一本编程语言书</li><li>最好带一本C++ STL方面的书（是STL工具书，STL怎么使用的书，而不是STL源码分析类的书）<ul><li>STL方面的书可以帮助我们又快有准的写出想要的排序等代码，如果我们当场写的话会很浪费时间</li></ul></li><li>算法书，有资源的可以找一本ACM培训竞赛书，前面也说过书上的算法对付考试是不行的，需要更好的算法</li></ul><h3 id="4-3-日常练习规划"><a href="#4-3-日常练习规划" class="headerlink" title="4.3 日常练习规划"></a>4.3 日常练习规划</h3><ul><li>每天写程序，不能手生</li><li>最少得2h，适应4h的考试时间</li></ul><h2 id="五、得分技巧与考试策略"><a href="#五、得分技巧与考试策略" class="headerlink" title="五、得分技巧与考试策略"></a>五、得分技巧与考试策略</h2><h3 id="5-1-评分机制理解"><a href="#5-1-评分机制理解" class="headerlink" title="5.1 评分机制理解"></a>5.1 评分机制理解</h3><p>CCF-CSP是机器阅卷评分，题目规定有代码运行用时，超时的测试用例是没有分的。给分目前最小单位是10分，按照对你的代码的一个测试，比如从10到100这个规模来20%测试用例，100-1000来30%测试用例，1000-10000来50%测试用例，通过一个测试用例给10分，也就是说：</p><ul><li>我们自己测试对的在评分的时候不一定能拿满分</li><li>我们在3、4、5题上也可以通过实现简单数据集上的代码而得分，而不是一分得不了</li><li>3、4、5题我们可以从最小规模开始，可以排除特殊情况来写代码，只要简单的测试用例能通过我们就能得分</li></ul><h3 id="5-2-核心能力训练"><a href="#5-2-核心能力训练" class="headerlink" title="5.2 核心能力训练"></a>5.2 核心能力训练</h3><p>我们要想拿高分就要有针对性的训练：</p><ul><li>首先不能再出基础性错误，比如输入输出，要按照题目规定来，要求输入或输出两个数据间用空格分开我们不能使用回车分开，这样会导致0分<ul><li>我们可以通过真题训练自己所使用语言输入输出代码的格式，也不要在这上面浪费时间</li></ul></li><li>锻炼单步调试能力<ul><li>在平时编程的时候我们可以使用cout来输出看一下执行过程中变量的值，但是这样容易犯错——考试的使用万一没有把测试用的cout删除，这样就会误导机器判分，机器判断输出和正确输出不一样就是0分</li></ul></li></ul><h3 id="5-3-考试注意事项"><a href="#5-3-考试注意事项" class="headerlink" title="5.3 考试注意事项"></a>5.3 考试注意事项</h3><ul><li>通过所有题目样例不代表解法完全正确，很可能是存在漏洞的代码恰好满足了有限的测试用例，从而产生误导</li></ul><h2 id="六、特殊情况下的应对策略（骗分技巧）"><a href="#六、特殊情况下的应对策略（骗分技巧）" class="headerlink" title="六、特殊情况下的应对策略（骗分技巧）"></a>六、特殊情况下的应对策略（骗分技巧）</h2><h3 id="6-1-骗分的本质"><a href="#6-1-骗分的本质" class="headerlink" title="6.1 骗分的本质"></a>6.1 骗分的本质</h3><ul><li>利用好”分点给分”的规则</li><li>抓住评测机”只看结果不看过程”的评分机制</li><li>用简单的程序获得尽可能多的分数</li><li>骗分是骗机器，不是骗自己</li></ul><h3 id="6-2-心态调整"><a href="#6-2-心态调整" class="headerlink" title="6.2 心态调整"></a>6.2 心态调整</h3><ul><li>先完成简单的题目</li><li>需要估计出有多少盈利 再分配时间</li></ul><h3 id="6-3-非完美算法应用"><a href="#6-3-非完美算法应用" class="headerlink" title="6.3 非完美算法应用"></a>6.3 非完美算法应用</h3><ul><li>有分总比没分好</li><li>虽然写不出完美的算法，但是可以用贪心、搜索之类的算法，来骗到部分得分<ul><li>✓ 在许多动态规划题型中，贪心虽然是假算法，但在相当可观的数据中撞上正确答案</li><li>✓ 搜索是个老实的笨办法，虽然慢但是正确，加上剪枝更加能打</li></ul></li></ul><h3 id="6-4-数学规律寻找"><a href="#6-4-数学规律寻找" class="headerlink" title="6.4 数学规律寻找"></a>6.4 数学规律寻找</h3><ul><li>计算机竞赛中不需要有完美的证明</li><li>对于输出答案或者中间参数只要你认为有规律不要管那么多用就完事了，能证明则更好</li><li>暴力打表<ul><li>✓ 斐波那契数列</li><li>✓ 杨辉三角</li><li>✓ 卡特兰数</li></ul></li></ul><h3 id="6-5-分类讨论技巧"><a href="#6-5-分类讨论技巧" class="headerlink" title="6.5 分类讨论技巧"></a>6.5 分类讨论技巧</h3><ul><li>对不同数据量采用不同的算法</li><li>对不同的输入数据采用不同策略</li><li>考虑特殊数据</li></ul><h3 id="6-6-固定输出策略"><a href="#6-6-固定输出策略" class="headerlink" title="6.6 固定输出策略"></a>6.6 固定输出策略</h3><ul><li>最后的最后，一点思路都没有，可以考虑只输出一个值，如果对了也有10分</li><li>但这个值也不能乱输出，也要有一定的依据</li><li>选择输出可能性最大的，骗也要骗的精彩<ul><li>✓ 无解输出”No”&#x2F;“-1”</li><li>✓ 若Bob获胜则输出”Bob wins.”，否则输出”Alice wins.”</li><li>✓ example output</li></ul></li></ul><h3 id="6-7-骗分的最高境界是不骗分"><a href="#6-7-骗分的最高境界是不骗分" class="headerlink" title="6.7 骗分的最高境界是不骗分"></a>6.7 骗分的最高境界是不骗分</h3><ul><li>第39届CCFCSP认证，采用子任务形式，只有子任务的所有样例都通过才给这一部分的分数</li><li>所以只输入样例是没有分数的</li></ul>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;一、参考资料&quot;&gt;&lt;a href=&quot;#一、参考资料&quot; class=&quot;headerlink&quot; title=&quot;一、参考资料&quot;&gt;&lt;/a&gt;一、参考资料&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://www.bilibilicom/video/BV1oK411W</summary>
      
    
    
    
    <category term="攻略" scheme="https://mingsage.top/categories/%E6%94%BB%E7%95%A5/"/>
    
    
  </entry>
  
  <entry>
    <title>HTML学习笔记</title>
    <link href="https://mingsage.top/2025/07/18/2025-07-19-HTML%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
    <id>https://mingsage.top/2025/07/18/2025-07-19-HTML%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/</id>
    <published>2025-07-18T16:00:00.000Z</published>
    <updated>2026-06-06T05:48:28.026Z</updated>
    
    <content type="html"><![CDATA[<h2 id="目录"><a href="#目录" class="headerlink" title="目录"></a>目录</h2><ul><li><a href="#%E5%9F%BA%E7%A1%80%E6%A6%82%E5%BF%B5">基础概念</a></li><li><a href="#%E6%89%A9%E5%B1%95%E7%9F%A5%E8%AF%86">扩展知识</a></li><li><a href="#%E5%AE%9E%E7%94%A8%E6%8F%90%E7%A4%BA">实用提示</a></li><li><a href="#SEO%E7%9B%B8%E5%85%B3%E7%9F%A5%E8%AF%86">SEO相关知识</a></li><li><a href="#meta%E5%85%83%E4%BF%A1%E6%81%AF">meta元信息</a></li><li><a href="#%E5%9D%97%E7%BA%A7%E5%85%83%E7%B4%A0%E4%B8%8E%E8%A1%8C%E5%86%85%E5%85%83%E7%B4%A0">块级元素与行内元素</a></li><li><a href="#HTML%E6%A0%87%E7%AD%BE">HTML标签</a></li><li><a href="#%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98">常见问题</a></li></ul><h2 id="基础概念"><a href="#基础概念" class="headerlink" title="基础概念"></a>基础概念</h2><ul><li>HyperText Markup Language</li><li>超文本：<code>超</code>的含义 -&gt; 超链接</li></ul><h2 id="扩展知识"><a href="#扩展知识" class="headerlink" title="扩展知识"></a>扩展知识</h2><ul><li>学习一门编程语言前先搞懂所有相关英文</li><li>编程思维 : 量化每一步的思维</li><li>产品思维 : 刚需 用户体验(培养用户的懒习惯) 用户粘性</li><li>开发理念 : 结构 样式 行为分离</li><li>域名 -&gt; DNS解析 -&gt; 物理地址</li><li>为什么需要文档声明? 大多数浏览器默认渲染最新标准</li><li>字符编码 默认 UTF-8</li><li>LiveServer会帮你纠正字符编码</li></ul><h2 id="实用提示"><a href="#实用提示" class="headerlink" title="实用提示"></a>实用提示</h2><ul><li>修改输入法：中文模式下用英文符号</li><li>F11 全屏切换</li><li>SHIFT + 刷新 -&gt; 强制刷新</li><li>使用 ! +Tab&#x2F;Enter 快速生成HTML基础结构</li><li>F12打开开发者工具调试</li></ul><h2 id="SEO相关知识"><a href="#SEO相关知识" class="headerlink" title="SEO相关知识"></a>SEO相关知识</h2><ul><li>百度税：一半来自医院，中国最大的广告商</li><li>如何收费:IP段锁定：考察生物行为是否恶意，一个IP多少钱</li><li>SEO：符合爬虫喜好，符合搜索引擎喜好</li><li>权重：权重高的网页排名越靠前</li></ul><h2 id="meta元信息"><a href="#meta元信息" class="headerlink" title="meta元信息"></a>meta元信息</h2><ul><li>位置: head中</li><li>常用属性:<ul><li><code>name</code></li><li><code>content</code></li><li><code>charset</code></li><li><code>http-equiv</code> : 告知浏览器如何解析文档, 相当于告诉浏览器以什么版本解析</li></ul></li><li>功能:</li><li><ol><li>描述网页的信息, 搜索引擎会根据meta信息来确定网页的排名<figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"> <span class="comment">&lt;!-- 搜索引擎优化 --&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">meta</span> <span class="attr">content</span>=<span class="string">&quot;关键词&quot;</span> <span class="attr">name</span>=<span class="string">&quot;keywords&quot;</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">meta</span> <span class="attr">content</span>=<span class="string">&quot;描述&quot;</span> <span class="attr">name</span>=<span class="string">&quot;description&quot;</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">meta</span> <span class="attr">content</span>=<span class="string">&quot;作者&quot;</span> <span class="attr">name</span>=<span class="string">&quot;author&quot;</span>&gt;</span></span><br></pre></td></tr></table></figure></li></ol></li><li><ol start="2"><li>告知浏览器以什么版本解析</li></ol></li><li>   <figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">meta</span> <span class="attr">charset</span>=<span class="string">&quot;UTF-8&quot;</span>&gt;</span></span><br></pre></td></tr></table></figure></li><li><ol start="3"><li>告知浏览器以什么版本解析</li></ol></li><li>   <figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">meta</span> <span class="attr">http-equiv</span>=<span class="string">&quot;X-UA-Compatible&quot;</span> <span class="attr">content</span>=<span class="string">&quot;IE=edge&quot;</span>&gt;</span></span><br></pre></td></tr></table></figure></li><li><ol start="4"><li>保证页面在移动端的显示效果, 根据设备的宽度来缩放页面</li></ol><ul><li>格式: <code>&lt;meta content=&quot;width=device-width, initial-scale=1.0&quot; name=&quot;viewport&quot;&gt;</code></li><li><code>width=device-width</code> : 以设备宽度来渲染页面</li><li><code>initial-scale=1.0</code> : 以1倍比例来渲染页面</li></ul></li><li><ol start="5"><li>爬虫</li></ol></li></ul><h3 id="HTMl全局属性"><a href="#HTMl全局属性" class="headerlink" title="HTMl全局属性"></a>HTMl全局属性</h3><ul><li><code>id</code></li><li><code>class</code></li><li><code>style</code></li><li><code>title</code></li><li><code>lang</code></li><li><code>dir</code></li><li><code>hidden</code></li></ul><h2 id="块级元素与行内元素"><a href="#块级元素与行内元素" class="headerlink" title="块级元素与行内元素"></a>块级元素与行内元素</h2><ul><li>块级元素 : 独占一行</li><li>行内元素 : 不独占一行</li><li>规则: 块级元素可以嵌套行内元素,但行内元素不可嵌套快级元素</li></ul><h2 id="HTML标签"><a href="#HTML标签" class="headerlink" title="HTML标签"></a>HTML标签</h2><h3 id="HTML标签的概念"><a href="#HTML标签的概念" class="headerlink" title="HTML标签的概念"></a>HTML标签的概念</h3><ul><li>标签: 英文单词, 尖括号 &lt;&gt; 组成, 用来描述文档的结构, 语义化标签</li><li>标签分类:<ul><li>双标签: 有开始标签和结束标签</li><li>单标签: 只有一个标签, 没有结束标签</li></ul></li><li>标签嵌套</li><li>容器: 结构化 捆绑操作,方便</li><li>父子结构: 目录 导航栏  可维护性</li><li>语义化-可维护性-可读性</li></ul><h3 id="基础标签"><a href="#基础标签" class="headerlink" title="基础标签"></a>基础标签</h3><p>h1-6 标题标签 (header)<br>p 段落<br>strong 加粗<br>em 斜体<br>del 中划线<br>address 地址标签 斜体,独占一行<br>span 不分行 容器 结构化 捆绑操作,方便<br>div 分行 容器 结构化 捆绑操作,方便<br>br 换行符<br>hr 单行线</p><p>空格&#x2F;回车 :文字分割符,不代表空格,无关数量;</p><h3 id="字符实体-html编码-类似于转义符"><a href="#字符实体-html编码-类似于转义符" class="headerlink" title="字符实体 html编码(类似于转义符):"></a>字符实体 html编码(类似于转义符):</h3><pre><code> `&amp;lt;`   `&lt;` `&amp;gt; `  `&gt;` `&amp;nbsp;`   `空格`</code></pre><h3 id="列表"><a href="#列表" class="headerlink" title="列表"></a>列表</h3><h4 id="有序列表-order-list"><a href="#有序列表-order-list" class="headerlink" title="有序列表 order list"></a>有序列表 order list</h4><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">ol</span> <span class="attr">type</span>=<span class="string">&quot;A&quot;</span> <span class="attr">reversed</span>=<span class="string">&quot;reversed&quot;</span> <span class="attr">start</span>=<span class="string">&quot;2&quot;</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">li</span>&gt;</span></span><br><span class="line">了不起的盖茨比</span><br><span class="line"><span class="tag">&lt;/<span class="name">li</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">ol</span>&gt;</span></span><br></pre></td></tr></table></figure><p><code>type</code> : A(大写英文字母) I(大写罗马数字) 1(阿拉伯数字) a i</p><h4 id="无序列表-unorder-list"><a href="#无序列表-unorder-list" class="headerlink" title="无序列表 unorder list"></a>无序列表 unorder list</h4><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">ul</span> <span class="attr">type</span>=<span class="string">&quot;square&quot;</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">li</span>&gt;</span>草莓<span class="tag">&lt;/<span class="name">li</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">li</span>&gt;</span>苹果<span class="tag">&lt;/<span class="name">li</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">li</span>&gt;</span>橘子<span class="tag">&lt;/<span class="name">li</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">ul</span>&gt;</span></span><br></pre></td></tr></table></figure><p><code>type</code> : square circle disc</p><h4 id="自定义列表-definition-list"><a href="#自定义列表-definition-list" class="headerlink" title="自定义列表 definition list"></a>自定义列表 definition list</h4><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">dl</span> <span class="attr">type</span>=<span class="string">&quot;&quot;</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">dt</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">dt</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">dd</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">dt</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">dl</span>&gt;</span></span><br></pre></td></tr></table></figure><ul><li>其中 dt 是标题 dd 是文本</li></ul><h3 id="表格标签"><a href="#表格标签" class="headerlink" title="表格标签:"></a>表格标签:</h3><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">table</span> <span class="attr">border</span>=<span class="string">&quot;1&quot;</span> <span class="attr">width</span>=<span class="string">&quot;500px&quot;</span> <span class="attr">height</span>=<span class="string">&quot;500px&quot;</span> <span class="attr">cellspacing</span>=<span class="string">&quot;10px&quot;</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">caption</span>&gt;</span>人员表<span class="tag">&lt;/<span class="name">caption</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">tr</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">th</span>&gt;</span>姓名<span class="tag">&lt;/<span class="name">th</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">th</span>&gt;</span>年龄<span class="tag">&lt;/<span class="name">th</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">tr</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">tr</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">td</span>&gt;</span>张三<span class="tag">&lt;/<span class="name">td</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">td</span>&gt;</span>18<span class="tag">&lt;/<span class="name">td</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">tr</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">tfoot</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">tr</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">td</span>&gt;</span>总结<span class="tag">&lt;/<span class="name">td</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">td</span>&gt;</span>2人<span class="tag">&lt;/<span class="name">td</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">tr</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">tfoot</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">table</span>&gt;</span></span><br></pre></td></tr></table></figure><ul><li><code>border</code> : 边框 只能控制外部边距</li><li><code>th</code> : 表头</li><li><code>td</code> : 单元格</li><li><code>tr</code> : 行</li><li><code>caption</code> : 表格标题</li><li>合并单元格<ul><li><code>rowspan</code> : 跨行合并</li><li><code>colspan</code> : 跨列合并</li></ul></li></ul><h3 id="img图片标签"><a href="#img图片标签" class="headerlink" title="img图片标签:"></a>img图片标签:</h3><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">img</span> <span class="attr">src</span>=<span class="string">&quot;图片的路径&quot;</span> <span class="attr">alt</span>=<span class="string">&quot;图片未加载时展示的图片描述文字&quot;</span> <span class="attr">title</span>=<span class="string">&quot;图片提示符(鼠标悬浮时)&quot;</span>&gt;</span></span><br></pre></td></tr></table></figure><ul><li><p><code>src</code> : 图片的路径</p><ul><li>1 网络url</li><li>2 本地相对路径</li><li>3 本地绝对路径</li></ul></li><li><p>图片的格式</p><ul><li><code>jpg</code> 有损压缩 支持的颜色丰富 占用空间较小 不支持透明背景 不支持动态图</li><li><code>png</code> 无损压缩 不支持动态图</li><li><code>bmp</code> 不进行压缩 不支持透明背景 不支持动态图 (网页不常见,游戏使用较多)</li><li><code>gif</code> 支持简单的透明背景 支持动态图 只支持256种颜色</li><li><code>webp</code><ul><li>支持有损压缩 无损压缩 支持透明背景 支持动态图</li><li>但是兼容性不好: 如IE不可以展示</li><li>解决兼容性问题: 利用js判断</li></ul></li><li><code>base64</code> 二维码之类的</li></ul></li></ul><h3 id="a标签"><a href="#a标签" class="headerlink" title="a标签"></a>a标签</h3><ul><li>1 超链接 2 anchor 锚点 3 打电话&#x2F;发邮件 4 协议限定符<figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">&lt;!-- 超链接 --&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">a</span> <span class="attr">href</span>=<span class="string">&quot;example.com&quot;</span> <span class="attr">target</span>=<span class="string">&quot;_blank_&quot;</span>&gt;</span>xxx<span class="tag">&lt;/<span class="name">a</span>&gt;</span></span><br><span class="line"><span class="comment">&lt;!-- 锚定跳转 --&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">a</span> <span class="attr">href</span>=<span class="string">&quot;#id&quot;</span>&gt;</span>xxx<span class="tag">&lt;/<span class="name">a</span>&gt;</span></span><br><span class="line"><span class="comment">&lt;!-- 跳转应用 --&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">a</span> <span class="attr">href</span>=<span class="string">&quot;tel:captain_phone_number&quot;</span>&gt;</span>给captain打电话<span class="tag">&lt;/<span class="name">a</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">a</span> <span class="attr">href</span>=<span class="string">&quot;mailto:captain_email&quot;</span>&gt;</span>给captain发邮件<span class="tag">&lt;/<span class="name">a</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">a</span> <span class="attr">href</span>=<span class="string">&quot;sms:10086&quot;</span>&gt;</span>给captain发短信<span class="tag">&lt;/<span class="name">a</span>&gt;</span></span><br><span class="line"><span class="comment">&lt;!-- 触发JavaScript代码 --&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">a</span> <span class="attr">href</span>=<span class="string">&quot;javascript:while(1)&#123;alert(&#x27;让你手欠&#x27;)&#125;&quot;</span>&gt;</span>你点我试试<span class="tag">&lt;/<span class="name">a</span>&gt;</span></span><br></pre></td></tr></table></figure></li><li><code>target</code> 是否新标签页</li><li><code>#id</code> 锚定跳转本页id内容的区域 回到顶部&#x2F;页面内目录导航的功能实现</li></ul><h3 id="form-表单标签"><a href="#form-表单标签" class="headerlink" title="form 表单标签"></a>form 表单标签</h3><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">form</span> <span class="attr">method</span>=<span class="string">&quot;get&quot;</span> <span class="attr">action</span>=<span class="string">&quot;http://localhost:3000/login&quot;</span>&gt;</span></span><br><span class="line"></span><br><span class="line">username:<span class="tag">&lt;<span class="name">input</span> <span class="attr">type</span>=<span class="string">&quot;text&quot;</span> <span class="attr">name</span>=<span class="string">&quot;username&quot;</span> <span class="attr">placeholder</span>=<span class="string">&quot;请输入你的用户名&quot;</span>&gt;</span></span><br><span class="line">password:<span class="tag">&lt;<span class="name">input</span> <span class="attr">type</span>=<span class="string">&quot;password&quot;</span> <span class="attr">name</span>=<span class="string">&quot;password&quot;</span> <span class="attr">placeholder</span>=<span class="string">&quot;请输入你的密码&quot;</span>&gt;</span> <span class="comment">&lt;!--不显示输入,只对用户不可见,心理安慰--&gt;</span></span><br><span class="line"></span><br><span class="line">你选择ABCD哪一个?(单选)</span><br><span class="line"><span class="tag">&lt;<span class="name">input</span> <span class="attr">type</span>=<span class="string">&quot;radio&quot;</span> <span class="attr">name</span>=<span class="string">&quot;ans&quot;</span> <span class="attr">value</span>=<span class="string">&quot;A&quot;</span>&gt;</span>A <span class="comment">&lt;!--单选框,name要一致--&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">input</span> <span class="attr">type</span>=<span class="string">&quot;radio&quot;</span> <span class="attr">name</span>=<span class="string">&quot;ans&quot;</span> <span class="attr">value</span>=<span class="string">&quot;B&quot;</span>&gt;</span>B <span class="comment">&lt;!--单选框--&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">input</span> <span class="attr">type</span>=<span class="string">&quot;radio&quot;</span> <span class="attr">name</span>=<span class="string">&quot;ans&quot;</span> <span class="attr">value</span>=<span class="string">&quot;C&quot;</span>&gt;</span>C <span class="comment">&lt;!--单选框--&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">input</span> <span class="attr">type</span>=<span class="string">&quot;radio&quot;</span> <span class="attr">name</span>=<span class="string">&quot;ans&quot;</span> <span class="attr">value</span>=<span class="string">&quot;D&quot;</span>&gt;</span>D <span class="comment">&lt;!--单选框--&gt;</span></span><br><span class="line"></span><br><span class="line">你喜欢吃的水果有(可多选):</span><br><span class="line"><span class="tag">&lt;<span class="name">input</span> <span class="attr">type</span>=<span class="string">&quot;checkbox&quot;</span> <span class="attr">name</span>=<span class="string">&quot;fruit&quot;</span> <span class="attr">value</span>=<span class="string">&quot;apple&quot;</span>&gt;</span>apple</span><br><span class="line"><span class="tag">&lt;<span class="name">input</span> <span class="attr">type</span>=<span class="string">&quot;checkbox&quot;</span> <span class="attr">name</span>=<span class="string">&quot;fruit&quot;</span> <span class="attr">value</span>=<span class="string">&quot;banana&quot;</span>&gt;</span>banana</span><br><span class="line"><span class="tag">&lt;<span class="name">input</span> <span class="attr">type</span>=<span class="string">&quot;checkbox&quot;</span> <span class="attr">name</span>=<span class="string">&quot;fruit&quot;</span> <span class="attr">value</span>=<span class="string">&quot;orange&quot;</span>&gt;</span>orange</span><br><span class="line"></span><br><span class="line">你的性别是?(单选) <span class="comment">&lt;!--默认选中操作--&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">input</span> <span class="attr">type</span>=<span class="string">&quot;radio&quot;</span> <span class="attr">name</span>=<span class="string">&quot;gender&quot;</span> <span class="attr">value</span>=<span class="string">&quot;male&quot;</span> <span class="attr">checked</span> =<span class="string">&quot;checked&quot;</span>&gt;</span>male</span><br><span class="line"><span class="tag">&lt;<span class="name">input</span> <span class="attr">type</span>=<span class="string">&quot;radio&quot;</span> <span class="attr">name</span>=<span class="string">&quot;gender&quot;</span> <span class="attr">value</span>=<span class="string">&quot;female&quot;</span>&gt;</span>female</span><br><span class="line"></span><br><span class="line"><span class="tag">&lt;<span class="name">h1</span>&gt;</span>你所在的省份是:<span class="tag">&lt;/<span class="name">h1</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">select</span> <span class="attr">name</span>=<span class="string">&quot;province&quot;</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">option</span>&gt;</span>北京<span class="tag">&lt;/<span class="name">option</span>&gt;</span> <span class="comment">&lt;!--无需映射则可省略value--&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">option</span> <span class="attr">selected</span>=<span class="string">true</span>&gt;</span>上海<span class="tag">&lt;/<span class="name">option</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">option</span> <span class="attr">value</span>=<span class="string">&quot;guangdong&quot;</span>&gt;</span>广东<span class="tag">&lt;/<span class="name">option</span>&gt;</span> <span class="comment">&lt;!--如果需要映射那么在value里定义传参的真实值--&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">select</span>&gt;</span></span><br><span class="line"></span><br><span class="line"><span class="tag">&lt;<span class="name">input</span> <span class="attr">type</span>=<span class="string">&quot;submit&quot;</span>&gt;</span> <span class="comment">&lt;!--提交表单--&gt;</span></span><br><span class="line"></span><br><span class="line"><span class="tag">&lt;/<span class="name">form</span>&gt;</span></span><br></pre></td></tr></table></figure><ul><li><code>value</code> : 选项的值</li><li><code>name</code> : 选项的名称</li><li><code>placeholder</code> : 占位符</li><li><code>type</code> : 文本框类型</li><li><code>method</code> : 表单提交方式</li><li><code>action</code> : 表单提交地址</li><li><code>submit</code> : 提交表单</li><li><code>reset</code> : 重置表单</li><li><code>checkbox</code> : 复选框</li><li><code>radio</code> : 单选框</li><li><code>select</code> : 下拉选择框</li><li><code>option</code> : 下拉选择框选项</li><li><code>textarea</code> : rows clos 给框的初始宽高</li><li><code>disabled</code> : 禁用文本框</li><li><code>lable</code> : 获取焦点,实现关联</li><li><code>fieldset</code> : 定义表单域</li><li><code>legend</code> : 定义表单域的标题</li><li><code>checked</code> : 输入控件的默认选中</li><li><code>disabled</code> : 输入控件的禁用</li><li><code>required</code> : 输入控件的必填</li><li><code>readonly</code> : 输入控件的只读</li><li><code>min</code> : 输入控件的最小值</li><li><code>max</code> : 输入控件的最大值</li><li><code>step</code> : 输入控件的步长</li><li><code>size</code> : 输入控件的宽度</li><li><code>list</code> : 输入控件的列表</li><li><code>autofocus</code> : 输入控件的自动获取焦点</li></ul><h3 id="注释"><a href="#注释" class="headerlink" title="注释"></a>注释</h3><ul><li>注释不会显示在浏览器中, 用于解释代码的作用, 提高代码的可读性,方便调试</li><li>注释的快捷键: Ctrl + &#x2F;</li><li>注释不可以嵌套</li></ul><h3 id="框架标签"><a href="#框架标签" class="headerlink" title="框架标签"></a>框架标签</h3><ul><li>可嵌入网页 可嵌入广告 可嵌入其他内容(图片,压缩包,pdf等文件)</li><li>与 超链接标签或表单 的 <code>target</code> 联动</li><li><code>frame</code> : 框架标签</li><li><code>frameset</code> : 框架集标签</li><li><code>iframe</code> : 内框架标签</li><li><code>noframes</code> : 无框架标签</li></ul><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">iframe</span> <span class="attr">src</span>=<span class="string">&quot;https://www.baidu.com&quot;</span> <span class="attr">width</span>=<span class="string">&quot;500px&quot;</span> <span class="attr">height</span>=<span class="string">&quot;250px&quot;</span>&gt;</span><span class="tag">&lt;/<span class="name">iframe</span>&gt;</span></span><br></pre></td></tr></table></figure><h3 id="不常用标签"><a href="#不常用标签" class="headerlink" title="不常用标签"></a>不常用标签</h3><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">bdo</span> <span class="attr">dir</span>=<span class="string">&quot;rtl&quot;</span>&gt;</span>这句话反着说是?<span class="tag">&lt;/<span class="name">bdo</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">code</span>&gt;</span>int i = 1;</span><br><span class="line"><span class="tag">&lt;/<span class="name">code</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">var</span>&gt;</span>let a = 10;<span class="tag">&lt;/<span class="name">var</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">b</span>&gt;</span>加粗<span class="tag">&lt;/<span class="name">b</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">small</span>&gt;</span>变小<span class="tag">&lt;/<span class="name">small</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">u</span>&gt;</span>错误的内容<span class="tag">&lt;/<span class="name">u</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">q</span>&gt;</span>短引用<span class="tag">&lt;/<span class="name">q</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">blockquote</span>&gt;</span>常引用<span class="tag">&lt;/<span class="name">blockquote</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">address</span>&gt;</span>地址<span class="tag">&lt;/<span class="name">address</span>&gt;</span></span><br></pre></td></tr></table></figure><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;目录&quot;&gt;&lt;a href=&quot;#目录&quot; class=&quot;headerlink&quot; title=&quot;目录&quot;&gt;&lt;/a&gt;目录&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%9F%BA%E7%A1%80%E6%A6%82%E5%BF%B5&quot;&gt;基础概念&lt;/a&gt;&lt;/li&gt;
&lt;l</summary>
      
    
    
    
    <category term="前端" scheme="https://mingsage.top/categories/%E5%89%8D%E7%AB%AF/"/>
    
    
  </entry>
  
  <entry>
    <title>scoop软件包管理</title>
    <link href="https://mingsage.top/2025/07/18/2025-07-19-Scoop%E8%BD%AF%E4%BB%B6%E5%8C%85%E7%AE%A1%E7%90%86/"/>
    <id>https://mingsage.top/2025/07/18/2025-07-19-Scoop%E8%BD%AF%E4%BB%B6%E5%8C%85%E7%AE%A1%E7%90%86/</id>
    <published>2025-07-18T16:00:00.000Z</published>
    <updated>2026-06-06T05:48:28.026Z</updated>
    
    <content type="html"><![CDATA[<h1 id="Scoop-Windows-命令行软件包管理器"><a href="#Scoop-Windows-命令行软件包管理器" class="headerlink" title="Scoop-Windows 命令行软件包管理器"></a>Scoop-Windows 命令行软件包管理器</h1><h2 id="简介"><a href="#简介" class="headerlink" title="简介"></a>简介</h2><p>Scoop 是一个 Windows 上的命令行软件包管理器。</p><p>类似于 Ununtu 上的 <code>apt-get</code>，macOS 上的 <code>brew</code>。</p><h2 id="核心功能与优势"><a href="#核心功能与优势" class="headerlink" title="核心功能与优势"></a>核心功能与优势</h2><p> 搜索、安装、更新、卸载软件。</p><p> <strong>自动管理</strong> PATH，安装后立即可在命令行中全局使用。</p><p>不侵占系统环境变量，纯净，便携，一键安装和卸载。</p><h2 id="软件来源"><a href="#软件来源" class="headerlink" title="软件来源"></a>软件来源</h2><p>官方的 <strong>bucket</strong>（软件仓库），如 <code>main</code>, <code>extras</code>, <code>versions</code> 等</p><blockquote><p>scoop bucket add helbing <a href="https://github.com/helbing/scoop-bucket">https://github.com/helbing/scoop-bucket</a> 此仓库含有PicGo图床软件</p></blockquote><h2 id="快速迁移"><a href="#快速迁移" class="headerlink" title="快速迁移"></a>快速迁移</h2><p><strong>快速在多台机器上搭建相同环境</strong>：导出安装列表 (<code>scoop export &gt; &lt;file&gt;</code>)，然后在新机器上一条命令批量安装（<code>scoop import &lt;file&gt;</code>）。</p><h1 id="基础命令"><a href="#基础命令" class="headerlink" title="基础命令"></a>基础命令</h1><p>以下是 Scoop 主要命令行，按功能分类：</p><h2 id="🔧-基础管理命令"><a href="#🔧-基础管理命令" class="headerlink" title="🔧 基础管理命令"></a>🔧 基础管理命令</h2><table><thead><tr><th>命令</th><th>功能</th></tr></thead><tbody><tr><td><code>scoop search &lt;软件名&gt;</code></td><td>搜索软件</td></tr><tr><td><code>scoop install &lt;软件名&gt;</code></td><td>安装软件</td></tr><tr><td><code>scoop uninstall &lt;软件名&gt;</code></td><td>卸载软件</td></tr><tr><td><code>scoop update</code></td><td>更新 Scoop 自身和软件列表</td></tr><tr><td><code>scoop update &lt;软件名&gt;</code></td><td>更新特定软件</td></tr><tr><td><code>scoop update *</code></td><td>更新所有已安装软件</td></tr></tbody></table><h2 id="📦-软件包管理"><a href="#📦-软件包管理" class="headerlink" title="📦 软件包管理"></a>📦 软件包管理</h2><table><thead><tr><th>命令</th><th>功能</th></tr></thead><tbody><tr><td><code>scoop list</code></td><td>查看已安装软件列表</td></tr><tr><td><code>scoop info &lt;软件名&gt;</code></td><td>显示软件详细信息</td></tr><tr><td><code>scoop status</code></td><td>检查哪些软件需要更新</td></tr></tbody></table><h2 id="🔄-环境与仓库管理"><a href="#🔄-环境与仓库管理" class="headerlink" title="🔄 环境与仓库管理"></a>🔄 环境与仓库管理</h2><table><thead><tr><th>命令</th><th>功能</th></tr></thead><tbody><tr><td><code>scoop export &gt; scoop_list.txt</code></td><td>导出已安装软件列表到文件</td></tr><tr><td><code>scoop import scoop_list.txt</code></td><td>从文件批量安装软件</td></tr><tr><td><code>scoop bucket list</code></td><td>查看已添加的仓库</td></tr><tr><td><code>scoop bucket add &lt;仓库名&gt;</code></td><td>添加新仓库（如 extras、versions）</td></tr></tbody></table><h2 id="🧹-清理与维护"><a href="#🧹-清理与维护" class="headerlink" title="🧹 清理与维护"></a>🧹 清理与维护</h2><table><thead><tr><th>命令</th><th>功能</th></tr></thead><tbody><tr><td><code>scoop cache rm &lt;软件名&gt;</code></td><td>清理特定软件的安装缓存</td></tr><tr><td><code>scoop cache rm *</code></td><td>清理所有缓存</td></tr><tr><td><code>scoop cleanup &lt;软件名&gt;</code></td><td>清理旧版本软件</td></tr></tbody></table><hr><h2 id="💡-常用命令组合示例"><a href="#💡-常用命令组合示例" class="headerlink" title="💡 常用命令组合示例"></a>💡 常用命令组合示例</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 搜索并安装软件</span></span><br><span class="line">scoop search git</span><br><span class="line">scoop install git</span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加 extras 仓库并安装更多软件</span></span><br><span class="line">scoop bucket add extras</span><br><span class="line">scoop install vscode</span><br><span class="line"></span><br><span class="line"><span class="comment"># 批量环境迁移</span></span><br><span class="line">scoop <span class="built_in">export</span> &gt; backup.txt</span><br><span class="line"><span class="comment"># 在新机器上：</span></span><br><span class="line">scoop import backup.txt</span><br></pre></td></tr></table></figure><p>这些命令覆盖了 Scoop 的日常使用场景，从安装卸载到环境迁移都能高效完成。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;Scoop-Windows-命令行软件包管理器&quot;&gt;&lt;a href=&quot;#Scoop-Windows-命令行软件包管理器&quot; class=&quot;headerlink&quot; title=&quot;Scoop-Windows 命令行软件包管理器&quot;&gt;&lt;/a&gt;Scoop-Windows 命令行</summary>
      
    
    
    
    <category term="开发工具" scheme="https://mingsage.top/categories/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7/"/>
    
    <category term="玩转Windows" scheme="https://mingsage.top/categories/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7/%E7%8E%A9%E8%BD%ACWindows/"/>
    
    <category term="包管理" scheme="https://mingsage.top/categories/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7/%E7%8E%A9%E8%BD%ACWindows/%E5%8C%85%E7%AE%A1%E7%90%86/"/>
    
    
  </entry>
  
  <entry>
    <title>微信小程序开发大经验总结大杂烩</title>
    <link href="https://mingsage.top/2025/06/29/2025-06-30-%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F%E5%BC%80%E5%8F%91%E5%A4%A7%E7%BB%8F%E9%AA%8C%E6%80%BB%E7%BB%93%E5%A4%A7%E6%9D%82%E7%83%A9/"/>
    <id>https://mingsage.top/2025/06/29/2025-06-30-%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F%E5%BC%80%E5%8F%91%E5%A4%A7%E7%BB%8F%E9%AA%8C%E6%80%BB%E7%BB%93%E5%A4%A7%E6%9D%82%E7%83%A9/</id>
    <published>2025-06-29T16:00:00.000Z</published>
    <updated>2026-06-06T05:48:28.026Z</updated>
    
    <content type="html"><![CDATA[<h1 id="微信小程序开发历程"><a href="#微信小程序开发历程" class="headerlink" title="微信小程序开发历程"></a>微信小程序开发历程</h1><h2 id="1-Skyline-渲染引擎问题解决方案（模拟器可以显示图片，真机却不显示）"><a href="#1-Skyline-渲染引擎问题解决方案（模拟器可以显示图片，真机却不显示）" class="headerlink" title="1.Skyline 渲染引擎问题解决方案（模拟器可以显示图片，真机却不显示）"></a>1.Skyline 渲染引擎问题解决方案（模拟器可以显示图片，真机却不显示）</h2><h3 id="问题现象"><a href="#问题现象" class="headerlink" title="问题现象"></a>问题现象</h3><ul><li><strong>不使用 Skyline 时</strong>：真机调试下某些页面的图片无法显示</li><li><strong>使用 Skyline 时</strong>：真机调试下其他页面样式混乱</li><li><strong>模拟器环境</strong>：无论是否使用 Skyline，样式均正常</li></ul><h3 id="原因分析"><a href="#原因分析" class="headerlink" title="原因分析"></a>原因分析</h3><p>Skyline 渲染引擎虽然能提升性能，但会导致部分样式渲染不一致问题</p><h3 id="解决方案"><a href="#解决方案" class="headerlink" title="解决方案"></a>解决方案</h3><p>1.采用 <strong>按页面粒度开启 Skyline</strong> 的混合方案：</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line">  <span class="number">1.</span>全局配置 (app.json)</span><br><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;lazyCodeLoading&quot;</span><span class="punctuation">:</span> <span class="string">&quot;requiredComponents&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;rendererOptions&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;skyline&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;defaultDisplayBlock&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;disableABTest&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;sdkVersionBegin&quot;</span><span class="punctuation">:</span> <span class="string">&quot;3.0.0&quot;</span><span class="punctuation">,</span> </span><br><span class="line">    <span class="attr">&quot;sdkVersionEnd&quot;</span><span class="punctuation">:</span> <span class="string">&quot;15.255.255&quot;</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br><span class="line"></span><br><span class="line">  <span class="number">2.</span>页面级配置 (index.json)</span><br><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;componentFramework&quot;</span><span class="punctuation">:</span> <span class="string">&quot;glass-easel&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;renderer&quot;</span><span class="punctuation">:</span> <span class="string">&quot;skyline&quot;</span> </span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><p>2.直接 <strong>删除 Skyline 渲染引擎的相关配置</strong>，使用默认渲染引擎</p><h2 id="2-function（event）"><a href="#2-function（event）" class="headerlink" title="2.function（event）"></a>2.function（event）</h2><p>event 对象的常见属性（微信小程序）：</p><table><thead><tr><th>属性</th><th>说明</th></tr></thead><tbody><tr><td>event.type</td><td>事件类型（如 tap, input, change 等）</td></tr><tr><td>event.timeStamp</td><td>事件触发的时间戳</td></tr><tr><td>event.target</td><td>触发事件的组件信息（如按钮的 id、dataset 等）</td></tr><tr><td>event.currentTarget</td><td>当前处理事件的组件信息（类似 target）</td></tr><tr><td>event.detail</td><td>额外信息（不同事件不同内容，如输入框的 value）</td></tr></tbody></table><h2 id="3-wx-navigateTo-与-wx-switchTab-的区别"><a href="#3-wx-navigateTo-与-wx-switchTab-的区别" class="headerlink" title="3.wx.navigateTo() 与 wx.switchTab() 的区别"></a>3.wx.navigateTo() 与 wx.switchTab() 的区别</h2><h3 id="wx-navigateTo"><a href="#wx-navigateTo" class="headerlink" title="wx.navigateTo()"></a>wx.navigateTo()</h3><ul><li>保留当前页面，跳转到非 tabBar 页面</li><li>页面栈最多十层</li><li>适用于普通页面间的跳转</li></ul><h3 id="wx-switchTab"><a href="#wx-switchTab" class="headerlink" title="wx.switchTab()"></a>wx.switchTab()</h3><ul><li>跳转到 tabBar 页面，并关闭其他所有非 tabBar 页面</li><li>只能用于 tabBar 页面间的切换</li><li>不能传参</li><li>会重置页面栈</li></ul><h3 id="使用场景"><a href="#使用场景" class="headerlink" title="使用场景"></a>使用场景</h3><ul><li>普通页面跳转：使用 navigateTo</li><li>底部 tab 切换：使用 switchTab</li><li>需要清空页面栈：使用 switchTab 或 reLaunch</li></ul><h3 id="注意事项"><a href="#注意事项" class="headerlink" title="注意事项"></a>注意事项</h3><ul><li>如果页面被定义进了 tabBar，则只能采用 wx.switchTab()</li></ul><h2 id="4-自定义-tabBar"><a href="#4-自定义-tabBar" class="headerlink" title="4.自定义 tabBar"></a>4.自定义 tabBar</h2><p>需求：为不同角色提供不同的  tabBar</p><h3 id="步骤"><a href="#步骤" class="headerlink" title="步骤"></a>步骤</h3><ul><li>1.在 app.json 中的 tabBar 项设置 custom 字段，并且为 true，同时其余 tabBar 设计的页面也要配置</li><li>2.编写 tabBar 自定义组件，组件 <strong>文件夹必须放在根目录下</strong>，并且 <strong>必须命名为 custom-tab-bar</strong></li><li>3.在 attached 生命周期中设置 tabBar 中的 tab 列表数据（注：attached 在组件初始化后触发）</li><li>4.在每个页面的 onShow 方法中设置 tab 选中状态<figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">this.getTabBar.setData(<span class="punctuation">&#123;</span></span><br><span class="line">  selected<span class="punctuation">:</span><span class="number">0</span></span><br><span class="line"><span class="punctuation">&#125;</span>)</span><br></pre></td></tr></table></figure></li><li>5.pagePath 和 image 的路径前面都要加 <strong>前导斜杠</strong>，不然就会识别为相对路径</li></ul><h2 id="5-真机模拟如何本地测试（与后端-flask-对接）"><a href="#5-真机模拟如何本地测试（与后端-flask-对接）" class="headerlink" title="5.真机模拟如何本地测试（与后端 flask 对接）"></a>5.真机模拟如何本地测试（与后端 flask 对接）</h2><h3 id="测试步骤："><a href="#测试步骤：" class="headerlink" title="测试步骤："></a>测试步骤：</h3><ul><li>配置微信小程序开发工具：<ul><li>开启「开发环境不校验请求域名及 TLS 版本」（设置 → 项目配置）；</li><li>填写后端本地 IP（如 <code>http://192.168.1.100:5000</code>，Windows 可通过 <code>ipconfig</code> 查看本地 IP）；</li></ul></li><li>注意事项：<ul><li>后端需设置 CORS（跨域资源共享），可通过 <code>flask-cors</code> 库快速配置；</li><li>本地测试时确保手机与电脑在同一局域网，真机调试需使用电脑 IP 而非 <code>localhost</code>~</li></ul></li></ul><h2 id="6-微信-code-的获取"><a href="#6-微信-code-的获取" class="headerlink" title="6.微信 code 的获取"></a>6.微信 code 的获取</h2><h3 id="步骤："><a href="#步骤：" class="headerlink" title="步骤："></a>步骤：</h3><ul><li>1.在微信小程序后台配置合法域名，填入后端的域名(本地测试不用)</li><li>2.在前端调用 wx.login()方法获取 code</li><li>3.将 code 发送到后端，后端通过 code 获取 openid 和 session_key</li><li>4.后端将 openid 和 session_key 返回给前端，前端保存到本地</li></ul><h2 id="7-自定义弹窗"><a href="#7-自定义弹窗" class="headerlink" title="7.自定义弹窗"></a>7.自定义弹窗</h2><h3 id="步骤-1"><a href="#步骤-1" class="headerlink" title="步骤"></a>步骤</h3><ul><li>创建文件夹 input-modal</li><li>创建四个文件：<ul><li>input-modal.wxml (视图模板)</li><li>input-modal.wxss (样式文件)</li><li>input-modal.js (逻辑文件)</li><li>input-modal.json (配置文件)</li></ul></li><li>input-modal.json 配置：<figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;component&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure></li></ul><h3 id="使用方法"><a href="#使用方法" class="headerlink" title="使用方法"></a>使用方法</h3><ol><li><p>在页面 json 中声明组件：</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;usingComponents&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;input-modal&quot;</span><span class="punctuation">:</span> <span class="string">&quot;/components/input-modal/input-modal&quot;</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure></li><li><p>在页面 wxml 中使用：</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">input-modal</span> <span class="attr">show</span>=<span class="string">&quot;&#123;&#123;showModal&#125;&#125;&quot;</span> <span class="attr">bind:confirm</span>=<span class="string">&quot;onConfirm&quot;</span> <span class="attr">bind:cancel</span>=<span class="string">&quot;onCancel&quot;</span>/&gt;</span></span><br></pre></td></tr></table></figure></li><li><p>控制显示&#x2F;隐藏：</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="title class_">Page</span>(&#123;</span><br><span class="line">  <span class="attr">data</span>: &#123;</span><br><span class="line">    <span class="attr">showModal</span>: <span class="literal">false</span></span><br><span class="line">  &#125;,</span><br><span class="line">  <span class="title function_">showModal</span>(<span class="params"></span>) &#123;</span><br><span class="line">    <span class="variable language_">this</span>.<span class="title function_">setData</span>(&#123;</span><br><span class="line">      <span class="attr">showModal</span>: <span class="literal">true</span></span><br><span class="line">    &#125;)</span><br><span class="line">  &#125;,</span><br><span class="line">  <span class="title function_">onConfirm</span>(<span class="params"></span>) &#123;</span><br><span class="line">    <span class="comment">// 确认逻辑</span></span><br><span class="line">  &#125;,</span><br><span class="line">  <span class="title function_">onCancel</span>(<span class="params"></span>) &#123;</span><br><span class="line">    <span class="comment">// 取消逻辑</span></span><br><span class="line">  &#125;</span><br><span class="line">&#125;)</span><br></pre></td></tr></table></figure></li></ol><h2 id="8-json-格式的数据获取"><a href="#8-json-格式的数据获取" class="headerlink" title="8.json 格式的数据获取"></a>8.json 格式的数据获取</h2><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="title function_">updateTabbarList</span>(<span class="params"></span>) &#123;</span><br><span class="line">            <span class="keyword">const</span> role = <span class="title function_">getApp</span>().<span class="property">globalData</span>.<span class="property">userInfo</span>?.<span class="property">user</span>.<span class="property">role</span> || <span class="string">&#x27;student&#x27;</span>;  </span><br><span class="line">            <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&#x27;当前角色:&#x27;</span>, role);  <span class="comment">// 调试日志</span></span><br><span class="line">            <span class="variable language_">this</span>.<span class="title function_">setData</span>(&#123;</span><br><span class="line">                <span class="attr">list</span>: <span class="variable constant_">USER_PAGE</span>[<span class="string">`<span class="subst">$&#123;role&#125;</span>TabbarList`</span>] || []  <span class="comment">// 根据角色设置菜单</span></span><br><span class="line">            &#125;);</span><br><span class="line">        &#125;</span><br></pre></td></tr></table></figure><p>  主要错误：      </p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> role = <span class="title function_">getApp</span>().<span class="property">globalData</span>.<span class="property">userInfo</span>?.<span class="property">user</span>.<span class="property">role</span> || <span class="string">&#x27;student&#x27;</span>; <span class="comment">//正确的</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> role = <span class="title function_">getApp</span>().<span class="property">globalData</span>.<span class="property">userInfo</span>?.<span class="property">role</span> || <span class="string">&#x27;student&#x27;</span>;  <span class="comment">//错误的</span></span><br><span class="line"></span><br><span class="line">对于json嵌套结构数据的获取一定要小心</span><br><span class="line"></span><br></pre></td></tr></table></figure><h2 id="9-npm-赋能小程序开发"><a href="#9-npm-赋能小程序开发" class="headerlink" title="9.npm 赋能小程序开发"></a>9.npm 赋能小程序开发</h2><p>npm 可以很方便地下载微信小程序的包，不用去 github 上下载后又粘贴了</p><p>方便项目的一键启动</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;微信小程序开发历程&quot;&gt;&lt;a href=&quot;#微信小程序开发历程&quot; class=&quot;headerlink&quot; title=&quot;微信小程序开发历程&quot;&gt;&lt;/a&gt;微信小程序开发历程&lt;/h1&gt;&lt;h2 id=&quot;1-Skyline-渲染引擎问题解决方案（模拟器可以显示图片，真机却不显示</summary>
      
    
    
    
    <category term="前端" scheme="https://mingsage.top/categories/%E5%89%8D%E7%AB%AF/"/>
    
    <category term="微信小程序" scheme="https://mingsage.top/categories/%E5%89%8D%E7%AB%AF/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F/"/>
    
    
  </entry>
  
</feed>
