<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="https://blog.magictable.ha.cn/rss.xsl"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <atom:link href="https://blog.magictable.ha.cn/rss.xml" rel="self" type="application/rss+xml"/>
    <title>魔术桌的知识仓库</title>
    <link>https://blog.magictable.ha.cn</link>
    <description>「因为所以科学道理，原来如此皆有前提」</description>
    <language>zh-CN</language>
    <pubDate>Fri, 12 Dec 2025 12:54:33 GMT</pubDate>
    <lastBuildDate>Fri, 12 Dec 2025 12:54:33 GMT</lastBuildDate>
    <generator>@vuepress/plugin-feed</generator>
    <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
    <copyright>Copyright © 2023 魔术桌</copyright>
    <image>
      <title>魔术桌的知识仓库</title>
      <url>https://blog.magictable.ha.cn/assets/image/头像.png</url>
      <link>https://blog.magictable.ha.cn</link>
    </image>
    <category>学习笔记/日记</category>
    <category>软件程序/操作系统</category>
    <category>软件程序/程序语言</category>
    <category>世界规则/健康</category>
    <category>软件程序/软件包</category>
    <category>软件程序/代码类库</category>
    <category>学习笔记/技术</category>
    <category>硬件设备/设备</category>
    <category>软件程序/算法设计</category>
    <category>硬件设备/加工工艺</category>
    <category>硬件设备/原材料</category>
    <category>学习笔记/方案</category>
    <category>世界规则/社会</category>
    <category>硬件设备/工艺</category>
    <category>世界规则/环境</category>
    <category>世界规则/法律</category>
    <category>硬件设备/元器件</category>
    <category>学习笔记/论文</category>
    <category>艺术创作/视觉</category>
    <category>艺术创作/流派风格</category>
    <category>世界规则/经济</category>
    <category>世界规则/道德</category>
    <category>世界规则/政策</category>
    <category>学习笔记/摘录</category>
    <category>软件程序/数据结构</category>
    <category>软件程序/软件架构</category>
    <category>软件程序/设计模式</category>
    <item>
      <title>Diary - 沟通方式 - 文字 - 中文 - 中文数字的文字写法</title>
      <link>https://blog.magictable.ha.cn/note/Diary-%E6%B2%9F%E9%80%9A%E6%96%B9%E5%BC%8F-%E6%96%87%E5%AD%97-%E4%B8%AD%E6%96%87-%E4%B8%AD%E6%96%87%E6%95%B0%E5%AD%97%E7%9A%84%E6%96%87%E5%AD%97%E5%86%99%E6%B3%95.html</link>
      <guid>https://blog.magictable.ha.cn/note/Diary-%E6%B2%9F%E9%80%9A%E6%96%B9%E5%BC%8F-%E6%96%87%E5%AD%97-%E4%B8%AD%E6%96%87-%E4%B8%AD%E6%96%87%E6%95%B0%E5%AD%97%E7%9A%84%E6%96%87%E5%AD%97%E5%86%99%E6%B3%95.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Diary - 沟通方式 - 文字 - 中文 - 中文数字的文字写法</source>
      <description>文章摘要： 摘要内容。</description>
      <category>学习笔记/日记</category>
      <pubDate>Fri, 31 Oct 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<table>
<thead>
<tr>
<th style="text-align:center">阿拉伯数字</th>
<th style="text-align:center">中文小写</th>
<th style="text-align:center">中文大写</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">0</td>
<td style="text-align:center">零</td>
<td style="text-align:center">零</td>
</tr>
<tr>
<td style="text-align:center">1</td>
<td style="text-align:center">一</td>
<td style="text-align:center">壹</td>
</tr>
<tr>
<td style="text-align:center">2</td>
<td style="text-align:center">二</td>
<td style="text-align:center">贰</td>
</tr>
<tr>
<td style="text-align:center">3</td>
<td style="text-align:center">三</td>
<td style="text-align:center">叁</td>
</tr>
<tr>
<td style="text-align:center">4</td>
<td style="text-align:center">四</td>
<td style="text-align:center">肆</td>
</tr>
<tr>
<td style="text-align:center">5</td>
<td style="text-align:center">五</td>
<td style="text-align:center">伍</td>
</tr>
<tr>
<td style="text-align:center">6</td>
<td style="text-align:center">六</td>
<td style="text-align:center">陆</td>
</tr>
<tr>
<td style="text-align:center">7</td>
<td style="text-align:center">七</td>
<td style="text-align:center">柒</td>
</tr>
<tr>
<td style="text-align:center">8</td>
<td style="text-align:center">八</td>
<td style="text-align:center">捌</td>
</tr>
<tr>
<td style="text-align:center">9</td>
<td style="text-align:center">九</td>
<td style="text-align:center">玖</td>
</tr>
<tr>
<td style="text-align:center">10</td>
<td style="text-align:center">十</td>
<td style="text-align:center">拾</td>
</tr>
<tr>
<td style="text-align:center"></td>
<td style="text-align:center">百</td>
<td style="text-align:center">百</td>
</tr>
<tr>
<td style="text-align:center"></td>
<td style="text-align:center">千</td>
<td style="text-align:center">千</td>
</tr>
<tr>
<td style="text-align:center"></td>
<td style="text-align:center">万</td>
<td style="text-align:center">万</td>
</tr>
<tr>
<td style="text-align:center"></td>
<td style="text-align:center">亿</td>
<td style="text-align:center">亿</td>
</tr>
</tbody>
</table>
]]></content:encoded>
    </item>
    <item>
      <title>OS - Windows - 问题总结 - 重置用户密码</title>
      <link>https://blog.magictable.ha.cn/software/OS-Windows-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E9%87%8D%E7%BD%AE%E7%94%A8%E6%88%B7%E5%AF%86%E7%A0%81.html</link>
      <guid>https://blog.magictable.ha.cn/software/OS-Windows-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E9%87%8D%E7%BD%AE%E7%94%A8%E6%88%B7%E5%AF%86%E7%A0%81.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">OS - Windows - 问题总结 - 重置用户密码</source>
      <description>文章摘要： windows操作系统重置用户密码。 第一步 打开电脑，进入登陆界面。 进入“Windows工程界面” 按住键盘上的“shift”键，不要松开，同时鼠标点击“重启”按钮。直到出现windows的工程界面。 在工程界面点击“疑难杂症”按钮。 点击“高级选项”按钮。 “命令提示符”按钮。 进入到命令行界面。 第二步 在命令行界面进行以下操作 输...</description>
      <category>软件程序/操作系统</category>
      <pubDate>Thu, 30 Oct 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> windows操作系统重置用户密码。</p>
<!-- more -->
<h2>第一步</h2>
<p>打开电脑，进入登陆界面。</p>
<p>进入“Windows工程界面”</p>
<ul>
<li>按住键盘上的“shift”键，不要松开，同时鼠标点击“重启”按钮。直到出现windows的工程界面。</li>
<li>在工程界面点击“疑难杂症”按钮。</li>
<li>点击“高级选项”按钮。</li>
<li>“命令提示符”按钮。</li>
<li>进入到命令行界面。</li>
</ul>
<h2>第二步</h2>
<p>在命令行界面进行以下操作</p>
<ul>
<li>
<p>输入命令：<code>copy C:\windows\system32\utilman.exe C:\windows\system32\utilman.exebak</code></p>
<ul>
<li>该命令用于把系统进程进行复制。</li>
<li>执行完命令后，会提示复制完成的信息提示。</li>
</ul>
</li>
<li>
<p>输入命令：<code>copy C:\windows\system32\cmd.exe C:\windows\system32\utilman.exe</code></p>
<ul>
<li>复制完成后，关闭命令行终端界面</li>
</ul>
</li>
</ul>
<h2>第三步</h2>
<p>点击“继续”选项按钮，重新进入到登录界面。</p>
<p>右下角的“辅助功能”按钮，进入到命令行终端界面。</p>
<ul>
<li>输入以下命令重置某个用户的密码，命令：<code>net user &lt;用户名&gt; *</code></li>
<li>根据提示输入新密码。（提示在输入的时候是不会有符号提示）</li>
</ul>
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<p>忘记了用户名，查找用户名的命令</p>
<ul>
<li>命令：<code>net localgroup administrators</code></li>
</ul>
<p>输入以上命令就能在界面上显示出所有用户名。</p>
</div>
<h2>第四步</h2>
<p>打开命令行终端，输入以下命令，将之前修改的文件重新复原。</p>
<ul>
<li>还原回原来的文件，命令：<code>copy C:\windows\system32\utilman.exebak C:\windows\system32\utilman.exe</code></li>
<li>删除多余的文件，命令：<code>del C:\windows\system32\utilman.exebak</code></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - 查询手册 - Java SE 11</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-JavaSE11.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-JavaSE11.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - 查询手册 - Java SE 11</source>
      <description>文章摘要： 摘要内容。</description>
      <category>软件程序/程序语言</category>
      <pubDate>Mon, 20 Oct 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - 查询手册 - Java SE 17</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-JavaSE17.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-JavaSE17.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - 查询手册 - Java SE 17</source>
      <description>文章摘要： 摘要内容。</description>
      <category>软件程序/程序语言</category>
      <pubDate>Mon, 20 Oct 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - 查询手册 - Java SE 25</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-JavaSE25.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-JavaSE25.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - 查询手册 - Java SE 25</source>
      <description>文章摘要： 摘要内容。</description>
      <category>软件程序/程序语言</category>
      <pubDate>Mon, 20 Oct 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
]]></content:encoded>
    </item>
    <item>
      <title>Health - 思维模式</title>
      <link>https://blog.magictable.ha.cn/rule/Health-%E6%80%9D%E7%BB%B4%E6%A8%A1%E5%BC%8F.html</link>
      <guid>https://blog.magictable.ha.cn/rule/Health-%E6%80%9D%E7%BB%B4%E6%A8%A1%E5%BC%8F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Health - 思维模式</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 主要特点 注意事项 适用场景</description>
      <category>世界规则/健康</category>
      <pubDate>Fri, 03 Oct 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要特点</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Git - 问题总结 - 删除历史版本（仅保留最新版本）</title>
      <link>https://blog.magictable.ha.cn/software/Package-Git-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E5%88%A0%E9%99%A4%E5%8E%86%E5%8F%B2%E7%89%88%E6%9C%AC%EF%BC%88%E4%BB%85%E4%BF%9D%E7%95%99%E6%9C%80%E6%96%B0%E7%89%88%E6%9C%AC%EF%BC%89.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Git-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E5%88%A0%E9%99%A4%E5%8E%86%E5%8F%B2%E7%89%88%E6%9C%AC%EF%BC%88%E4%BB%85%E4%BF%9D%E7%95%99%E6%9C%80%E6%96%B0%E7%89%88%E6%9C%AC%EF%BC%89.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Git - 问题总结 - 删除历史版本（仅保留最新版本）</source>
      <description>文章摘要： 遇到版本记录过多，内存占用大，打算仅保留最新版本记录。 创建孤立分支执行以下命令，生成一个无历史记录的新分支（如 new_branch），并将当前工作区文件保留。 此时分支无任何提交历史，但文件内容与最新版本一致。 提交最新版本添加所有文件并创建初始提交 此提交将成为新分支的唯一历史记录。 删除原主分支删除旧的主分支（如 master 或 ...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sun, 21 Sep 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 遇到版本记录过多，内存占用大，打算仅保留最新版本记录。</p>
<!-- more -->
<p>创建孤立分支执行以下命令，生成一个无历史记录的新分支（如 new_branch），并将当前工作区文件保留。</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">git</span> checkout <span class="token parameter variable">--orphan</span> new_branch</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><ul>
<li>此时分支无任何提交历史，但文件内容与最新版本一致。</li>
</ul>
<p>提交最新版本添加所有文件并创建初始提交</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">git</span> <span class="token function">add</span> <span class="token parameter variable">-A</span></span>
<span class="line"><span class="token function">git</span> commit <span class="token parameter variable">-m</span> <span class="token string">"Initial commit"</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><ul>
<li>此提交将成为新分支的唯一历史记录。</li>
</ul>
<p>删除原主分支删除旧的主分支（如 master 或 main）</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">git</span> branch <span class="token parameter variable">-D</span> main</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p>重命名新分支将新分支命名为原主分支名</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">git</span> branch <span class="token parameter variable">-m</span> master  <span class="token comment"># 或 main</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><ul>
<li>此时本地仓库仅保留最新提交，历史记录被清空。</li>
</ul>
<p>强制推送至远程仓库</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">git</span> push origin main <span class="token parameter variable">--force</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><ul>
<li>注意：强制推送会覆盖远程仓库历史，确保团队其他成员已同步或备份数据。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Git - 问题总结 - 处理HEAD分支问题</title>
      <link>https://blog.magictable.ha.cn/software/Package-Git-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E5%A4%84%E7%90%86HEAD%E5%88%86%E6%94%AF%E9%97%AE%E9%A2%98.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Git-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E5%A4%84%E7%90%86HEAD%E5%88%86%E6%94%AF%E9%97%AE%E9%A2%98.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Git - 问题总结 - 处理HEAD分支问题</source>
      <description>文章摘要： 摘要内容。 注释 问题原因 origin/HEAD 是远程仓库的默认分支指针（通常指向 origin/master）。 删除历史版本后，若未更新此指针，可能导致分支列表残留。 删除 origin/HEAD 指针 执行以下命令移除远程默认分支指针 删除后，远程分支列表将不再示 origin/HEAD。 重新设置默认分支（可选，推荐） 若需指定...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sun, 21 Sep 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>问题原因</p>
<ul>
<li>origin/HEAD 是远程仓库的默认分支指针（通常指向 origin/master）。</li>
<li>删除历史版本后，若未更新此指针，可能导致分支列表残留。</li>
</ul>
</div>
<p>删除 origin/HEAD 指针</p>
<ul>
<li>执行以下命令移除远程默认分支指针</li>
</ul>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">git</span> remote set-head origin <span class="token parameter variable">-d</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><ul>
<li>删除后，远程分支列表将不再示 origin/HEAD。</li>
</ul>
<p>重新设置默认分支（可选，推荐）</p>
<ul>
<li>若需指定新的默认分支（如main）</li>
</ul>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">git</span> remote set-head origin master</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>商品推广</title>
      <link>https://blog.magictable.ha.cn/%E5%95%86%E5%93%81%E6%8E%A8%E5%B9%BF.html</link>
      <guid>https://blog.magictable.ha.cn/%E5%95%86%E5%93%81%E6%8E%A8%E5%B9%BF.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">商品推广</source>
      <description>文章摘要： 商品推荐。 小米平板8 Pro 柔光版 详细说明：11.2英寸 3.2K 超清屏，搭载骁龙8处理器，澎湃OS3系统，16+512G大内存 京东链接：https://u.jd.com/Br0mBi8</description>
      <pubDate>Sat, 20 Sep 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 商品推荐。</p>
<!-- more-->
<p>小米平板8 Pro 柔光版</p>
<ul>
<li><strong>详细说明</strong>：11.2英寸 3.2K 超清屏，搭载骁龙8处理器，澎湃OS3系统，16+512G大内存</li>
<li><strong>京东链接</strong>：https://u.jd.com/Br0mBi8</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Library - Maven - zaiSDK</title>
      <link>https://blog.magictable.ha.cn/software/Library-Maven-zaiSDK.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Maven-zaiSDK.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Maven - zaiSDK</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 主要功能 注意事项 适用场景 Maven坐标 代码块分析 客户端 apiKey: API key, format is &amp;apos;key.secret&amp;apos; baseUrl: API base URL customHeaders: enableTokenCache: 启用令牌缓存以提高性能 tokenExpire: 令牌过期...</description>
      <category>软件程序/代码类库</category>
      <pubDate>Thu, 21 Aug 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>Maven坐标</h2>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- 智谱AI开放平台SDK --&gt;</span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>ai.z.openapi<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>zai-sdk<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>版本号<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- 请替换为实际的版本号 --&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>代码块分析</h2>
<h3>客户端</h3>
<ul>
<li>apiKey: API key, format is 'key.secret'</li>
<li>baseUrl: API base URL</li>
<li>customHeaders:</li>
<li>enableTokenCache: 启用令牌缓存以提高性能</li>
<li>tokenExpire: 令牌过期时间（毫秒）</li>
<li>connectionPool: 连接池配置（最大连接数、保持活动时间、时间单位）</li>
</ul>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>util<span class="token punctuation">.</span></span><span class="token class-name">Arrays</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">ai<span class="token punctuation">.</span>z<span class="token punctuation">.</span>openapi<span class="token punctuation">.</span></span><span class="token class-name">ZaiClient</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">ai<span class="token punctuation">.</span>z<span class="token punctuation">.</span>openapi<span class="token punctuation">.</span>service<span class="token punctuation">.</span>model<span class="token punctuation">.</span></span><span class="token class-name">ChatCompletionCreateParams</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">ai<span class="token punctuation">.</span>z<span class="token punctuation">.</span>openapi<span class="token punctuation">.</span>service<span class="token punctuation">.</span>model<span class="token punctuation">.</span></span><span class="token class-name">ChatCompletionResponse</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">ai<span class="token punctuation">.</span>z<span class="token punctuation">.</span>openapi<span class="token punctuation">.</span>service<span class="token punctuation">.</span>model<span class="token punctuation">.</span></span><span class="token class-name">ChatMessage</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">ai<span class="token punctuation">.</span>z<span class="token punctuation">.</span>openapi<span class="token punctuation">.</span>service<span class="token punctuation">.</span>model<span class="token punctuation">.</span></span><span class="token class-name">ChatMessageRole</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">ai<span class="token punctuation">.</span>z<span class="token punctuation">.</span>openapi<span class="token punctuation">.</span>service<span class="token punctuation">.</span>model<span class="token punctuation">.</span></span><span class="token class-name">ImageUrl</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">ai<span class="token punctuation">.</span>z<span class="token punctuation">.</span>openapi<span class="token punctuation">.</span>service<span class="token punctuation">.</span>model<span class="token punctuation">.</span></span><span class="token class-name">MessageContent</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">MainTest</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 简单配置示例</span></span>
<span class="line">        <span class="token class-name">ZaiClient</span> basicClient <span class="token operator">=</span> <span class="token class-name">ZaiClient</span><span class="token punctuation">.</span><span class="token function">builder</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">apiKey</span><span class="token punctuation">(</span><span class="token string">"xxx.xxx"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">build</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        </span>
<span class="line">        <span class="token comment">// 完整配置示例</span></span>
<span class="line">        <span class="token class-name">Map</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">String</span><span class="token punctuation">,</span> <span class="token class-name">String</span><span class="token punctuation">&gt;</span></span> customHeaders <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">HashMap</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token punctuation">&gt;</span></span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        customHeaders<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">"Session-Id"</span><span class="token punctuation">,</span> <span class="token string">"custom-session-id-xx"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token class-name">ZaiClient</span> advancedClient <span class="token operator">=</span> <span class="token class-name">ZaiClient</span><span class="token punctuation">.</span><span class="token function">builder</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line">                <span class="token punctuation">.</span><span class="token function">apiKey</span><span class="token punctuation">(</span><span class="token string">"your.api_key"</span><span class="token punctuation">)</span></span>
<span class="line">                <span class="token punctuation">.</span><span class="token function">baseUrl</span><span class="token punctuation">(</span><span class="token string">"https://api.z.ai/api/paas/v4/"</span><span class="token punctuation">)</span></span>
<span class="line">                <span class="token punctuation">.</span><span class="token function">customHeaders</span><span class="token punctuation">(</span>customHeaders<span class="token punctuation">)</span></span>
<span class="line">                <span class="token punctuation">.</span><span class="token function">enableTokenCache</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line">                <span class="token punctuation">.</span><span class="token function">tokenExpire</span><span class="token punctuation">(</span><span class="token number">3600000</span><span class="token punctuation">)</span> <span class="token comment">// 令牌过期时间（毫秒）</span></span>
<span class="line">                <span class="token punctuation">.</span><span class="token function">connectionPool</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">,</span> <span class="token class-name">TimeUnit</span><span class="token punctuation">.</span><span class="token constant">MINUTES</span><span class="token punctuation">)</span></span>
<span class="line">                <span class="token punctuation">.</span><span class="token function">build</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        </span>
<span class="line">        <span class="token comment">// Plus 客户端</span></span>
<span class="line">        <span class="token class-name">ChatCompletionCreateParams</span> request <span class="token operator">=</span> <span class="token class-name">ChatCompletionCreateParams</span><span class="token punctuation">.</span><span class="token function">builder</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line">                <span class="token punctuation">.</span><span class="token function">model</span><span class="token punctuation">(</span><span class="token string">"glm-4v-plus-0111"</span><span class="token punctuation">)</span></span>
<span class="line">                <span class="token punctuation">.</span><span class="token function">messages</span><span class="token punctuation">(</span><span class="token class-name">Arrays</span><span class="token punctuation">.</span><span class="token function">asList</span><span class="token punctuation">(</span></span>
<span class="line">                        <span class="token class-name">ChatMessage</span><span class="token punctuation">.</span><span class="token function">builder</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line">                                <span class="token punctuation">.</span><span class="token function">role</span><span class="token punctuation">(</span><span class="token class-name">ChatMessageRole</span><span class="token punctuation">.</span><span class="token constant">USER</span><span class="token punctuation">.</span><span class="token function">value</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span></span>
<span class="line">                                <span class="token punctuation">.</span><span class="token function">content</span><span class="token punctuation">(</span><span class="token class-name">Arrays</span><span class="token punctuation">.</span><span class="token function">asList</span><span class="token punctuation">(</span></span>
<span class="line">                                        <span class="token class-name">MessageContent</span><span class="token punctuation">.</span><span class="token function">builder</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line">                                                <span class="token punctuation">.</span><span class="token function">type</span><span class="token punctuation">(</span><span class="token string">"text"</span><span class="token punctuation">)</span></span>
<span class="line">                                                <span class="token punctuation">.</span><span class="token function">text</span><span class="token punctuation">(</span><span class="token string">"What is in this image?"</span><span class="token punctuation">)</span></span>
<span class="line">                                                <span class="token punctuation">.</span><span class="token function">build</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span></span>
<span class="line">                                        <span class="token class-name">MessageContent</span><span class="token punctuation">.</span><span class="token function">builder</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line">                                                <span class="token punctuation">.</span><span class="token function">type</span><span class="token punctuation">(</span><span class="token string">"image_url"</span><span class="token punctuation">)</span></span>
<span class="line">                                                <span class="token punctuation">.</span><span class="token function">imageUrl</span><span class="token punctuation">(</span><span class="token class-name">ImageUrl</span><span class="token punctuation">.</span><span class="token function">builder</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line">                                                        <span class="token punctuation">.</span><span class="token function">url</span><span class="token punctuation">(</span><span class="token string">"https://aigc-files.bigmodel.cn/api/cogview/20250723213827da171a419b9b4906_0.png"</span><span class="token punctuation">)</span></span>
<span class="line">                                                        <span class="token punctuation">.</span><span class="token function">build</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span></span>
<span class="line">                                                <span class="token punctuation">.</span><span class="token function">build</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span></span>
<span class="line">                                <span class="token punctuation">.</span><span class="token function">build</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span></span>
<span class="line">                <span class="token punctuation">.</span><span class="token function">build</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token class-name">ChatCompletionResponse</span> response <span class="token operator">=</span> client<span class="token punctuation">.</span><span class="token function">chat</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">createChatCompletion</span><span class="token punctuation">(</span>request<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token keyword">if</span> <span class="token punctuation">(</span>response<span class="token punctuation">.</span><span class="token function">isSuccess</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token class-name">Object</span> reply <span class="token operator">=</span> response<span class="token punctuation">.</span><span class="token function">getData</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getChoices</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getMessage</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getContent</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>reply<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token class-name">System</span><span class="token punctuation">.</span>err<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"错误: "</span> <span class="token operator">+</span> response<span class="token punctuation">.</span><span class="token function">getMsg</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">        </span>
<span class="line">        <span class="token comment">// 深度思考/思维链 客户端</span></span>
<span class="line">        <span class="token class-name">ChatCompletionCreateParams</span> request <span class="token operator">=</span> <span class="token class-name">ChatCompletionCreateParams</span><span class="token punctuation">.</span><span class="token function">builder</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line">                <span class="token punctuation">.</span><span class="token function">model</span><span class="token punctuation">(</span><span class="token string">"glm-4.1v-thinking-flashx"</span><span class="token punctuation">)</span></span>
<span class="line">                <span class="token punctuation">.</span><span class="token function">messages</span><span class="token punctuation">(</span><span class="token class-name">Arrays</span><span class="token punctuation">.</span><span class="token function">asList</span><span class="token punctuation">(</span></span>
<span class="line">                        <span class="token class-name">ChatMessage</span><span class="token punctuation">.</span><span class="token function">builder</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line">                                <span class="token punctuation">.</span><span class="token function">role</span><span class="token punctuation">(</span><span class="token class-name">ChatMessageRole</span><span class="token punctuation">.</span><span class="token constant">USER</span><span class="token punctuation">.</span><span class="token function">value</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span></span>
<span class="line">                                <span class="token punctuation">.</span><span class="token function">content</span><span class="token punctuation">(</span><span class="token class-name">Arrays</span><span class="token punctuation">.</span><span class="token function">asList</span><span class="token punctuation">(</span></span>
<span class="line">                                        <span class="token class-name">MessageContent</span><span class="token punctuation">.</span><span class="token function">builder</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line">                                                <span class="token punctuation">.</span><span class="token function">type</span><span class="token punctuation">(</span><span class="token string">"text"</span><span class="token punctuation">)</span></span>
<span class="line">                                                <span class="token punctuation">.</span><span class="token function">text</span><span class="token punctuation">(</span><span class="token string">"Describe this image"</span><span class="token punctuation">)</span></span>
<span class="line">                                                <span class="token punctuation">.</span><span class="token function">build</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span></span>
<span class="line">                                        <span class="token class-name">MessageContent</span><span class="token punctuation">.</span><span class="token function">builder</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line">                                                <span class="token punctuation">.</span><span class="token function">type</span><span class="token punctuation">(</span><span class="token string">"image_url"</span><span class="token punctuation">)</span></span>
<span class="line">                                                <span class="token punctuation">.</span><span class="token function">imageUrl</span><span class="token punctuation">(</span><span class="token class-name">ImageUrl</span><span class="token punctuation">.</span><span class="token function">builder</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line">                                                        <span class="token punctuation">.</span><span class="token function">url</span><span class="token punctuation">(</span><span class="token string">"https://aigc-files.bigmodel.cn/api/cogview/20250723213827da171a419b9b4906_0.png"</span><span class="token punctuation">)</span></span>
<span class="line">                                                        <span class="token punctuation">.</span><span class="token function">build</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span></span>
<span class="line">                                                <span class="token punctuation">.</span><span class="token function">build</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span></span>
<span class="line">                                <span class="token punctuation">.</span><span class="token function">build</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span></span>
<span class="line">                <span class="token punctuation">.</span><span class="token function">build</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token class-name">ChatCompletionResponse</span> response <span class="token operator">=</span> client<span class="token punctuation">.</span><span class="token function">chat</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">createChatCompletion</span><span class="token punctuation">(</span>request<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token keyword">if</span> <span class="token punctuation">(</span>response<span class="token punctuation">.</span><span class="token function">isSuccess</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token class-name">Object</span> reply <span class="token operator">=</span> response<span class="token punctuation">.</span><span class="token function">getData</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getChoices</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getMessage</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getContent</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>reply<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token class-name">System</span><span class="token punctuation">.</span>err<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"错误: "</span> <span class="token operator">+</span> response<span class="token punctuation">.</span><span class="token function">getMsg</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">ai<span class="token punctuation">.</span>z<span class="token punctuation">.</span>openapi<span class="token punctuation">.</span></span><span class="token class-name">ZaiClient</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">MainTest</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 智谱AI平台特定客户端</span></span>
<span class="line">        <span class="token class-name">ZaiClient</span> zhipuClient <span class="token operator">=</span> <span class="token class-name">ZaiClient</span><span class="token punctuation">.</span><span class="token function">ofZHIPU</span><span class="token punctuation">(</span><span class="token string">"your.api_key"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">build</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        </span>
<span class="line">        <span class="token comment">// 完整配置示例</span></span>
<span class="line">        <span class="token class-name">Map</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">String</span><span class="token punctuation">,</span> <span class="token class-name">String</span><span class="token punctuation">&gt;</span></span> customHeaders <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">HashMap</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token punctuation">&gt;</span></span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        customHeaders<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">"Session-Id"</span><span class="token punctuation">,</span> <span class="token string">"custom-session-id-xx"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token class-name">ZhipuAiClient</span> zhipuAiClient <span class="token operator">=</span> <span class="token class-name">ZhipuAiClient</span><span class="token punctuation">.</span><span class="token function">builder</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line">                <span class="token punctuation">.</span><span class="token function">apiKey</span><span class="token punctuation">(</span><span class="token string">"your.api_key"</span><span class="token punctuation">)</span></span>
<span class="line">                <span class="token punctuation">.</span><span class="token function">baseUrl</span><span class="token punctuation">(</span><span class="token string">"https://api.z.ai/api/paas/v4/"</span><span class="token punctuation">)</span></span>
<span class="line">                <span class="token punctuation">.</span><span class="token function">customHeaders</span><span class="token punctuation">(</span>customHeaders<span class="token punctuation">)</span></span>
<span class="line">                <span class="token punctuation">.</span><span class="token function">enableTokenCache</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line">                <span class="token punctuation">.</span><span class="token function">tokenExpire</span><span class="token punctuation">(</span><span class="token number">3600000</span><span class="token punctuation">)</span> <span class="token comment">// 令牌过期时间（毫秒）</span></span>
<span class="line">                <span class="token punctuation">.</span><span class="token function">connectionPool</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">,</span> <span class="token class-name">TimeUnit</span><span class="token punctuation">.</span><span class="token constant">MINUTES</span><span class="token punctuation">)</span></span>
<span class="line">                <span class="token punctuation">.</span><span class="token function">build</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>聊天</h3>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>util<span class="token punctuation">.</span></span><span class="token class-name">Arrays</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">ai<span class="token punctuation">.</span>z<span class="token punctuation">.</span>openapi<span class="token punctuation">.</span></span><span class="token class-name">ZhipuAiClient</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">ai<span class="token punctuation">.</span>z<span class="token punctuation">.</span>openapi<span class="token punctuation">.</span>core<span class="token punctuation">.</span></span><span class="token class-name">Constants</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">ai<span class="token punctuation">.</span>z<span class="token punctuation">.</span>openapi<span class="token punctuation">.</span>service<span class="token punctuation">.</span>model<span class="token punctuation">.</span></span><span class="token class-name">AsyncResultRetrieveParams</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">ai<span class="token punctuation">.</span>z<span class="token punctuation">.</span>openapi<span class="token punctuation">.</span>service<span class="token punctuation">.</span>model<span class="token punctuation">.</span></span><span class="token class-name">ChatCompletionCreateParams</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">ai<span class="token punctuation">.</span>z<span class="token punctuation">.</span>openapi<span class="token punctuation">.</span>service<span class="token punctuation">.</span>model<span class="token punctuation">.</span></span><span class="token class-name">ChatCompletionResponse</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">ai<span class="token punctuation">.</span>z<span class="token punctuation">.</span>openapi<span class="token punctuation">.</span>service<span class="token punctuation">.</span>model<span class="token punctuation">.</span></span><span class="token class-name">ChatMessage</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">ai<span class="token punctuation">.</span>z<span class="token punctuation">.</span>openapi<span class="token punctuation">.</span>service<span class="token punctuation">.</span>model<span class="token punctuation">.</span></span><span class="token class-name">ChatMessageRole</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">ai<span class="token punctuation">.</span>z<span class="token punctuation">.</span>openapi<span class="token punctuation">.</span>service<span class="token punctuation">.</span>model<span class="token punctuation">.</span></span><span class="token class-name">QueryModelResultResponse</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">MainTest</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token doc-comment comment">/**</span>
<span class="line">        * 异步</span>
<span class="line">        */</span></span>
<span class="line">        <span class="token comment">// 创建客户端，建议通过环境变量设置API key（API密钥）</span></span>
<span class="line">        <span class="token class-name">ZhipuAiClient</span> client <span class="token operator">=</span> <span class="token class-name">ZhipuAiClient</span><span class="token punctuation">.</span><span class="token function">builder</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">build</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        </span>
<span class="line">        <span class="token comment">// 创建聊天请求</span></span>
<span class="line">        <span class="token class-name">ChatCompletionCreateParams</span> request <span class="token operator">=</span> <span class="token class-name">ChatCompletionCreateParams</span><span class="token punctuation">.</span><span class="token function">builder</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line">                <span class="token punctuation">.</span><span class="token function">model</span><span class="token punctuation">(</span><span class="token class-name">Constants<span class="token punctuation">.</span>ModelChatGLM4_5</span><span class="token punctuation">)</span></span>
<span class="line">                <span class="token punctuation">.</span><span class="token function">messages</span><span class="token punctuation">(</span><span class="token class-name">Arrays</span><span class="token punctuation">.</span><span class="token function">asList</span><span class="token punctuation">(</span></span>
<span class="line">                        <span class="token class-name">ChatMessage</span><span class="token punctuation">.</span><span class="token function">builder</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line">                                <span class="token punctuation">.</span><span class="token function">role</span><span class="token punctuation">(</span><span class="token class-name">ChatMessageRole</span><span class="token punctuation">.</span><span class="token constant">USER</span><span class="token punctuation">.</span><span class="token function">value</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span></span>
<span class="line">                                <span class="token punctuation">.</span><span class="token function">content</span><span class="token punctuation">(</span><span class="token string">"Hello, how are you?"</span><span class="token punctuation">)</span></span>
<span class="line">                                <span class="token punctuation">.</span><span class="token function">build</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span></span>
<span class="line">                <span class="token punctuation">.</span><span class="token function">stream</span><span class="token punctuation">(</span><span class="token boolean">false</span><span class="token punctuation">)</span></span>
<span class="line">                <span class="token punctuation">.</span><span class="token function">temperature</span><span class="token punctuation">(</span><span class="token number">0.7f</span><span class="token punctuation">)</span></span>
<span class="line">                <span class="token punctuation">.</span><span class="token function">maxTokens</span><span class="token punctuation">(</span><span class="token number">1024</span><span class="token punctuation">)</span></span>
<span class="line">                <span class="token punctuation">.</span><span class="token function">build</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token keyword">try</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token comment">// 执行请求</span></span>
<span class="line">            <span class="token class-name">ChatCompletionResponse</span> response <span class="token operator">=</span> client<span class="token punctuation">.</span><span class="token function">chat</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">asyncChatCompletion</span><span class="token punctuation">(</span>request<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Response Task: "</span> <span class="token operator">+</span> response<span class="token punctuation">.</span><span class="token function">getData</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token class-name">Thread</span><span class="token punctuation">.</span><span class="token function">sleep</span><span class="token punctuation">(</span><span class="token number">10000</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 这里暂停多少毫秒，不是实时</span></span>
<span class="line">            <span class="token class-name">QueryModelResultResponse</span> queryModelResultResponse <span class="token operator">=</span> client<span class="token punctuation">.</span><span class="token function">chat</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line">                    <span class="token punctuation">.</span><span class="token function">retrieveAsyncResult</span><span class="token punctuation">(</span><span class="token class-name">AsyncResultRetrieveParams</span><span class="token punctuation">.</span><span class="token function">builder</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line">                            <span class="token punctuation">.</span><span class="token function">taskId</span><span class="token punctuation">(</span>response<span class="token punctuation">.</span><span class="token function">getData</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getId</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">build</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Response Data: "</span> <span class="token operator">+</span> queryModelResultResponse<span class="token punctuation">.</span><span class="token function">getData</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">Exception</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token class-name">System</span><span class="token punctuation">.</span>err<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Exception occurred: "</span> <span class="token operator">+</span> e<span class="token punctuation">.</span><span class="token function">getMessage</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            e<span class="token punctuation">.</span><span class="token function">printStackTrace</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">        </span>
<span class="line">        <span class="token doc-comment comment">/**</span>
<span class="line">        * 非异步</span>
<span class="line">        */</span></span>
<span class="line">        <span class="token class-name">ChatCompletionCreateParams</span> request <span class="token operator">=</span> <span class="token class-name">ChatCompletionCreateParams</span><span class="token punctuation">.</span><span class="token function">builder</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line">                <span class="token punctuation">.</span><span class="token function">model</span><span class="token punctuation">(</span><span class="token class-name">Constants<span class="token punctuation">.</span>ModelChatGLM4_5</span><span class="token punctuation">)</span></span>
<span class="line">                <span class="token punctuation">.</span><span class="token function">messages</span><span class="token punctuation">(</span><span class="token class-name">Arrays</span><span class="token punctuation">.</span><span class="token function">asList</span><span class="token punctuation">(</span></span>
<span class="line">                        <span class="token class-name">ChatMessage</span><span class="token punctuation">.</span><span class="token function">builder</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line">                                <span class="token punctuation">.</span><span class="token function">role</span><span class="token punctuation">(</span><span class="token class-name">ChatMessageRole</span><span class="token punctuation">.</span><span class="token constant">USER</span><span class="token punctuation">.</span><span class="token function">value</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span></span>
<span class="line">                                <span class="token punctuation">.</span><span class="token function">content</span><span class="token punctuation">(</span><span class="token string">"Hello, how to learn english?"</span><span class="token punctuation">)</span></span>
<span class="line">                                <span class="token punctuation">.</span><span class="token function">build</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span></span>
<span class="line">                <span class="token punctuation">.</span><span class="token function">stream</span><span class="token punctuation">(</span><span class="token boolean">false</span><span class="token punctuation">)</span></span>
<span class="line">                <span class="token punctuation">.</span><span class="token function">thinking</span><span class="token punctuation">(</span><span class="token class-name">ChatThinking</span><span class="token punctuation">.</span><span class="token function">builder</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">type</span><span class="token punctuation">(</span><span class="token string">"enabled"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">build</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span></span>
<span class="line">                <span class="token punctuation">.</span><span class="token function">temperature</span><span class="token punctuation">(</span><span class="token number">0.7f</span><span class="token punctuation">)</span></span>
<span class="line">                <span class="token punctuation">.</span><span class="token function">maxTokens</span><span class="token punctuation">(</span><span class="token number">1024</span><span class="token punctuation">)</span></span>
<span class="line">                <span class="token punctuation">.</span><span class="token function">build</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token keyword">try</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token comment">// 执行请求</span></span>
<span class="line">            <span class="token class-name">ChatCompletionResponse</span> response <span class="token operator">=</span> client<span class="token punctuation">.</span><span class="token function">chat</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">createChatCompletion</span><span class="token punctuation">(</span>request<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token keyword">if</span> <span class="token punctuation">(</span>response<span class="token punctuation">.</span><span class="token function">isSuccess</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                <span class="token class-name">Object</span> content <span class="token operator">=</span> response<span class="token punctuation">.</span><span class="token function">getData</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getChoices</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getMessage</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Response: "</span> <span class="token operator">+</span> content<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span></span>
<span class="line">                <span class="token class-name">System</span><span class="token punctuation">.</span>err<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Error: "</span> <span class="token operator">+</span> response<span class="token punctuation">.</span><span class="token function">getMsg</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token punctuation">}</span></span>
<span class="line">        <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">Exception</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token class-name">System</span><span class="token punctuation">.</span>err<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Exception occurred: "</span> <span class="token operator">+</span> e<span class="token punctuation">.</span><span class="token function">getMessage</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            e<span class="token punctuation">.</span><span class="token function">printStackTrace</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - 问题总结 - 搭建将Python代码集成到Java项目中的开发方案</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E6%90%AD%E5%BB%BA%E5%B0%86Python%E4%BB%A3%E7%A0%81%E9%9B%86%E6%88%90%E5%88%B0Java%E9%A1%B9%E7%9B%AE%E4%B8%AD%E7%9A%84%E5%BC%80%E5%8F%91%E6%96%B9%E6%A1%88.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E6%90%AD%E5%BB%BA%E5%B0%86Python%E4%BB%A3%E7%A0%81%E9%9B%86%E6%88%90%E5%88%B0Java%E9%A1%B9%E7%9B%AE%E4%B8%AD%E7%9A%84%E5%BC%80%E5%8F%91%E6%96%B9%E6%A1%88.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - 问题总结 - 搭建将Python代码集成到Java项目中的开发方案</source>
      <description>文章摘要： 如何将Python代码集成到Java项目中，实现两种语言共存。 整体打包分发方案的目录结构设计 建议将Python虚拟环境、源码与Java代码按以下结构组织，确保跨平台兼容性： 提示 推荐原因 构建工具兼容性：Maven/Gradle默认会编译main/java下的代码，并打包main/resources中的资源。若将Python虚拟环境（...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Tue, 05 Aug 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 如何将Python代码集成到Java项目中，实现两种语言共存。</p>
<!-- more -->
<h2>整体打包分发方案的目录结构设计</h2>
<ul>
<li>建议将Python虚拟环境、源码与Java代码按以下结构组织，确保跨平台兼容性：</li>
</ul>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">项目根目录/</span>
<span class="line">├── src/                   # Java项目目录</span>
<span class="line">│   └── main/</span>
<span class="line">│       └── java/          # Java源码（.java文件）</span>
<span class="line">│       └── resources/     # 静态资源文件。</span>
<span class="line">├── python/                # Python项目目录</span>
<span class="line">│   ├── venv/              # 虚拟环境（含解释器和依赖）</span>
<span class="line">│   └── src/               # Python源码（.py文件）</span>
<span class="line">│   ├── requirements.txt/  # Pyhton第三方类库依赖清单</span>
<span class="line">├── target/                # 构建输出目录（如JAR包）</span>
<span class="line">└── pom.xml/               # Java的Maven配置文件</span>
<span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container tip">
<p class="hint-container-title">提示</p>
<p>推荐原因</p>
<ul>
<li><strong>构建工具兼容性</strong>：Maven/Gradle默认会编译<code>main/java</code>下的代码，并打包<code>main/resources</code>中的资源。若将Python虚拟环境（含大量二进制文件）放入<code>resources</code>，会导致：打包产物体积急剧膨胀（虚拟环境通常数百MB），以及构建工具可能错误尝试解析非Java文件（如<code>.pyc</code>或<code>.so</code>库），引发构建失败。</li>
<li><strong>运行时隔离性</strong>：Python虚拟环境需保持独立路径结构（如<code>venv/bin/python</code>、<code>venv/Lib/site-packages</code>）。若嵌入<code>resources</code>，Java程序运行时需解压整个虚拟环境到临时目录，增加复杂度。</li>
<li><strong>维护与分发便利性</strong>：独立目录便于通过<code>.gitignore</code>排除虚拟环境（避免提交二进制文件），再次减少项目大小。</li>
</ul>
</div>
<h2>Java调用Python脚本</h2>
<ul>
<li>使用<code>ProcessBuilder</code>通过相对路径调用项目内Python解释器。</li>
</ul>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// Windows示例</span></span>
<span class="line"><span class="token class-name">String</span> pythonExe <span class="token operator">=</span> <span class="token string">"./python/venv/Scripts/python.exe"</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token class-name">String</span> scriptPath <span class="token operator">=</span> <span class="token string">"./python/scripts/main.py"</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token class-name">ProcessBuilder</span> pb <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ProcessBuilder</span><span class="token punctuation">(</span>pythonExe<span class="token punctuation">,</span> scriptPath<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">pb<span class="token punctuation">.</span><span class="token function">directory</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">File</span><span class="token punctuation">(</span><span class="token class-name">System</span><span class="token punctuation">.</span><span class="token function">getProperty</span><span class="token punctuation">(</span><span class="token string">"user.dir"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 设置工作目录为项目根目录</span></span>
<span class="line"><span class="token class-name">Process</span> p <span class="token operator">=</span> pb<span class="token punctuation">.</span><span class="token function">start</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul>
<li>Linux/macOS需调整路径为<code>./python/venv/bin/python</code>。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - 问题总结 - 项目同时支持多个Java版本</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E9%A1%B9%E7%9B%AE%E5%90%8C%E6%97%B6%E6%94%AF%E6%8C%81%E5%A4%9A%E4%B8%AAJava%E7%89%88%E6%9C%AC.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E9%A1%B9%E7%9B%AE%E5%90%8C%E6%97%B6%E6%94%AF%E6%8C%81%E5%A4%9A%E4%B8%AAJava%E7%89%88%E6%9C%AC.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - 问题总结 - 项目同时支持多个Java版本</source>
      <description>文章摘要： 摘要内容。 软件能够支持多个不同Java版本，主要是通过特定的技术手段实现的，而不仅仅是使用多个Java版本之间的相同部分。 一、多版本JAR特性 Java 9及更高版本引入了多版本JAR(Multi-Release JAR)特性，允许在同一个JAR文件中包含针对不同Java版本的特定实现。这种JAR文件结构中，可以包含特定于Java版本的...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Tue, 05 Aug 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<p>软件能够支持多个不同Java版本，主要是通过特定的技术手段实现的，而不仅仅是使用多个Java版本之间的相同部分。</p>
<p>一、多版本JAR特性</p>
<ul>
<li>Java 9及更高版本引入了多版本JAR(Multi-Release JAR)特性，允许在同一个JAR文件中包含针对不同Java版本的特定实现。这种JAR文件结构中，可以包含特定于Java版本的类文件，当JAR在不同版本的JRE上运行时，会自动选择对应版本的类文件执行。这样，开发者可以为不同Java版本提供优化或特定功能的实现，同时保持API的兼容性。</li>
</ul>
<p>二、类加载器技术</p>
<ul>
<li>另一种实现多版本支持的方法是使用类加载器技术。通过自定义类加载器，可以在运行时动态加载适合当前Java版本的类实现。这种方法允许应用程序检测当前运行的Java版本，然后加载相应版本的类文件，从而实现版本兼容性。</li>
</ul>
<p>三、环境配置与版本管理</p>
<ul>
<li>在开发和部署环境中，可以通过配置多个Java版本并设置适当的环境变量来实现多版本支持。例如，可以配置多个JAVA_HOME变量，并在需要时切换使用不同的Java版本。这种方法特别适合开发环境和需要同时支持多个Java版本的应用服务器。</li>
</ul>
<p>四、兼容性设计与抽象</p>
<p>软件在设计时采用良好的抽象和接口设计，尽量使用各Java版本中都稳定存在的API和特性。对于版本特定的功能，则通过条件编译或运行时检测来处理。种方法确保了核心功能在多个Java版本上的兼容性，同时允许利用新版本的特性。</p>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Python3 - 问题总结 - 通过Python嵌入式版本实现项目整合包，且无需安装和环境变量</title>
      <link>https://blog.magictable.ha.cn/software/Language-Python3-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E9%80%9A%E8%BF%87Python%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%89%88%E6%9C%AC%E5%AE%9E%E7%8E%B0%E9%A1%B9%E7%9B%AE%E6%95%B4%E5%90%88%E5%8C%85%EF%BC%8C%E4%B8%94%E6%97%A0%E9%9C%80%E5%AE%89%E8%A3%85%E5%92%8C%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Python3-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E9%80%9A%E8%BF%87Python%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%89%88%E6%9C%AC%E5%AE%9E%E7%8E%B0%E9%A1%B9%E7%9B%AE%E6%95%B4%E5%90%88%E5%8C%85%EF%BC%8C%E4%B8%94%E6%97%A0%E9%9C%80%E5%AE%89%E8%A3%85%E5%92%8C%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Python3 - 问题总结 - 通过Python嵌入式版本实现项目整合包，且无需安装和环境变量</source>
      <description>文章摘要： 关于创建独立虚拟环境，是否依旧需要别人在运行前安装Python，以及能否下载Python源码包含了解释器，一起存放在项目中打包，实现其他计算机中无需再配置Python。 注释 常规创建虚拟环境的方式（如python -m venv）仍需目标系统预装Python解释器。 若要完全脱离系统Python环境，可采用以下方案： 方案一：使用Pyth...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Tue, 05 Aug 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 关于创建独立虚拟环境，是否依旧需要别人在运行前安装Python，以及能否下载Python源码包含了解释器，一起存放在项目中打包，实现其他计算机中无需再配置Python。</p>
<!-- more -->
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>常规创建虚拟环境的方式（如python -m venv）仍需目标系统预装Python解释器。</p>
</div>
<p>若要完全脱离系统Python环境，可采用以下方案：</p>
<p><strong>方案一：使用Python嵌入式版本</strong></p>
<ul>
<li>从Python官网下载嵌入式发行版（Windows为<code>.zip</code>包，Linux/macOS为压缩包），将其解压至项目目录（如<code>python/embedded/</code>）。此版本包含完整解释器，无需系统安装。</li>
</ul>
<p><strong>方案二：基于嵌入式版本创建虚拟环境</strong></p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line">   ./python/embedded/python.exe <span class="token parameter variable">-m</span> venv python/venv  <span class="token comment"># Windows</span></span>
<span class="line">   ./python/embedded/bin/python <span class="token parameter variable">-m</span> venv python/venv <span class="token comment"># Linux/macOS</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><ul>
<li>后续在<code>python/venv</code>中安装依赖，虚拟环境将完全依赖项目内的嵌入式解释器，与系统Python隔离。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Diary - 工作流 - 数据管理</title>
      <link>https://blog.magictable.ha.cn/note/Diary-%E5%B7%A5%E4%BD%9C%E6%B5%81-%E6%95%B0%E6%8D%AE%E7%AE%A1%E7%90%86.html</link>
      <guid>https://blog.magictable.ha.cn/note/Diary-%E5%B7%A5%E4%BD%9C%E6%B5%81-%E6%95%B0%E6%8D%AE%E7%AE%A1%E7%90%86.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Diary - 工作流 - 数据管理</source>
      <description>文章摘要： 摘要内容。 简介 需求 电子邮箱 CardDAV通讯录 LDAP通讯录 远程日历 方案 使用Obsidian软件进行管理</description>
      <category>学习笔记/日记</category>
      <pubDate>Fri, 25 Jul 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<h2>需求</h2>
<p>电子邮箱</p>
<p>CardDAV通讯录</p>
<p>LDAP通讯录</p>
<p>远程日历</p>
<h2>方案</h2>
<p>使用Obsidian软件进行管理</p>
<p><a href="/note/Solution-%E6%95%B0%E5%AD%97%E8%8A%B1%E5%9B%AD.html" target="_blank">Solution-数字花园</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 通信 - 技术 - 无线电 - 业余无线电台 - 查询手册 - 呼号编制和核发要求</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-%E6%97%A0%E7%BA%BF%E7%94%B5-%E4%B8%9A%E4%BD%99%E6%97%A0%E7%BA%BF%E7%94%B5%E5%8F%B0-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-%E5%91%BC%E5%8F%B7%E7%BC%96%E5%88%B6%E5%92%8C%E6%A0%B8%E5%8F%91%E8%A6%81%E6%B1%82.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-%E6%97%A0%E7%BA%BF%E7%94%B5-%E4%B8%9A%E4%BD%99%E6%97%A0%E7%BA%BF%E7%94%B5%E5%8F%B0-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-%E5%91%BC%E5%8F%B7%E7%BC%96%E5%88%B6%E5%92%8C%E6%A0%B8%E5%8F%91%E8%A6%81%E6%B1%82.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 通信 - 技术 - 无线电 - 业余无线电台 - 查询手册 - 呼号编制和核发要求</source>
      <description>文章摘要： 来源自“中国无线电协会业余无线电分会（CRAC）”，发表于2024年02约29日的“业余无线电台管理办法-中华人民共和国工业和信息化部第67号令”中的呼号编制和核发要求。 相关信息 外部相关文章 业余无线电台管理办法-中华人民共和国工业和信息化部第67号令，来源自“中国无线电协会业余无线电分会（CRAC）”，发表于2024年02约29日。 ...</description>
      <category>学习笔记/技术</category>
      <pubDate>Tue, 22 Jul 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 来源自“中国无线电协会业余无线电分会（CRAC）”，发表于2024年02约29日的“业余无线电台管理办法-中华人民共和国工业和信息化部第67号令”中的呼号编制和核发要求。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li><a href="http://www.crac.org.cn/News/Detail?ID=db319c6c6a7d461c88b94281ae8cb74e" target="_blank" rel="noopener noreferrer">业余无线电台管理办法-中华人民共和国工业和信息化部第67号令</a>，来源自“中国无线电协会业余无线电分会（CRAC）”，发表于2024年02约29日。</li>
</ul>
<p>内部相关文章</p>
<ul>
<li></li>
</ul>
</div>
<h2>呼号编制和核发要求</h2>
<p>业余无线电台呼号一般由呼号前缀、电台种类、分区编号、呼号后缀四部分组成。</p>
<ul>
<li>
<p><strong>呼号前缀</strong>（呼号第一部分）：由一位字母组成，为国际电信联盟分配的呼号前缀字母 B。</p>
</li>
<li>
<p><strong>电台种类</strong>（呼号第二部分）：由一位字母组成，用于区分不同序列的呼号后缀或表示某些特定种类的业余无线电台。</p>
</li>
<li>
<p><strong>分区编号</strong>（呼号第三部分）：由一位数字组成，用于表示业余无线电台分区号。空间业余无线电台分区号为 1。</p>
</li>
<li>
<p><strong>呼号后缀</strong>（呼号第四部分）：由 1～4 位的字母或者字母和数字的组合组成。</p>
</li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>电台种类</p>
<ul>
<li>字母 G、H、I、D、A、B、C、E、F、K、L 用于一般业余无线电台呼号。</li>
<li>字母 J 用于空间业余无线电台呼号。</li>
<li>字母 R 用于业余中继台和业余信标台呼号。</li>
<li>字母 S、T、Y、Z 以及其他字母序列的业余无线电台呼号由国家无线电管理机构保留。</li>
</ul>
<p>呼号后缀</p>
<ul>
<li>其中，1 位、4 位呼号后缀，以及带有数字的呼号后缀由国家无线电管理机构保留。</li>
<li>QOA～QUZ 及 SOS、XXX、TTT 等可能与遇险信号或类似性质的其他信号混淆的字母组合不用作呼号后缀。</li>
</ul>
</div>
<h2>各省、自治区、直辖市无线电管理机构可以核发的业余无线电台呼号号段表</h2>
<p>呼号前缀（第一部分）：</p>
<ul>
<li>B</li>
</ul>
<p>电台种类（第二部分）：</p>
<ul>
<li>一般业余无线电台：G、H、I、D、A、B、C、E、F、K、L</li>
<li>业余中继台、业余信标台：R</li>
</ul>
<p>分区编号（第三部分）：</p>
<ul>
<li>1：北京</li>
<li>2：黑龙江、吉林、辽宁</li>
<li>3：天津、内蒙古、河北、山西</li>
<li>4：上海、山东、江苏</li>
<li>5：浙江、江西、福建</li>
<li>6：安徽、河南、湖北</li>
<li>7：湖南、广东、广西、海南</li>
<li>8：四川、重庆、贵州、云南</li>
<li>9：陕西、甘肃、宁夏、青海</li>
<li>0：新疆、西藏</li>
</ul>
<p>呼号后缀（第四部分）：</p>
<ul>
<li>双字母组合</li>
<li>三字母组合</li>
</ul>
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<p>呼号后缀</p>
<ul>
<li>具体还剩余哪些未被使用的呼号后缀，请查阅官网。</li>
</ul>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 通信 - 技术 - 无线电 - 业余无线电台</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-%E6%97%A0%E7%BA%BF%E7%94%B5-%E4%B8%9A%E4%BD%99%E6%97%A0%E7%BA%BF%E7%94%B5%E5%8F%B0.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-%E6%97%A0%E7%BA%BF%E7%94%B5-%E4%B8%9A%E4%BD%99%E6%97%A0%E7%BA%BF%E7%94%B5%E5%8F%B0.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 通信 - 技术 - 无线电 - 业余无线电台</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 主要功能 注意事项 需要获取《业余无线电台操作证书》、《无线电台执照》 适用场景 查询手册 《业余无线电管理办法》，==待完善== 基础知识 业余中继台：通过对业余无线电信号接收和放大 转发，扩大通联范围的业余无线电台。 业余信标台：通过发射信标信号，辅助验证电波 传播条件的单发业余无线电台。 要求 未满18周岁...</description>
      <category>学习笔记/技术</category>
      <pubDate>Tue, 22 Jul 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li>需要获取《业余无线电台操作证书》、《无线电台执照》</li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>查询手册</h2>
<p>《业余无线电管理办法》，==待完善==</p>
<h2>基础知识</h2>
<p>业余中继台：通过对业余无线电信号接收和放大
转发，扩大通联范围的业余无线电台。</p>
<p>业余信标台：通过发射信标信号，辅助验证电波
传播条件的单发业余无线电台。</p>
<h2>要求</h2>
<ul>
<li>
<p>未满18周岁不能拥有呼号、不能将呼号绑定到无线电台设备上，也就无法获得《无线电台执照》</p>
</li>
<li>
<p>未满18周岁能够获取《业余无线电台操作证书》</p>
</li>
<li>
<p>发射频率范围：30~3000MHz</p>
</li>
</ul>
<p>A类操作证</p>
<ul>
<li>最大发射功率：不大于25W（瓦）</li>
</ul>
<p>B类操作证</p>
<ul>
<li>最大发射功率：不大于100W（瓦）</li>
</ul>
<p>C类操作证</p>
<ul>
<li>最大发射功率：不大于1000W（瓦）</li>
</ul>
<h2>考证 - A类题库总结</h2>
<p>我国现行法律体系中专门针对“无线电管理”</p>
<ul>
<li>最高法律文件：中华人民共和国无线电管理条例</li>
<li>最高立法机关：国务院、中央军委</li>
</ul>
<p>我国现行法律体系中专门针对“业余无线电台管理”</p>
<ul>
<li>最高法律文件：业余无线电台管理方法</li>
<li>最高立法机关：工业和信息化部</li>
</ul>
<p>无线电主管部门</p>
<ul>
<li>各级无线电管理机构</li>
</ul>
<p>我国依法负责对业余无线电台实施监督管理的机构</p>
<ul>
<li>国家无线电管理机构、地方无线电管理机构</li>
</ul>
<p>《业余无线电台管理方法》中的“地方无线电管理机构”指定是</p>
<ul>
<li>省、自治区、直辖市无线电管理机构</li>
</ul>
<p>允许业余无线电台开展的活动</p>
<ul>
<li>无线电通信技术研究</li>
<li>普及活动</li>
<li>突发重大自然灾害等紧急情况下的应急通信活动</li>
</ul>
<p>中华人民共和国无线电频率划分规定</p>
<ul>
<li>业余业务、卫星业余业务、业余无线电台</li>
</ul>
<p>业余电台的法律用途</p>
<ul>
<li>供业余无线电爱好者进行自我训练</li>
<li>相互通信和技术研究</li>
</ul>
<p>无线电业余业务的用途</p>
<ul>
<li>自我训练、相互通信、技术研究</li>
</ul>
<p>业余无线电台供哪些人设置和使用</p>
<ul>
<li>业余无线电爱好者</li>
<li>既经正式批准的、对无线电技术感兴趣的人</li>
<li>其兴趣纯系个人爱好且不涉及谋取利润</li>
</ul>
<p>不同类别的业余无线电台有什么区别</p>
<ul>
<li>发射频率范围</li>
<li>最大发射功率</li>
</ul>
<p>A类的业余无线电台的发射频率范围</p>
<ul>
<li>30~3000MHz范围内的“业余业务”和“卫星业余业务”</li>
</ul>
<p>A类的业余无线电台的最大发射功率</p>
<ul>
<li>不大于25瓦</li>
</ul>
<p>申请设置具有发信功能的业余无线电台</p>
<ul>
<li>年满18周岁</li>
<li>熟悉无线电台管理规定</li>
<li>具备国家规定的操作技术能力</li>
<li>发射设备符合国家技术标准</li>
<li>法律和行政法规规定的其他条件</li>
</ul>
<p>独立操作具有发信功能的业余无线电台</p>
<ul>
<li>具备《业余无线电台操作证书》，操作业余无线电台不受年龄限制</li>
<li>熟悉无线电管理规定</li>
<li>具备国家规定的操作技术能力</li>
</ul>
<p>负责组织A类和B类业余无线电台所需操作技术能力的验证机构</p>
<ul>
<li>国家无线电管理机构</li>
<li>地方无线电管理机构</li>
</ul>
<p>2013年1月1日以后新获得的各类业余无线电台操作技术能力证明文件</p>
<ul>
<li>中国无线电协会颁发的“业余无线电台操作证书”</li>
</ul>
<p>合法设置“业余电台”的必要步骤</p>
<ul>
<li>按《业余无线电台管理办法》的规定办理设置审批手续，并取得业余电台执照。</li>
</ul>
<p>按照《业余电台管理办法》规定，申请设置使用设备有多台业余无线电发射设备的业余无线电台，应该怎么做。</p>
<ul>
<li>视为一个业余电台，指配一个电台呼号，但所有设备均应经过核定并将参数载入电台执照。</li>
</ul>
<p>个人申请设置业余无线电台应当提交的书面材料</p>
<ul>
<li>身份证号操作证</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>订阅推荐</title>
      <link>https://blog.magictable.ha.cn/%E8%AE%A2%E9%98%85%E6%8E%A8%E8%8D%90.html</link>
      <guid>https://blog.magictable.ha.cn/%E8%AE%A2%E9%98%85%E6%8E%A8%E8%8D%90.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">订阅推荐</source>
      <description>Bits from Debian 网站说明： 网站链接：https://bits.debian.org/feeds/feed.rss Debian micronews 网站说明： 网站链接：https://micronews.debian.org/feeds/feed.rss IGN中国 网站说明： 网站链接：https://www.ign.com.c...</description>
      <pubDate>Wed, 16 Jul 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>Bits from Debian</p>
<ul>
<li>网站说明：</li>
<li>网站链接：https://bits.debian.org/feeds/feed.rss</li>
</ul>
<p>Debian micronews</p>
<ul>
<li>网站说明：</li>
<li>网站链接：https://micronews.debian.org/feeds/feed.rss</li>
</ul>
<p>IGN中国</p>
<ul>
<li>网站说明：</li>
<li>网站链接：https://www.ign.com.cn/feed.xml?full</li>
</ul>
<p>Linux运维笔记|自动化运维攻城狮</p>
<ul>
<li>网站说明：</li>
<li>网站链接：https://blog.imdst.com/rss/</li>
</ul>
<p>Obsidian Changelog</p>
<ul>
<li>网站说明：</li>
<li>网站链接：https://obsidian.md/changelog.xml</li>
</ul>
<p>Omofun动漫</p>
<ul>
<li>网站说明：</li>
<li>网站链接：https://www.omofuna.com/rss</li>
</ul>
<p>Oracle Blogs</p>
<ul>
<li>网站说明：</li>
<li>网站链接：https://blogs.oracle.com/rss</li>
</ul>
<p>Electron Blog</p>
<ul>
<li>网站说明：</li>
<li>网站链接：https://www.electronjs.org/zh/blog/rss.xml</li>
</ul>
<p>Obsidian Blog</p>
<ul>
<li>网站说明：</li>
<li>网站链接：https://obsidian.md/feed.xml</li>
</ul>
<p>机器之心</p>
<ul>
<li>网站说明：</li>
<li>网站链接：https://www.jiqizhixin.com/rss</li>
</ul>
<p>机核</p>
<ul>
<li>网站说明：</li>
<li>网站链接：https://www.gcores.com/rss</li>
</ul>
<p>极客公园</p>
<ul>
<li>网站说明：</li>
<li>网站链接：https://www.geekpark.net/rss</li>
</ul>
<p>硅谷101</p>
<ul>
<li>网站说明：</li>
<li>网站链接：https://feeds.fireside.fm/sv101/rss</li>
</ul>
<p>神社的储物间</p>
<ul>
<li>网站说明：</li>
<li>网站链接：https://mxts.jiujiuer.xyz/atom.xml</li>
</ul>
<p>魔术桌的知识仓库</p>
<ul>
<li>网站说明：</li>
<li>网站链接：https://blog.magictable.ha.cn/rss</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Device-无线电设备</title>
      <link>https://blog.magictable.ha.cn/hardware/Device-%E6%97%A0%E7%BA%BF%E7%94%B5%E8%AE%BE%E5%A4%87.html</link>
      <guid>https://blog.magictable.ha.cn/hardware/Device-%E6%97%A0%E7%BA%BF%E7%94%B5%E8%AE%BE%E5%A4%87.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Device-无线电设备</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 主要特点 注意事项 适用场景 热门推荐 详细总结： 问题总结 详细总结：</description>
      <category>硬件设备/设备</category>
      <pubDate>Wed, 16 Jul 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要特点</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>热门推荐</h2>
<p>详细总结：<a href=""></a></p>
<h2>问题总结</h2>
<p>详细总结：<a href=""></a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 通信 - 技术 - 无线电</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-%E6%97%A0%E7%BA%BF%E7%94%B5.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-%E6%97%A0%E7%BA%BF%E7%94%B5.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 通信 - 技术 - 无线电</source>
      <description>简介 简要说明 主要功能 注意事项 适用场景 查询手册 数字通信标准 DMR 欧洲通信标准协会制定。 在国内中继较多，采用此标准的电台性价比高。 配置特别繁琐。 C4FM 八重洲专利技术。 音质较好，通联距离远。 较贵，只兼容八重洲设备。 泉盛、宝峰、森海克斯 欧讯、八重洲、ICOM 泉益通、八重洲 纯模拟机（模拟通信）：将说话的声音信号用载波的频率、...</description>
      <category>学习笔记/技术</category>
      <pubDate>Wed, 16 Jul 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>查询手册</h2>
<p><a href="/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-%E6%97%A0%E7%BA%BF%E7%94%B5-%E4%B8%9A%E4%BD%99%E6%97%A0%E7%BA%BF%E7%94%B5%E5%8F%B0-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-%E5%91%BC%E5%8F%B7%E7%BC%96%E5%88%B6%E5%92%8C%E6%A0%B8%E5%8F%91%E8%A6%81%E6%B1%82.html" target="_blank">Technology-通信-技术-无线电-业余无线电台-查询手册-呼号编制和核发要求</a></p>
<h2>数字通信标准</h2>
<p>DMR</p>
<ul>
<li>欧洲通信标准协会制定。</li>
<li>在国内中继较多，采用此标准的电台性价比高。</li>
<li>配置特别繁琐。</li>
</ul>
<p>C4FM</p>
<ul>
<li>八重洲专利技术。</li>
<li>音质较好，通联距离远。</li>
<li>较贵，只兼容八重洲设备。</li>
</ul>
<p>泉盛、宝峰、森海克斯</p>
<p>欧讯、八重洲、ICOM</p>
<p>泉益通、八重洲</p>
<p>纯模拟机（模拟通信）：将说话的声音信号用载波的频率、振幅等调制模拟传输。</p>
<p>数模两用机（数字通信）：将话音的信号用数字信号的0/1调制传输，不同数字模式不能互相通信。</p>
<h2>业余波段</h2>
<h2>无限电协会业余电台操作证书</h2>
<h2>购买设备</h2>
<h2>申请呼号</h2>
<ul>
<li>第1部分：国家</li>
<li>第2部分：电台性质</li>
<li>第3部分：区号</li>
<li>第4部分：后缀（随机分配）</li>
</ul>
<h2>通联卡</h2>
]]></content:encoded>
    </item>
    <item>
      <title>Algorithm - 递归</title>
      <link>https://blog.magictable.ha.cn/software/Algorithm-%E9%80%92%E5%BD%92.html</link>
      <guid>https://blog.magictable.ha.cn/software/Algorithm-%E9%80%92%E5%BD%92.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Algorithm - 递归</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 递归算法是一种在数学和计算机科学中常用的算法设计技巧。它指的是一种方法，即通过将问题分解为更小的、类似的问题来解决原问题。递归算法通常包含两个部分：递归基（递归终止条件）和递归步骤（递归调用）。 主要功能 分解问题：将复杂问题分解为更简单的问题。 重复计算：通过重复调用自身来解决问题。 简洁性：递归算法通常比迭代...</description>
      <category>软件程序/算法设计</category>
      <pubDate>Sat, 12 Jul 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>递归算法是一种在数学和计算机科学中常用的算法设计技巧。它指的是一种方法，即通过将问题分解为更小的、类似的问题来解决原问题。递归算法通常包含两个部分：递归基（递归终止条件）和递归步骤（递归调用）。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>分解问题</strong>：将复杂问题分解为更简单的问题。</li>
<li><strong>重复计算</strong>：通过重复调用自身来解决问题。</li>
<li><strong>简洁性</strong>：递归算法通常比迭代算法更简洁。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>递归深度</strong>：递归调用可能会消耗大量栈空间，如果递归深度过大，可能会导致栈溢出。</li>
<li><strong>效率</strong>：递归算法通常比迭代算法效率低，因为它们涉及到额外的函数调用开销。</li>
<li><strong>边界条件</strong>：递归算法必须正确处理边界条件，否则可能会导致无限递归。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>计算阶乘</strong>：阶乘函数是一个典型的递归问题。</li>
<li><strong>树形结构遍历</strong>：如二叉树的前序、中序和后序遍历。</li>
<li><strong>图形算法</strong>：如深度优先搜索（DFS）和广度优先搜索（BFS）。</li>
<li><strong>动态规划问题</strong>：某些动态规划问题可以通过递归算法来解决。</li>
<li><strong>数学问题</strong>：如斐波那契数列的计算。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Process - 3D打印</title>
      <link>https://blog.magictable.ha.cn/hardware/Process-3D%E6%89%93%E5%8D%B0.html</link>
      <guid>https://blog.magictable.ha.cn/hardware/Process-3D%E6%89%93%E5%8D%B0.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Process - 3D打印</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 主要特点 注意事项 适用场景</description>
      <category>硬件设备/加工工艺</category>
      <pubDate>Wed, 02 Jul 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要特点</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Process - 编织</title>
      <link>https://blog.magictable.ha.cn/hardware/Process-%E7%BC%96%E7%BB%87.html</link>
      <guid>https://blog.magictable.ha.cn/hardware/Process-%E7%BC%96%E7%BB%87.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Process - 编织</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 主要特点 注意事项 适用场景</description>
      <category>硬件设备/加工工艺</category>
      <pubDate>Sat, 28 Jun 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要特点</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>基础知识 - 化学元素周期表</title>
      <link>https://blog.magictable.ha.cn/hardware/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E5%8C%96%E5%AD%A6%E5%85%83%E7%B4%A0%E5%91%A8%E6%9C%9F%E8%A1%A8.html</link>
      <guid>https://blog.magictable.ha.cn/hardware/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E5%8C%96%E5%AD%A6%E5%85%83%E7%B4%A0%E5%91%A8%E6%9C%9F%E8%A1%A8.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">基础知识 - 化学元素周期表</source>
      <description>文章摘要： 化学元素周期表是化学学科的基石，它系统地组织了所有已知化学元素，揭示了它们之间的内在联系和规律。 引言 化学元素周期表是化学学科的基石，它系统地组织了所有已知化学元素，揭示了它们之间的内在联系和规律。自1869年俄国化学家德米特里·门捷列夫首次提出元素周期表以来，这一工具已成为化学研究和教育中不可或缺的资源。随着科学的发展，周期表不断更新，...</description>
      <category>硬件设备/原材料</category>
      <pubDate>Tue, 17 Jun 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 化学元素周期表是化学学科的基石，它系统地组织了所有已知化学元素，揭示了它们之间的内在联系和规律。</p>
<!-- more -->
<h2>引言</h2>
<p>化学元素周期表是化学学科的基石，它系统地组织了所有已知化学元素，揭示了它们之间的内在联系和规律。自1869年俄国化学家德米特里·门捷列夫首次提出元素周期表以来，这一工具已成为化学研究和教育中不可或缺的资源。随着科学的发展，周期表不断更新，从最初的70个元素扩展到现在已确认的118个元素。本报告将详细介绍化学元素周期表的基本结构、元素分类、周期表的演变历程以及其在化学研究和工业应用中的重要性。</p>
<h2>化学元素周期表的结构</h2>
<p>化学元素周期表是一种按原子序数（即原子核中质子的数量）从小到大排序的化学元素列表。它采用了独特的表格形式，将特性相似的元素排列在同一族中。这种排列方式揭示了元素性质的周期性变化规律，使我们能够预测元素的化学行为和物理特性。</p>
<h3>周期表的基本布局</h3>
<p>化学元素周期表由7个周期和18个族组成，以表格形式呈现。周期表的水平行称为"周期"，垂直列称为"族"或"族"。这种布局方式使得具有相似化学性质的元素位于同一族中，而具有相似电子排布的元素则位于同一周期中。</p>
<p>在周期表中，元素通常以以下方式标识：</p>
<ul>
<li>原子序数：位于元素符号左上角，表示原子核中质子的数量</li>
<li>元素符号：位于元素名称上方，通常是元素名称的首字母缩写</li>
<li>元素名称：位于表格中央</li>
<li>相对原子质量：位于元素符号下方，表示该元素的平均原子质量（以碳-12原子质量的1/12为单位）</li>
</ul>
<h3>周期表的分区</h3>
<p>化学元素周期表可以分为以下几个主要区域：</p>
<ol>
<li><strong>主族元素</strong>：包括IA至IIA族和VA至VIIIA族，共14个族。这些元素的价电子位于s轨道和p轨道，具有相对稳定的电子构型。</li>
<li><strong>过渡金属</strong>：包括IIIB至VIII族，共11个族。这些元素的价电子位于d轨道，具有多样的氧化态和催化性能。</li>
<li><strong>f区元素</strong>：包括镧系元素（57-71号）和锕系元素（89-103号）。这些元素的价电子位于f轨道，具有特殊的化学性质。</li>
<li><strong>稀有气体</strong>：即第18族元素，包括氦、氖、氩、氪、氙、氡和鉨。这些元素的电子层结构已达到稳定状态，化学性质非常稳定。</li>
</ol>
<h2>化学元素周期表的元素信息</h2>
<p>以下是一个完整的化学元素周期表，列出了所有已确认的118个元素的基本信息，包括原子序数、元素符号、元素名称和相对原子质量等。</p>
<p>第一周期（1-2号元素）</p>
<table>
<thead>
<tr>
<th style="text-align:center">原子序数</th>
<th style="text-align:center">元素符号</th>
<th style="text-align:left">元素名称</th>
<th style="text-align:left">相对原子质量</th>
<th style="text-align:left">发现年份</th>
<th style="text-align:left">主要性质</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">1</td>
<td style="text-align:center">H</td>
<td style="text-align:left">氢</td>
<td style="text-align:left">1.008</td>
<td style="text-align:left">公元前</td>
<td style="text-align:left">非金属，宇宙中最常见的元素，占普通氢的75%</td>
</tr>
<tr>
<td style="text-align:center">2</td>
<td style="text-align:center">He</td>
<td style="text-align:left">氦</td>
<td style="text-align:left">4.0026</td>
<td style="text-align:left">1895年</td>
<td style="text-align:left">稀有气体，沸点最低的元素，用于低温研究和气冷反应堆</td>
</tr>
</tbody>
</table>
<p>第二周期（3-10号元素）</p>
<table>
<thead>
<tr>
<th style="text-align:center">原子序数</th>
<th style="text-align:center">元素符号</th>
<th style="text-align:left">元素名称</th>
<th style="text-align:left">相对原子质量</th>
<th style="text-align:left">发现年份</th>
<th style="text-align:left">主要性质</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">3</td>
<td style="text-align:center">Li</td>
<td style="text-align:left">锂</td>
<td style="text-align:left">6.94</td>
<td style="text-align:left">1817年</td>
<td style="text-align:left">轻金属，用于锂离子电池，性质活泼</td>
</tr>
<tr>
<td style="text-align:center">4</td>
<td style="text-align:center">Be</td>
<td style="text-align:left">铍</td>
<td style="text-align:left">9.0122</td>
<td style="text-align:left">1798年</td>
<td style="text-align:left">稀有金属，硬度高，熔点高，用于航空航天</td>
</tr>
<tr>
<td style="text-align:center">5</td>
<td style="text-align:center">B</td>
<td style="text-align:left">硼</td>
<td style="text-align:left">10.81</td>
<td style="text-align:left">1808年</td>
<td style="text-align:left">金属loid，半导体材料，用于光学透镜</td>
</tr>
<tr>
<td style="text-align:center">6</td>
<td style="text-align:center">C</td>
<td style="text-align:left">碳</td>
<td style="text-align:left">12.011</td>
<td style="text-align:left">公元前</td>
<td style="text-align:left">非金属，具有多种同素异形体，如金刚石和石墨</td>
</tr>
<tr>
<td style="text-align:center">7</td>
<td style="text-align:center">N</td>
<td style="text-align:left">氮</td>
<td style="text-align:left">14.007</td>
<td style="text-align:left">1772年</td>
<td style="text-align:left">气体，占空气78%，用于氮肥和制冷剂</td>
</tr>
<tr>
<td style="text-align:center">8</td>
<td style="text-align:center">O</td>
<td style="text-align:left">氧</td>
<td style="text-align:left">15.999</td>
<td style="text-align:left">1774年</td>
<td style="text-align:left">气体，占空气21%，支持燃烧和呼吸</td>
</tr>
<tr>
<td style="text-align:center">9</td>
<td style="text-align:center">F</td>
<td style="text-align:left">氟</td>
<td style="text-align:left">18.998</td>
<td style="text-align:left">1886年</td>
<td style="text-align:left">气体，最活泼的非金属，用于制冷剂和消毒剂</td>
</tr>
<tr>
<td style="text-align:center">10</td>
<td style="text-align:center">Ne</td>
<td style="text-align:left">氖</td>
<td style="text-align:left">20.18</td>
<td style="text-align:left">1898年</td>
<td style="text-align:left">稀有气体，用于霓虹灯和低温研究</td>
</tr>
</tbody>
</table>
<p>第三周期（11-18号元素）</p>
<table>
<thead>
<tr>
<th style="text-align:center">原子序数</th>
<th style="text-align:center">元素符号</th>
<th style="text-align:left">元素名称</th>
<th style="text-align:left">相对原子质量</th>
<th style="text-align:left">发现年份</th>
<th style="text-align:left">主要性质</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">11</td>
<td style="text-align:center">Na</td>
<td style="text-align:left">钠</td>
<td style="text-align:left">22.99</td>
<td style="text-align:left">1807年</td>
<td style="text-align:left">碱金属，性质活泼，与水反应剧烈，用于钠电池</td>
</tr>
<tr>
<td style="text-align:center">12</td>
<td style="text-align:center">Mg</td>
<td style="text-align:left">镁</td>
<td style="text-align:left">24.305</td>
<td style="text-align:left">1808年</td>
<td style="text-align:left">碱土金属，轻金属，强度高，用于航空航天和合金</td>
</tr>
<tr>
<td style="text-align:center">13</td>
<td style="text-align:center">Al</td>
<td style="text-align:left">铝</td>
<td style="text-align:left">26.982</td>
<td style="text-align:left">1825年</td>
<td style="text-align:left">轻金属，抗腐蚀，导电性好，广泛应用于建筑和包装</td>
</tr>
<tr>
<td style="text-align:center">14</td>
<td style="text-align:center">Si</td>
<td style="text-align:left">硅</td>
<td style="text-align:left">28.085</td>
<td style="text-align:left">1823年</td>
<td style="text-align:left">金属loid，半导体材料，用于电子器件和太阳能电池</td>
</tr>
<tr>
<td style="text-align:center">15</td>
<td style="text-align:center">P</td>
<td style="text-align:left">磷</td>
<td style="text-align:left">30.974</td>
<td style="text-align:left">1669年</td>
<td style="text-align:left">非金属，生物体内必需元素，用于肥料和阻燃剂</td>
</tr>
<tr>
<td style="text-align:center">16</td>
<td style="text-align:center">S</td>
<td style="text-align:left">硫</td>
<td style="text-align:left">32.06</td>
<td style="text-align:left">公元前</td>
<td style="text-align:left">非金属，黄色晶体，用于化肥和火药</td>
</tr>
<tr>
<td style="text-align:center">17</td>
<td style="text-align:center">Cl</td>
<td style="text-align:left">氯</td>
<td style="text-align:left">35.45</td>
<td style="text-align:left">1774年</td>
<td style="text-align:left">黄绿色气体，强氧化剂，用于消毒和合成材料</td>
</tr>
<tr>
<td style="text-align:center">18</td>
<td style="text-align:center">Ar</td>
<td style="text-align:left">氩</td>
<td style="text-align:left">39.95</td>
<td style="text-align:left">1894年</td>
<td style="text-align:left">稀有气体，惰性，用于氩气灯和焊接保护</td>
</tr>
</tbody>
</table>
<p>第四周期（19-36号元素）</p>
<table>
<thead>
<tr>
<th style="text-align:center">原子序数</th>
<th style="text-align:center">元素符号</th>
<th style="text-align:left">元素名称</th>
<th style="text-align:left">相对原子质量</th>
<th style="text-align:left">发现年份</th>
<th style="text-align:left">主要性质</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">19</td>
<td style="text-align:center">K</td>
<td style="text-align:left">钾</td>
<td style="text-align:left">39.098</td>
<td style="text-align:left">1807年</td>
<td style="text-align:left">碱金属，性质极活泼，用于钾肥和钾电池</td>
</tr>
<tr>
<td style="text-align:center">20</td>
<td style="text-align:center">Ca</td>
<td style="text-align:left">钙</td>
<td style="text-align:left">40.078</td>
<td style="text-align:left">1808年</td>
<td style="text-align:left">碱土金属，人体必需元素，用于建筑材料和食品添加剂</td>
</tr>
<tr>
<td style="text-align:center">21</td>
<td style="text-align:center">Sc</td>
<td style="text-align:left">钪</td>
<td style="text-align:left">44.956</td>
<td style="text-align:left">1875年</td>
<td style="text-align:left">过渡金属，硬度高，用于合金和催化剂</td>
</tr>
<tr>
<td style="text-align:center">22</td>
<td style="text-align:center">Ti</td>
<td style="text-align:left">钛</td>
<td style="text-align:left">47.867</td>
<td style="text-align:left">1791年</td>
<td style="text-align:left">过渡金属，强度高，耐腐蚀，用于航空航天和医疗器材</td>
</tr>
<tr>
<td style="text-align:center">23</td>
<td style="text-align:center">V</td>
<td style="text-align:left">钒</td>
<td style="text-align:left">50.942</td>
<td style="text-align:left">1831年</td>
<td style="text-align:left">过渡金属，硬度高，韧性好，用于特殊钢和合金</td>
</tr>
<tr>
<td style="text-align:center">24</td>
<td style="text-align:center">Cr</td>
<td style="text-align:left">铬</td>
<td style="text-align:left">51.996</td>
<td style="text-align:left">1797年</td>
<td style="text-align:left">过渡金属，硬度高，耐腐蚀，用于不锈钢和表面处理</td>
</tr>
<tr>
<td style="text-align:center">25</td>
<td style="text-align:center">Mn</td>
<td style="text-align:left">锰</td>
<td style="text-align:left">54.938</td>
<td style="text-align:left">1774年</td>
<td style="text-align:left">过渡金属，多种氧化态，用于不锈钢和锰钢</td>
</tr>
<tr>
<td style="text-align:center">26</td>
<td style="text-align:center">Fe</td>
<td style="text-align:left">铁</td>
<td style="text-align:left">55.845</td>
<td style="text-align:left">公元前</td>
<td style="text-align:left">过渡金属，强度高，延展性好，广泛应用于建筑和制造</td>
</tr>
<tr>
<td style="text-align:center">27</td>
<td style="text-align:center">Co</td>
<td style="text-align:left">钴</td>
<td style="text-align:left">58.933</td>
<td style="text-align:left">1735年</td>
<td style="text-align:left">过渡金属，磁性材料，用于电池和催化剂</td>
</tr>
<tr>
<td style="text-align:center">28</td>
<td style="text-align:center">Ni</td>
<td style="text-align:left">镍</td>
<td style="text-align:left">58.693</td>
<td style="text-align:left">1751年</td>
<td style="text-align:left">过渡金属，强度高，耐腐蚀，用于不锈钢和硬币</td>
</tr>
<tr>
<td style="text-align:center">29</td>
<td style="text-align:center">Cu</td>
<td style="text-align:left">铜</td>
<td style="text-align:left">63.546</td>
<td style="text-align:left">公元前</td>
<td style="text-align:left">过渡金属，导电性好，延展性强，广泛应用于电气和建筑</td>
</tr>
<tr>
<td style="text-align:center">30</td>
<td style="text-align:center">Zn</td>
<td style="text-align:left">锌</td>
<td style="text-align:left">65.38</td>
<td style="text-align:left">1586年</td>
<td style="text-align:left">过渡金属，抗腐蚀，用于镀锌和合金</td>
</tr>
<tr>
<td style="text-align:center">31</td>
<td style="text-align:center">Ga</td>
<td style="text-align:left">镓</td>
<td style="text-align:left">69.723</td>
<td style="text-align:left">1875年</td>
<td style="text-align:left">后过渡金属，熔点低，用于半导体和合金</td>
</tr>
<tr>
<td style="text-align:center">32</td>
<td style="text-align:center">Ge</td>
<td style="text-align:left">锗</td>
<td style="text-align:left">72.63</td>
<td style="text-align:left">1886年</td>
<td style="text-align:left">类金属，半导体材料，用于红外探测器和光纤通信</td>
</tr>
<tr>
<td style="text-align:center">33</td>
<td style="text-align:center">As</td>
<td style="text-align:left">砷</td>
<td style="text-align:left">74.922</td>
<td style="text-align:left">1250年</td>
<td style="text-align:left">金属loid，有毒，用于农药和半导体</td>
</tr>
<tr>
<td style="text-align:center">34</td>
<td style="text-align:center">Se</td>
<td style="text-align:left">硒</td>
<td style="text-align:left">78.971</td>
<td style="text-align:left">1817年</td>
<td style="text-align:left">非金属，光敏材料，用于太阳能电池和复印机</td>
</tr>
<tr>
<td style="text-align:center">35</td>
<td style="text-align:center">Br</td>
<td style="text-align:left">溴</td>
<td style="text-align:left">79.904</td>
<td style="text-align:left">1826年</td>
<td style="text-align:left">液体非金属，腐蚀性强，用于消毒和阻燃剂</td>
</tr>
<tr>
<td style="text-align:center">36</td>
<td style="text-align:center">Kr</td>
<td style="text-align:left">氪</td>
<td style="text-align:left">83.798</td>
<td style="text-align:left">1898年</td>
<td style="text-align:left">稀有气体，惰性，用于氪灯和焊接保护</td>
</tr>
</tbody>
</table>
<p>第五周期（37-54号元素）</p>
<table>
<thead>
<tr>
<th style="text-align:center">原子序数</th>
<th style="text-align:center">元素符号</th>
<th style="text-align:left">元素名称</th>
<th style="text-align:left">相对原子质量</th>
<th style="text-align:left">发现年份</th>
<th style="text-align:left">主要性质</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">37</td>
<td style="text-align:center">Rb</td>
<td style="text-align:left">铷</td>
<td style="text-align:left">85.468</td>
<td style="text-align:left">1861年</td>
<td style="text-align:left">碱金属，性质极活泼，用于铷原子钟和电池</td>
</tr>
<tr>
<td style="text-align:center">38</td>
<td style="text-align:center">Sr</td>
<td style="text-align:left">锶</td>
<td style="text-align:left">87.62</td>
<td style="text-align:left">1790年</td>
<td style="text-align:left">碱土金属，硬度低，用于烟花和核工业</td>
</tr>
<tr>
<td style="text-align:center">39</td>
<td style="text-align:center">Y</td>
<td style="text-align:left">钇</td>
<td style="text-align:left">88.906</td>
<td style="text-align:left">1794年</td>
<td style="text-align:left">过渡金属，硬度高，用于合金和催化剂</td>
</tr>
<tr>
<td style="text-align:center">40</td>
<td style="text-align:center">Zr</td>
<td style="text-align:left">锆</td>
<td style="text-align:left">91.224</td>
<td style="text-align:left">1789年</td>
<td style="text-align:left">过渡金属，耐腐蚀，用于核反应堆和珠宝</td>
</tr>
<tr>
<td style="text-align:center">41</td>
<td style="text-align:center">Nb</td>
<td style="text-align:left">铌</td>
<td style="text-align:left">92.906</td>
<td style="text-align:left">1801年</td>
<td style="text-align:left">过渡金属，超导体，用于医疗设备和合金</td>
</tr>
<tr>
<td style="text-align:center">42</td>
<td style="text-align:center">Mo</td>
<td style="text-align:left">钼</td>
<td style="text-align:left">95.95</td>
<td style="text-align:left">1781年</td>
<td style="text-align:left">过渡金属，强度高，耐腐蚀，用于合金和催化剂</td>
</tr>
<tr>
<td style="text-align:center">43</td>
<td style="text-align:center">Tc</td>
<td style="text-align:left">锝</td>
<td style="text-align:left">[98]</td>
<td style="text-align:left">1974年</td>
<td style="text-align:left">人工放射性元素，用于医学成像和治疗</td>
</tr>
<tr>
<td style="text-align:center">44</td>
<td style="text-align:center">Ru</td>
<td style="text-align:left">钌</td>
<td style="text-align:left">101.07</td>
<td style="text-align:left">1844年</td>
<td style="text-align:left">过渡金属，硬度高，耐腐蚀，用于合金和催化剂</td>
</tr>
<tr>
<td style="text-align:center">45</td>
<td style="text-align:center">Rh</td>
<td style="text-align:left">铑</td>
<td style="text-align:left">102.91</td>
<td style="text-align:left">1803年</td>
<td style="text-align:left">过渡金属，硬度高，耐腐蚀，用于催化剂和珠宝</td>
</tr>
<tr>
<td style="text-align:center">46</td>
<td style="text-align:center">Pd</td>
<td style="text-align:left">钯</td>
<td style="text-align:left">106.42</td>
<td style="text-align:left">1803年</td>
<td style="text-align:left">过渡金属，强度高，耐腐蚀，用于催化剂和珠宝</td>
</tr>
<tr>
<td style="text-align:center">47</td>
<td style="text-align:center">Ag</td>
<td style="text-align:left">银</td>
<td style="text-align:left">107.87</td>
<td style="text-align:left">公元前</td>
<td style="text-align:left">过渡金属，导电性好，延展性强，广泛应用于珠宝和电子</td>
</tr>
<tr>
<td style="text-align:center">48</td>
<td style="text-align:center">Cd</td>
<td style="text-align:left">镉</td>
<td style="text-align:left">112.41</td>
<td style="text-align:left">1817年</td>
<td style="text-align:left">过渡金属，毒性大，用于合金和电池</td>
</tr>
<tr>
<td style="text-align:center">49</td>
<td style="text-align:center">In</td>
<td style="text-align:left">铟</td>
<td style="text-align:left">114.82</td>
<td style="text-align:left">1863年</td>
<td style="text-align:left">后过渡金属，延展性好，用于半导体和合金</td>
</tr>
<tr>
<td style="text-align:center">50</td>
<td style="text-align:center">Sn</td>
<td style="text-align:left">锡</td>
<td style="text-align:left">118.71</td>
<td style="text-align:left">公元前</td>
<td style="text-align:left">后过渡金属，延展性好，用于焊料和合金</td>
</tr>
<tr>
<td style="text-align:center">51</td>
<td style="text-align:center">Sb</td>
<td style="text-align:left">锑</td>
<td style="text-align:left">121.76</td>
<td style="text-align:left">公元前</td>
<td style="text-align:left">金属loid，半导体材料，用于阻燃剂和合金</td>
</tr>
<tr>
<td style="text-align:center">52</td>
<td style="text-align:center">Te</td>
<td style="text-align:left">碲</td>
<td style="text-align:left">127.6</td>
<td style="text-align:left">1783年</td>
<td style="text-align:left">金属loid，半导体材料，用于太阳能电池和红外探测器</td>
</tr>
<tr>
<td style="text-align:center">53</td>
<td style="text-align:center">I</td>
<td style="text-align:left">碘</td>
<td style="text-align:left">126.9</td>
<td style="text-align:left">1811年</td>
<td style="text-align:left">液体非金属，毒性大，用于消毒和药物合成</td>
</tr>
<tr>
<td style="text-align:center">54</td>
<td style="text-align:center">Xe</td>
<td style="text-align:left">氙</td>
<td style="text-align:left">131.29</td>
<td style="text-align:left">1898年</td>
<td style="text-align:left">稀有气体，惰性，用于氙灯和麻醉剂</td>
</tr>
</tbody>
</table>
<p>第六周期（55-78号元素）</p>
<table>
<thead>
<tr>
<th style="text-align:center">原子序数</th>
<th style="text-align:center">元素符号</th>
<th style="text-align:left">元素名称</th>
<th style="text-align:left">相对原子质量</th>
<th style="text-align:left">发现年份</th>
<th style="text-align:left">主要性质</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">55</td>
<td style="text-align:center">Cs</td>
<td style="text-align:left">铯</td>
<td style="text-align:left">132.91</td>
<td style="text-align:left">1860年</td>
<td style="text-align:left">碱金属，性质最活泼，用于铯原子钟和电池</td>
</tr>
<tr>
<td style="text-align:center">56</td>
<td style="text-align:center">Ba</td>
<td style="text-align:left">钡</td>
<td style="text-align:left">137.33</td>
<td style="text-align:left">1774年</td>
<td style="text-align:left">碱土金属，毒性大，用于荧光材料和核工业</td>
</tr>
<tr>
<td style="text-align:center">57-71</td>
<td style="text-align:center">La-Lu</td>
<td style="text-align:left">镧系元素</td>
<td style="text-align:left">-</td>
<td style="text-align:left">-</td>
<td style="text-align:left">f区元素，具有特殊磁性和光学性质</td>
</tr>
<tr>
<td style="text-align:center">72</td>
<td style="text-align:center">Hf</td>
<td style="text-align:left">铪</td>
<td style="text-align:left">178.49</td>
<td style="text-align:left">1923年</td>
<td style="text-align:left">过渡金属，耐腐蚀，用于合金和催化剂</td>
</tr>
<tr>
<td style="text-align:center">73</td>
<td style="text-align:center">Ta</td>
<td style="text-align:left">钽</td>
<td style="text-align:left">180.95</td>
<td style="text-align:left">1802年</td>
<td style="text-align:left">过渡金属，耐腐蚀，用于电容器和合金</td>
</tr>
<tr>
<td style="text-align:center">74</td>
<td style="text-align:center">W</td>
<td style="text-align:left">钨</td>
<td style="text-align:left">183.84</td>
<td style="text-align:left">1783年</td>
<td style="text-align:left">过渡金属，熔点高，强度高，用于灯丝和合金</td>
</tr>
<tr>
<td style="text-align:center">75</td>
<td style="text-align:center">Re</td>
<td style="text-align:left">钼</td>
<td style="text-align:left">186.21</td>
<td style="text-align:left">1925年</td>
<td style="text-align:left">过渡金属，硬度高，耐腐蚀，用于合金和催化剂</td>
</tr>
<tr>
<td style="text-align:center">76</td>
<td style="text-align:center">Os</td>
<td style="text-align:left">锇</td>
<td style="text-align:left">190.23</td>
<td style="text-align:left">1803年</td>
<td style="text-align:left">过渡金属，硬度高，耐腐蚀，用于合金和催化剂</td>
</tr>
<tr>
<td style="text-align:center">77</td>
<td style="text-align:center">Ir</td>
<td style="text-align:left">�铱</td>
<td style="text-align:left">192.22</td>
<td style="text-align:left">1803年</td>
<td style="text-align:left">过渡金属，硬度高，耐腐蚀，用于催化剂和珠宝</td>
</tr>
<tr>
<td style="text-align:center">78</td>
<td style="text-align:center">Pt</td>
<td style="text-align:left">钯</td>
<td style="text-align:left">195.08</td>
<td style="text-align:left">1735年</td>
<td style="text-align:left">过渡金属，强度高，耐腐蚀，用于催化剂和珠宝</td>
</tr>
</tbody>
</table>
<p>第七周期（79-118号元素）</p>
<table>
<thead>
<tr>
<th style="text-align:center">原子序数</th>
<th style="text-align:center">元素符号</th>
<th style="text-align:left">元素名称</th>
<th style="text-align:left">相对原子质量</th>
<th style="text-align:left">发现年份</th>
<th style="text-align:left">主要性质</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">79</td>
<td style="text-align:center">Au</td>
<td style="text-align:left">金</td>
<td style="text-align:left">196.97</td>
<td style="text-align:left">公元前</td>
<td style="text-align:left">过渡金属，导电性好，延展性强，广泛应用于珠宝和电子</td>
</tr>
<tr>
<td style="text-align:center">80</td>
<td style="text-align:center">Hg</td>
<td style="text-align:left">汞</td>
<td style="text-align:left">200.59</td>
<td style="text-align:left">公元前</td>
<td style="text-align:left">过渡金属，唯一在常温下呈液态的金属，用于温度计和电池</td>
</tr>
<tr>
<td style="text-align:center">81</td>
<td style="text-align:center">Tl</td>
<td style="text-align:left">铊</td>
<td style="text-align:left">204.38</td>
<td style="text-align:left">1861年</td>
<td style="text-align:left">后过渡金属，毒性大，用于合金和药物合成</td>
</tr>
<tr>
<td style="text-align:center">82</td>
<td style="text-align:center">Pb</td>
<td style="text-align:left">铅</td>
<td style="text-align:left">207.2</td>
<td style="text-align:left">公元前</td>
<td style="text-align:left">后过渡金属，密度大，毒性大，用于防护和合金</td>
</tr>
<tr>
<td style="text-align:center">83</td>
<td style="text-align:center">Bi</td>
<td style="text-align:left">铋</td>
<td style="text-align:left">208.98</td>
<td style="text-align:left">1832年</td>
<td style="text-align:left">后过渡金属，密度大，用于放射性防护和药物</td>
</tr>
<tr>
<td style="text-align:center">84</td>
<td style="text-align:center">Po</td>
<td style="text-align:left">钋</td>
<td style="text-align:left">[209]</td>
<td style="text-align:left">1898年</td>
<td style="text-align:left">人工放射性元素，毒性极强，用于放射性研究</td>
</tr>
<tr>
<td style="text-align:center">85</td>
<td style="text-align:center">At</td>
<td style="text-align:left">砹</td>
<td style="text-align:left">[210]</td>
<td style="text-align:left">1940年</td>
<td style="text-align:left">人工放射性元素，毒性极强，用于放射性研究</td>
</tr>
<tr>
<td style="text-align:center">86</td>
<td style="text-align:center">Rn</td>
<td style="text-align:left">氡</td>
<td style="text-align:left">[222]</td>
<td style="text-align:left">1898年</td>
<td style="text-align:left">人工放射性稀有气体，放射性强，用于医疗成像</td>
</tr>
<tr>
<td style="text-align:center">87</td>
<td style="text-align:center">Fr</td>
<td style="text-align:left">钫</td>
<td style="text-align:left">[223]</td>
<td style="text-align:left">1939年</td>
<td style="text-align:left">人工放射性碱金属，毒性极强，用于放射性研究</td>
</tr>
<tr>
<td style="text-align:center">88</td>
<td style="text-align:center">Ra</td>
<td style="text-align:left">镭</td>
<td style="text-align:left">[226]</td>
<td style="text-align:left">1898年</td>
<td style="text-align:left">人工放射性碱土金属，放射性强，用于医疗和研究</td>
</tr>
<tr>
<td style="text-align:center">89-103</td>
<td style="text-align:center">Ac-Lr</td>
<td style="text-align:left">锕系元素</td>
<td style="text-align:left">-</td>
<td style="text-align:left">-</td>
<td style="text-align:left">f区放射性元素，具有特殊核性质</td>
</tr>
<tr>
<td style="text-align:center">104</td>
<td style="text-align:center">Rf</td>
<td style="text-align:left">鈩</td>
<td style="text-align:left">[267]</td>
<td style="text-align:left">1964年</td>
<td style="text-align:left">人工放射性元素，用于超重元素研究</td>
</tr>
<tr>
<td style="text-align:center">105</td>
<td style="text-align:center">Db</td>
<td style="text-align:left">钅杜</td>
<td style="text-align:left">[268]</td>
<td style="text-align:left">1967年</td>
<td style="text-align:left">人工放射性元素，用于超重元素研究</td>
</tr>
<tr>
<td style="text-align:center">106</td>
<td style="text-align:center">Sg</td>
<td style="text-align:left">钅喜</td>
<td style="text-align:left">[271]</td>
<td style="text-align:left">1974年</td>
<td style="text-align:left">人工放射性元素，用于超重元素研究</td>
</tr>
<tr>
<td style="text-align:center">107</td>
<td style="text-align:center">Bh</td>
<td style="text-align:left">钅波</td>
<td style="text-align:left">[274]</td>
<td style="text-align:left">1976年</td>
<td style="text-align:left">人工放射性元素，用于超重元素研究</td>
</tr>
<tr>
<td style="text-align:center">108</td>
<td style="text-align:center">Hs</td>
<td style="text-align:left">钅黑</td>
<td style="text-align:left">[277]</td>
<td style="text-align:left">1984年</td>
<td style="text-align:left">人工放射性元素，用于超重元素研究</td>
</tr>
<tr>
<td style="text-align:center">109</td>
<td style="text-align:center">Mt</td>
<td style="text-align:left">钅麦</td>
<td style="text-align:left">[278]</td>
<td style="text-align:left">1982年</td>
<td style="text-align:left">人工放射性元素，用于超重元素研究</td>
</tr>
<tr>
<td style="text-align:center">110</td>
<td style="text-align:center">Ds</td>
<td style="text-align:left">钅达</td>
<td style="text-align:left">[281]</td>
<td style="text-align:left">1994年</td>
<td style="text-align:left">人工放射性元素，用于超重元素研究</td>
</tr>
<tr>
<td style="text-align:center">111</td>
<td style="text-align:center">Rg</td>
<td style="text-align:left">钅仑</td>
<td style="text-align:left">[282]</td>
<td style="text-align:left">1994年</td>
<td style="text-align:left">人工放射性元素，用于超重元素研究</td>
</tr>
<tr>
<td style="text-align:center">112</td>
<td style="text-align:center">Cn</td>
<td style="text-align:left">镍</td>
<td style="text-align:left">[285]</td>
<td style="text-align:left">1996年</td>
<td style="text-align:left">人工放射性元素，用于超重元素研究</td>
</tr>
<tr>
<td style="text-align:center">113</td>
<td style="text-align:center">Uut</td>
<td style="text-align:left">-</td>
<td style="text-align:left">[286]</td>
<td style="text-align:left">2003年</td>
<td style="text-align:left">人工放射性元素，用于超重元素研究</td>
</tr>
<tr>
<td style="text-align:center">114</td>
<td style="text-align:center">Uuq</td>
<td style="text-align:left">-</td>
<td style="text-align:left">[289]</td>
<td style="text-align:left">1999年</td>
<td style="text-align:left">人工放射性元素，用于超重元素研究</td>
</tr>
<tr>
<td style="text-align:center">115</td>
<td style="text-align:center">Uup</td>
<td style="text-align:left">-</td>
<td style="text-align:left">[288]</td>
<td style="text-align:left">2003年</td>
<td style="text-align:left">人工放射性元素，用于超重元素研究</td>
</tr>
<tr>
<td style="text-align:center">116</td>
<td style="text-align:center">Uuh</td>
<td style="text-align:left">-</td>
<td style="text-align:left">[292]</td>
<td style="text-align:left">1999年</td>
<td style="text-align:left">人工放射性元素，用于超重元素研究</td>
</tr>
<tr>
<td style="text-align:center">117</td>
<td style="text-align:center">Uus</td>
<td style="text-align:left">-</td>
<td style="text-align:left">[291]</td>
<td style="text-align:left">2010年</td>
<td style="text-align:left">人工放射性元素，用于超重元素研究</td>
</tr>
<tr>
<td style="text-align:center">118</td>
<td style="text-align:center">Uuo</td>
<td style="text-align:left">-</td>
<td style="text-align:left">[294]</td>
<td style="text-align:left">2006年</td>
<td style="text-align:left">人工放射性元素，用于超重元素研究</td>
</tr>
</tbody>
</table>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 通信 - 技术 - WiFi</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-WiFi.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-WiFi.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 通信 - 技术 - WiFi</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 主要功能 注意事项 适用场景</description>
      <category>学习笔记/技术</category>
      <pubDate>Tue, 17 Jun 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 通信 - 技术 - 星闪</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-%E6%98%9F%E9%97%AA.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-%E6%98%9F%E9%97%AA.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 通信 - 技术 - 星闪</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 主要功能 注意事项 适用场景</description>
      <category>学习笔记/技术</category>
      <pubDate>Tue, 17 Jun 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 通信 - 技术 - 蓝牙</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-%E8%93%9D%E7%89%99.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-%E8%93%9D%E7%89%99.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 通信 - 技术 - 蓝牙</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 主要功能 注意事项 适用场景</description>
      <category>学习笔记/技术</category>
      <pubDate>Tue, 17 Jun 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Package - OpenSCAD</title>
      <link>https://blog.magictable.ha.cn/software/Package-OpenSCAD.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OpenSCAD.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - OpenSCAD</source>
      <description>文章摘要： OpenSCAD是一款开源的3D建模工具，与其他常见的3D建模软件（如Blender）不同，它不依赖交互式操作，而是通过编写脚本代码来生成3D模型。 简介 简要说明 OpenSCAD是一款开源的3D建模工具。 与其他常见的3D建模软件（如Blender）不同，它不依赖交互式操作，而是通过编写脚本代码来生成3D模型。 这种基于代码的建模方式使...</description>
      <category>软件程序/软件包</category>
      <pubDate>Tue, 17 Jun 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> OpenSCAD是一款开源的3D建模工具，与其他常见的3D建模软件（如Blender）不同，它不依赖交互式操作，而是通过编写脚本代码来生成3D模型。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>OpenSCAD是一款开源的3D建模工具。</li>
<li>与其他常见的3D建模软件（如Blender）不同，它不依赖交互式操作，而是通过编写脚本代码来生成3D模型。</li>
<li>这种基于代码的建模方式使得设计过程更加精确、可重复，并适合需要精细控制的设计需求。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>基于代码建模</strong>：OpenSCAD允许用户通过脚本语言创建3D模型，用户可以通过编程方式精确控制每一个细节，从而实现高度定制化的设计。</li>
<li><strong>参数化设计</strong>：用户可以通过调整参数快速生成不同版本的模型，非常适合需要批量生产的场景。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>学习曲线</strong>：尽管OpenSCAD的语法简单易懂，但完全掌握其功能需要一定的编程基础，尤其是对C语言风格的脚本语言有一定了解。</li>
<li><strong>非交互式操作</strong>：OpenSCAD不是交互式建模工具，不适合需要实时调整和视觉反馈的设计任务，例如动画制作。</li>
<li><strong>渲染时间</strong>：复杂模型的渲染可能需要较长时间，尤其是在处理高精度或大型模型时。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>机械设计</strong>：适合创建机械部件，如齿轮、支架等，因其能精确控制尺寸和细节。</li>
<li><strong>3D打印</strong>：支持导出STL文件，可直接用于3D打印，非常适合制作定制化零件或模型。</li>
<li><strong>电子产品外壳设计</strong>：用于设计电子设备的外壳、支架等，满足对尺寸和结构的严格要求。</li>
</ul>
<h2>安装与卸载</h2>
<p>详细总结：<a href=""></a></p>
<h2>终端命令</h2>
<p>详细总结：<a href=""></a></p>
<h2>配置文件</h2>
<p>详细总结：<a href=""></a></p>
<h2>热门推荐</h2>
<p>详细总结：<a href=""></a></p>
<h2>问题总结</h2>
<p>详细总结：<a href=""></a></p>
<h2>API整理</h2>
<h3>对象 - 立方体</h3>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">// 立方体的长宽高都一样</span>
<span class="line">cube([&lt;边长&gt;]);</span>
<span class="line">// 立方体的长、宽、高</span>
<span class="line">cube([&lt;长度x&gt;,&lt;宽度y&gt;,&lt;高度z&gt;]);</span>
<span class="line"></span>
<span class="line">// center代表是否居中</span>
<span class="line">cube([&lt;长度x&gt;,&lt;宽度y&gt;,&lt;高度z&gt;],center=true);</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>对象 - 圆柱</h2>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">cylinder(h=&lt;高度&gt;,r=&lt;半径&gt;);</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>动作 - 平移</h2>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">translate([&lt;长度x&gt;,&lt;宽度y&gt;,&lt;高度z&gt;])</span>
<span class="line">    &lt;对象&gt;</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h2>动作 - 旋转</h2>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">rotate([&lt;x轴旋转&gt;,&lt;y轴旋转&gt;,&lt;z轴旋转&gt;])</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - 问题总结 - OpenJDK与OracleJDK之间的迁移</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-OpenJDK%E4%B8%8EOracleJDK%E4%B9%8B%E9%97%B4%E7%9A%84%E8%BF%81%E7%A7%BB.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-OpenJDK%E4%B8%8EOracleJDK%E4%B9%8B%E9%97%B4%E7%9A%84%E8%BF%81%E7%A7%BB.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - 问题总结 - OpenJDK与OracleJDK之间的迁移</source>
      <description>文章摘要： Open JDK 与 Oracle JDK 之间的迁移。 迁移说明 功能/特性差异 JavaFX：从 JDK 11 开始，OpenJDK 移除了 JavaFX，而 Oracle JDK 仍然包含它。如果你的应用依赖于 JavaFX，迁移后需要单独引入 JavaFX 库。 JFR（Java Flight Recorder）和 JMC（Java...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Mon, 16 Jun 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Open JDK 与 Oracle JDK 之间的迁移。</p>
<!-- more -->
<h2>迁移说明</h2>
<p>功能/特性差异</p>
<ul>
<li><strong>JavaFX</strong>：从 JDK 11 开始，OpenJDK 移除了 JavaFX，而 Oracle JDK 仍然包含它。如果你的应用依赖于 JavaFX，迁移后需要单独引入 JavaFX 库。</li>
<li><strong>JFR（Java Flight Recorder）和 JMC（Java Mission Control）</strong> ：这些是 Oracle JDK 提供的商业功能，OpenJDK 中通常需要额外配置或使用替代工具。</li>
<li><strong>专有组件</strong>：Oracle JDK 包含一些闭源组件（如 JCE、JavaFX 等），而 OpenJDK 通常不包含这些组件，迁移时可能需要额外处理。</li>
<li><strong>JVM 性能</strong>：Oracle JDK 在 JVM 性能、GC 和图形渲染方面通常表现更优，而 OpenJDK 由于社区驱动，更新频率高，但某些功能可能不如 Oracle JDK 稳定。</li>
<li><strong>模块系统</strong>：从 JDK 9 开始，Java 引入了模块系统（JPMS），这可能会影响某些应用程序的兼容性。迁移时需要确保代码兼容模块系统。</li>
</ul>
<p>兼容性问题</p>
<ul>
<li><strong>API 变化</strong>：虽然 Oracle JDK 和 OpenJDK 的核心代码几乎一致，但某些 API 可能在不同版本之间发生变化。例如，Oracle JDK 8u211 之后的版本与 OpenJDK 8 代码一致，但如果你使用的是旧版本的 Oracle JDK，可能会遇到兼容性问题。</li>
<li><strong>第三方库</strong>：某些第三方库可能依赖于 Oracle JDK 的特定功能，迁移后可能需要更新或替换这些库。</li>
</ul>
<h2>迁移步骤</h2>
<ul>
<li><strong>创建清单</strong>：在迁移前，需要创建一个清单，列出所有使用 Oracle JDK 的机器和应用程序。这包括 JDK 类型、访问详情、操作系统、安装类型和 JDK 版本。</li>
<li><strong>分析代码</strong>：使用工具如 <code>jdeps</code> 分析应用程序的依赖关系，识别可能需要修改的代码。例如，某些代码可能使用了 Oracle JDK 的专有 API，需要替换为 OpenJDK 的替代方案。</li>
<li><strong>测试与验证</strong>：在迁移后，需要进行广泛的测试，包括自动化测试、性能测试和稳定性测试，确保应用程序在新环境中正常运行。</li>
</ul>
<h2>运维与部署</h2>
<ul>
<li><strong>环境变量</strong>：迁移后，需要更新环境变量（如 <code>JAVA_HOME</code>）以指向新的 OpenJDK 安装路径。</li>
<li><strong>部署策略</strong>：在生产环境中，建议采用渐进式迁移策略，先在测试环境中验证，再逐步推广到生产环境。</li>
</ul>
<h2>迁移工具</h2>
<ul>
<li><strong>Windup</strong>：这是一个开源工具，可以帮助分析源代码并生成迁移报告，支持从 Oracle JDK 到 OpenJDK 的迁移。</li>
<li><strong>jenv 和 SDKMAN</strong>：这些工具可以帮助管理多个 JDK 版本，方便在不同环境中切换。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - 问题总结 - OpenJDK与OracleJDK的区别</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-OpenJDK%E4%B8%8EOracleJDK%E7%9A%84%E5%8C%BA%E5%88%AB.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-OpenJDK%E4%B8%8EOracleJDK%E7%9A%84%E5%8C%BA%E5%88%AB.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - 问题总结 - OpenJDK与OracleJDK的区别</source>
      <description>文章摘要： Open JDK 与 Oracle JDK 的区别。 注释 历史概述 Sun公司在被Oracle收购之前，Sun公司将JDK源代码开源。 但有一部分代码由于产权问题无法完全开源。 后续就诞生了 Open JDK 将其他有相同功能的代码替换上，并进行开源。 关于 Open JDK 与 Oracle JDK 源代码的关系 包含在 OpenJDK...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Mon, 16 Jun 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Open JDK 与 Oracle JDK 的区别。</p>
<!-- more -->
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>历史概述</p>
<ul>
<li>Sun公司在被Oracle收购之前，Sun公司将JDK源代码开源。</li>
<li>但有一部分代码由于产权问题无法完全开源。</li>
<li>后续就诞生了 Open JDK 将其他有相同功能的代码替换上，并进行开源。</li>
</ul>
<p>关于 Open JDK 与 Oracle JDK 源代码的关系</p>
<ul>
<li>包含在 OpenJDK 源代码中的绝大部分代码和 OracleJDK 是一样的。</li>
</ul>
</div>
<p>Open JDK 与 Oracle JDK 的主要区别在于 <strong>开源性质</strong>、<strong>商业支持</strong>、<strong>功能集成</strong> 和 <strong>许可协议</strong>。</p>
<ul>
<li>可以理解为 Open JDK 是 Oracle JDK 的分支，并且Oracle JDK 会和 Open JDK 保持同步。</li>
<li>并且 Oracle JDK 在发现 Open JDK 中存在 bug，Oracle 在修复 Bug 后同步给 Open JDK。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:center">特性</th>
<th style="text-align:left">OpenJDK</th>
<th style="text-align:left">Oracle JDK</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">开源性</td>
<td style="text-align:left">开源</td>
<td style="text-align:left">闭源</td>
</tr>
<tr>
<td style="text-align:center">许可协议</td>
<td style="text-align:left">GPLv2</td>
<td style="text-align:left">JRL</td>
</tr>
<tr>
<td style="text-align:center">商业支持</td>
<td style="text-align:left">无</td>
<td style="text-align:left">有（需付费）</td>
</tr>
<tr>
<td style="text-align:center">功能集成</td>
<td style="text-align:left">基础功能</td>
<td style="text-align:left">更多商业工具（如 Flight Recorder）</td>
</tr>
<tr>
<td style="text-align:center">适用场景</td>
<td style="text-align:left">开源、个人开发者</td>
<td style="text-align:left">企业、需要稳定支持</td>
</tr>
<tr>
<td style="text-align:center">安装方式</td>
<td style="text-align:left">压缩包</td>
<td style="text-align:left">安装程序</td>
</tr>
<tr>
<td style="text-align:center">更新频率</td>
<td style="text-align:left">高</td>
<td style="text-align:left">低（LTS 版本）</td>
</tr>
</tbody>
</table>
<p><strong>以下是详细对比：</strong></p>
<ol>
<li>开源与闭源</li>
</ol>
<ul>
<li><strong>Open JDK</strong> 是一个 <strong>开源项目</strong>，其源代码是公开的，任何人都可以自由查看、修改和分发。它由 Oracle、Red Hat、IBM 等公司以及全球开发者社区共同维护 。</li>
<li><strong>Oracle JDK</strong> 是 <strong>闭源的</strong>，虽然其底层代码基于 Open JDK，但部分组件（如图形渲染器、JCE 等）是闭源的，且不提供完整的源代码 。</li>
</ul>
<ol start="2">
<li>许可协议</li>
</ol>
<ul>
<li><strong>Open JDK</strong> 采用 <strong>GPLv2</strong> 协议，允许商业使用，但要求任何修改后的代码必须开源 。</li>
<li><strong>Oracle JDK</strong> 采用 <strong>JRL（Java Research License）</strong>，仅允许个人研究使用，不提供开源源代码。商业使用需要购买 Oracle 的商业许可证 。</li>
</ul>
<ol start="3">
<li>功能与组件</li>
</ol>
<ul>
<li><strong>Oracle JDK</strong> 提供了更完整的工具链，如安装程序（MSI、RPM、DEB 等），而 OpenJDK 通常仅提供压缩包（tar.gz 或 zip）。包含一些额外的商业功能，如 Java Flight Recorder、Java Mission Control、JCE（Java Cryptography Extension）等，这些功能在 Open JDK 中通常需要额外配置或使用替代方案 。</li>
</ul>
<ol start="4">
<li>商业支持与更新</li>
</ol>
<ul>
<li><strong>Open JDK</strong> 由社区维护，虽然也有 LTS 版本（如 OpenJDK 17、21），但更新和维护主要依赖社区贡献，商业支持需要自行寻找 。</li>
<li><strong>Oracle JDK</strong> 提供 <strong>长期支持（LTS）</strong> 和 <strong>付费的商业支持</strong>，包括安全更新、性能优化和故障排除服务 。</li>
</ul>
<ol start="5">
<li>适用场景</li>
</ol>
<ul>
<li><strong>Open JDK</strong> 适合 <strong>开源项目、个人开发者、小型企业</strong>，以及希望避免商业许可费用的用户。它更新频率高，适合需要快速迭代的项目 。</li>
<li><strong>Oracle JDK</strong> 更适合 <strong>大型企业、需要长期支持和稳定性的项目</strong>，以及需要使用 Java Flight Recorder、Mission Control 等工具的场景 。</li>
</ul>
<ol start="6">
<li>性能与稳定性</li>
</ol>
<ul>
<li><strong>Open JDK</strong>由于社区驱动，更新频率高，但某些功能可能不如 Oracle JDK 稳定。</li>
<li><strong>Oracle JDK</strong>在 <strong>JVM 性能、GC（垃圾回收）和图形渲染</strong> 方面通常表现更优，尤其是在生产环境中 。</li>
</ul>
<ol start="7">
<li>安装与配置</li>
</ol>
<ul>
<li><strong>Open JDK</strong> 需要手动解压和配置，适合高级用户或需要自定义构建的场景 。</li>
<li><strong>Oracle JDK</strong> 提供了 <strong>安装程序</strong>，可以自动配置环境变量（如 <code>JAVA_HOME</code>）和文件关联，安装过程更简单 。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - 问题总结 - 查看本机安装的JDK版本</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E6%9F%A5%E7%9C%8B%E6%9C%AC%E6%9C%BA%E5%AE%89%E8%A3%85%E7%9A%84JDK%E7%89%88%E6%9C%AC.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E6%9F%A5%E7%9C%8B%E6%9C%AC%E6%9C%BA%E5%AE%89%E8%A3%85%E7%9A%84JDK%E7%89%88%E6%9C%AC.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - 问题总结 - 查看本机安装的JDK版本</source>
      <description>文章摘要： 摘要内容。 方案一：使用java -version命令 在终端中运行以下命令 注释 若输出的内容包含**“OpenJDK“，则表示安装的是OpenJDK**，例如： 若输出的内容包含**“Java HotSpot”，则表示你使用的是Oracle JDK**，例如： 方案二：查看系统属性 在Java中，通过系统属性来判断当前使用的JDK版本。...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Mon, 16 Jun 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>方案一：使用<code>java -version</code>命令</h2>
<p>在终端中运行以下命令</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">java</span> <span class="token parameter variable">-version</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>若输出的内容包含**“OpenJDK“<strong>，则表示安装的是</strong>OpenJDK**，例如：</p>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">openjdk version "17.0.3" 2021-10-19</span>
<span class="line">OpenJDK Runtime Environment (build 17.0.3+8-Ubuntu-0ubuntu1.20.04)</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><p>若输出的内容包含**“Java HotSpot”<strong>，则表示你使用的是</strong>Oracle JDK**，例如：</p>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">java version "17.0.3" 2021-10-19</span>
<span class="line">Java(TM) SE Runtime Environment (build 17.0.3+8-Ubuntu-0ubuntu1.20.04)</span>
<span class="line">Java HotSpot(TM) 64-Bit Server VM (build 17.0.3+8-Ubuntu-0ubuntu1.20.04, mixed mode, sharing)</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></div>
<h2>方案二：查看系统属性</h2>
<p>在Java中，通过系统属性来判断当前使用的JDK版本。运行以下代码：</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token class-name">System</span><span class="token punctuation">.</span><span class="token function">getProperty</span><span class="token punctuation">(</span><span class="token string">"java.vm.name"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token class-name">System</span><span class="token punctuation">.</span><span class="token function">getProperty</span><span class="token punctuation">(</span><span class="token string">"java.runtime.name"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token class-name">System</span><span class="token punctuation">.</span><span class="token function">getProperty</span><span class="token punctuation">(</span><span class="token string">"java.vm.version"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token class-name">System</span><span class="token punctuation">.</span><span class="token function">getProperty</span><span class="token punctuation">(</span><span class="token string">"java.specification.version"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>如果输出中包含 <strong>"OpenJDK"</strong> ，则表示使用的是 <strong>OpenJDK</strong>。</p>
<p>如果输出中包含 <strong>"Java HotSpot"</strong> ，则表示使用的是 <strong>Oracle JDK</strong>。</p>
</div>
<h2>方法三：通过文件名判断</h2>
<p>JDK的安装路径通常会显示其版本信息。例如：</p>
<ul>
<li><strong>OpenJDK</strong>：<code>/usr/lib/jvm/java-17-openjdk-</code> 或 <code>C:\Program Files\OpenJDK\</code></li>
<li><strong>Oracle JDK</strong>：<code>/usr/lib/jvm/java-17-oracle-jdk-</code> 或 <code>C:\Program Files\Java\jdk-17.0.3\</code></li>
</ul>
<h2>方法四：查看许可证协议</h2>
<p><strong>OpenJDK</strong> 采用 <strong>GPL V2</strong> 协议，允许商业使用，但源代码是开源的。</p>
<p><strong>Oracle JDK</strong> 采用 <strong>JRL（Java Research License）</strong> ，仅允许个人研究使用，不提供开源源代码。</p>
]]></content:encoded>
    </item>
    <item>
      <title>Solution - 数字花园</title>
      <link>https://blog.magictable.ha.cn/note/Solution-%E6%95%B0%E5%AD%97%E8%8A%B1%E5%9B%AD.html</link>
      <guid>https://blog.magictable.ha.cn/note/Solution-%E6%95%B0%E5%AD%97%E8%8A%B1%E5%9B%AD.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Solution - 数字花园</source>
      <description>文章摘要： 构建个人知识库并实现数据的集中管理，围绕 Obsidian 软件制定并实施一套高效的知识整理方案。 简介 简要说明 构建个人知识库并实现数据的集中管理，围绕 Obsidian 软件制定并实施一套高效的知识整理方案。 主要作用 知识整合：集中管理各类信息，包括“日记、联系人、工作、私人、项目、资源、知识”，实现“系统化、结构化”存储数据。 便...</description>
      <category>学习笔记/方案</category>
      <pubDate>Mon, 09 Jun 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 构建个人知识库并实现数据的集中管理，围绕 Obsidian 软件制定并实施一套高效的知识整理方案。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>构建个人知识库并实现数据的集中管理，围绕 Obsidian 软件制定并实施一套高效的知识整理方案。</li>
</ul>
<p>主要作用</p>
<ul>
<li><strong>知识整合</strong>：集中管理各类信息，包括“日记、联系人、工作、私人、项目、资源、知识”，实现“系统化、结构化”存储数据。</li>
<li><strong>便捷检索</strong>：通过强大的搜索功能，快速定位所需信息，提高工作效率。</li>
<li><strong>结构化组织</strong>：采用“分类标签、外部链接、内部链接”等方式，构建清晰的知识结构，便于知识的扩展和回顾。</li>
<li><strong>协同共享</strong>：实现多设备或多人协作，促进知识共享与交流，增强团队协作能力。</li>
<li><strong>个性化定制</strong>：根据个人需求，自定义界面和功能，打造专属的知识管理空间。</li>
</ul>
<h2>思想和方案</h2>
<ul>
<li>将数据整理成知识，并在其之上开发应用，并非只停留在知识层面。</li>
<li>知识之间存在依赖关系（前置知识），因此需要学习当前任务所需的 “专业知识” 和 “相关知识”，不能只学习单个知识。</li>
<li>文章将会提供尽可能多的案例和解决方案。</li>
<li>笔记总结借鉴了“门面模式”，为开发者重新提供新的知识查询方式，降低理解难度。</li>
<li>解决官方网站文档苦涩难懂的需求。</li>
<li>知识应该以尽可能少的专业概念来描述知识，减少层级关系。</li>
<li>将知识、项目、解决方案，实现模块化读取和调用。</li>
</ul>
<p>核心知识</p>
<ul>
<li>采用 Markdown 作为记录笔记的文件格式。</li>
<li>使用 Obsidian 笔记软件中的双向链接功能，实现修改文件名称和目录时能够自动修改相关链接。</li>
<li>使用 Obsidian 笔记软件中的丰富插件和个性化页面设计，降低多款软件之间的切换成本，提高数据管理和查询的效率。</li>
</ul>
<h2>分类和规划</h2>
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<p>工作空间</p>
<p>隐私数据</p>
<p>知识仓库</p>
</div>
<h3>任务（task）</h3>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>用于创建任务和管理进度。</p>
<p>命名规范：文件以<code>YYYY-MM-DD_HHmmss</code>格式命名，确保唯一性和可追溯性。</p>
</div>
<p>话题</p>
<ul>
<li>可以是各式各样的话题，但需要经常更新“标签”。</li>
<li>分类建议：联系人、领域、日记、项目、资源、知识</li>
</ul>
<p>日历</p>
<ul>
<li>关注与时间密切相关的事情。</li>
<li>分类建议：节日、节气、纪念日、倒数日、生日、日程。</li>
</ul>
<h3>日记（diary）</h3>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>用于记录生活中重要事件，便于长期回顾和分析。通过系统化的日记记录，个人可以更好地反思过去、规划未来，形成持续的成长轨迹。</p>
<p>命名规范：文件以<code>YYYY-MM-DD_HHmmss</code>格式命名，确保唯一性和可追溯性。</p>
</div>
<p>分类建议</p>
<ul>
<li><strong>问题</strong>：遇到的问题。</li>
<li><strong>亮点</strong>：记录个人思考、感悟和灵感。</li>
<li><strong>总结</strong>：新解决方案。</li>
<li><strong>生活</strong>：记录日常生活中的重要事件和体验。</li>
<li><strong>摘录</strong>：记录阅读过程中的关键观点和心得。</li>
</ul>
<h3>工作（work）</h3>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>命名规范：通过"烤肉串命名法（kebab-case）"在文件名后面不断追加新标题。</p>
</div>
<h3>私人（private）</h3>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>命名规范：通过"烤肉串命名法（kebab-case）"在文件名后面不断追加新标题。</p>
</div>
<ul>
<li>健康信息：健康状况、体检报告、医疗记录</li>
<li>财务信息：银行账户、投资记录、消费记录</li>
<li>社交信息：朋友、社交活动、旅行记录</li>
<li>个人成长：学习经历、技能提升、兴趣爱好</li>
<li>网络行为轨迹：网络使用习惯、浏览记录</li>
</ul>
<h3>项目（project）</h3>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>用于记录和管理项目相关信息，便于项目跟踪与执行，确保项目目标的实现。</p>
<p>命名规范：通过"烤肉串命名法（kebab-case）"在文件名后面不断追加新标题。</p>
</div>
<p>管理内容</p>
<ul>
<li>项目基本信息：项目名称、目标、范围、预算、时间表。</li>
<li>项目计划与进度：任务分解、里程碑、资源分配。</li>
<li>项目成员与角色：团队成员、职责分配。</li>
<li>项目风险与问题：风险识别、应对措施。</li>
<li>项目成果与交付物：项目文档、产品、服务。</li>
<li>项目评估与总结：项目评价、经验教训。</li>
</ul>
<h3>联系人（contact）</h3>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>用于管理与个人生活紧密相关的人物信息，并对其进行分类整理。通过系统化的联系人管理，个人可以更高效地维护人际关系网络。</p>
<p>命名规范：文件以4位数字组成进行排序，最多支持9999位人物信息。</p>
</div>
<p>属性建议</p>
<ul>
<li>基本信息：姓名、联系方式（电话、邮箱、社交媒体账号）、地址等。</li>
<li>关系信息：与自己的关系（家人、朋友、同事等）、认识时间、重要程度。</li>
<li>个人特点：兴趣爱好、性格特点、擅长领域。</li>
<li>互动记录：重要会面、沟通记录、赠礼记录。</li>
<li>分类标签：职业、地域、兴趣爱好等多维度标签。</li>
</ul>
<h3>知识（knowledge）</h3>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p><strong>知识类笔记</strong>主要是对知识的总结，快速查询固定知识，对相关问题的总结，推荐的相关内容或解决方案，因此该类笔记需要有一下2种标签：</p>
<ul>
<li>主要标签（知识总结、查询手册、问题总结、热门推荐）</li>
<li>状态标签（已停滞、待完善、进行中、已完成）</li>
</ul>
</div>
<p>总结笔记（note）</p>
<ul>
<li>收集和整理学习过程中的笔记，包括日记、摘录、论文、方案、技术文档等。</li>
<li>分类示例：日常日记、知识摘要、学术论文、项目方案、技术笔记。</li>
</ul>
<p>艺术设计（design）</p>
<ul>
<li>存储与艺术相关的知识和灵感，涵盖风格、视觉设计等领域。</li>
<li>分类包括：知识参考、画面排版、信息图表、角色形象、建筑环境、道具设备、服装配饰、图标图案、字体字形、交互界面</li>
</ul>
<p>硬件设备（hardware）</p>
<ul>
<li>专注于硬件相关的知识，包括原材料、元器件、加工工艺和具体硬件设备。</li>
<li>分类示例：原材料、元器件、制造工艺、硬件产品。</li>
</ul>
<p>软件程序（software）</p>
<ul>
<li>涵盖软件程序相关的知识，从设计模式到编程语言，再到操作系统和软件包。</li>
<li>分类包括：设计模式、数据结构、算法设计、软件架构、程序语言、代码类库、操作系统、软件包。</li>
</ul>
<p>世界规则（rule）</p>
<ul>
<li>总结世界运行的基本规则和原理，涉及健康、环境、社会、道德、法律、经济和政策等方面。</li>
<li>分类包括：健康规则、环境法则、社会规范、道德伦理、法律制度、经济规律、政策解读。</li>
</ul>
<h3>资源（resource）</h3>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>用于管理各类资源信息，便于资源调用与共享，提升资源利用效率。</p>
<p>命名规范：文件以4位数字组成进行排序，每种分类尽量不超过9999条数据。</p>
</div>
<p>供应商</p>
<ul>
<li></li>
<li></li>
</ul>
<p>产品</p>
<ul>
<li></li>
<li></li>
</ul>
<p>设计</p>
<ul>
<li>知识参考、画面排版、信息图表、角色形象、建筑环境、道具设备、服装配饰、图标图案、字体字形、交互界面</li>
<li></li>
</ul>
<p>影视</p>
<ul>
<li>新闻、记录片、电影、电视剧、动画、动态漫</li>
<li></li>
</ul>
<p>音乐</p>
<ul>
<li>音乐、纯音乐、音效</li>
<li></li>
</ul>
<p>游戏</p>
<ul>
<li></li>
<li></li>
</ul>
<p>漫画</p>
<ul>
<li>平台类、原创类、同人类</li>
<li></li>
</ul>
<p>电子书</p>
<ul>
<li>小说、教学</li>
<li></li>
</ul>
<p>论文</p>
<ul>
<li></li>
<li></li>
</ul>
<h2>配置Obsidian软件</h2>
<p>详细总结：<a href="/software/Package-Obsidian-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E9%85%8D%E7%BD%AE%E6%96%B9%E6%A1%88-%E7%9F%A5%E8%AF%86%E4%BB%93%E5%BA%93.html" target="_blank">Package-Obsidian-热门推荐-配置方案-知识仓库</a></p>
<h2>属性和模板</h2>
<ul>
<li>Markdown是一种轻量级标记语言，使用易读易写的纯文本格式编写文档。</li>
<li>并且可通过Obsidian笔记软件完整适配。</li>
</ul>
<h3>任务（task）</h3>
<p>详细总结：</p>
<h3>日记（diary）</h3>
<p>详细总结：<a href="/software/Language-Markdown-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E6%A8%A1%E6%9D%BF-%E6%97%A5%E8%AE%B0.html" target="_blank">Language-Markdown-热门推荐-模板-日记</a></p>
<h3>工作（work）</h3>
<p>==待完善==</p>
<h3>私人（private）</h3>
<p>==待完善==</p>
<h3>项目（project）</h3>
<p>==待完善==</p>
<h3>联系人（contact）</h3>
<p>详细总结：<a href="/software/Language-Markdown-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E6%A8%A1%E6%9D%BF-%E8%81%94%E7%B3%BB%E4%BA%BA.html" target="_blank">Language-Markdown-热门推荐-模板-联系人</a></p>
<h3>知识（knowledge）</h3>
<p>总结笔记（note）</p>
<p>艺术设计（design）</p>
<p>硬件设备（hardware）</p>
<p>软件程序（software）</p>
<p>世界规则（rule）</p>
<p>==待完善==</p>
<h3>资源（resource）</h3>
<p>供应商</p>
<p>产品</p>
<p>设计</p>
<p>影视</p>
<p>游戏</p>
<p>音乐</p>
<p>漫画</p>
<p>电子书</p>
<p>论文</p>
<p>==待完善==</p>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Markdown - 热门推荐 - 模板 - 日记</title>
      <link>https://blog.magictable.ha.cn/software/Language-Markdown-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E6%A8%A1%E6%9D%BF-%E6%97%A5%E8%AE%B0.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Markdown-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E6%A8%A1%E6%9D%BF-%E6%97%A5%E8%AE%B0.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Markdown - 热门推荐 - 模板 - 日记</source>
      <description>文章摘要： Markdown模板展示，用于记录生活中重要事件，便于长期回顾和分析。 文件以4位数字组成进行排序，最多支持9999位人物信息。</description>
      <category>软件程序/程序语言</category>
      <pubDate>Mon, 09 Jun 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Markdown模板展示，用于记录生活中重要事件，便于长期回顾和分析。</p>
<!-- more -->
<p>文件以4位数字组成进行排序，最多支持9999位人物信息。</p>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Language - Markdown - 热门推荐 - 模板 - 联系人</title>
      <link>https://blog.magictable.ha.cn/software/Language-Markdown-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E6%A8%A1%E6%9D%BF-%E8%81%94%E7%B3%BB%E4%BA%BA.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Markdown-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E6%A8%A1%E6%9D%BF-%E8%81%94%E7%B3%BB%E4%BA%BA.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Markdown - 热门推荐 - 模板 - 联系人</source>
      <description>文章摘要： Markdown模板展示，管理与个人生活紧密相关的人物信息，并对其进行分类整理。</description>
      <category>软件程序/程序语言</category>
      <pubDate>Mon, 09 Jun 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Markdown模板展示，管理与个人生活紧密相关的人物信息，并对其进行分类整理。</p>
<!-- more -->
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Language - Markdown - 热门推荐 - 模板 - 项目文档</title>
      <link>https://blog.magictable.ha.cn/software/Language-Markdown-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E6%A8%A1%E6%9D%BF-%E9%A1%B9%E7%9B%AE%E6%96%87%E6%A1%A3.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Markdown-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E6%A8%A1%E6%9D%BF-%E9%A1%B9%E7%9B%AE%E6%96%87%E6%A1%A3.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Markdown - 热门推荐 - 模板 - 项目文档</source>
      <description>文章摘要： Markdown模板展示，管理与个人生活紧密相关的人物信息，并对其进行分类整理。</description>
      <category>软件程序/程序语言</category>
      <pubDate>Mon, 09 Jun 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Markdown模板展示，管理与个人生活紧密相关的人物信息，并对其进行分类整理。</p>
<!-- more -->
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Obsidian - 热门推荐 - 配置方案 - 知识仓库</title>
      <link>https://blog.magictable.ha.cn/software/Package-Obsidian-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E9%85%8D%E7%BD%AE%E6%96%B9%E6%A1%88-%E7%9F%A5%E8%AF%86%E4%BB%93%E5%BA%93.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Obsidian-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E9%85%8D%E7%BD%AE%E6%96%B9%E6%A1%88-%E7%9F%A5%E8%AF%86%E4%BB%93%E5%BA%93.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Obsidian - 热门推荐 - 配置方案 - 知识仓库</source>
      <description>文章摘要： 构建个人知识库并实现数据的集中管理，围绕 Obsidian 软件制定并实施一套高效的知识整理方案。 介绍说明 Markdown编辑：Obsidian支持Markdown语法，用户可以方便地创建标题、列表、表格等格式。 双向链接：在软件内修改或移动到其他目录时，会自动更新其他使用到该文件的链接。 知识图谱：Obsidian的核心功能是创建知识...</description>
      <category>软件程序/软件包</category>
      <pubDate>Mon, 09 Jun 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 构建个人知识库并实现数据的集中管理，围绕 Obsidian 软件制定并实施一套高效的知识整理方案。</p>
<!-- more -->
<h2>介绍说明</h2>
<ul>
<li><strong>Markdown编辑</strong>：Obsidian支持Markdown语法，用户可以方便地创建标题、列表、表格等格式。</li>
<li><strong>双向链接</strong>：在软件内修改或移动到其他目录时，会自动更新其他使用到该文件的链接。</li>
<li><strong>知识图谱</strong>：Obsidian的核心功能是创建知识图谱，通过链接笔记，将零散的信息组织成一个有结构的网络。</li>
<li><strong>模板</strong>：Obsidian提供了多种模板，方便用户快速创建笔记。</li>
<li><strong>跨平台</strong>：Obsidian支持Windows、macOS和Linux操作系统，同时也有移动端应用。</li>
<li><strong>插件市场</strong>：Obsidian拥有一个庞大的插件市场，用户可以根据自己的需求安装插件。</li>
</ul>
<h2>所需插件</h2>
<ul>
<li><strong>Excalidraw</strong>：绘图功能</li>
<li><strong>Git</strong>：版本控制，自动同步笔记。</li>
</ul>
<h2>顶级目录结构</h2>
<p>顶级目录分类如下，同时可自行选择英文或中文命名方式。</p>
<blockquote>
<p></p>
</blockquote>
<p>将笔记分类保持在同一目录层级内，有助于简化管理复杂性并避免因层级过多而导致的笔记间链接过长。</p>
<blockquote>
<p></p>
</blockquote>
<blockquote>
<p></p>
</blockquote>
<h2>附件目录结构</h2>
<p>在每个笔记目录下，创建有专门的子目录结构，用于存放各类附件文件。附件文件包括“图片、音频、视频和画板”等。主要作用是在按笔记分类对附件进行集中管理，同时缩短文件链接的长度。</p>
<blockquote>
<p></p>
</blockquote>
<h2>效果展示</h2>
<blockquote>
<p></p>
</blockquote>
<blockquote>
<p></p>
</blockquote>
<blockquote>
<p></p>
</blockquote>
<blockquote>
<p></p>
</blockquote>
<blockquote>
<p></p>
</blockquote>
<blockquote>
<p></p>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Society - 职业 - 自由职业</title>
      <link>https://blog.magictable.ha.cn/rule/Society-%E8%81%8C%E4%B8%9A-%E8%87%AA%E7%94%B1%E8%81%8C%E4%B8%9A.html</link>
      <guid>https://blog.magictable.ha.cn/rule/Society-%E8%81%8C%E4%B8%9A-%E8%87%AA%E7%94%B1%E8%81%8C%E4%B8%9A.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Society - 职业 - 自由职业</source>
      <description>文章摘要： 摘要内容。 简介 平台 Upwork 程序员客栈 电鸭社区</description>
      <category>世界规则/社会</category>
      <pubDate>Fri, 06 Jun 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<h2>平台</h2>
<p>Upwork</p>
<p>程序员客栈</p>
<p>电鸭社区</p>
]]></content:encoded>
    </item>
    <item>
      <title>Society - 网络宽带</title>
      <link>https://blog.magictable.ha.cn/rule/Society-%E7%BD%91%E7%BB%9C%E5%AE%BD%E5%B8%A6.html</link>
      <guid>https://blog.magictable.ha.cn/rule/Society-%E7%BD%91%E7%BB%9C%E5%AE%BD%E5%B8%A6.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Society - 网络宽带</source>
      <description>文章摘要： 摘要内容。 简介 资讯所在地区带宽运营商情况 宽带套餐种类 问题 合约期限 是否能更换套餐 如何注销 能否免费迁移 采购路由器 联系安装师傅上门安装</description>
      <category>世界规则/社会</category>
      <pubDate>Thu, 05 Jun 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>资讯所在地区带宽运营商情况</p>
<p>宽带套餐种类</p>
<p>问题</p>
<ul>
<li>合约期限</li>
<li>是否能更换套餐</li>
<li>如何注销</li>
<li>能否免费迁移</li>
</ul>
<p>采购路由器</p>
<p>联系安装师傅上门安装</p>
]]></content:encoded>
    </item>
    <item>
      <title>Device - 数据传输线 - HDMI</title>
      <link>https://blog.magictable.ha.cn/hardware/Device-%E6%95%B0%E6%8D%AE%E4%BC%A0%E8%BE%93%E7%BA%BF-HDMI.html</link>
      <guid>https://blog.magictable.ha.cn/hardware/Device-%E6%95%B0%E6%8D%AE%E4%BC%A0%E8%BE%93%E7%BA%BF-HDMI.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Device - 数据传输线 - HDMI</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 主要功能 用于传输高清音视频信号，支持无压缩的音频和视频传输。 注意事项 适用场景 类型 标准HDMI：适用于电视和显示器。 Mini HDMI：用于平板电脑和相机。 Micro HDMI：用于小型设备如便携摄像机。 型号 HDMI 1.4：支持4K分辨率。 HDMI 2.1：支持8K分辨率，适合高端电视和游戏机。</description>
      <category>硬件设备/设备</category>
      <pubDate>Thu, 05 Jun 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li>用于传输高清音视频信号，支持无压缩的音频和视频传输。</li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>类型</h2>
<ul>
<li>标准HDMI：适用于电视和显示器。</li>
<li>Mini HDMI：用于平板电脑和相机。</li>
<li>Micro HDMI：用于小型设备如便携摄像机。</li>
</ul>
<h2>型号</h2>
<ul>
<li>HDMI 1.4：支持4K分辨率。</li>
<li>HDMI 2.1：支持8K分辨率，适合高端电视和游戏机。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Device - 数据传输线 - USB</title>
      <link>https://blog.magictable.ha.cn/hardware/Device-%E6%95%B0%E6%8D%AE%E4%BC%A0%E8%BE%93%E7%BA%BF-USB.html</link>
      <guid>https://blog.magictable.ha.cn/hardware/Device-%E6%95%B0%E6%8D%AE%E4%BC%A0%E8%BE%93%E7%BA%BF-USB.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Device - 数据传输线 - USB</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 主要功能 用于连接电脑与外部设备，支持数据传输和充电。 注意事项 适用场景 接口类型 USB Type-A：常见于电脑和充电器。 USB Type-B：多用于打印机、外置硬盘。 Micro USB：常见于智能手机和平板电脑。 USB-C：支持正反插，传输速度快，适用于新设备。</description>
      <category>硬件设备/设备</category>
      <pubDate>Thu, 05 Jun 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li>用于连接电脑与外部设备，支持数据传输和充电。</li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>接口类型</h2>
<ul>
<li>USB Type-A：常见于电脑和充电器。</li>
<li>USB Type-B：多用于打印机、外置硬盘。</li>
<li>Micro USB：常见于智能手机和平板电脑。</li>
<li>USB-C：支持正反插，传输速度快，适用于新设备。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Device - 数据传输线</title>
      <link>https://blog.magictable.ha.cn/hardware/Device-%E6%95%B0%E6%8D%AE%E4%BC%A0%E8%BE%93%E7%BA%BF.html</link>
      <guid>https://blog.magictable.ha.cn/hardware/Device-%E6%95%B0%E6%8D%AE%E4%BC%A0%E8%BE%93%E7%BA%BF.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Device - 数据传输线</source>
      <description>文章摘要： 数据传输线是指通过电缆将数据或信号从一处传输到另一处的媒介。 简介 简要说明 主要功能 注意事项 适用场景</description>
      <category>硬件设备/设备</category>
      <pubDate>Thu, 05 Jun 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 数据传输线是指通过电缆将数据或信号从一处传输到另一处的媒介。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Process（加工工艺）</title>
      <link>https://blog.magictable.ha.cn/hardware/Process%EF%BC%88%E5%8A%A0%E5%B7%A5%E5%B7%A5%E8%89%BA%EF%BC%89.html</link>
      <guid>https://blog.magictable.ha.cn/hardware/Process%EF%BC%88%E5%8A%A0%E5%B7%A5%E5%B7%A5%E8%89%BA%EF%BC%89.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Process（加工工艺）</source>
      <description>文章摘要： 通过一系列有序的步骤、方法和参数，将原材料或半成品转化为最终产品的系统性技术流程。 简介 简要说明 通过一系列有序的步骤、方法和参数，将原材料或半成品转化为最终产品的系统性技术流程。 核心作用在于优化生产效率、控制产品质量，并满足特定功能需求。 主要功能 性能优化：通过参数调整（如切削速度、温度、压力）提升产品性能。 流程标准化：定义加工顺...</description>
      <category>硬件设备/工艺</category>
      <pubDate>Thu, 05 Jun 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 通过一系列有序的步骤、方法和参数，将原材料或半成品转化为最终产品的系统性技术流程。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>通过一系列有序的步骤、方法和参数，将原材料或半成品转化为最终产品的系统性技术流程。</li>
<li>核心作用在于优化生产效率、控制产品质量，并满足特定功能需求。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>性能优化</strong>：通过参数调整（如切削速度、温度、压力）提升产品性能。</li>
<li><strong>流程标准化</strong>：定义加工顺序（如前段制程的晶圆加工、后段制程的封装）和工艺规范，减少人为误差。</li>
<li><strong>成本控制</strong>：集成多功能设备减少工序切换成本。</li>
<li><strong>质量控制</strong>：通过检测确保成品符合标准。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>设备与材料适配性</strong>：根据材料特性选择工艺设备。</li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>基础知识</h2>
<h2>产品应用</h2>
<h3>3D打印</h3>
<p>详细总结：<a href="/hardware/Process-%E7%BC%96%E7%BB%87.html" target="_blank">Process-编织</a></p>
<h3>编织</h3>
<p>详细总结：<a href="/hardware/Process-%E7%BC%96%E7%BB%87.html" target="_blank">Process-编织</a></p>
<h3>缝纫</h3>
<p>详细总结：<a href=""></a></p>
<h3>切割</h3>
<p>详细总结：<a href=""></a></p>
<h3>抛光</h3>
<p>详细总结：<a href=""></a></p>
<h3>焊接</h3>
<p>详细总结：<a href=""></a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Diary - 进制</title>
      <link>https://blog.magictable.ha.cn/note/Diary-%E8%BF%9B%E5%88%B6.html</link>
      <guid>https://blog.magictable.ha.cn/note/Diary-%E8%BF%9B%E5%88%B6.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Diary - 进制</source>
      <description>文章摘要： 进制。 简介 二进制：0和1，满2进1，以0b或0B开头表示。 十进制：0~9，满10进1。 八进制：0~7，满8进1，以数字0开头表示。 十六进制：0~9以及A(10)~F(15)，满16进1，以0x或0X开头表示。（A~F不区分大小写） 进制转换 二进制转换为十进制 从最低位（右边）开始，将每个位上的数据提取出来（当前位实际数∗2当前数...</description>
      <category>学习笔记/日记</category>
      <pubDate>Tue, 03 Jun 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 进制。</p>
<!-- more -->
<h2>简介</h2>
<p>二进制：<code>0</code>和<code>1</code>，满2进1，以<code>0b</code>或<code>0B</code>开头表示。</p>
<p>十进制：<code>0~9</code>，满10进1。</p>
<p>八进制：<code>0~7</code>，满8进1，以<code>数字0</code>开头表示。</p>
<p>十六进制：<code>0~9</code>以及<code>A(10)~F(15)</code>，满16进1，以<code>0x</code>或<code>0X</code>开头表示。（A~F不区分大小写）</p>
<h2>进制转换</h2>
<h3>二进制转换为十进制</h3>
<ul>
<li>从最低位（右边）开始，将每个位上的数据提取出来（<span v-pre="" class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mtext>当前位实际数</mtext><mo>∗</mo><msup><mn>2</mn><mrow><mtext>当前数所属位数</mtext><mo>−</mo><mn>1</mn></mrow></msup></mrow><annotation encoding="application/x-tex">\text{当前位实际数}*2^{\text{当前数所属位数}-1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord text"><span class="mord cjk_fallback">当前位实际数</span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">∗</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8413em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8413em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord text mtight"><span class="mord cjk_fallback mtight">当前数所属位数</span></span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span></span></span></span></span></span></span></span>），然后求和。</li>
</ul>
<h3>八进制转换为十进制</h3>
<ul>
<li>从最低位（右边）开始，将每个位上的数据提取出来（<span v-pre="" class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mtext>当前位实际数</mtext><mo>∗</mo><msup><mn>8</mn><mrow><mtext>当前数所属位数</mtext><mo>−</mo><mn>1</mn></mrow></msup></mrow><annotation encoding="application/x-tex">\text{当前位实际数}*8^{\text{当前数所属位数}-1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord text"><span class="mord cjk_fallback">当前位实际数</span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">∗</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8413em;"></span><span class="mord"><span class="mord">8</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8413em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord text mtight"><span class="mord cjk_fallback mtight">当前数所属位数</span></span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span></span></span></span></span></span></span></span>），然后求和。</li>
</ul>
<h3>十六进制转换为十进制</h3>
<ul>
<li>从最低位（右边）开始，将每个位上的数据提取出来（<span v-pre="" class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mtext>当前位实际数</mtext><mo>∗</mo><msup><mn>16</mn><mrow><mtext>当前数所属位数</mtext><mo>−</mo><mn>1</mn></mrow></msup></mrow><annotation encoding="application/x-tex">\text{当前位实际数}*16^{\text{当前数所属位数}-1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord text"><span class="mord cjk_fallback">当前位实际数</span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">∗</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8413em;"></span><span class="mord">1</span><span class="mord"><span class="mord">6</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8413em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord text mtight"><span class="mord cjk_fallback mtight">当前数所属位数</span></span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span></span></span></span></span></span></span></span>），然后求和。</li>
</ul>
<h3>十进制转换为二进制</h3>
<ul>
<li>将该数不断除以2，直到商为0为止，然后将每一步骤得到的余数倒过来，就是对应的二进制。</li>
</ul>
<h3>十进制转换为八进制</h3>
<ul>
<li>将该数不断除以8，直到商为0为止，然后将每一步骤得到的余数倒过来，就是对应的二进制。</li>
</ul>
<h3>十进制转换为十六进制</h3>
<ul>
<li>将该数不断除以16，直到商为0为止，然后将每一步骤得到的余数倒过来，就是对应的二进制。</li>
</ul>
<h3>二进制转换为八进制</h3>
<ul>
<li>从低位开始，将二进制数每3位为一组，转成对应的八进制数即可。</li>
</ul>
<h3>二进制转换为十六进制</h3>
<ul>
<li>从低位开始，将二进制数每4位为一组，转成对应的八进制数即可。</li>
</ul>
<h3>八进制转换为二进制</h3>
<ul>
<li>将八进制数每1位，转成对应的一个3位的二进制数即可。</li>
</ul>
<h3>十六进制转换为二进制</h3>
<ul>
<li>将八进制数每1位，转成对应的一个4位的二进制数即可。</li>
</ul>
<h2>原码、反码、补码</h2>
<p>对于有符号的而言：</p>
<ul>
<li>二进制的最高位是符号位，0表示正数，1表示负数。</li>
<li>正数的原码、反码、补码都一样。</li>
<li>负数的反码 = 原码的符号位不变，其他位取反。</li>
<li>负数的补码 = 反码 + 1</li>
<li>负数的反码 = 补码 - 1</li>
<li>0的反码、补码都是0。</li>
<li>计算机在运算过程中，都是以补码的方式来运算的。</li>
<li>当我们看运算结果的时候，要看最终的原码。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Diary - 沟通方式 - 文字 - 英语英文 - 热门推荐 - 模板 - 日记</title>
      <link>https://blog.magictable.ha.cn/note/Diary-%E6%B2%9F%E9%80%9A%E6%96%B9%E5%BC%8F-%E6%96%87%E5%AD%97-%E8%8B%B1%E8%AF%AD%E8%8B%B1%E6%96%87-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E6%A8%A1%E6%9D%BF-%E6%97%A5%E8%AE%B0.html</link>
      <guid>https://blog.magictable.ha.cn/note/Diary-%E6%B2%9F%E9%80%9A%E6%96%B9%E5%BC%8F-%E6%96%87%E5%AD%97-%E8%8B%B1%E8%AF%AD%E8%8B%B1%E6%96%87-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E6%A8%A1%E6%9D%BF-%E6%97%A5%E8%AE%B0.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Diary - 沟通方式 - 文字 - 英语英文 - 热门推荐 - 模板 - 日记</source>
      <category>学习笔记/日记</category>
      <pubDate>Sat, 31 May 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
]]></content:encoded>
    </item>
    <item>
      <title>Diary - 沟通方式 - 文字 - 英语英文 - 热门推荐 - 模板 - 申请信</title>
      <link>https://blog.magictable.ha.cn/note/Diary-%E6%B2%9F%E9%80%9A%E6%96%B9%E5%BC%8F-%E6%96%87%E5%AD%97-%E8%8B%B1%E8%AF%AD%E8%8B%B1%E6%96%87-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E6%A8%A1%E6%9D%BF-%E7%94%B3%E8%AF%B7%E4%BF%A1.html</link>
      <guid>https://blog.magictable.ha.cn/note/Diary-%E6%B2%9F%E9%80%9A%E6%96%B9%E5%BC%8F-%E6%96%87%E5%AD%97-%E8%8B%B1%E8%AF%AD%E8%8B%B1%E6%96%87-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E6%A8%A1%E6%9D%BF-%E7%94%B3%E8%AF%B7%E4%BF%A1.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Diary - 沟通方式 - 文字 - 英语英文 - 热门推荐 - 模板 - 申请信</source>
      <category>学习笔记/日记</category>
      <pubDate>Sat, 31 May 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
]]></content:encoded>
    </item>
    <item>
      <title>Diary - 沟通方式 - 文字 - 英语英文 - 热门推荐 - 模板 - 问题反馈</title>
      <link>https://blog.magictable.ha.cn/note/Diary-%E6%B2%9F%E9%80%9A%E6%96%B9%E5%BC%8F-%E6%96%87%E5%AD%97-%E8%8B%B1%E8%AF%AD%E8%8B%B1%E6%96%87-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E6%A8%A1%E6%9D%BF-%E9%97%AE%E9%A2%98%E5%8F%8D%E9%A6%88.html</link>
      <guid>https://blog.magictable.ha.cn/note/Diary-%E6%B2%9F%E9%80%9A%E6%96%B9%E5%BC%8F-%E6%96%87%E5%AD%97-%E8%8B%B1%E8%AF%AD%E8%8B%B1%E6%96%87-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E6%A8%A1%E6%9D%BF-%E9%97%AE%E9%A2%98%E5%8F%8D%E9%A6%88.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Diary - 沟通方式 - 文字 - 英语英文 - 热门推荐 - 模板 - 问题反馈</source>
      <category>学习笔记/日记</category>
      <pubDate>Sat, 31 May 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
]]></content:encoded>
    </item>
    <item>
      <title>Diary - 沟通方式 - 文字 - 英语英文 - 热门推荐</title>
      <link>https://blog.magictable.ha.cn/note/Diary-%E6%B2%9F%E9%80%9A%E6%96%B9%E5%BC%8F-%E6%96%87%E5%AD%97-%E8%8B%B1%E8%AF%AD%E8%8B%B1%E6%96%87-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90.html</link>
      <guid>https://blog.magictable.ha.cn/note/Diary-%E6%B2%9F%E9%80%9A%E6%96%B9%E5%BC%8F-%E6%96%87%E5%AD%97-%E8%8B%B1%E8%AF%AD%E8%8B%B1%E6%96%87-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Diary - 沟通方式 - 文字 - 英语英文 - 热门推荐</source>
      <description>模板 日记 详细总结： 申请信 详细总结： 问题反馈 详细总结：</description>
      <category>学习笔记/日记</category>
      <pubDate>Sat, 31 May 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
<h2>模板</h2>
<h3>日记</h3>
<p>详细总结：<a href="/note/Diary-%E6%B2%9F%E9%80%9A%E6%96%B9%E5%BC%8F-%E6%96%87%E5%AD%97-%E8%8B%B1%E8%AF%AD%E8%8B%B1%E6%96%87-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E6%A8%A1%E6%9D%BF-%E6%97%A5%E8%AE%B0.html" target="_blank">Diary-沟通方式-文字-英语英文-热门推荐-模板-日记</a></p>
<h3>申请信</h3>
<p>详细总结：<a href="/note/Diary-%E6%B2%9F%E9%80%9A%E6%96%B9%E5%BC%8F-%E6%96%87%E5%AD%97-%E8%8B%B1%E8%AF%AD%E8%8B%B1%E6%96%87-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E6%A8%A1%E6%9D%BF-%E7%94%B3%E8%AF%B7%E4%BF%A1.html" target="_blank">Diary-沟通方式-文字-英语英文-热门推荐-模板-申请信</a></p>
<h3>问题反馈</h3>
<p>详细总结：<a href="/note/Diary-%E6%B2%9F%E9%80%9A%E6%96%B9%E5%BC%8F-%E6%96%87%E5%AD%97-%E8%8B%B1%E8%AF%AD%E8%8B%B1%E6%96%87-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E6%A8%A1%E6%9D%BF-%E9%97%AE%E9%A2%98%E5%8F%8D%E9%A6%88.html" target="_blank">Diary-沟通方式-文字-英语英文-热门推荐-模板-问题反馈</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Diary - 沟通方式 - 文字 - 英语英文 - 词性</title>
      <link>https://blog.magictable.ha.cn/note/Diary-%E6%B2%9F%E9%80%9A%E6%96%B9%E5%BC%8F-%E6%96%87%E5%AD%97-%E8%8B%B1%E8%AF%AD%E8%8B%B1%E6%96%87-%E8%AF%8D%E6%80%A7.html</link>
      <guid>https://blog.magictable.ha.cn/note/Diary-%E6%B2%9F%E9%80%9A%E6%96%B9%E5%BC%8F-%E6%96%87%E5%AD%97-%E8%8B%B1%E8%AF%AD%E8%8B%B1%E6%96%87-%E8%AF%8D%E6%80%A7.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Diary - 沟通方式 - 文字 - 英语英文 - 词性</source>
      <description>文章摘要： 英语单词的词性（Parts of Speech）是单词在句子中功能的分类。 相关信息 英语单词的词性（Parts of Speech）是单词在句子中功能的分类。 部分单词可同时属于多种词性（如“water”可作名词“水”或动词“浇水”），需根据语境判断。 名词（Noun, n.） 表示人、事物、地点、概念等，如：student（学生）、bo...</description>
      <category>学习笔记/日记</category>
      <pubDate>Sat, 31 May 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 英语单词的词性（Parts of Speech）是单词在句子中功能的分类。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<ul>
<li>英语单词的词性（Parts of Speech）是单词在句子中功能的分类。</li>
<li>部分单词可同时属于多种词性（如“water”可作名词“水”或动词“浇水”），需根据语境判断。</li>
</ul>
</div>
<p><strong>名词（Noun, n.）</strong></p>
<ul>
<li>表示人、事物、地点、概念等，如：student（学生）、book（书）、happiness（幸福）。</li>
</ul>
<p><strong>动词（Verb, v.）</strong></p>
<ul>
<li>表示动作或状态，如：run（跑）、be（是）、think（想）。</li>
</ul>
<p><strong>形容词（Adjective, adj.）</strong></p>
<ul>
<li>修饰名词，描述性质或特征，如：big（大的）、happy（开心的）、red（红色的）。</li>
</ul>
<p><strong>副词（Adverb, adv.）</strong></p>
<ul>
<li>修饰动词、形容词或其他副词，说明方式、程度、时间等，如：quickly（快速地）、very（非常）、today（今天）。</li>
</ul>
<p><strong>代词（Pronoun, pron.）</strong></p>
<ul>
<li>代替名词，避免重复，如：he（他）、this（这个）、mine（我的）。</li>
</ul>
<p><strong>介词（Preposition, prep.）</strong></p>
<ul>
<li>表示词与词之间的关系（如时间、地点），如：in（在……里）、on（在……上）、with（和……一起）。</li>
</ul>
<p><strong>连词（Conjunction, conj.）</strong></p>
<ul>
<li>连接单词、短语或句子，如：and（和）、but（但是）、if（如果）。</li>
</ul>
<p><strong>冠词（Article, art.）</strong></p>
<ul>
<li>限定名词，分不定冠词（a, an）和定冠词（the），如：a book（一本书）、the sun（太阳）。</li>
</ul>
<p><strong>数量词（Numeral, num.）</strong></p>
<ul>
<li>表示数量或顺序，如：three（三）、first（第一）。</li>
</ul>
<p><strong>感叹词（Interjection, int.）</strong></p>
<ul>
<li>表达强烈情感，独立使用，如：oh（哦）、wow（哇）、hey（嘿）。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Diary - 沟通方式 - 文字 - 英语英文 - 词汇 - hello</title>
      <link>https://blog.magictable.ha.cn/note/Diary-%E6%B2%9F%E9%80%9A%E6%96%B9%E5%BC%8F-%E6%96%87%E5%AD%97-%E8%8B%B1%E8%AF%AD%E8%8B%B1%E6%96%87-%E8%AF%8D%E6%B1%87-hello.html</link>
      <guid>https://blog.magictable.ha.cn/note/Diary-%E6%B2%9F%E9%80%9A%E6%96%B9%E5%BC%8F-%E6%96%87%E5%AD%97-%E8%8B%B1%E8%AF%AD%E8%8B%B1%E6%96%87-%E8%AF%8D%E6%B1%87-hello.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Diary - 沟通方式 - 文字 - 英语英文 - 词汇 - hello</source>
      <description>hello 翻译 你好；喂；嘿 音标 /həˈləʊ/ 词性 int. n. 发音 分类</description>
      <category>学习笔记/日记</category>
      <pubDate>Sat, 31 May 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
<h2>hello</h2>
<p>翻译</p>
<blockquote>
<p>你好；喂；嘿</p>
</blockquote>
<p>音标</p>
<blockquote>
<p>/həˈləʊ/</p>
</blockquote>
<p>词性</p>
<blockquote>
<ul>
<li>int.</li>
<li>n.</li>
</ul>
</blockquote>
<p>发音</p>
<blockquote>
<p></p>
</blockquote>
<p>分类</p>
]]></content:encoded>
    </item>
    <item>
      <title>Diary - 沟通方式 - 文字 - 英语英文 - 词汇</title>
      <link>https://blog.magictable.ha.cn/note/Diary-%E6%B2%9F%E9%80%9A%E6%96%B9%E5%BC%8F-%E6%96%87%E5%AD%97-%E8%8B%B1%E8%AF%AD%E8%8B%B1%E6%96%87-%E8%AF%8D%E6%B1%87.html</link>
      <guid>https://blog.magictable.ha.cn/note/Diary-%E6%B2%9F%E9%80%9A%E6%96%B9%E5%BC%8F-%E6%96%87%E5%AD%97-%E8%8B%B1%E8%AF%AD%E8%8B%B1%E6%96%87-%E8%AF%8D%E6%B1%87.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Diary - 沟通方式 - 文字 - 英语英文 - 词汇</source>
      <description>文章摘要： 摘要内容。</description>
      <category>学习笔记/日记</category>
      <pubDate>Sat, 31 May 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
]]></content:encoded>
    </item>
    <item>
      <title>Diary - 沟通方式 - 文字 - 英语英文 - 语法规则</title>
      <link>https://blog.magictable.ha.cn/note/Diary-%E6%B2%9F%E9%80%9A%E6%96%B9%E5%BC%8F-%E6%96%87%E5%AD%97-%E8%8B%B1%E8%AF%AD%E8%8B%B1%E6%96%87-%E8%AF%AD%E6%B3%95%E8%A7%84%E5%88%99.html</link>
      <guid>https://blog.magictable.ha.cn/note/Diary-%E6%B2%9F%E9%80%9A%E6%96%B9%E5%BC%8F-%E6%96%87%E5%AD%97-%E8%8B%B1%E8%AF%AD%E8%8B%B1%E6%96%87-%E8%AF%AD%E6%B3%95%E8%A7%84%E5%88%99.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Diary - 沟通方式 - 文字 - 英语英文 - 语法规则</source>
      <category>学习笔记/日记</category>
      <pubDate>Sat, 31 May 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
]]></content:encoded>
    </item>
    <item>
      <title>Diary - 沟通方式 - 文字 - 英语英文 - 音标</title>
      <link>https://blog.magictable.ha.cn/note/Diary-%E6%B2%9F%E9%80%9A%E6%96%B9%E5%BC%8F-%E6%96%87%E5%AD%97-%E8%8B%B1%E8%AF%AD%E8%8B%B1%E6%96%87-%E9%9F%B3%E6%A0%87.html</link>
      <guid>https://blog.magictable.ha.cn/note/Diary-%E6%B2%9F%E9%80%9A%E6%96%B9%E5%BC%8F-%E6%96%87%E5%AD%97-%E8%8B%B1%E8%AF%AD%E8%8B%B1%E6%96%87-%E9%9F%B3%E6%A0%87.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Diary - 沟通方式 - 文字 - 英语英文 - 音标</source>
      <description>文章摘要： 以下是英语音标的完整列举（以国际音标IPA为基础，含英式主流发音）。 警告 提示： 会有多个英文字母使用同一个音标。 一个音标会由多个字母组成。 /iː/中的冒号:代表发长音，没有冒号代表发短音。 元音（20个） 注释 单元音根据舌位和唇形进一步分为前元音、中元音和后元音，（反映了发音时舌头在口腔中的最高位置）。 双元音由两个元音音素组成，...</description>
      <category>学习笔记/日记</category>
      <pubDate>Sat, 31 May 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 以下是英语音标的完整列举（以国际音标IPA为基础，含英式主流发音）。</p>
<!-- more -->
<div class="hint-container warning">
<p class="hint-container-title">警告</p>
<p>提示：</p>
<ul>
<li>会有多个英文字母使用同一个音标。</li>
<li>一个音标会由多个字母组成。</li>
<li><code>/iː/</code>中的冒号<code>:</code>代表发长音，没有冒号代表发短音。</li>
</ul>
</div>
<h2>元音（20个）</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li><strong>单元音</strong>根据舌位和唇形进一步分为前元音、中元音和后元音，（反映了发音时舌头在口腔中的最高位置）。</li>
<li><strong>双元音</strong>由两个元音音素组成，发音时口型会从一个元音过渡到另一个元音。</li>
<li><strong>长元音</strong>：发音持续时间较长，如 /iː/、/ɑː/、/uː/。</li>
<li><strong>短元音</strong>：发音短促，如 /ɪ/、/ʌ/、/ɒ/。</li>
<li><strong>双元音</strong>：发音时口型有明显变化，如 /eɪ/、/aɪ/、/əʊ/。</li>
</ul>
</div>
<h3>单元音 - （发音时舌尖抵下齿，舌前部抬高）</h3>
<table>
<thead>
<tr>
<th style="text-align:center">音标符号</th>
<th style="text-align:left">示例单词</th>
<th style="text-align:center">发音时长</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">/iː/</td>
<td style="text-align:left">see</td>
<td style="text-align:center">长</td>
<td style="text-align:left">发音时嘴角微微张开，像微笑</td>
</tr>
<tr>
<td style="text-align:center">/ɪ/</td>
<td style="text-align:left">sit</td>
<td style="text-align:center">短</td>
<td style="text-align:left">发音较短且口型较松</td>
</tr>
<tr>
<td style="text-align:center">/e/</td>
<td style="text-align:left">bed</td>
<td style="text-align:center">短</td>
<td style="text-align:left">发音时嘴巴扁平</td>
</tr>
<tr>
<td style="text-align:center">/æ/</td>
<td style="text-align:left">cat</td>
<td style="text-align:center">短</td>
<td style="text-align:left">发音时嘴巴张开较大</td>
</tr>
</tbody>
</table>
<h3>单元音 - （发音时舌头平放，舌头中部微微抬起）</h3>
<table>
<thead>
<tr>
<th style="text-align:center">音标符号</th>
<th style="text-align:left">示例单词</th>
<th style="text-align:center">发音时长</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">/ɜː/</td>
<td style="text-align:left">bird</td>
<td style="text-align:center">长</td>
<td style="text-align:left">发音时舌头后部稍微抬高</td>
</tr>
<tr>
<td style="text-align:center">/ə/</td>
<td style="text-align:left">about</td>
<td style="text-align:center">短</td>
<td style="text-align:left">发音非常轻，类似汉语拼音的“饿”</td>
</tr>
</tbody>
</table>
<h3>单元音 - （发音时舌头后部抬高）</h3>
<table>
<thead>
<tr>
<th style="text-align:center">音标符号</th>
<th style="text-align:left">示例单词</th>
<th style="text-align:center">发音时长</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">/uː/</td>
<td style="text-align:left">too</td>
<td style="text-align:center">长</td>
<td style="text-align:left">发音时双唇收圆并微微突出</td>
</tr>
<tr>
<td style="text-align:center">/ʊ/</td>
<td style="text-align:left">book</td>
<td style="text-align:center">短</td>
<td style="text-align:left">发音时双唇收圆</td>
</tr>
<tr>
<td style="text-align:center">/ɔː/</td>
<td style="text-align:left">door</td>
<td style="text-align:center">长</td>
<td style="text-align:left">发音时双唇收圆并稍微突出</td>
</tr>
<tr>
<td style="text-align:center">/ɒ/</td>
<td style="text-align:left">hot</td>
<td style="text-align:center">短</td>
<td style="text-align:left">发音时嘴巴稍圆</td>
</tr>
<tr>
<td style="text-align:center">/ɑː/</td>
<td style="text-align:left">car</td>
<td style="text-align:center">长</td>
<td style="text-align:left">发音时嘴巴张大，舌后部放松</td>
</tr>
<tr>
<td style="text-align:center">/ʌ/</td>
<td style="text-align:left">cup</td>
<td style="text-align:center">短</td>
<td style="text-align:left">发音时嘴巴自然张开</td>
</tr>
</tbody>
</table>
<h3>双元音 - （发音时口型从开到合）</h3>
<table>
<thead>
<tr>
<th style="text-align:center">音标符号</th>
<th style="text-align:left">示例单词</th>
<th style="text-align:center">发音时长</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">/eɪ/</td>
<td style="text-align:left">day</td>
<td style="text-align:center">短</td>
<td style="text-align:left">发音类似字母 “A”</td>
</tr>
<tr>
<td style="text-align:center">/aɪ/</td>
<td style="text-align:left">my</td>
<td style="text-align:center">短</td>
<td style="text-align:left">发音类似字母 “I”</td>
</tr>
<tr>
<td style="text-align:center">/ɔɪ/</td>
<td style="text-align:left">boy</td>
<td style="text-align:center">短</td>
<td style="text-align:left">发音时从圆唇到扁平唇</td>
</tr>
<tr>
<td style="text-align:center">/əʊ/</td>
<td style="text-align:left">go</td>
<td style="text-align:center">短</td>
<td style="text-align:left">发音类似字母 “O”</td>
</tr>
<tr>
<td style="text-align:center">/aʊ/</td>
<td style="text-align:left">how</td>
<td style="text-align:center">短</td>
<td style="text-align:left">发音类似“啊”到“呜”</td>
</tr>
</tbody>
</table>
<h3>双元音 - （发音时以<code>/ə/</code>结尾）</h3>
<table>
<thead>
<tr>
<th style="text-align:center">音标符号</th>
<th style="text-align:left">示例单词</th>
<th style="text-align:center">发音时长</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">/ɪə/</td>
<td style="text-align:left">ear</td>
<td style="text-align:center">短</td>
<td style="text-align:left">发音时从短元音 /ɪ/ 过渡到 /ə/</td>
</tr>
<tr>
<td style="text-align:center">/eə/</td>
<td style="text-align:left">air</td>
<td style="text-align:center">短</td>
<td style="text-align:left">发音时从 /e/ 过渡到 /ə/</td>
</tr>
<tr>
<td style="text-align:center">/ʊə/</td>
<td style="text-align:left">tour</td>
<td style="text-align:center">短</td>
<td style="text-align:left">发音时从 /ʊ/ 过渡到 /ə/</td>
</tr>
</tbody>
</table>
<h2>辅音（28个）</h2>
<h3>清辅音 - （发音时声带不振动）</h3>
<table>
<thead>
<tr>
<th style="text-align:center">音标符号</th>
<th style="text-align:left">发音方式</th>
<th style="text-align:left">示例单词</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">/p/</td>
<td style="text-align:left">爆破音</td>
<td style="text-align:left">pat</td>
</tr>
<tr>
<td style="text-align:center">/t/</td>
<td style="text-align:left">爆破音</td>
<td style="text-align:left">tap</td>
</tr>
<tr>
<td style="text-align:center">/k/</td>
<td style="text-align:left">爆破音</td>
<td style="text-align:left">cat</td>
</tr>
<tr>
<td style="text-align:center">/f/</td>
<td style="text-align:left">摩擦音</td>
<td style="text-align:left">fan</td>
</tr>
<tr>
<td style="text-align:center">/θ/</td>
<td style="text-align:left">摩擦音</td>
<td style="text-align:left">think</td>
</tr>
<tr>
<td style="text-align:center">/s/</td>
<td style="text-align:left">摩擦音</td>
<td style="text-align:left">sun</td>
</tr>
<tr>
<td style="text-align:center">/ʃ/</td>
<td style="text-align:left">摩擦音</td>
<td style="text-align:left">shop</td>
</tr>
<tr>
<td style="text-align:center">/h/</td>
<td style="text-align:left">摩擦音</td>
<td style="text-align:left">hat</td>
</tr>
<tr>
<td style="text-align:center">/tʃ/</td>
<td style="text-align:left">塞擦音</td>
<td style="text-align:left">chair</td>
</tr>
<tr>
<td style="text-align:center">/tr/</td>
<td style="text-align:left">塞擦音</td>
<td style="text-align:left">tree</td>
</tr>
<tr>
<td style="text-align:center">/ts/</td>
<td style="text-align:left">塞擦音</td>
<td style="text-align:left">cats</td>
</tr>
</tbody>
</table>
<h3>浊辅音 - （发音时声带振动）</h3>
<table>
<thead>
<tr>
<th style="text-align:center">音标符号</th>
<th style="text-align:left">发音方式</th>
<th style="text-align:left">示例单词</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">/b/</td>
<td style="text-align:left">爆破音</td>
<td style="text-align:left">bat</td>
</tr>
<tr>
<td style="text-align:center">/d/</td>
<td style="text-align:left">爆破音</td>
<td style="text-align:left">dog</td>
</tr>
<tr>
<td style="text-align:center">/g/</td>
<td style="text-align:left">爆破音</td>
<td style="text-align:left">gap</td>
</tr>
<tr>
<td style="text-align:center">/v/</td>
<td style="text-align:left">摩擦音</td>
<td style="text-align:left">van</td>
</tr>
<tr>
<td style="text-align:center">/ð/</td>
<td style="text-align:left">摩擦音</td>
<td style="text-align:left">then</td>
</tr>
<tr>
<td style="text-align:center">/z/</td>
<td style="text-align:left">摩擦音</td>
<td style="text-align:left">zero</td>
</tr>
<tr>
<td style="text-align:center">/ʒ/</td>
<td style="text-align:left">摩擦音</td>
<td style="text-align:left">pleasure</td>
</tr>
<tr>
<td style="text-align:center">/dʒ/</td>
<td style="text-align:left">塞擦音</td>
<td style="text-align:left">jump</td>
</tr>
<tr>
<td style="text-align:center">/dr/</td>
<td style="text-align:left">塞擦音</td>
<td style="text-align:left">dry</td>
</tr>
<tr>
<td style="text-align:center">/dz/</td>
<td style="text-align:left">塞擦音</td>
<td style="text-align:left">beds</td>
</tr>
<tr>
<td style="text-align:center">/m/</td>
<td style="text-align:left">鼻音</td>
<td style="text-align:left">man</td>
</tr>
<tr>
<td style="text-align:center">/n/</td>
<td style="text-align:left">鼻音</td>
<td style="text-align:left">no</td>
</tr>
<tr>
<td style="text-align:center">/ŋ/</td>
<td style="text-align:left">鼻音</td>
<td style="text-align:left">sing</td>
</tr>
<tr>
<td style="text-align:center">/l/</td>
<td style="text-align:left">边音</td>
<td style="text-align:left">let</td>
</tr>
<tr>
<td style="text-align:center">/r/</td>
<td style="text-align:left">边音</td>
<td style="text-align:left">run</td>
</tr>
<tr>
<td style="text-align:center">/j/</td>
<td style="text-align:left">近音</td>
<td style="text-align:left">yes</td>
</tr>
<tr>
<td style="text-align:center">/w/</td>
<td style="text-align:left">近音</td>
<td style="text-align:left">wet</td>
</tr>
</tbody>
</table>
]]></content:encoded>
    </item>
    <item>
      <title>Environment - 地区</title>
      <link>https://blog.magictable.ha.cn/rule/Environment-%E5%9C%B0%E5%8C%BA.html</link>
      <guid>https://blog.magictable.ha.cn/rule/Environment-%E5%9C%B0%E5%8C%BA.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Environment - 地区</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 主要特点 注意事项 适用场景</description>
      <category>世界规则/环境</category>
      <pubDate>Sun, 18 May 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要特点</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Environment - 星球</title>
      <link>https://blog.magictable.ha.cn/rule/Environment-%E6%98%9F%E7%90%83.html</link>
      <guid>https://blog.magictable.ha.cn/rule/Environment-%E6%98%9F%E7%90%83.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Environment - 星球</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 主要特点 注意事项 适用场景</description>
      <category>世界规则/环境</category>
      <pubDate>Sun, 18 May 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要特点</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Law - 协议 - 开源协议</title>
      <link>https://blog.magictable.ha.cn/rule/Law-%E5%8D%8F%E8%AE%AE-%E5%BC%80%E6%BA%90%E5%8D%8F%E8%AE%AE.html</link>
      <guid>https://blog.magictable.ha.cn/rule/Law-%E5%8D%8F%E8%AE%AE-%E5%BC%80%E6%BA%90%E5%8D%8F%E8%AE%AE.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Law - 协议 - 开源协议</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 主要特点 注意事项 适用场景 Apache</description>
      <category>世界规则/法律</category>
      <pubDate>Sun, 18 May 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要特点</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>Apache</h2>
]]></content:encoded>
    </item>
    <item>
      <title>Society - 供应链</title>
      <link>https://blog.magictable.ha.cn/rule/Society-%E4%BE%9B%E5%BA%94%E9%93%BE.html</link>
      <guid>https://blog.magictable.ha.cn/rule/Society-%E4%BE%9B%E5%BA%94%E9%93%BE.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Society - 供应链</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 主要特点 注意事项 适用场景</description>
      <category>世界规则/社会</category>
      <pubDate>Sun, 18 May 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要特点</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Society - 法律</title>
      <link>https://blog.magictable.ha.cn/rule/Society-%E6%B3%95%E5%BE%8B.html</link>
      <guid>https://blog.magictable.ha.cn/rule/Society-%E6%B3%95%E5%BE%8B.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Society - 法律</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 主要特点 注意事项 适用场景</description>
      <category>世界规则/社会</category>
      <pubDate>Sun, 18 May 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要特点</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Society - 营销</title>
      <link>https://blog.magictable.ha.cn/rule/Society-%E8%90%A5%E9%94%80.html</link>
      <guid>https://blog.magictable.ha.cn/rule/Society-%E8%90%A5%E9%94%80.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Society - 营销</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 主要特点 注意事项 适用场景</description>
      <category>世界规则/社会</category>
      <pubDate>Sun, 18 May 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要特点</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Society - 财务管理</title>
      <link>https://blog.magictable.ha.cn/rule/Society-%E8%B4%A2%E5%8A%A1%E7%AE%A1%E7%90%86.html</link>
      <guid>https://blog.magictable.ha.cn/rule/Society-%E8%B4%A2%E5%8A%A1%E7%AE%A1%E7%90%86.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Society - 财务管理</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 主要特点 注意事项 适用场景</description>
      <category>世界规则/社会</category>
      <pubDate>Sun, 18 May 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要特点</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Society - 运营与运维</title>
      <link>https://blog.magictable.ha.cn/rule/Society-%E8%BF%90%E8%90%A5%E4%B8%8E%E8%BF%90%E7%BB%B4.html</link>
      <guid>https://blog.magictable.ha.cn/rule/Society-%E8%BF%90%E8%90%A5%E4%B8%8E%E8%BF%90%E7%BB%B4.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Society - 运营与运维</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 主要特点 注意事项 适用场景</description>
      <category>世界规则/社会</category>
      <pubDate>Sun, 18 May 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要特点</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - 热门推荐 - 代码规范</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - 热门推荐 - 代码规范</source>
      <description>文章摘要： 整理一份必须遵守的规则和指南，确保代码的可靠性、可维护性、可扩展性，可以想象成是代码的“语法”和“逻辑”。 注释 关注代码的结构、设计和实现。例如，代码组织方式、模块化、函数长度、错误处理、代码复用、测试要求、安全实践等。 通常具有更强的约束性，需要团队成员严格遵守。违反规范可能会导致代码缺陷、安全隐患、维护困难等问题。 文件使用“UTF-...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Mon, 05 May 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 整理一份必须遵守的规则和指南，确保代码的可靠性、可维护性、可扩展性，可以想象成是代码的“语法”和“逻辑”。</p>
<!-- more -->
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>关注代码的<strong>结构</strong>、<strong>设计</strong>和<strong>实现</strong>。例如，代码组织方式、模块化、函数长度、错误处理、代码复用、测试要求、安全实践等。</li>
<li>通常具有更强的约束性，需要团队成员严格遵守。违反规范可能会导致代码缺陷、安全隐患、维护困难等问题。</li>
</ul>
</div>
<p>文件使用“UTF-8”编码格式</p>
<ul>
<li>统一使用相同的文件编码格式，防止文件编码错误。</li>
</ul>
<p>类和函数的注释要以javadoc的方式来写</p>
<ul>
<li>方便在后续自动生成开发者文档。</li>
</ul>
<h2>代码组织</h2>
<ul>
<li>保持方法简短，每个方法只做一件事情。</li>
<li>使用适当的访问修饰符，私有方法应该用于辅助逻辑。</li>
</ul>
<h2>流程控制</h2>
<p>嵌套不要超过3层</p>
<ul>
<li>提高可读性。</li>
</ul>
<h2>异常处理</h2>
<p>使用 <code>try-with-resources</code> 语句来自动管理资源</p>
<ul>
<li>减少代码冗余。</li>
</ul>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">try</span> <span class="token punctuation">(</span><span class="token class-name">Resource</span> resource <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Resource</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 使用资源</span></span>
<span class="line"><span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">Exception</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 处理异常</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 查询手册 - 目录结构</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-%E7%9B%AE%E5%BD%95%E7%BB%93%E6%9E%84.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-%E7%9B%AE%E5%BD%95%E7%BB%93%E6%9E%84.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 查询手册 - 目录结构</source>
      <description>文章摘要： 文章摘要。 JDK 21 bin/：可执行文件 由链接到映像的模块定义的可执行文件和命令行启动器。 （在 bin/ 子目录中）Java 运行时环境 （JRE） 的实现。 JRE 包括 Java 虚拟机 （JVM）、™类库和其他支持执行以 Java 编程语言编写的程序的文件。 此目录还包括可帮助您开发、执行、调试和记录以 Java 编程语言编...</description>
      <category>软件程序/软件包</category>
      <pubDate>Mon, 05 May 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 文章摘要。</p>
<!-- more -->
<h2>JDK 21</h2>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">// 目录结构</span>
<span class="line">/jdk/</span>
<span class="line">|-- bin/      可执行文件</span>
<span class="line">|-- conf/     配置文件</span>
<span class="line">|-- include/  C头文件</span>
<span class="line">|-- jmods/    编译的 Java 模块</span>
<span class="line">|-- legal/    版权和许可证文件</span>
<span class="line">|-- lib/      其他库</span>
<span class="line">    |-- src.zip  包含 Java 平台源代码的归档文件。</span>
<span class="line">|-- LICENSE   协议文档</span>
<span class="line">|-- README    说明文档</span>
<span class="line">|-- release</span>
<span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><code>bin/</code>：可执行文件</p>
<ul>
<li>由链接到映像的模块定义的可执行文件和命令行启动器。</li>
<li>（在 <code>bin/</code> 子目录中）Java 运行时环境 （JRE） 的实现。</li>
<li>JRE 包括 Java 虚拟机 （JVM）、™类库和其他支持执行以 Java 编程语言编写的程序的文件。</li>
<li>此目录还包括可帮助您开发、执行、调试和记录以 Java 编程语言编写的程序的工具和实用程序。</li>
<li>有关更多信息，请参见 <a href="https://docs.oracle.com/en/java/javase/21/docs/specs/man/index.html" target="_blank" rel="noopener noreferrer">https://docs.oracle.com/en/java/javase/21/docs/specs/man/index.html</a> 中的 JDK 21 工具规范</li>
</ul>
<p><code>conf/</code>：配置文件</p>
<ul>
<li>
<p><code>.properties</code>、<code>.policy</code> 和其他配置文件，供开发人员、部署人员和最终用户编辑。</p>
</li>
<li>
<p>（在 <code>conf/</code> 子目录中）包含用户可配置选项的文件。</p>
</li>
<li>
<p>可以编辑此目录中的文件以更改 JDK 的访问权限、配置安全算法以及设置可能用于限制 JDK 加密强度的 Java 加密扩展策略文件。</p>
</li>
<li>
<p>可以根据 <a href="https://docs.oracle.com/en/java/javase/21/" target="_blank" rel="noopener noreferrer">Java Platform， Standard Edition （Java SE） 文档</a>修改 <code>conf/</code> 目录下的文件来配置软件，包括选择一个或在 <code>conf/security/policy</code> 下创建自己的 Java 加密扩展策略文件。选择或创建自己的策略文件后，无需包含替代策略文件。</p>
</li>
</ul>
<p><code>include/</code>：C头文件</p>
<ul>
<li>（在 <code>include/</code> 子目录中）C 语言头文件。</li>
<li>支持使用 Java 本机接口和 Java 虚拟机 （JVM） 调试器接口进行本机代码编程。</li>
</ul>
<p><code>jmods/</code>：编译的 Java 模块</p>
<ul>
<li>（在 <code>jmods/</code> 子目录中）jlink 用于创建自定义运行时的编译模块。</li>
<li>编译后的模块定义。</li>
</ul>
<p><code>legal/</code>：版权和许可证文件</p>
<ul>
<li>（在 <code>legal/</code> 子目录中）每个模块的许可证和版权文件。</li>
<li>以 .md （markdown） 文件的形式包含第三方通知。</li>
</ul>
<p><code>lib/</code>：其他库</p>
<ul>
<li>（在 <code>lib/</code> 子目录中）JDK 所需的其他类库和支持文件。这些文件不供外部使用。</li>
<li>运行时系统的私有实现详细信息。这些文件不供外部使用，不得修改。</li>
</ul>
<h2>JDK 8</h2>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">jdk1.8/ # JDK 软件安装的根目录。</span>
<span class="line"></span>
<span class="line">|-- bin/ # 可执行文件</span>
<span class="line">	|-- java*</span>
<span class="line">	|-- javac*</span>
<span class="line">	|-- javap*</span>
<span class="line">	|-- javah*</span>
<span class="line">	|-- javadoc*</span>
<span class="line"></span>
<span class="line"></span>
<span class="line">|-- lib/ # 开发工具使用的文件。</span>
<span class="line">	|-- tools.jar # 包含用于支持 JDK 中的工具和实用程序的非核心类。</span>
<span class="line">	|-- dt.jar # `BeanInfo`文件的`DesignTime`归档文件，告诉交互式开发环境IDE如何显示Java组件以及如何让开发人员为应用程序定制这些组件。</span>
<span class="line"></span>
<span class="line"></span>
<span class="line">|-- jre/ # JDK开发工具使用的Java运行时环境（JRE）的根目录，运行时环境是Java平台的实现。这是`java.home`系统属性引用的目录。</span>
<span class="line">	|-- bin/ # 可执行文件，java 启动器工具用作应用程序启动器。</span>
<span class="line">		|-- java*</span>
<span class="line">	|-- lib/ # JRE 使用的代码库、属性设置和资源文件。</span>
<span class="line">		|-- applet/ # 包含 applet 支持类的 JAR 文件可以放在 `lib/applet/` 目录中，允许 applet 类加载器从本地文件系统预加载 applet 类，从而减少大型 applet 的启动时间，并提供与通过 Internet 下载它们相同的保护。</span>
<span class="line">		|-- ext/ # Java 平台扩展的默认安装目录。</span>
<span class="line">			|-- jfxrt.jar # 包含 JavaFX 运行时库。</span>
<span class="line">			|-- localdata.jar # 包含 `java.text` 和 `java.util` 包的语言环境数据。</span>
<span class="line">		|-- fonts/ # 平台使用的字体文件。</span>
<span class="line">		|-- security/ # 包含用于安全管理的文件，包括安全策略 `java.policy` 和安全属性 `java.security` 文件。</span>
<span class="line">		|-- sparc/ # 包含 Java 平台的 Oracle Solaris 发行版使用的 `.so`（共享对象）文件。</span>
<span class="line">			|-- client/ # 包含 Java HotSpot VM 客户端使用的 `.so` 文件，该文件通过 Java HotSpot VM 技术实现。这是默认的 Java 虚拟机 （JVM）。</span>
<span class="line">			|-- server/ # 包含 Java HotSpot VM 服务器使用的 `.so` 文件。</span>
<span class="line">		|-- rt.jar # 包含引导程序类，构成 Java 平台核心 API 的运行时类。</span>
<span class="line">		|-- charsets.jar # 包含字符转换类。</span>
<span class="line"></span>
<span class="line"></span>
<span class="line">|-- include/ # C 语言头文件，支持使用各种库进行本机代码编程。</span>
<span class="line">|-- man/ # 包含 JDK 工具的手册页。</span>
<span class="line">|-- src.zip # 包含 Java 平台源代码的存档。</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li><code>jdk1.8/bin/</code>：存放的是jdk“可执行文件”，同时包含了jre的 “可执行文件” 的软连接（快捷方式）。</li>
<li><code>jdk1.8/jre/bin</code>：也存放的是jre的可执行文件。</li>
<li><strong>只需要将<code>jdk1.8/bin/</code>添加到环境变量即可</strong>。</li>
</ul>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Diary - 工作流 - 软件开发 - 开发思想和方案</title>
      <link>https://blog.magictable.ha.cn/note/Diary-%E5%B7%A5%E4%BD%9C%E6%B5%81-%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91-%E5%BC%80%E5%8F%91%E6%80%9D%E6%83%B3%E5%92%8C%E6%96%B9%E6%A1%88.html</link>
      <guid>https://blog.magictable.ha.cn/note/Diary-%E5%B7%A5%E4%BD%9C%E6%B5%81-%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91-%E5%BC%80%E5%8F%91%E6%80%9D%E6%83%B3%E5%92%8C%E6%96%B9%E6%A1%88.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Diary - 工作流 - 软件开发 - 开发思想和方案</source>
      <description>播客 - 硬地骇客 我们在思考用户活动的时候用的都是必备路径，而不是事无巨细的全量路径。 那是因为，我们不可能在一开始就想清楚产品的全貌，好产品都是与用户磨合出来的。 而我们在产品初期，最重要的事情就是快速交付 MVP(Minimum viable product) 最简可行产品，因为在这时候，所有的东西都是我们脑子构建出来的，没有任何用户参与。 所以...</description>
      <category>学习笔记/日记</category>
      <pubDate>Thu, 01 May 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<h2>播客 - 硬地骇客</h2>
<ul>
<li>我们在思考用户活动的时候用的都是必备路径，而不是事无巨细的全量路径。</li>
<li>那是因为，我们不可能在一开始就想清楚产品的全貌，好产品都是与用户磨合出来的。</li>
<li>而我们在产品初期，最重要的事情就是快速交付 MVP(Minimum viable product) 最简可行产品，因为在这时候，所有的东西都是我们脑子构建出来的，没有任何用户参与。</li>
<li>所以我们需要尽快让用户能够参与进来，来帮助我们验证产品是否真的可行。</li>
<li>而构建 MVP 的核心，则需要我们高度提炼用户故事的必备路径。</li>
<li>我们的目标是制造一个载具，所以在迭代的过程中每个版本都要交付能载人的工具，而不是每个版本都制造一个零件，等到最后再拼起来。</li>
<li>因为长时间的交付，极有可能出现我们规划的是给用户造辆车，但其实用户真正想要的是船，那整个产品可能就需要在 6 个月后完全从头转型，那就意味着要完全失败了。</li>
</ul>
<blockquote>
<p><img src="https://book.hardhacker.com/_next/image?url=https%3A%2F%2Fbook.hardhacker.com%2F_next%2Fstatic%2Fmedia%2Fmvp.54bcc445.png&amp;w=1080&amp;q=75" alt=""></p>
</blockquote>
<ul>
<li>另外如果是工具类的产品，比较忌讳的就是一上来就大而全。大而全的产品本质上还是没找到产品的卖点，而大而全就是最偷懒的做法，但往往海外用户不喜欢大而全。</li>
<li>如果你在用户故事精简过后，在第一个 MVP 中没有找到太多产品亮点，那么可能要思考一下这个产品是否值得做？产品在市场上到底有什么差异性？没有差异性就很难让用户产生记忆点，而记忆点就没有品牌，最终就很容易被遗忘。所以模仿并不是一个好的方法，可以借鉴但不要抄袭。品牌本身是有先发优势的。</li>
</ul>
<h2>BiliBili视频教程</h2>
<p><a href="https://www.bilibili.com/video/BV1gUfNYQEAk/?spm_id_from=333.1391.0.0&amp;vd_source=262edcbbd8e80915a7dff074a0e165a1" target="_blank" rel="noopener noreferrer">玩异星工厂，你也能成为软件工程师！-Tony Zhu</a>，讲的软件架构非常好且易懂。</p>
<h2>项目解析</h2>
<ul>
<li>获取项目或程序源代码，并查看其中的内容，整理出一份解析结果。</li>
<li>结合解析结果，融入到自己的项目中。</li>
</ul>
<h2>避免深层嵌套</h2>
<h2>提取并封装</h2>
<h2>避免代码重复</h2>
]]></content:encoded>
      <enclosure url="https://book.hardhacker.com/_next/image?url=https%3A%2F%2Fbook.hardhacker.com%2F_next%2Fstatic%2Fmedia%2Fmvp.54bcc445.png&amp;w=1080&amp;q=75" type="image/"/>
    </item>
    <item>
      <title>Device - 移动通信基站 - 5G - 基站参数属性</title>
      <link>https://blog.magictable.ha.cn/hardware/Device-%E7%A7%BB%E5%8A%A8%E9%80%9A%E4%BF%A1%E5%9F%BA%E7%AB%99-5G-%E5%9F%BA%E7%AB%99%E5%8F%82%E6%95%B0%E5%B1%9E%E6%80%A7.html</link>
      <guid>https://blog.magictable.ha.cn/hardware/Device-%E7%A7%BB%E5%8A%A8%E9%80%9A%E4%BF%A1%E5%9F%BA%E7%AB%99-5G-%E5%9F%BA%E7%AB%99%E5%8F%82%E6%95%B0%E5%B1%9E%E6%80%A7.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Device - 移动通信基站 - 5G - 基站参数属性</source>
      <description>文章摘要： 摘要内容。 NR DU小区静态参数 NR DU小区标识 NR DU小区名称 双工模式 小区标识 物理小区标识 频带 上行频点配置指示 上行频点 下行频点 上行带宽 下行带宽 小区半径（米） 子载波间隔（KHz） 循环前缀长度 NR UD小区激活状态 时隙配比 时隙结构 NR DU小区动态参数 NR DU小区标识 小区标识 NR DU小区状态...</description>
      <category>硬件设备/设备</category>
      <pubDate>Mon, 14 Apr 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>NR DU小区静态参数</h2>
<p>NR DU小区标识</p>
<p>NR DU小区名称</p>
<p>双工模式</p>
<p>小区标识</p>
<p>物理小区标识</p>
<p>频带</p>
<p>上行频点配置指示</p>
<p>上行频点</p>
<p>下行频点</p>
<p>上行带宽</p>
<p>下行带宽</p>
<p>小区半径（米）</p>
<p>子载波间隔（KHz）</p>
<p>循环前缀长度</p>
<p>NR UD小区激活状态</p>
<p>时隙配比</p>
<p>时隙结构</p>
<h2>NR DU小区动态参数</h2>
<p>NR DU小区标识</p>
<p>小区标识</p>
<p>NR DU小区状态说明</p>
<p>最近一次NR DU小区状态变化的原因</p>
<p>最近一次引起NR DU小区可用的操作时间</p>
<p>最近一次引起NR DU小区可用的操作类型</p>
<p>最近一次引起NR DU小区不可用的操作时间</p>
<p>最近一次引起NR DU小区不可用的操作类型</p>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - 查询手册 - Java SE 版本对比</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-JavaSE%E7%89%88%E6%9C%AC%E5%AF%B9%E6%AF%94.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-JavaSE%E7%89%88%E6%9C%AC%E5%AF%B9%E6%AF%94.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - 查询手册 - Java SE 版本对比</source>
      <description>文章摘要： 摘要内容。 相关信息 外部相关文章 JDK 发行说明 内部相关文章 提示 整理清楚java长期版本之间的具体变化，提高代码通用性。 Java 25（LTS） 详细说明： 版本说明 发布时间： 长期支持（LTS）：是 生命周期： 释放功能 预览功能 移除功能 注意事项 重要变更 错误修复 其他说明 Java 21（LTS） 详细说明： 版本说...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Sun, 13 Apr 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li><a href="https://www.oracle.com/java/technologies/javase/jdk-relnotes-index.html" target="_blank" rel="noopener noreferrer">JDK 发行说明</a></li>
</ul>
<p>内部相关文章</p>
<ul>
<li></li>
</ul>
</div>
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<p>整理清楚java长期版本之间的具体变化，提高代码通用性。</p>
</div>
<h2>Java 25（LTS）</h2>
<p>详细说明：<a href="/software/Language-Java-JavaSE-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-JavaSE25.html" target="_blank">Language-Java-JavaSE-查询手册-JavaSE25</a></p>
<h3>版本说明</h3>
<ul>
<li>发布时间：</li>
<li>长期支持（LTS）：是</li>
<li>生命周期：</li>
</ul>
<h3>释放功能</h3>
<ul>
<li></li>
</ul>
<h3>预览功能</h3>
<ul>
<li></li>
</ul>
<h3>移除功能</h3>
<ul>
<li></li>
</ul>
<h3>注意事项</h3>
<p>重要变更</p>
<ul>
<li></li>
</ul>
<p>错误修复</p>
<ul>
<li></li>
</ul>
<p>其他说明</p>
<ul>
<li></li>
</ul>
<h2>Java 21（LTS）</h2>
<p>详细说明：<a href="/software/Language-Java-JavaSE-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-JavaSE21.html" target="_blank">Language-Java-JavaSE-查询手册-JavaSE21</a></p>
<h3>版本说明</h3>
<ul>
<li>发布时间：</li>
<li>长期支持（LTS）：是</li>
<li>生命周期：</li>
</ul>
<h3>释放功能</h3>
<ul>
<li><a href="https://openjdk.org/jeps/440" target="_blank" rel="noopener noreferrer">记录模式（Record Patterns）</a></li>
<li>switch 表达式和语句的模式匹配</li>
</ul>
<h3>预览功能</h3>
<ul>
<li>字符串模板</li>
<li>未命名模式和变量</li>
<li>未命名类和实例主要方法</li>
</ul>
<h3>移除功能</h3>
<ul>
<li></li>
</ul>
<h3>注意事项</h3>
<p>重要变更</p>
<ul>
<li></li>
</ul>
<p>错误修复</p>
<ul>
<li></li>
</ul>
<p>其他说明</p>
<ul>
<li><a href="https://cr.openjdk.org/~iris/se/21/latestSpec/" target="_blank" rel="noopener noreferrer">Java SE 21（ JSR 396）平台规范</a></li>
</ul>
<h2>Java 17（LTS）</h2>
<p>详细说明：<a href="/software/Language-Java-JavaSE-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-JavaSE17.html" target="_blank">Language-Java-JavaSE-查询手册-JavaSE17</a></p>
<h3>版本说明</h3>
<ul>
<li>发布时间：</li>
<li>长期支持（LTS）：是</li>
<li>生命周期：</li>
</ul>
<h3>释放功能</h3>
<ul>
<li>密封类（Sealed Classes）</li>
</ul>
<h3>预览功能</h3>
<ul>
<li>switch 表达式和语句的模式匹配</li>
</ul>
<h3>移除功能</h3>
<ul>
<li></li>
</ul>
<h3>注意事项</h3>
<p>重要变更</p>
<ul>
<li></li>
</ul>
<p>错误修复</p>
<ul>
<li></li>
</ul>
<p>其他说明</p>
<ul>
<li></li>
</ul>
<h2>Java 11（LTS）</h2>
<p>详细说明：<a href="/software/Language-Java-JavaSE-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-JavaSE11.html" target="_blank">Language-Java-JavaSE-查询手册-JavaSE11</a></p>
<h3>版本说明</h3>
<ul>
<li>发布时间：</li>
<li>长期支持（LTS）：是</li>
<li>生命周期：</li>
</ul>
<h3>释放功能</h3>
<p><a href="https://docs.oracle.com/en/java/javase/21/language/local-variable-type-inference.html#GUID-D2C58FE6-1065-4B50-9326-57DD8EC358AC" target="_blank" rel="noopener noreferrer">Lambda 参数的局部变量语法（Local-Variable Syntax for Lambda Parameters）</a></p>
<h3>预览功能</h3>
<ul>
<li></li>
</ul>
<h3>移除功能</h3>
<ul>
<li></li>
</ul>
<h3>注意事项</h3>
<p>重要变更</p>
<ul>
<li></li>
</ul>
<p>错误修复</p>
<ul>
<li></li>
</ul>
<p>其他说明</p>
<ul>
<li></li>
</ul>
<h2>Java 8（LTS）</h2>
<p>详细说明：<a href="/software/Language-Java-JavaSE-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-JavaSE8.html" target="_blank">Language-Java-JavaSE-查询手册-JavaSE8</a></p>
<h3>版本说明</h3>
<ul>
<li>发布时间：2014年3月18日</li>
<li>长期支持（LTS）：是</li>
<li>生命周期：</li>
</ul>
<h3>释放功能</h3>
<ul>
<li><strong>Lambda 表达式</strong>：允许你以更简洁的方式编写函数式接口。</li>
<li><strong>Stream API</strong>：用于处理集合数据的新抽象，支持并行处理。</li>
<li><strong>Date-Time API</strong>：新的日期和时间API，如<code>java.time</code>包。</li>
<li><strong>Optional 类</strong>：用于避免空指针异常。</li>
<li><strong>Nashorn JavaScript 引擎</strong>：内置JavaScript引擎。</li>
<li><strong>并行Stream</strong>：利用Fork/Join框架来提高Stream API的并行处理能力。</li>
<li><strong>新的文件I/O API</strong>：基于NIO.2的文件I/O包，提供更好的文件操作功能。</li>
<li><strong>其他改进</strong>：如自动装箱/拆箱、改进的并发API、新的并发工具类等。</li>
</ul>
<h3>预览功能</h3>
<ul>
<li></li>
</ul>
<h3>移除功能</h3>
<ul>
<li></li>
</ul>
<h3>注意事项</h3>
<p>重要变更</p>
<ul>
<li></li>
</ul>
<p>错误修复</p>
<ul>
<li></li>
</ul>
<p>其他说明</p>
<ul>
<li></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java</source>
      <description>文章摘要： Java是编程语言，跨平台、强类型、多线程、面向对象编程的编程语言。 相关信息 外部相关文章 Java SE（标准版）许可文档，包含产品许可、商业功能、条款、自述文件、发行说明、数据收集说明、第三方培训授权。 Java SE（标准版）技术文档，。 Java SE（标准版）组件文档，。 Java ME（嵌入式）文档，专为资源受限的设备而设计文...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Sun, 13 Apr 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Java是编程语言，跨平台、强类型、多线程、面向对象编程的编程语言。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li><a href="https://www.oracle.com/java/technologies/javase-documentation.html" target="_blank" rel="noopener noreferrer">Java SE（标准版）许可文档</a>，包含产品许可、商业功能、条款、自述文件、发行说明、数据收集说明、第三方培训授权。</li>
<li><a href="https://docs.oracle.com/en/java/javase/" target="_blank" rel="noopener noreferrer">Java SE（标准版）技术文档</a>，。</li>
<li><a href="https://docs.oracle.com/en/java/java-components/index.html" target="_blank" rel="noopener noreferrer">Java SE（标准版）组件文档</a>，。</li>
<li><a href="https://docs.oracle.com/javame/8.3/index.html" target="_blank" rel="noopener noreferrer">Java ME（嵌入式）文档</a>，专为资源受限的设备而设计文档。</li>
<li><a href="https://docs.oracle.com/en/java/javacard/index.html" target="_blank" rel="noopener noreferrer">Java Card 文档</a>，该技术为在智能卡和其他内存和处理能力非常有限的设备上运行的应用程序提供了一个安全的环境。</li>
<li><a href="https://docs.oracle.com/javaee/7/index.html" target="_blank" rel="noopener noreferrer">Java EE（企业版）文档</a>，提供了一个 API 和运行时环境，用于开发和运行可移植、可扩展的大型、多层、可靠且安全的企业应用程序，并且可以轻松地与传统应用程序和数据集成。</li>
<li>Oracle Java 团队成员的新闻和观点：<a href="https://inside.java/" target="_blank" rel="noopener noreferrer">官方网站</a></li>
</ul>
<p>内部相关文章</p>
<ul>
<li>Open JDK：<a href="/software/Package-OpenJDK.html" target="_blank">Package-OpenJDK</a>，社区开源版本。</li>
<li>Oracle JDK：<a href="/software/Package-OracleJDK.html" target="_blank">Package-OracleJDK</a>，官方商业版本。</li>
<li>Java版本命名规范：<a href="/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E8%A7%84%E8%8C%83-%E5%9F%BA%E4%BA%8E%E6%97%B6%E9%97%B4%E7%9A%84%E7%89%88%E6%9C%AC%E6%A0%BC%E5%BC%8F%E8%A7%84%E8%8C%83.html" target="_blank">基础知识-规范-基于时间的版本格式规范</a></li>
<li>基础知识 - 数据结构：<a href="/software/DataStructure%EF%BC%88%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%EF%BC%89.html" target="_blank">DataStructure（数据结构）</a></li>
<li>基础知识 - 设计模式：<a href="/software/DesignPattern%EF%BC%88%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%EF%BC%89.html" target="_blank">DesignPattern（设计模式）</a></li>
<li>基础知识 - 算法设计：<a href="/software/Algorithm%EF%BC%88%E7%AE%97%E6%B3%95%E8%AE%BE%E8%AE%A1%EF%BC%89.html" target="_blank">Algorithm（算法设计）</a></li>
<li>基础知识 - 软件架构：<a href="/software/Architecture%EF%BC%88%E8%BD%AF%E4%BB%B6%E6%9E%B6%E6%9E%84%EF%BC%89.html" target="_blank">Architecture（软件架构）</a></li>
</ul>
</div>
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<p>Java编程语言的开发套件或软件包的名称是JDK。</p>
<p>JDK分为很多不同的分支版本，如 Open JDK、Oracle JDK 等等。</p>
</div>
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>Java 既是一种编程语言又是一种平台。</li>
<li>Java 是一种通用的、并发的、强类型、基于类的面向对象语言。</li>
<li>通常编译为 Java 虚拟机规范中定义的字节码指令集和二进制格式。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>面向对象编程</strong>：Java 强调使用类和对象来设计和实现程序。</li>
<li><strong>跨平台能力</strong>：Java 代码在任何支持 Java 的平台上都可以运行，只需编译一次。</li>
<li><strong>易用性</strong>：简化内存管理，通过垃圾回收减少内存泄漏的风险。</li>
<li><strong>健壮性</strong>：强类型系统和异常处理机制帮助编写更可靠的代码。</li>
<li><strong>多线程</strong>：允许同时执行多个任务，提高程序效率。</li>
</ul>
<p>注意事项</p>
<ul>
<li>Java 程序的性能可能不如编译成本地机器代码的语言（如 C 或 C++）。</li>
<li>JVM（Java 虚拟机）启动和运行 Java 程序可能需要更多的时间和内存资源。</li>
<li>Java 程序的部署通常需要附带一个较大的运行时环境（JRE）。</li>
<li>需要注意内存管理和线程同步，以避免性能问题和并发问题。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>Web服务、网站开发</strong>：Java 提供了多种框架（如 Spring、Hibernate）用于快速开发企业级 Web 应用。</li>
<li><strong>软件开发</strong>：Java 用于开发各种桌面应用程序和商业软件。</li>
<li><strong>服务器开发</strong>：Java 在服务器端应用开发中非常流行，如应用服务器和中间件。</li>
<li><strong>移动应用程序</strong>：Android 开发主要使用 Java。</li>
<li><strong>大数据</strong>：Java 在大数据处理框架（如 Hadoop 和 Spark）中被广泛使用。</li>
<li><strong>游戏开发</strong>：Java 可以用于开发桌面和移动平台的游戏。</li>
<li><strong>嵌入式开发</strong>：Java 在嵌入式系统中用于设备控制和管理。</li>
<li><strong>科学应用</strong>：Java 的稳定性和跨平台能力使其适用于科学计算和模拟。</li>
</ul>
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<ul>
<li>学习java编程语言，需要关注 “基础语法” 和 “进阶语法”。</li>
<li>编写代码大部分时间主要在学习 “官方封装好的API接口” 和 “第三方类库中提供的API接口”。</li>
<li>为了提高代码质量请将 “设计模式”、“算法设计”、“数据结构”、“软件架构” 加入到编写代码的思考过程中。</li>
</ul>
</div>
<h2>Java SE（标准版）</h2>
<ul>
<li>Java SE 允许您在桌面和服务器上开发和部署 Java 应用程序。Java SE 和组件技术提供了当今应用程序所需的丰富用户界面、性能、多功能性、可移植性和安全性。</li>
</ul>
<p>版本对比和兼容说明请查看这篇文章：<a href="/software/Language-Java-JavaSE-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-JavaSE%E7%89%88%E6%9C%AC%E5%AF%B9%E6%AF%94.html" target="_blank">Language-Java-JavaSE-查询手册-JavaSE版本对比</a></p>
<p>详细总结：<a href="/software/Language-Java-JavaSE.html" target="_blank">Language-Java-JavaSE</a></p>
<h2>Java ME（嵌入式）</h2>
<ul>
<li>Java ME Embedded 专为资源受限的设备而设计，例如用于 M2M、工业控制、智能电网基础设施、环境传感器和跟踪等的无线模块。</li>
</ul>
<h2>Java EE（企业版）</h2>
<ul>
<li>Java EE 提供了一个 API 和运行时环境，用于开发和运行可移植、可扩展的大型、多层、可靠且安全的企业应用程序，并且可以轻松地与传统应用程序和数据集成。</li>
</ul>
<h2>问题总结</h2>
<h3>查看本机安装的 JDK 版本</h3>
<p>详细总结：<a href="/software/Language-Java-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E6%9F%A5%E7%9C%8B%E6%9C%AC%E6%9C%BA%E5%AE%89%E8%A3%85%E7%9A%84JDK%E7%89%88%E6%9C%AC.html" target="_blank">Language-Java-问题总结-查看本机安装的JDK版本</a></p>
<h3>Open JDK 与 Oracle JDK 的区别</h3>
<p>详细总结：<a href="/software/Language-Java-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-OpenJDK%E4%B8%8EOracleJDK%E7%9A%84%E5%8C%BA%E5%88%AB.html" target="_blank">Language-Java-问题总结-OpenJDK与OracleJDK的区别</a></p>
<h3>Open JDK 与 Oracle JDK 之间的迁移</h3>
<p>详细总结：<a href="/software/Language-Java-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-OpenJDK%E4%B8%8EOracleJDK%E4%B9%8B%E9%97%B4%E7%9A%84%E8%BF%81%E7%A7%BB.html" target="_blank">Language-Java-问题总结-OpenJDK与OracleJDK之间的迁移</a></p>
]]></content:encoded>
      <enclosure url="https://www.oracle.com/a/ocom/img/rc30v1-java-se.png" type="image/png"/>
    </item>
    <item>
      <title>基础知识 - 规范 - 基于时间的版本格式规范</title>
      <link>https://blog.magictable.ha.cn/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E8%A7%84%E8%8C%83-%E5%9F%BA%E4%BA%8E%E6%97%B6%E9%97%B4%E7%9A%84%E7%89%88%E6%9C%AC%E6%A0%BC%E5%BC%8F%E8%A7%84%E8%8C%83.html</link>
      <guid>https://blog.magictable.ha.cn/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E8%A7%84%E8%8C%83-%E5%9F%BA%E4%BA%8E%E6%97%B6%E9%97%B4%E7%9A%84%E7%89%88%E6%9C%AC%E6%A0%BC%E5%BC%8F%E8%A7%84%E8%8C%83.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">基础知识 - 规范 - 基于时间的版本格式规范</source>
      <description>文章摘要： Java SE 平台采用了基于时间的发布模型。 相关信息 外部相关文章 官方文档 - Java SE 平台采用了基于时间的发布模型 内部相关文章 基于时间的发布模型的版本字符串的格式为：$FEATURE.$INTERIM.$UPDATE.$PATCH $FEATURE 是为每个功能版本递增的版本号。功能发行版包含 Java SE 平台规范指...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Fri, 11 Apr 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Java SE 平台采用了基于时间的发布模型。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li><a href="https://docs.oracle.com/en/java/javase/21/install/version-string-format.html" target="_blank" rel="noopener noreferrer">官方文档 - Java SE 平台采用了基于时间的发布模型</a></li>
</ul>
<p>内部相关文章</p>
<ul>
<li></li>
</ul>
</div>
<p>基于时间的发布模型的版本字符串的格式为：<code>$FEATURE.$INTERIM.$UPDATE.$PATCH</code></p>
<ul>
<li><code>$FEATURE</code> 是为每个功能版本递增的版本号。功能发行版包含 Java SE 平台规范指定的新功能和对现有功能的更改。版本号每六个月递增一次。例如，2018 年 3 月版的版本号为 10,2018 年 9 月版的版本号为 11，依此类推。</li>
<li><code>$INTERIM</code> 是每个临时版本递增的版本号，其中包含错误修复和增强功能。临时版本不包含不兼容的更改、功能删除或对标准 API 的任何更改。临时版本的版本号始终为零 （0），因为六个月的版本模型不包括临时版本。但是，此版本号保留给未来的临时版本（如果有）。</li>
<li><code>$UPDATE</code> 是更新版本递增的版本号，其中包括对安全功能中的安全问题、回归和错误的修复。版本号在 <code>$FEATURE</code> 发布后一个月递增，此后每三个月递增一次。例如，10 月更新版本的完整版本字符串为 21.0.1,1 月更新版本的完整版本字符串为 21.0.2，依此类推。</li>
<li><code>$PATCH</code> 是为修复严重问题而发布的紧急补丁版本递增的版本号。</li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>版本字符串没有尾随的零元素。</li>
<li>例如，如果 <code>$FEATURE</code> 的值为 21，<code>$INTERIM</code> 的值为 0，<code>$UPDATE</code> 的值为 1，<code>$PATCH</code> 的值为 0，则完整版本字符串为 21.0.1。</li>
</ul>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 通信 - 技术 - 5G - 问题总结</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-5G-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-5G-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 通信 - 技术 - 5G - 问题总结</source>
      <description>文章摘要： 文章摘要。 注释 根据网络层次进行类别： 基站设备方面：天馈线接反、故障、告警、驻波比、断站、等。 基站参数方面：乒乓切换、切换不及时、基站发射功率、等。 基站资源方面：用户多、拥塞、带宽不足、调度方式、等。 无线环境方面：RSRP信号强度低、SINR信号质量差、调制方式、TM传输模式、等。 干扰源方面内部干扰（重叠覆盖、相邻频点干扰）外部...</description>
      <category>学习笔记/技术</category>
      <pubDate>Wed, 02 Apr 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 文章摘要。</p>
<!-- more -->
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>根据网络层次进行类别：</p>
<ul>
<li><strong>基站设备方面</strong>：天馈线接反、故障、告警、驻波比、断站、等。</li>
<li><strong>基站参数方面</strong>：乒乓切换、切换不及时、基站发射功率、等。</li>
<li><strong>基站资源方面</strong>：用户多、拥塞、带宽不足、调度方式、等。</li>
<li><strong>无线环境方面</strong>：RSRP信号强度低、SINR信号质量差、调制方式、TM传输模式、等。</li>
<li><strong>干扰源方面</strong>内部干扰（重叠覆盖、相邻频点干扰）外部干扰（考试防作弊屏蔽仪）、等。</li>
<li><strong>数据源方面</strong>：服务器性能、资源大小、等。</li>
<li><strong>终端设备方面</strong>：移动速度、性能、等。</li>
</ul>
<p>可能还有其他方面，比如核心网故障、传输链路故障！！！</p>
<p>根据问题类型进行分类：</p>
<ul>
<li>覆盖类、接入类、切换类、吞吐量类、时延类、干扰类</li>
</ul>
</div>
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<p>问题与问题之间存在一定<strong>先后顺序关系</strong>和<strong>依赖关系</strong>，即当根据某个参数的变化会导致出现什么问题。</p>
<p>某个问题由于什么问题导致出现该问题。</p>
<p>优化流程</p>
<ol>
<li>RF优化：调整方位角、下倾角、参考信号强度。</li>
<li>调整PCI。</li>
<li>调整频点。</li>
</ol>
</div>
<blockquote>
<p></p>
</blockquote>
<h2>基站设备</h2>
<h3>新建基站调试</h3>
<h3>基站故障维修</h3>
<h3>基站二次优化</h3>
<h3>基站报废下线</h3>
<h3>设备安装</h3>
<ul>
<li>检查AAU/RRU与BBU连接状态、电源、光纤链路是否正常。</li>
<li>验证天线安装（方位角、下倾角、天线高度、经纬度、）是否符合设计图纸。</li>
</ul>
<h3>天馈线接反</h3>
<p>问题说明</p>
<ul>
<li>在1小区主覆盖方向收到的不是1小区的信号，而是2或3小区的信号，以此类推。</li>
</ul>
<p>主要影响</p>
<ul>
<li></li>
</ul>
<p>解决方案</p>
<ul>
<li>联系施工人员对接反小区的光纤进行对调，并复测后确保无误，问题解决。</li>
</ul>
<h3>站点故障</h3>
<h3>小区未激活</h3>
<h3>站点未开通</h3>
<h3>结构性缺站</h3>
<h2>覆盖类</h2>
<h3>无覆盖</h3>
<p>问题说明</p>
<ul>
<li>某些区域没有移动网络信号覆盖，用户无法接入网络。</li>
</ul>
<p>主要影响</p>
<ul>
<li>用户无法通话或上网。</li>
<li>网络服务存在盲区，影响用户满意度。</li>
</ul>
<p>解决方案</p>
<ul>
<li><strong>增加基站：</strong>&nbsp;在无覆盖区域新建基站，扩大网络覆盖。</li>
<li><strong>优化现有基站：</strong>&nbsp;调整天线方向和下倾角，增强信号覆盖。</li>
<li><strong>微蜂窝/小基站部署：</strong>&nbsp;在室内或小范围区域部署微蜂窝或小基站。</li>
<li><strong>信号增强器安装：</strong>&nbsp;在信号弱的地方安装信号增强器。</li>
<li><strong>网络优化：</strong>&nbsp;通过网络优化调整参数，提高覆盖效率。</li>
</ul>
<h3>弱覆盖（RSRP强度低）</h3>
<p>问题说明</p>
<ul>
<li>
<p>4G：RSRP小于<code>-100dbm</code>。</p>
</li>
<li>
<p>5G：RSRP小于<code>-90dbm</code>。</p>
</li>
<li>
<p><strong>真弱覆盖</strong>：方位角不合理、下倾角太大、RSRP参考信号功率设置太低、阻挡、基站高度太低、基站故障、小区最小接入电频设置错误、天线增益大小、没有基站、深度覆盖不足（地下室、KTV包间）。</p>
</li>
<li>
<p><strong>假弱覆盖</strong>：测试方法问题、手机问题、切换重选不及时。</p>
</li>
</ul>
<p>主要影响</p>
<ul>
<li>下行速率</li>
<li>通话中断或质量差。</li>
<li>数据传输速率慢。</li>
<li>用户可能会频繁掉线。</li>
<li>网络容量和覆盖效率降低。</li>
<li>用户满意度下降。</li>
</ul>
<p>解决方案</p>
<ul>
<li><strong>网络优化</strong>：通过优化无线网络参数，如调整邻区关系、切换参数等，改善覆盖质量。</li>
<li><strong>调整天线参数</strong>：调整天线下倾角和方位角，优化信号覆盖方向和范围。</li>
<li><strong>提高发射功率</strong>：在设备允许的范围内，适当增加基站的发射功率。</li>
<li><strong>增加基站或小区</strong>：在弱覆盖区域新建基站或增加小区，以增强信号覆盖。</li>
<li><strong>使用高增益天线</strong>：更换为高增益天线，以提高信号传输效率。</li>
<li><strong>微蜂窝/小基站部署</strong>：在室内或特定小区域部署微蜂窝或小基站，以解决局部弱覆盖问题。</li>
<li><strong>信号增强器安装</strong>：在信号薄弱区域安装信号增强器，以提升信号强度。</li>
<li><strong>干扰排查与消除</strong>：检查并消除可能存在的干扰源，确保信号质量。</li>
<li><strong>地理和网络规划</strong>：重新进行地理和网络规划，确保基站布局合理，覆盖均匀。</li>
</ul>
<h3>重叠覆盖</h3>
<p>问题说明</p>
<ul>
<li><strong>在4G网络中的规定</strong>：该区域能够同时接收到3个以上的小区信号，服务小区和邻区的RSRP大于<code>-105dBm</code>以上，并且服务小区与邻区的RSRP相差小于<code>6dBm</code>以内。</li>
<li><strong>在5G网络中的规定</strong>：该区域能够同时接收到3个以上的小区信号，服务小区和邻区的SS-RSRP大于<code>-90dBm</code>以上，并且服务小区与邻区的RSRP相差小于<code>6dBm</code>以内。</li>
</ul>
<p>主要影响</p>
<ul>
<li><strong>SINR噪声比差</strong>：网内干扰增加。</li>
<li><strong>小区吞吐量下降</strong>：数据传输速率降低。</li>
<li><strong>用户感知差</strong>：掉线、通话质量差、上网速度慢。</li>
</ul>
<p>解决方案</p>
<ul>
<li><strong>调整天线</strong>：下倾角、方位角控制覆盖范围。</li>
<li><strong>更换频点</strong>：减少同频干扰。</li>
<li><strong>整改美化罩</strong>：改善天线覆盖效果。</li>
<li><strong>定位干扰源</strong>：利用扫频数据，找出干扰源基站。</li>
<li><strong>调整信号功率</strong>：调整参考信号功率，控制覆盖。</li>
<li><strong>更换/取消站址</strong>：现网通过扫频数据定位出主动干扰基站，对这类基站采取更换或取消站址策略。</li>
<li><strong>小区分裂</strong>：增加新小区，缩小原小区覆盖。</li>
<li><strong>干扰管理技术</strong>：采用DFS、IC等技术减少干扰。</li>
</ul>
<h3>越区覆盖</h3>
<p>问题说明</p>
<ul>
<li>小区的覆盖范围超过规划的覆盖范围。</li>
<li>方位角不合理。（由于波导效应、水面）</li>
<li>下倾角太小。</li>
<li>基站高度太高。（换台电下倾角天线，降低功率，搬迁基站）</li>
<li>发射功率太大。</li>
<li>基站规划不可理。（基站环形分布）</li>
</ul>
<p>主要影响</p>
<ul>
<li></li>
</ul>
<p>解决方案</p>
<ul>
<li>真弱覆盖：下倾角太大、方位角不合理、RS参考信号功率设置太低、阻挡、基站高度太低、基站故障、小区最小接入电平设置错误（Qrxlevmin）、天线增益太小、没有基站、深度覆盖不足。</li>
<li>假弱覆盖：测试方法问题、手机问题、切换重选不及时。</li>
</ul>
<h2>切换类</h2>
<h3>没有切换（漏配邻区）</h3>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>问题：什么是L3 message（L3消息）？是不是有L1和L2消息？？</p>
</div>
<p>问题说明</p>
<ul>
<li><strong>邻区漏配</strong>：看L3 message，如果一直发测量报告却没有发生切换，则说明邻区漏配，需要查看测量报告或者看服务小区和邻区列表里是哪个小区，记录下该小区ENBID（基站ID）和PCI（物理小区标识）报给后台查询。</li>
<li><strong>邻区配置错误</strong>：邻区数据配置错误也会导致一直上发测量报告，这种情况需要后台核实外部小区数据配置是否正确。</li>
</ul>
<p>主要影响</p>
<ul>
<li></li>
</ul>
<p>解决方案</p>
<ul>
<li></li>
</ul>
<h3>切换失败</h3>
<p>问题说明</p>
<ul>
<li>
<p>UE（用户设备/终端）在执行切换后，未能在目标小区建立。</p>
</li>
<li>
<p>邻区被加入黑名单。</p>
</li>
<li>
<p>RSRP低：-100dBm</p>
</li>
<li>
<p>SINR低：-3dB</p>
</li>
<li>
<p>邻区漏配：邻区参数配置错误、单向邻区、没配邻区、邻区配置过多。</p>
</li>
<li>
<p>切换迟滞太大。</p>
</li>
<li>
<p>切换时延参数设置太大。</p>
</li>
<li>
<p>切换不及时：加CIO。</p>
</li>
<li>
<p>传输闪断。</p>
</li>
<li>
<p>目标小区</p>
</li>
</ul>
<p>主要影响</p>
<ul>
<li></li>
</ul>
<p>解决方案</p>
<ul>
<li></li>
</ul>
<h3>频繁切换（乒乓切换）</h3>
<p>问题说明</p>
<ul>
<li>主要是重叠覆盖导致，切换参数设置不合理也会导致该问题，主要是 A2A3 类切换门限、切换迟滞偏置、触发时间设置不合理。</li>
</ul>
<p>主要影响</p>
<ul>
<li></li>
</ul>
<p>解决方案</p>
<ul>
<li></li>
</ul>
<h3>切换不及时</h3>
<p>问题说明</p>
<ul>
<li>干扰导致信令交互延迟，与上报小区无邻区关系或邻区参数配置有误，当前锚点与目标小区无邻区或X2</li>
</ul>
<p>主要影响</p>
<ul>
<li></li>
</ul>
<p>解决方案</p>
<ul>
<li></li>
</ul>
<h3>切换成功率低</h3>
<p>问题说明</p>
<ul>
<li><strong>基站设备方面</strong>：基站是否出现故障告警。</li>
<li><strong>基站参数方面</strong>：基站参数设置是否合理（切换门限、迟滞、定时器、邻区）。是否有邻区漏配的情况。</li>
<li><strong>基站资源方面</strong>：目标小区是否出现拥塞。</li>
<li><strong>无线环境方面</strong>：无线环境差（RSRP、SINR差）导致的切换失败。</li>
<li><strong>干扰方面</strong>：是否有干扰。</li>
</ul>
<p>主要影响</p>
<ul>
<li></li>
</ul>
<p>解决方案</p>
<ul>
<li></li>
</ul>
<h2>干扰类</h2>
<h3>外部干扰</h3>
<p>问题说明</p>
<ul>
<li><strong>外部干扰</strong>：通过扫频仪来查找外部干扰源、私装放大器</li>
<li><strong>内部干扰</strong>：通过调整方位角或下倾角</li>
</ul>
<p>主要影响</p>
<ul>
<li></li>
</ul>
<p>解决方案</p>
<ul>
<li></li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>如何通过仪器来判断干扰源类型？？？</p>
</div>
<h3>邻频干扰（相邻频点干扰）</h3>
<p>问题说明</p>
<ul>
<li></li>
</ul>
<p>主要影响</p>
<ul>
<li></li>
</ul>
<p>解决方案</p>
<ul>
<li>调整频点解决。</li>
</ul>
<h3>MOD3干扰（模3干扰）</h3>
<p>问题说明</p>
<ul>
<li>RSRP&gt;-90dBm、SINR&lt;0dB</li>
<li>MOD3干扰就是小区PCI除以3之后的余数相同，导致CRS参考信号在RB内的位置相同，也就是存在PSS序列重复，导致PSS读取失败，就会产生MOD3干扰。</li>
<li><strong>MOD3干扰的产生原因</strong>：每个小区（扇区）都是使用3个主同步码和168个辅同步码进行加扰的，由于主同步码只有3个不同值，那么当两个小区（扇区）使用同一个主同步码时，就会使得收集在进行小区搜索时，无法正确判断主同步序列，从而形成干扰，导致业务速率降低。</li>
<li>需要检查每个小区的PCI（Physical Cell ID）除以3的余数是否相同。模三干扰发生在当多个小区的PCI除以3的余数相同时。（MOD3干扰会导致它们的PSS（Primary Synchronization Signal）序列重复，从而引起干扰。）</li>
<li>服务小区PCI与邻小区PCI MOD3相同。</li>
<li>服务小区RSRP大于-100dBm。</li>
<li>服务小区与邻小区RSRP差值小于6dB。</li>
</ul>
<p>主要影响</p>
<ul>
<li>SINR信噪比变差。</li>
</ul>
<p>解决方案</p>
<ul>
<li>主要的思路就是减少MOD3相同的小区（扇区）覆盖同一块区域，当无法避免时，尽量使其信号强度差值大于6dBm。</li>
<li>重新规划变更小区PCI，如修改或对调小区的PCI。</li>
<li>增加主小区PCI的功率覆盖。</li>
<li>调整天馈系统的方位角、下倾角（机械+电子）、站高等RF参数达到调整覆盖区域。</li>
<li>降低干扰小区发射功率，以达到控制覆盖区域。</li>
<li>修改最小接收电频值、修改CIO切换带。</li>
<li>通过异频设置来规避MOD3干扰。</li>
<li>查找外部干扰源。</li>
</ul>
<h2>其他类</h2>
<h3>速率低 - 测试开始前</h3>
<p>问题说明</p>
<ul>
<li><strong>基站设备方面</strong>：故障、告警、驻波比、断站。</li>
<li><strong>基站配置方面</strong>：乒乓切换、切换不及时、基站发射功率。</li>
<li><strong>基站资源方面</strong>：用户多、拥塞、带宽不足、调度方式。</li>
<li><strong>无线环境方面</strong>：RSRP（参考信号接收功率）、SINR（信号干扰噪声比）、调制方式、TM传输模式。</li>
<li><strong>干扰源方面</strong>：内部干扰（重叠覆盖、相邻频点干扰）、外部干扰（考试防作弊仪）。</li>
<li><strong>数据源方面</strong>：服务器的性能、资源。</li>
<li><strong>终端设备方面</strong>：移动速度、性能。</li>
</ul>
<p>主要影响</p>
<ul>
<li></li>
</ul>
<p>解决方案</p>
<ul>
<li></li>
</ul>
<h3>速率低 - 测试过程中</h3>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>该问题是测试前指标达标，但测试过程中不达标。</p>
</div>
<p>问题说明</p>
<ul>
<li>基站侧是否执行峰值速率脚本。</li>
<li>基站侧分给UE的PRB资源是否足够（MAX:273）。</li>
<li>服务器调度是否足够（Grant）(MAX:1600)（上行满调度600，下行满调度1400）。</li>
<li>秩指示平均值（RANK）（MAX:4）。</li>
<li>是否存在D1（37900）/D2（38098）/D4（39946）频点干扰。</li>
<li>高阶调制256QAM占比（MCS：编码调制方案）。（特殊子帧配比）</li>
<li>误码率（BLER）。</li>
</ul>
<p>主要影响</p>
<ul>
<li></li>
</ul>
<p>解决方案</p>
<ul>
<li></li>
</ul>
<h3>SINR差（噪声比差）</h3>
<p>问题说明</p>
<ul>
<li>
<p>小区数量大于3个。</p>
</li>
<li>
<p>RSRP（信号强度）大于<code>-100dBm</code>。</p>
</li>
<li>
<p>最好小区RSRP（信号强度）与最差小区RSRP（信号强度）的相差小于等于6dBm。</p>
</li>
<li>
<p>SINR &lt; 0。（让后台查询上行低噪）</p>
</li>
<li>
<p>0 &lt;= SINR &lt; 10dB：没有干扰，</p>
</li>
<li>
<p>-110 &lt;= -100 轻度干扰</p>
</li>
<li>
<p>-100 ~ -90之间中度干扰</p>
</li>
<li>
<p>大于-90重度干扰</p>
</li>
</ul>
<p>主要影响</p>
<ul>
<li>有干扰</li>
</ul>
<p>解决方案</p>
<ul>
<li>确定一个主导频。</li>
<li>搜索功率</li>
</ul>
<h3>Ping时延高</h3>
<p>问题说明</p>
<ul>
<li>
<p>Ping 32bit（Ping小包），时延小于30ms。</p>
</li>
<li>
<p>Ping</p>
</li>
<li>
<p>SR周期太大。</p>
</li>
<li>
<p>TDD子帧配比。</p>
</li>
<li>
<p>调度方式：动态调度、静态调度。</p>
</li>
<li>
<p>信号质量差：RSRP（信号强度）低、SINR（信号质量）差。</p>
</li>
<li>
<p>ping数据包太大。</p>
</li>
</ul>
<p>主要影响</p>
<ul>
<li></li>
</ul>
<p>解决方案</p>
<ul>
<li></li>
</ul>
<h3>掉线</h3>
<p>问题说明</p>
<ul>
<li>LTE切换至非锚点小区、切换失败、质差、弱覆盖</li>
</ul>
<p>主要影响</p>
<ul>
<li></li>
</ul>
<p>解决方案</p>
<ul>
<li></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Society - 5G生产链和生态圈</title>
      <link>https://blog.magictable.ha.cn/rule/Society-5G%E7%94%9F%E4%BA%A7%E9%93%BE%E5%92%8C%E7%94%9F%E6%80%81%E5%9C%88.html</link>
      <guid>https://blog.magictable.ha.cn/rule/Society-5G%E7%94%9F%E4%BA%A7%E9%93%BE%E5%92%8C%E7%94%9F%E6%80%81%E5%9C%88.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Society - 5G生产链和生态圈</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 主要特点 注意事项 适用场景</description>
      <category>世界规则/社会</category>
      <pubDate>Sat, 29 Mar 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要特点</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Device - 移动通信基站 - 5G</title>
      <link>https://blog.magictable.ha.cn/hardware/Device-%E7%A7%BB%E5%8A%A8%E9%80%9A%E4%BF%A1%E5%9F%BA%E7%AB%99-5G.html</link>
      <guid>https://blog.magictable.ha.cn/hardware/Device-%E7%A7%BB%E5%8A%A8%E9%80%9A%E4%BF%A1%E5%9F%BA%E7%AB%99-5G.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Device - 移动通信基站 - 5G</source>
      <description>文章摘要： 摘要内容。 简介 基站参数查询：。 NSA基站 - 状态 LTE和5G小区是否存在告警以及问题是否解决，测试小区的小区状态是否正常，LTE和5G小区的X2口是否正常建立，其中特别关注间歇性告警问题。 NSA基站 - 问题 SA基站 - 状态 SA组网下直接确认5G站点告警情况及小区状态即可，保证影响业务的告警已处理且小区已正常激活。 SA基...</description>
      <category>硬件设备/设备</category>
      <pubDate>Thu, 27 Mar 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>基站参数查询：<a href="/hardware/Device-%E7%A7%BB%E5%8A%A8%E9%80%9A%E4%BF%A1%E5%9F%BA%E7%AB%99-5G-%E5%9F%BA%E7%AB%99%E5%8F%82%E6%95%B0%E5%B1%9E%E6%80%A7.html" target="_blank">Device-移动通信基站-5G-基站参数属性</a>。</p>
<h2>NSA基站 - 状态</h2>
<p>LTE和5G小区是否存在告警以及问题是否解决，测试小区的小区状态是否正常，LTE和5G小区的X2口是否正常建立，其中特别关注间歇性告警问题。</p>
<h2>NSA基站 - 问题</h2>
<h2>SA基站 - 状态</h2>
<p>SA组网下直接确认5G站点告警情况及小区状态即可，保证影响业务的告警已处理且小区已正常激活。</p>
<h2>SA基站 - 问题</h2>
<h2>MML命令执行流程</h2>
]]></content:encoded>
    </item>
    <item>
      <title>Device - 移动通信基站</title>
      <link>https://blog.magictable.ha.cn/hardware/Device-%E7%A7%BB%E5%8A%A8%E9%80%9A%E4%BF%A1%E5%9F%BA%E7%AB%99.html</link>
      <guid>https://blog.magictable.ha.cn/hardware/Device-%E7%A7%BB%E5%8A%A8%E9%80%9A%E4%BF%A1%E5%9F%BA%E7%AB%99.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Device - 移动通信基站</source>
      <description>文章摘要： 基站是移动通信网络中的关键设备，通过无线电波与移动终端（如手机、平板电脑等）进行通信。 简介 简要说明 基站是移动通信网络中的关键设备。 通过无线电波与移动终端（如手机、平板电脑等）进行通信。 提供无线信号覆盖和接入服务。 无线基站通常包括发射器、接收器、天线、信号处理单元以及与核心网络连接的接口。 主要特点 信号覆盖：无线基站能够在其服务...</description>
      <category>硬件设备/设备</category>
      <pubDate>Wed, 26 Mar 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 基站是移动通信网络中的关键设备，通过无线电波与移动终端（如手机、平板电脑等）进行通信。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>基站是移动通信网络中的关键设备。</li>
<li>通过无线电波与移动终端（如手机、平板电脑等）进行通信。</li>
<li>提供无线信号覆盖和接入服务。</li>
<li>无线基站通常包括发射器、接收器、天线、信号处理单元以及与核心网络连接的接口。</li>
</ul>
<p>主要特点</p>
<ul>
<li><strong>信号覆盖</strong>：无线基站能够在其服务范围内提供稳定的无线信号覆盖。</li>
<li><strong>通信能力</strong>：支持语音、数据和多媒体通信。</li>
<li><strong>网络接入</strong>：作为移动网络的接入点，使移动终端能够连接到更广泛的通信网络。</li>
<li><strong>技术多样性</strong>：支持多种移动通信标准，如GSM、CDMA、LTE、5G等。</li>
<li><strong>可扩展性</strong>：可以通过增加基站或升级现有设备来扩展网络容量和覆盖范围。</li>
<li><strong>智能化</strong>：现代无线基站具备智能调度和管理功能，能够优化网络资源。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>选址</strong>：基站的选址需要考虑地形、建筑物、人口密度等因素，以确保最佳信号覆盖。</li>
<li><strong>辐射安全</strong>：基站的辐射应符合国家和国际安全标准，确保对人体和环境无害。</li>
<li><strong>维护</strong>：定期对基站进行维护和检查，确保设备正常运行。</li>
<li><strong>兼容性</strong>：基站设备需要与现有的网络设备和标准兼容。</li>
<li><strong>网络安全</strong>：加强基站的安全防护，防止未经授权的访问和网络攻击。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>城市地区</strong>：在城市环境中，无线基站用于提供高密度的信号覆盖，满足大量用户的通信需求。</li>
<li><strong>乡村地区</strong>：在乡村地区，基站用于扩大网络覆盖，确保偏远地区的通信服务。</li>
<li><strong>室内覆盖</strong>：在大型建筑物或地下空间，无线基站可以用于提供室内信号覆盖。</li>
<li><strong>交通枢纽</strong>：在机场、火车站等交通枢纽，基站用于支持高流量的数据通信。</li>
<li><strong>紧急情况</strong>：在自然灾害或紧急事件中，临时部署的无线基站可以提供紧急通信服务。</li>
</ul>
<blockquote>
<p><img src="https://bkimg.cdn.bcebos.com/pic/3c6d55fbb2fb43168e761e3f23a4462309f7d30e?x-bce-process=image/format,f_auto/watermark,image_d2F0ZXIvYmFpa2UyNzI,g_7,xp_5,yp_5,P_20/resize,m_lfit,limit_1,h_1080" alt=""></p>
</blockquote>
<h2>组成部分</h2>
<p>基站收发台（BTS）：负责无线信号的接收和发送。</p>
<p>基站控制器（BSC）：负责控制和管理<strong>基站收发台</strong>，确保通信网络的正常运行‌。</p>
<p>BBU（基带单元）主要负责处理数字信号，将来自天线的模拟信号转换为数字信号，以及执行一些控制功能。BBU通常与射频单元（RRU）一起工作，RRU负责处理与天线相关的射频信号。天线负责发送或接收无线电信号。</p>
<h2>基站天馈系统</h2>
<blockquote>
<p><img src="https://pic.rmb.bdstatic.com/cms/3ad98e803f6215258cbfab3b90c82bfc_1685958663.672_225.jpeg" alt=""></p>
</blockquote>
<ul>
<li>天线的作用：将高频电磁能转为自由空间的电磁波。</li>
</ul>
<h2>基站分类</h2>
<h3>按功率和覆盖范围</h3>
<p>宏基站（Macro Site）</p>
<ul>
<li>功率：10W以上</li>
<li>覆盖半径：200米以上</li>
<li>应用：主要用于室外覆盖，覆盖面积广。</li>
</ul>
<p>微基站（Micro Site）</p>
<ul>
<li>功率：500mW - 10W</li>
<li>覆盖半径：50~200米</li>
<li>应用：常用于楼宇中或人口密集区。</li>
</ul>
<p>皮基站（Pico Site）</p>
<ul>
<li>功率：100mW - 500mW</li>
<li>覆盖半径：20~50米</li>
<li>应用：适用于写字楼、室内公共场所等。</li>
</ul>
<p>飞基站（Femto Site）</p>
<ul>
<li>功率：100mW以下</li>
<li>覆盖半径：10~20米</li>
<li>应用：主要用于家庭用户，体积小。</li>
</ul>
<h3>按工作环境</h3>
<p>室外型基站</p>
<ul>
<li>应用：用于室外环境，覆盖范围较大。</li>
</ul>
<p>室内型基站</p>
<ul>
<li>应用：用于室内环境，提供室内信号覆盖。</li>
</ul>
<h3>按设备结构</h3>
<p>一体式基站</p>
<ul>
<li>结构：集成基带处理单元、射频处理单元和天馈系统。</li>
<li>特点：结构紧凑，安装方便。</li>
</ul>
<p>分布式基站</p>
<ul>
<li>结构：基带单元和射频单元可以分开部署。</li>
<li>特点：灵活性高，便于复杂网络环境的覆盖。</li>
</ul>
<h3>按功能（5G基站）</h3>
<p>有源天线系统（AAS）基站</p>
<ul>
<li>特点：具有有源天线阵列</li>
</ul>
<p>标准无线系统（MSR）基站</p>
<ul>
<li>特点：支持多标准通信</li>
</ul>
<p>1-C型基站</p>
<ul>
<li>特点：适用于特定天线连接器配置</li>
</ul>
<p>1-H型基站</p>
<ul>
<li>特点：混合架构，包含收发器单元阵列、无线电分配网络和天线阵列</li>
</ul>
<h3>按天线分类</h3>
<p>按照辐射方向划分</p>
<ul>
<li>定向天线：天线向四周均匀辐射信号，适用于覆盖圆形区域。</li>
<li>全向天线：天线向特定方向辐射信号，适用于覆盖扇形或长条形区域。</li>
</ul>
<p>按照天线外形划分</p>
<ul>
<li>板状天线</li>
<li>帽形天线</li>
<li>鞭状天线</li>
<li>面状天线</li>
</ul>
<h3>天线架设类型</h3>
<ul>
<li>落地塔</li>
<li>单管塔</li>
<li>三管塔</li>
<li>角钢塔（4脚）</li>
<li>景观塔</li>
<li>路灯塔</li>
<li>水泥杆</li>
<li>交管杆</li>
<li>广告牌</li>
<li>水塔</li>
<li>井架：位于山</li>
<li>拉线塔</li>
<li>美化天线</li>
</ul>
<h3>其他特殊类型</h3>
<p>私域基站</p>
<ul>
<li>应用：在局部区域实现无线覆盖，适用于工业物联网、家庭网关、企业办公室等场所</li>
</ul>
<h2>基站天线</h2>
<h3>天线方位角</h3>
<ul>
<li>正北方向的平面顺时针旋转到和天线所在平面重合所经历的角度。</li>
<li>正北方向0度方位角，即为1小区，平面顺时针旋转，依次对应其他小区。</li>
<li>提示：若2个天线夹角小于90度，会出现互相干扰。</li>
<li>硬件工具：罗盘</li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>小区就是基站上的天线。</p>
</div>
<h3>天线下倾角</h3>
<ul>
<li>天线相对于垂直抱杆的倾角。</li>
<li>对于有内置倾角的天线，下倾角=电子下倾角+机械下倾角。</li>
<li>对于无内置倾角的天线，机械下倾角等于下倾角。</li>
<li>电子下倾角：通过 “调整天线内部的线圈” 和 “调整天线阵子” 来实现的。（可在程序后台通过参数来调整）</li>
<li>机械下倾角：通过 “天线面板后面的支架” 和 “调整天线物理的下倾” 来实现的。</li>
<li>硬件工具：坡度仪</li>
</ul>
<h3>射频优化（RF优化）</h3>
<ul>
<li>主要调整天线的下倾角和方位角。</li>
</ul>
<p>推荐方案</p>
<ul>
<li>方位角调整步长：20度。</li>
<li>下倾角调整步长：3度。</li>
<li>当有电子下倾角和机械下倾角的天线时，优先调整电子下倾角。</li>
<li>市区基站覆盖范围为500米左右。</li>
</ul>
<h3>站点之间天线距离</h3>
<ul>
<li><strong>0.6km~1.6km</strong>：（繁华商业区、写字楼、娱乐集中区）应设最大配置的定向基站。</li>
<li><strong>1.6km~3km</strong>：（经济技术开发区、住宅区）应设较大配置的定向基站。</li>
<li><strong>3km~5km</strong>：（工业区、文教区）一般可设小规模定向基站。</li>
<li><strong>5km~20km</strong>：（公路、铁路）一般可设全向基站或二小区基站。</li>
<li><strong>5km以上</strong>：（城市边缘、近郊区）可设全向基站。</li>
</ul>
<h2>基站状态分类</h2>
<p>运行状态</p>
<ul>
<li><strong>正常状态</strong>：基站正常运行，所有设备工作正常。</li>
<li><strong>故障状态</strong>：基站出现故障，需要维护人员进行检查和维修。</li>
<li><strong>告警状态</strong>：基站出现异常情况，但尚未完全故障，需要及时处理。</li>
</ul>
<p>连接状态</p>
<ul>
<li><strong>连接正常</strong>：基站与网络连接正常，指示灯常亮。</li>
<li><strong>连接异常</strong>：基站与网络连接出现问题，指示灯闪烁或熄灭。</li>
</ul>
<p>电源状态</p>
<ul>
<li><strong>电源正常</strong>：电源指示灯常亮，表示基站供电正常。</li>
<li><strong>电源故障</strong>：电源指示灯熄灭或闪烁，表示基站供电出现问题。</li>
</ul>
<p>配置状态</p>
<ul>
<li><strong>配置正确</strong>：基站的参数设置正确，运行正常。</li>
<li><strong>配置错误</strong>：基站的参数设置有误，需要重新配置。</li>
</ul>
<p>同步状态</p>
<ul>
<li><strong>时钟同步</strong>：基站的时钟与网络时钟同步。</li>
<li><strong>时钟不同步</strong>：基站的时钟与网络时钟不同步，需要调整。</li>
</ul>
<p>位置状态</p>
<ul>
<li><strong>位置正常</strong>：基站位置信息正确。</li>
<li><strong>位置异常</strong>：基站位置信息异常，需要重新定位。</li>
</ul>
<p>管理状态</p>
<ul>
<li><strong>状态合理性</strong>：基站的状态符合预期和规定。</li>
<li><strong>状态迁移合理性</strong>：基站状态的变化符合逻辑和规定。</li>
<li><strong>状态一致性</strong>：基站的状态在不同管理系统中的记录一致。</li>
<li><strong>疑似重复入网</strong>：基站疑似重复入网，需要核实。</li>
</ul>
<h2>站点类型</h2>
<p>铁塔站</p>
<ul>
<li>落地角铁塔、三管塔、拉线塔</li>
</ul>
<p>灯杆塔</p>
<ul>
<li>路灯杆塔</li>
</ul>
<p>单管塔站</p>
<ul>
<li>仿生树、景观塔</li>
</ul>
<p>楼面站</p>
<ul>
<li>屋顶抱杆、楼面塔、楼顶美化天线</li>
</ul>
<h2>5G基站</h2>
<p>5G 基站核心部件包括基站芯片、基站天线、射频、滤波器、网优设备、功率放大器（PA）与印制电路板（PCB）等。</p>
<h3>基站天线</h3>
<p>5G 基站芯片范围广泛，包括 CPU、FPGA、交换芯片、电源芯片、时钟芯片等。</p>
<h3>基站天线</h3>
<p>天线是基站的重要组成部分，决定通话与信息的传输质量。从 4G 到 5G，基站的天线主要以多频段、小型化、高效率为主要技术发展方向。5G 基站主要采用 Massive MIMO 技术，目前国内基站天线厂商已拥有相关核心技术。</p>
<h3>射频</h3>
<p>射频（RF）是 Radio Frequency 的缩写，频率范围在 300kHz～300GHz 之间。射频是一种电流，是一种高频交流变化电磁波的简称。根据每秒电流交互频率，可以分为低频（变化小于 1000 次的交流电）、中频和高频（变化大于 10000 次的电流）。射频是一种高频电流，居于高频（大于 10K）中的较高频段，而微波频段（300M-300G）又是其中的更高频段。</p>
<p>射频主要用于实现无线通讯的两个本质功能，即在发射信号的过程中将二进制信号转换成高频率的无线电磁波信号，在接收信号的过程中将收到的电磁波信号转换成二进制数字信号。从结构来看，射频可以拆分为天线、射频收发芯片、基带和射频前端。</p>
<p>按照下游来分，民用射频前端下游主要为移动终端（手机为主）、通信基站等，其中，手机是主要的下游市场，通信基站射频前端的市场规模相对较小。</p>
<h3><strong>滤波器</strong></h3>
<p>滤波器是由电容、电感和电阻组成的滤波电路，可以对电源线中特定频率的频点或该频点以外的频率进行有效滤除，得到一个特定频率的电源信号，或消除一个特定频率后的电源信号。</p>
<p>滤波器主要可分为金属腔体滤波器、介质滤波器、声学滤波器等。其中，金属腔体滤波器、介质滤波器主要应用于宏基站、小基站；声学滤波器可分为表面滤波器（SAW Filter）和体声滤波器（BAW Filter），主要用于手机、小基站、物联网等领域。</p>
<blockquote>
<p><img src="https://mmbiz.qpic.cn/mmbiz_png/A3M3XKEFf6KoXt68ZXDrxYibs2FkdKNfNnNTqic1unfh4jSS0KfDQLTLicng7r4U2JYd4TjcRxicOlXwbXgCjxnC7g/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1&amp;tp=webp" alt=""></p>
</blockquote>
<p>滤波器作为基站的核心零部件，对于基站选频起到关键作用。4G 主要采用金属腔体滤波器，价格低而且工艺成熟，但金属切割招致体积相对偏大。由于 5G使用大规模天线阵列Massive MIMO 技术，每条天线需要配备双工器，并且需要滤波器进行信号频率的同步处理，大幅增加了滤波器市场需求。另外，腔体滤波器由于体积大、发热多的缺点，5G 未来将更多的使用体积小的介质滤波器。</p>
<p>从短期看，介质滤波器与腔体滤波器将共同为5G基站服务；从长期看，损耗小、介电数高、体积小的陶瓷介质滤波器将成为主流。</p>
<h3>网优设备</h3>
<p>网优是“网络优化”的简称，指在现网基础上通过话务数据分析、现场测试数据采集、参数分析、硬件检查等手段，找出影响网络质量的原因，在此基础上进行各种优化（包括参数修改、网络结构调整、设备配置调整和采取某些技术手段），使网络性能达到我们需要的最佳平衡点。相应地，网优设备是指用于进行网络优化的硬件设备及其中相应配套的软件。</p>
<h3>PA</h3>
<p>功率放大器（PA）是基站射频单元中的关键组成部分，主要是将调制电路所产生的射频小信号放大，进而获得足够大的射频输出功率，作为信息传输的重要器件之一，PA 直接决定了无线通信的距离、信号质量以及功耗等。</p>
<h3>PCB</h3>
<p>PCB 是电子元器件互联的提供者，也是工业电子产品的命脉。5G 建设的初期阶段，无论是无线接入网还是传输网，均对 PCB 行业提出了更高的供应需求和技术要求。</p>
]]></content:encoded>
      <enclosure url="https://bkimg.cdn.bcebos.com/pic/3c6d55fbb2fb43168e761e3f23a4462309f7d30e?x-bce-process=image/format,f_auto/watermark,image_d2F0ZXIvYmFpa2UyNzI,g_7,xp_5,yp_5,P_20/resize,m_lfit,limit_1,h_1080" type="image/"/>
    </item>
    <item>
      <title>Language - MML</title>
      <link>https://blog.magictable.ha.cn/software/Language-MML.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-MML.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - MML</source>
      <description>文章摘要： 人机语言（Man Machine Language，MML）是一种用于实现人机对话的计算机语言，允许用户或操作员通过特定的命令与计算机系统进行交互，以执行各种任务和操作。MML通常用于系统管理、监控和维护。 简介 简要说明 人机语言（Man Machine Language，MML）是一种用于实现人机对话的计算机语言。 允许用户或操作员通过...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Mon, 24 Mar 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 人机语言（Man Machine Language，MML）是一种用于实现人机对话的计算机语言，允许用户或操作员通过特定的命令与计算机系统进行交互，以执行各种任务和操作。MML通常用于系统管理、监控和维护。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>人机语言（Man Machine Language，MML）是一种用于实现人机对话的计算机语言。</li>
<li>允许用户或操作员通过特定的命令与计算机系统进行交互，以执行各种任务和操作。</li>
<li>MML通常用于系统管理、监控和维护。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>命令执行</strong>：操作员可以通过输入特定的命令来指导计算机执行任务。</li>
<li><strong>交互式对话</strong>：MML支持交互式对话模式，允许操作员在执行任务时与系统进行实时沟通。</li>
<li><strong>系统监控</strong>：可以用来监控系统的状态，收集性能数据，以及进行故障排查。</li>
<li><strong>配置管理</strong>：通过MML命令，可以配置系统参数，调整系统设置。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>命令准确性</strong>：输入的命令需要精确无误，以避免错误的操作或系统错误。</li>
<li><strong>用户权限</strong>：使用MML时，应确保用户具有适当的权限，防止未授权的操作。</li>
<li><strong>系统响应理解</strong>：操作员需要能够理解系统的响应，并据此作出正确的决策。</li>
<li><strong>文档和指南</strong>：操作员应参考相关的文档和指南，以确保正确使用MML。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>网络管理</strong>：在网络设备的管理和维护中，MML用于配置网络参数，监控网络状态。</li>
<li><strong>系统维护</strong>：在大型系统的日常维护中，MML帮助技术人员进行故障诊断和系统优化。</li>
<li><strong>工业控制</strong>：在工业自动化领域，MML可用于控制机器和生产线。</li>
<li><strong>电信领域</strong>：在电信行业中，MML用于基站和交换机的配置、监控和维护。</li>
</ul>
<h2>命令格式</h2>
<h2>语法规则</h2>
<h2>主流厂商的MML系统</h2>
<h3>华为（HUAWEI）</h3>
<p>网管系统</p>
<ul>
<li>U2000/U2020（无线网管）</li>
<li>iManager M2000（核心网）</li>
</ul>
<p>命令格式</p>
<ul>
<li><code>操作类型 + 对象</code></li>
</ul>
<p>命令案例</p>
<div class="language-mml line-numbers-mode" data-highlighter="prismjs" data-ext="mml"><pre><code class="language-mml"><span class="line">LST BTS:;                // 查询基站列表</span>
<span class="line">DSP CELL:;               // 查看小区状态</span>
<span class="line">MOD CELL:CELLID=1, TXPOWER=43;  // 修改小区发射功率</span>
<span class="line">ACT BTS:;                // 激活基站配置变更</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>中兴（ZTE）</h3>
<p>网管系统</p>
<ul>
<li>NetNumen U31/U32</li>
</ul>
<p>命令格式</p>
<ul>
<li><code>ZX命令前缀 + 功能</code></li>
</ul>
<p>命令案例</p>
<div class="language-mml line-numbers-mode" data-highlighter="prismjs" data-ext="mml"><pre><code class="language-mml"><span class="line">ZXNRG:CELL=1, QUERY;     // 查询小区参数</span>
<span class="line">ZXNRG:CELL=1, MOD ATT=1; // 修改小区接入参数</span>
<span class="line">ZXELG:LOCELL=ALL;        // 锁定所有小区</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>爱立信（Ericsson）</h3>
<p>网管系统</p>
<ul>
<li>OSS-RC</li>
<li>ENM（Ericsson Network Manager）</li>
</ul>
<p>命令格式</p>
<ul>
<li><code>RLxxx</code> 或功能缩写</li>
</ul>
<p>命令案例</p>
<div class="language-mml line-numbers-mode" data-highlighter="prismjs" data-ext="mml"><pre><code class="language-mml"><span class="line">RLCRP:CELL=cell1;        // 查询小区无线参数</span>
<span class="line">RLSTC:CELL=cell1;        // 查看小区状态</span>
<span class="line">RLBDP:CELL=cell1, BAND=3; // 修改频段参数</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Society - 区块链平台</title>
      <link>https://blog.magictable.ha.cn/rule/Society-%E5%8C%BA%E5%9D%97%E9%93%BE%E5%B9%B3%E5%8F%B0.html</link>
      <guid>https://blog.magictable.ha.cn/rule/Society-%E5%8C%BA%E5%9D%97%E9%93%BE%E5%B9%B3%E5%8F%B0.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Society - 区块链平台</source>
      <description>文章摘要： 文章摘要。 简介 简要说明 主要功能 注意事项 适用场景 基础操作 钱包与交易 选择并创建钱包 钱包类型：根据需求选择热钱包（日常交易）或冷钱包（安全性更高）。 以太坊 公共区块链平台 以太坊（英文Ethereum）是一个开源的有智能合约功能的公共区块链平台，通过其专用加密货币以太币（Ether，简称“ETH”）提供去中心化的以太虚拟机（E...</description>
      <category>世界规则/社会</category>
      <pubDate>Sat, 22 Mar 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 文章摘要。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>基础操作</h2>
<h3>钱包与交易</h3>
<ol>
<li>选择并创建钱包</li>
</ol>
<ul>
<li>钱包类型：根据需求选择<strong>热钱包</strong>（日常交易）或<strong>冷钱包</strong>（安全性更高）。</li>
<li></li>
</ul>
<h2>以太坊</h2>
<ul>
<li>公共区块链平台</li>
<li>以太坊（英文Ethereum）是一个开源的有智能合约功能的公共区块链平台，通过其专用加密货币以太币（Ether，简称“ETH”）提供去中心化的以太虚拟机（Ethereum Virtual Machine）来处理点对点合约。</li>
</ul>
<p>以太坊钱包是存储以太坊（ETH）和其他基于以太坊的代币（如ERC-20代币）的数字资产管理工具。</p>
<p>数字资产钱包并不存储实际的以太坊，而是存储与以太坊相对应的私钥和公钥。</p>
<p>以太坊钱包主要分为两大类：热钱包和冷钱包。热钱包连接互联网，方便用户进行即时交易，但安全性较低；冷钱包则不连接互联网，安全性更高，更适合长期存储资产。</p>
<h2>比特币</h2>
<h2>泰达币</h2>
<h2></h2>
]]></content:encoded>
    </item>
    <item>
      <title>Diary（日记）</title>
      <link>https://blog.magictable.ha.cn/note/Diary%EF%BC%88%E6%97%A5%E8%AE%B0%EF%BC%89.html</link>
      <guid>https://blog.magictable.ha.cn/note/Diary%EF%BC%88%E6%97%A5%E8%AE%B0%EF%BC%89.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Diary（日记）</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 主要功能 注意事项 适用场景 工作流 详细总结： 沟通方式 摩尔斯电码（摩斯密码） 详细总结： 手语 - 中国 详细总结： 文字 - 简体中文 详细总结： 文字 - 英语英文 详细总结： 进制 详细总结：</description>
      <category>学习笔记/日记</category>
      <pubDate>Sat, 22 Mar 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>工作流</h2>
<p>详细总结：<a href="/note/Diary-%E5%B7%A5%E4%BD%9C%E6%B5%81-%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91.html" target="_blank">Diary-工作流-软件开发</a></p>
<h2>沟通方式</h2>
<h3>摩尔斯电码（摩斯密码）</h3>
<p>详细总结：<a href="/note/Diary-%E6%B2%9F%E9%80%9A%E6%96%B9%E5%BC%8F-%E6%91%A9%E5%B0%94%E6%96%AF%E7%94%B5%E7%A0%81.html" target="_blank">Diary-沟通方式-摩尔斯电码</a></p>
<h3>手语 - 中国</h3>
<p>详细总结：<a href="/note/Diary-%E6%B2%9F%E9%80%9A%E6%96%B9%E5%BC%8F-%E6%89%8B%E8%AF%AD-%E4%B8%AD%E5%9B%BD.html" target="_blank">Diary-沟通方式-手语-中国</a></p>
<h3>文字 - 简体中文</h3>
<p>详细总结：<a href="/note/Diary-%E6%B2%9F%E9%80%9A%E6%96%B9%E5%BC%8F-%E6%96%87%E5%AD%97-%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87.html" target="_blank">Diary-沟通方式-文字-简体中文</a></p>
<h3>文字 - 英语英文</h3>
<p>详细总结：<a href="/note/Diary-%E6%B2%9F%E9%80%9A%E6%96%B9%E5%BC%8F-%E6%96%87%E5%AD%97-%E8%8B%B1%E8%AF%AD%E8%8B%B1%E6%96%87.html" target="_blank">Diary-沟通方式-文字-英语英文</a></p>
<h2>进制</h2>
<p>详细总结：<a href="/note/Diary-%E8%BF%9B%E5%88%B6.html" target="_blank">Diary-进制</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Package - WPS - Excel</title>
      <link>https://blog.magictable.ha.cn/software/Package-WPS-Excel.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-WPS-Excel.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - WPS - Excel</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 主要功能 注意事项 适用场景 安装与卸载 详细总结： 终端命令 详细总结： 配置文件 详细总结： 热门推荐 详细总结： 问题总结 详细总结：</description>
      <category>软件程序/软件包</category>
      <pubDate>Fri, 21 Mar 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>安装与卸载</h2>
<p>详细总结：<a href=""></a></p>
<h2>终端命令</h2>
<p>详细总结：<a href=""></a></p>
<h2>配置文件</h2>
<p>详细总结：<a href=""></a></p>
<h2>热门推荐</h2>
<p>详细总结：<a href=""></a></p>
<h2>问题总结</h2>
<p>详细总结：<a href=""></a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Package - WPS - PowerPoint</title>
      <link>https://blog.magictable.ha.cn/software/Package-WPS-PowerPoint.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-WPS-PowerPoint.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - WPS - PowerPoint</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 主要功能 注意事项 适用场景 安装与卸载 详细总结： 终端命令 详细总结： 配置文件 详细总结： 热门推荐 详细总结： 问题总结 详细总结：</description>
      <category>软件程序/软件包</category>
      <pubDate>Fri, 21 Mar 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>安装与卸载</h2>
<p>详细总结：<a href=""></a></p>
<h2>终端命令</h2>
<p>详细总结：<a href=""></a></p>
<h2>配置文件</h2>
<p>详细总结：<a href=""></a></p>
<h2>热门推荐</h2>
<p>详细总结：<a href=""></a></p>
<h2>问题总结</h2>
<p>详细总结：<a href=""></a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Package - WPS - Word</title>
      <link>https://blog.magictable.ha.cn/software/Package-WPS-Word.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-WPS-Word.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - WPS - Word</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 主要功能 注意事项 适用场景 安装与卸载 详细总结： 终端命令 详细总结： 配置文件 详细总结： 热门推荐 详细总结： 问题总结 详细总结：</description>
      <category>软件程序/软件包</category>
      <pubDate>Fri, 21 Mar 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>安装与卸载</h2>
<p>详细总结：<a href=""></a></p>
<h2>终端命令</h2>
<p>详细总结：<a href=""></a></p>
<h2>配置文件</h2>
<p>详细总结：<a href=""></a></p>
<h2>热门推荐</h2>
<p>详细总结：<a href=""></a></p>
<h2>问题总结</h2>
<p>详细总结：<a href=""></a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Package - WPS</title>
      <link>https://blog.magictable.ha.cn/software/Package-WPS.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-WPS.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - WPS</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 主要功能 注意事项 适用场景 安装与卸载 详细总结： 终端命令 详细总结： 配置文件 详细总结： 热门推荐 详细总结： 问题总结 详细总结：</description>
      <category>软件程序/软件包</category>
      <pubDate>Fri, 21 Mar 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>安装与卸载</h2>
<p>详细总结：<a href=""></a></p>
<h2>终端命令</h2>
<p>详细总结：<a href=""></a></p>
<h2>配置文件</h2>
<p>详细总结：<a href=""></a></p>
<h2>热门推荐</h2>
<p>详细总结：<a href=""></a></p>
<h2>问题总结</h2>
<p>详细总结：<a href=""></a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 通信 - 技术 - 4G - 测试项目 - 簇优化</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-4G-%E6%B5%8B%E8%AF%95%E9%A1%B9%E7%9B%AE-%E7%B0%87%E4%BC%98%E5%8C%96.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-4G-%E6%B5%8B%E8%AF%95%E9%A1%B9%E7%9B%AE-%E7%B0%87%E4%BC%98%E5%8C%96.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 通信 - 技术 - 4G - 测试项目 - 簇优化</source>
      <description>文章摘要： 文章摘要。 介绍 作用 所需设备 关注指标 覆盖率、驻留比、掉线率、下行平均吞吐率、上行平均吞吐率 流程和注意事项 标准和测试要求 数据文件和规范 问题和解决方案</description>
      <category>学习笔记/技术</category>
      <pubDate>Thu, 20 Mar 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 文章摘要。</p>
<!-- more -->
<h2>介绍</h2>
<h3>作用</h3>
<ul>
<li></li>
</ul>
<h3>所需设备</h3>
<ul>
<li></li>
</ul>
<h2>关注指标</h2>
<ul>
<li>覆盖率、驻留比、掉线率、下行平均吞吐率、上行平均吞吐率</li>
</ul>
<h2>流程和注意事项</h2>
<h2>标准和测试要求</h2>
<table>
<thead>
<tr>
<th style="text-align:left">网络类型</th>
<th style="text-align:left">测试类型</th>
<th style="text-align:left">定义</th>
<th style="text-align:left">基准值</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">NR</td>
<td style="text-align:left">覆盖率</td>
<td style="text-align:left">RSRP &gt; -110dBm、SINR &gt; -3dB</td>
<td style="text-align:left">&gt;=99%</td>
</tr>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left">驻留比</td>
<td style="text-align:left">占用LTE总的时长/总链接态时长*100%</td>
<td style="text-align:left">&gt;=95%</td>
</tr>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left">掉线率</td>
<td style="text-align:left">掉线次数/成功完成连接建立次数*100%</td>
<td style="text-align:left">&lt;5%</td>
</tr>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left">下行平均吞吐率</td>
<td style="text-align:left">MAC层下载总流量/下载总时间</td>
<td style="text-align:left">&gt;40Mbps</td>
</tr>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left">上行平均吞吐率</td>
<td style="text-align:left">MAC层上传总流量/上传总时间</td>
<td style="text-align:left">&gt;6Mbps</td>
</tr>
</tbody>
</table>
<h2>数据文件和规范</h2>
<h2>问题和解决方案</h2>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 通信 - 技术 - 5G - 测试业务</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-5G-%E6%B5%8B%E8%AF%95%E4%B8%9A%E5%8A%A1.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-5G-%E6%B5%8B%E8%AF%95%E4%B8%9A%E5%8A%A1.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 通信 - 技术 - 5G - 测试业务</source>
      <description>文章摘要： 文章摘要。 CQT测试（定点性能测试） Ping时延（Ping） 流程 检查待测5G小区的Ping时延是否正常。测试前需确保5G路测系统硬件连接良好，UE入网成功，并可以从Probe上读出小区的PCI、RSRP、SINR等信息。核心网服务器传输正常。 要求 问题 下载吞吐量（FTP Download） 流程 要求 问题 上传吞吐量（FTP ...</description>
      <category>学习笔记/技术</category>
      <pubDate>Thu, 20 Mar 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 文章摘要。</p>
<!-- more -->
<h2>CQT测试（定点性能测试）</h2>
<h3>Ping时延（Ping）</h3>
<p>流程</p>
<ul>
<li>检查待测5G小区的Ping时延是否正常。测试前需确保5G路测系统硬件连接良好，UE入网成功，并可以从Probe上读出小区的PCI、RSRP、SINR等信息。核心网服务器传输正常。</li>
</ul>
<p>要求</p>
<ul>
<li></li>
</ul>
<p>问题</p>
<ul>
<li></li>
</ul>
<h3>下载吞吐量（FTP Download）</h3>
<p>流程</p>
<ul>
<li></li>
</ul>
<p>要求</p>
<ul>
<li></li>
</ul>
<p>问题</p>
<ul>
<li></li>
</ul>
<h3>上传吞吐量（FTP Upload）</h3>
<p>流程</p>
<ul>
<li></li>
</ul>
<p>要求</p>
<ul>
<li></li>
</ul>
<p>问题</p>
<ul>
<li></li>
</ul>
<h3>语音（）</h3>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>通话流程</p>
<ol>
<li>主叫向IMS发送INVITE请求。</li>
<li>完成RRC（A2门限、5G无线网络优化）和MR（RSRP、PCI、频点、类型、迟滞），QCI=9/QCI=5承载建立。</li>
<li>IMS回复主叫INVITE100消息，表示已经收到主叫的请求。</li>
<li>主叫发送被叫的INVITE183临时消息，建立QCI=1承载，启动资源预留。</li>
<li>主叫发送PRACK通知被叫，启动资源预留。</li>
<li>被叫回复主叫PRACK200响应，启动资源预留。</li>
<li>主叫发送UPDATE，开始媒体格式协商。</li>
<li>被叫回复主叫UPDATE200，返回协商结果，确定编码方式。</li>
<li>被叫振铃向主叫发送INVITE180。</li>
<li>被叫摘机向主叫发送INVITE200消息。</li>
<li>主叫向IMS发送ACK消息，通话完全建立，键入通话过程。</li>
<li>主叫挂机，发送BYE请求结束回话。</li>
<li>被叫挂机，回复BYE200消息。</li>
<li>无线承载释放。</li>
</ol>
</div>
<p>流程</p>
<ul>
<li></li>
</ul>
<p>要求</p>
<ul>
<li></li>
</ul>
<p>问题</p>
<ul>
<li></li>
</ul>
<h3>附着/去附着</h3>
<p>==附着是接入吗？==</p>
<p>流程</p>
<ul>
<li></li>
<li>attach\dettach</li>
</ul>
<p>要求</p>
<ul>
<li></li>
</ul>
<p>问题</p>
<ul>
<li></li>
</ul>
<h3>TCP灌包</h3>
<h3>辅站变更</h3>
<h3>小区切换</h3>
<h2>DT测试（环测/路测覆盖测试）</h2>
<p>流程</p>
<ul>
<li>==待完善==</li>
<li>检查UE接收的RSRP和SINR是否异常（例如是否存在其中一个测试小区的RSRP和SINR明显l差于其他的小区），确认是否存在AAU连接异常、天线安装位置设计不合理、周围环境发生变化导致建筑物阻挡、硬件安装时天线倾角/方向角与规划时不一致。</li>
<li>接上UE，按照选定的测试路线对待测小区的信号进行测试,可以采用数据业务测试方法，尽可能跑全基站周围所有主要街道。</li>
<li>根据UE接收的信号得出区域覆盖图，对比各个小区的RSRP覆盖情况和SINR分布情况，对其中RSRP和SINR分布情况较差的小区要重点关注。</li>
</ul>
<p>要求</p>
<ul>
<li>站点视距近点范围RSRP&gt;-75dBm，SINR &gt;15dB，如果站点下信号覆盖较弱，则此项验证不通过，具体要求请参考承诺的KPI。</li>
<li>路测路线上PCI设置是否与规划一致，若是不一致，则此项验证不通过。</li>
<li>在对该站点完成相关的验证后，把详细的分析结果填入《单站验证报告》。</li>
</ul>
<p>问题</p>
<ul>
<li></li>
</ul>
<h2>拉网</h2>
<p>流程</p>
<ul>
<li></li>
</ul>
<p>要求</p>
<ul>
<li></li>
</ul>
<p>问题</p>
<ul>
<li></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 通信 - 技术 - 5G - 测试项目 - 簇优化</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-5G-%E6%B5%8B%E8%AF%95%E9%A1%B9%E7%9B%AE-%E7%B0%87%E4%BC%98%E5%8C%96.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-5G-%E6%B5%8B%E8%AF%95%E9%A1%B9%E7%9B%AE-%E7%B0%87%E4%BC%98%E5%8C%96.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 通信 - 技术 - 5G - 测试项目 - 簇优化</source>
      <description>文章摘要： 文章摘要。 介绍 作用 单站验证完成之后，需要按簇对网络性能进行优化。在LTE项目中，可按簇进行优化和验收。一个簇一般10~20个站左右，建议当本簇中80%的站点通过单站验证后即可启动，剩余的20%站点在开通后进行单站验证即可。簇优化聚焦于网络的覆盖、接入性、保持性（掉话率）、移动性（切换成功率）、吞吐率等指标。 重点 RF优化，做好覆盖控...</description>
      <category>学习笔记/技术</category>
      <pubDate>Thu, 20 Mar 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 文章摘要。</p>
<!-- more -->
<h2>介绍</h2>
<blockquote>
<p></p>
</blockquote>
<h3>作用</h3>
<ul>
<li>单站验证完成之后，需要按簇对网络性能进行优化。在LTE项目中，可按簇进行优化和验收。一个簇一般10~20个站左右，建议当本簇中80%的站点通过单站验证后即可启动，剩余的20%站点在开通后进行单站验证即可。簇优化聚焦于网络的覆盖、接入性、保持性（掉话率）、移动性（切换成功率）、吞吐率等指标。</li>
</ul>
<h3>重点</h3>
<ul>
<li>RF优化，做好覆盖控制，并与3G的协同优化，要避免对原3G网络的影响，特别关注天线方位角、俯仰角；共用天馈的情况要考虑对原有3G覆盖的影响；如果上站检查发现3G天线有被阻挡，要一并调整3G不合理的天线方位角、俯仰角；</li>
<li>PCI冲突核查；</li>
<li>射频通道检查：排查基站的射频通道质量（如VSWR、RSSI等），提前排除对网络覆盖和性能的负面影响。整个射频通道核查动作可包括4个核查内容：上行通道核查，上行天馈核查，下行通道核查，下行天馈核查。</li>
<li>在簇优化中应增加回落到3G或2G的重选和切换成功率测试分析和统计；</li>
<li>在邻区数据核查中除了本网的，还应重点突出外部相邻小区的核查。</li>
</ul>
<h3>所需设备</h3>
<ul>
<li></li>
</ul>
<h2>关注指标</h2>
<p>覆盖率、驻留比、掉线率、下行平均吞吐率、上行平均吞吐率</p>
<h2>流程和注意事项</h2>
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<p>问题：5G网络簇优化有分为NSA（非独立组网）和SA（独立组网）流程吗？还是说簇优化只有一个流程？</p>
</div>
<ol>
<li>规划路线</li>
</ol>
<ul>
<li>尽量避免左转， 注意单行线。</li>
<li>准备设备和车辆，联系司机。</li>
</ul>
<ol start="2">
<li>簇内站点核查</li>
</ol>
<ul>
<li>站点一定要工作正常，无影响业务的告警。</li>
<li>查看参数是否与工参一致。</li>
<li>一个簇在10-20个基站之间。</li>
</ul>
<ol start="3">
<li>对簇范围内相关道路进行拉网测试</li>
</ol>
<ul>
<li>来回一共两个Log，一个是ping 32byte、另一个是ping 2000byte。</li>
</ul>
<ol>
<li>输出 “<strong>簇优化问题报告</strong>” 文件。</li>
</ol>
<ul>
<li>对测试的LOG进行统计，问题点进行分析，并废除具体的调整建议。</li>
</ul>
<ol start="5">
<li>针对问题点进行调整</li>
</ol>
<ul>
<li>外场带领塔工进行天馈调整，后台可提交后台相关人员做参数和邻区调整。</li>
</ul>
<ol start="6">
<li>
<p>复测。</p>
</li>
<li>
<p>输出 “<strong>簇优化问题前后对比报告</strong>” 文件。</p>
</li>
<li>
<p>遗留问题进一步优化。</p>
</li>
</ol>
<h2>标准和测试要求</h2>
<table>
<thead>
<tr>
<th style="text-align:left">网络类型</th>
<th style="text-align:left">测试类型</th>
<th style="text-align:left">定义</th>
<th style="text-align:left">基准值</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">NR</td>
<td style="text-align:left">覆盖率</td>
<td style="text-align:left">RSRP &gt; -90dBm、SINR &gt; -3dB</td>
<td style="text-align:left">&gt;=90%</td>
</tr>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left">驻留比</td>
<td style="text-align:left">占用NR总的时长/总链接态时长*100%</td>
<td style="text-align:left">&gt;=95%</td>
</tr>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left">掉线率</td>
<td style="text-align:left">掉线次数/成功完成连接建立次数*100%</td>
<td style="text-align:left">&lt;5%</td>
</tr>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left">下行平均吞吐率</td>
<td style="text-align:left">MAC层下载总流量/下载总时间</td>
<td style="text-align:left">&gt;550Mbps</td>
</tr>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left">上行平均吞吐率</td>
<td style="text-align:left">MAC层上传总流量/上传总时间</td>
<td style="text-align:left">&gt;40Mbps</td>
</tr>
</tbody>
</table>
<h2>数据文件和规范</h2>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 通信 - 技术 - 5G - 测试项目</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-5G-%E6%B5%8B%E8%AF%95%E9%A1%B9%E7%9B%AE.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-5G-%E6%B5%8B%E8%AF%95%E9%A1%B9%E7%9B%AE.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 通信 - 技术 - 5G - 测试项目</source>
      <description>文章摘要： 文章摘要。 单站验证 注释 测试路线尽可能跑全待测基站各个扇区覆盖方向上的公路。 测试路线应当超过测试Ring的规定范围，且直到测试到邻区站发生切换为止。 另外对于Urban站点，如果待验证站点能够基本连续覆盖，推荐选择以Cluster的形式 组织测试，在测试时需要把握下面的原则。 测试路线尽量跑全待测基站周围所有主要街道。测试路线尽量考虑...</description>
      <category>学习笔记/技术</category>
      <pubDate>Thu, 20 Mar 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 文章摘要。</p>
<!-- more -->
<h2>单站验证</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>测试路线尽可能跑全待测基站各个扇区覆盖方向上的公路。</p>
<ul>
<li>测试路线应当超过测试Ring的规定范围，且直到测试到邻区站发生切换为止。</li>
<li>另外对于Urban站点，如果待验证站点能够基本连续覆盖，推荐选择以Cluster的形式  组织测试，在测试时需要把握下面的原则。</li>
<li>测试路线尽量跑全待测基站周围所有主要街道。测试路线尽量考虑当地的行车习惯，减少过红绿灯时的等待时间。</li>
</ul>
</div>
<ul>
<li>测试项：CQT测试（Ping包延迟、下载吞吐量、上传吞吐量、语音测试）、DT测试（环测、路测）</li>
</ul>
<p>详细总结：<a href="/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-5G-%E6%B5%8B%E8%AF%95%E9%A1%B9%E7%9B%AE-%E5%8D%95%E7%AB%99%E9%AA%8C%E8%AF%81.html" target="_blank">Technology-通信-技术-5G-测试项目-单站验证</a></p>
<h2>簇优化</h2>
<ul>
<li>测试项：拉网测试</li>
<li>簇优化站点规模比较小，一般连片10~30个站点即可划为一个簇。</li>
</ul>
<p>详细总结：<a href="/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-5G-%E6%B5%8B%E8%AF%95%E9%A1%B9%E7%9B%AE-%E7%B0%87%E4%BC%98%E5%8C%96.html" target="_blank">Technology-通信-技术-5G-测试项目-簇优化</a></p>
<h2>网格优化/分区优化</h2>
<ul>
<li>网格是由多个簇组成的。</li>
<li>簇与网格的优化思路基本是一致的，两者之间无本质的区别。</li>
<li>==待完善==</li>
</ul>
<h2>专项测试</h2>
<ul>
<li>==待完善==</li>
</ul>
<h2>后台分析</h2>
<ul>
<li>==待完善==</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 通信 - 技术 - 多路复用</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-%E5%A4%9A%E8%B7%AF%E5%A4%8D%E7%94%A8.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-%E5%A4%9A%E8%B7%AF%E5%A4%8D%E7%94%A8.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 通信 - 技术 - 多路复用</source>
      <description>文章摘要： 文章摘要。 简介 为了提高信道利用率，使多路信号沿同一信道传输且互不干扰的技术。 多路复用技术是一种允许在同一传输介质上同时传输多路信号的技术。这样做可以有效地提高传输线路的利用率，降低通信成本。 Technology-通信-技术-多路复用-多路复用方法比较 频分多路复用（FDMA） Technology-通信-技术-多路复用-频分多路复用...</description>
      <category>学习笔记/技术</category>
      <pubDate>Thu, 20 Mar 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 文章摘要。</p>
<!-- more -->
<h2>简介</h2>
<ul>
<li>为了提高信道利用率，使多路信号沿同一信道传输且互不干扰的技术。</li>
<li>多路复用技术是一种允许在同一传输介质上同时传输多路信号的技术。这样做可以有效地提高传输线路的利用率，降低通信成本。</li>
</ul>
<blockquote>
<p></p>
</blockquote>
<h2>频分多路复用（FDMA）</h2>
<blockquote>
<p></p>
</blockquote>
<ul>
<li>信号频率上的不同。</li>
<li>总系统带宽被划分为分配给不同用户的信道。</li>
<li>在FDMA中，整个可用的频带被分成多个较小的频带，每个频带被分配给一个独立的通道。</li>
<li>每个通道可以传输一路信号，不同通道之间通过频率的不同来区分。</li>
<li>这种技术在模拟移动通信系统中得到了广泛应用，如早期的1G网络。</li>
</ul>
<h2>时分多路复用（TDMA）</h2>
<blockquote>
<p></p>
</blockquote>
<ul>
<li>信号出现时间上的不同。</li>
<li>TDMA将时间分割成周期性的帧，每个帧再分割成若干个时隙。</li>
<li>每个用户在分配到的时隙内发送或接收数据。</li>
<li>TDMA提高了频谱效率，相比于FDMA，能够支持更多的用户。</li>
<li>2G移动通信系统，如GSM，就采用了TDMA技术。</li>
</ul>
<h2>码分多路复用（CDMA）</h2>
<blockquote>
<p></p>
</blockquote>
<ul>
<li>信号码型结构上的不同。</li>
<li>CDMA允许所有的用户在同一时间、同一频率上发送和接收数据。</li>
<li>每个用户分配有一个唯一的码序列，数据传输时，信息被编码并与该码序列相乘。</li>
<li>在接收端，使用同样的码序列来分离出相应的信号。</li>
<li>CDMA提供了更大的系统容量和更好的抗干扰能力，被3G移动通信系统广泛采用。</li>
</ul>
<h2>正交频分复用（OFDM）</h2>
<blockquote>
<p></p>
</blockquote>
<ul>
<li>OFDM是一种高效的多路复用技术，它将高速数据流分成多个并行的低速子数据流，每个子数据流在各自的子载波上传输。</li>
<li>子载波之间是正交的，可以有效减少子载波间的干扰，提高频谱效率。</li>
<li>OFDM被广泛应用于4G LTE和5G NR等无线通信标准中。</li>
</ul>
<h2>空分多路复用（SDM）</h2>
<blockquote>
<p></p>
</blockquote>
<ul>
<li>SDM利用空间分离的多个天线来发送和接收信号，即空间复用。</li>
<li>通过空间分离的路径发送不同的数据流，可以显著提高数据传输速率和系统容量。</li>
<li>MIMO（多输入多输出）技术就是SDM的一种应用，在现代无线通信系统中非常流行。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 通信 - 技术</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 通信 - 技术</source>
      <description>文章摘要： 文章摘要。 无线电 详细总结： 4G 详细总结： 5G 详细总结： VoIP 详细总结：</description>
      <category>学习笔记/技术</category>
      <pubDate>Wed, 19 Mar 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 文章摘要。</p>
<!-- more -->
<h2>无线电</h2>
<p>详细总结：<a href="/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-%E6%97%A0%E7%BA%BF%E7%94%B5.html" target="_blank">Technology-通信-技术-无线电</a></p>
<h2>4G</h2>
<p>详细总结：<a href="/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-4G.html" target="_blank">Technology-通信-技术-4G</a></p>
<h2>5G</h2>
<p>详细总结：<a href="/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-5G.html" target="_blank">Technology-通信-技术-5G</a></p>
<h2>VoIP</h2>
<p>详细总结：<a href="/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-VoIP.html" target="_blank">Technology-通信-技术-VoIP</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 通信 - 技术 - 4G - 查询手册 - 专业术语</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-4G-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-%E4%B8%93%E4%B8%9A%E6%9C%AF%E8%AF%AD.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-4G-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-%E4%B8%93%E4%B8%9A%E6%9C%AF%E8%AF%AD.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 通信 - 技术 - 4G - 查询手册 - 专业术语</source>
      <description>文章摘要： 文章摘要。 相关信息 外部相关文章 内部相关文章 UE（User Equipment）：用户设备/终端设备。 RAN（Radio Access Network）：接入网。 CN（Core Network）：核心网。 eNB：4G基站。 MCG（Master Cell group）：主小区组 SCG（Secondary Cell group）...</description>
      <category>学习笔记/技术</category>
      <pubDate>Mon, 17 Mar 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 文章摘要。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li></li>
</ul>
<p>内部相关文章</p>
<ul>
<li><a href="/note/Technology-%E9%80%9A%E4%BF%A1-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-%E4%B8%93%E4%B8%9A%E6%9C%AF%E8%AF%AD.html" target="_blank">Technology-通信-查询手册-专业术语</a></li>
<li><a href="/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-5G-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-%E4%B8%93%E4%B8%9A%E6%9C%AF%E8%AF%AD.html" target="_blank">Technology-通信-技术-5G-查询手册-专业术语</a></li>
</ul>
</div>
<ul>
<li>
<p>UE（User Equipment）：用户设备/终端设备。</p>
</li>
<li>
<p>RAN（Radio Access Network）：接入网。</p>
</li>
<li>
<p>CN（Core Network）：核心网。</p>
</li>
<li>
<p>eNB：4G基站。</p>
</li>
<li>
<p>MCG（Master Cell group）：主小区组</p>
</li>
<li>
<p>SCG（Secondary Cell group）：辅小区组</p>
</li>
<li>
<p>PCell（Primary Cell）：主小区</p>
</li>
<li>
<p>SCell（Secondary Cell）：辅小区</p>
</li>
</ul>
<h2>基站参数配置</h2>
<ul>
<li>
<p>SITE NAME：站点名称</p>
</li>
<li>
<p>SITE ID：站点ID</p>
</li>
<li>
<p>CELL NAME：小区名称</p>
</li>
<li>
<p>TAC：</p>
</li>
<li>
<p>eNB ID：4G基站ID</p>
</li>
<li>
<p>CELL ID：小区ID</p>
</li>
<li>
<p>LONGITUDE：经度</p>
</li>
<li>
<p>LATITUDE：维度</p>
</li>
<li>
<p><strong>PCI (Physical Cell Identity)</strong>: 物理小区标识，用于区分不同的小区。</p>
</li>
<li>
<p>SSB ARFCN：频点</p>
</li>
<li>
<p>Center ARFCN：标识载波中心频率</p>
</li>
<li>
<p>AZIMUTH：方位角</p>
</li>
<li>
<p>Mech. TILT：机械下倾角</p>
</li>
<li>
<p>Elec. TILT：电子下倾角</p>
</li>
<li>
<p>ANTENNA HEIGHT：天线高度</p>
</li>
<li>
<p>3dB Power Beamwidth：3dB功率波束宽度</p>
</li>
<li>
<p>gNB IP：5G基站IP</p>
</li>
<li>
<p>Outdoor（室外）、Indoor（室内）</p>
</li>
<li>
<p>SA（独立组网）、NSA（非独立组网）</p>
</li>
<li>
<p><strong>EARFCN (Extended ARFCN)</strong>: 扩展的绝对无线频道编号，用于标识LTE网络中的特定频点。</p>
</li>
<li>
<p><strong>RSRP (Reference Signal Received Power)</strong>: 参考信号接收功率，是衡量小区信号强度的一个指标。</p>
</li>
<li>
<p><strong>RSRQ (Reference Signal Received Quality)</strong>: 参考信号接收质量，是衡量小区信号质量的一个指标。</p>
</li>
<li>
<p><strong>SINR (Signal to Interference plus Noise Ratio)</strong>: 信号与干扰加噪声比，是衡量接收信号质量的一个指标。</p>
</li>
<li>
<p><strong>CQI (Channel Quality Indicator)</strong>: 信道质量指示，由UE（用户设备）报告给eNodeB（基站），用于下行链路调度。</p>
</li>
<li>
<p><strong>MCS (Modulation and Coding Scheme)</strong>: 调制和编码方案，决定了数据传输的效率和可靠性。</p>
</li>
<li>
<p><strong>PRB (Physical Resource Block)</strong>: 物理资源块，是LTE系统中资源分配的基本单位。</p>
</li>
<li>
<p><strong>TTI (Transmission Time Interval)</strong>: 传输时间间隔，是LTE系统中调度和传输的最小时间单位。</p>
</li>
<li>
<p><strong>PDSCH (Physical Downlink Shared Channel)</strong>: 物理下行共享信道，用于承载下行数据传输。</p>
</li>
</ul>
<p>| 英文 | 中文 | 说明 |</p>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 通信 - 技术 - 4G</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-4G.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-4G.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 通信 - 技术 - 4G</source>
      <description>文章摘要： 文章摘要。 相关信息 外部相关文章 内部相关文章 简介 简要说明 主要功能 高速数据传输： 4G网络相较于3G网络，数据传输速度有了显著提升，能够提供更快的上网体验，适合流媒体视频、在线游戏等应用。 低延迟： 4G网络的通信延迟较低，对于需要实时互动的应用，如视频通话、在线游戏等，提供了更好的用户体验。 广泛覆盖： 随着通信基础设施的不断完...</description>
      <category>学习笔记/技术</category>
      <pubDate>Mon, 17 Mar 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 文章摘要。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li></li>
</ul>
<p>内部相关文章</p>
<ul>
<li><a href="/hardware/Device-%E7%A7%BB%E5%8A%A8%E9%80%9A%E4%BF%A1%E5%9F%BA%E7%AB%99.html" target="_blank">Device-移动通信基站</a></li>
</ul>
</div>
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>高速数据传输：</strong> 4G网络相较于3G网络，数据传输速度有了显著提升，能够提供更快的上网体验，适合流媒体视频、在线游戏等应用。</li>
<li><strong>低延迟：</strong> 4G网络的通信延迟较低，对于需要实时互动的应用，如视频通话、在线游戏等，提供了更好的用户体验。</li>
<li><strong>广泛覆盖：</strong> 随着通信基础设施的不断完善，4G网络已经覆盖了绝大多数城市和乡村地区，为用户提供了较为稳定的网络服务。</li>
<li><strong>灵活性强：</strong> 4G网络支持多种类型的设备接入，包括智能手机、平板电脑、笔记本电脑等，满足不同用户的需求。</li>
<li><strong>多业务支持：</strong> 4G网络能够同时支持多种业务，如语音、数据和视频，提高了网络的利用率。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>覆盖盲区：</strong> 尽管覆盖广泛，但在一些偏远地区或室内环境中，4G网络的信号覆盖仍然存在盲区。</li>
<li><strong>网络容量限制：</strong> 在用户密集区域，如大型活动、体育场馆等地，4G网络可能会因为用户过多而导致网络拥堵，影响用户体验。</li>
<li><strong>能耗相对较高：</strong> 相较于2G和3G网络，4G网络的数据传输速度更高，相应的基站和终端设备的能耗也更高。</li>
<li><strong>频谱资源有限：</strong> 4G网络使用的频谱资源有限，随着用户数量的增加和数据需求的增长，频谱资源紧张的问题日益凸显。</li>
<li><strong>设备更新换代：</strong> 为了使用4G网络，用户可能需要更换支持4G的终端设备，这带来了一定的经济成本。</li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>网络结构</h2>
<h3>4G（LTE）网络架构</h3>
<ul>
<li>业务平面与控制平面完全分离化。</li>
<li>核心网趋同化，交换功能路优化。</li>
<li>网络平面化，全IP化。</li>
<li>不再需要RNC，功能转移到基站来实现。</li>
</ul>
<p>EPS结构的目标是优化系统以得到更快的数据传输速率。</p>
<p>EPS结构中没有CS域，由以下部分组成：</p>
<ul>
<li>EPC：演进的分组核心，也可称作SAE（现在SAE已经等同于EPS）</li>
<li>EUTRAN：无线接入网，也可称作为LTE。</li>
</ul>
<p>核心网提供与外部IP网络的接入功能，以及空闲状态的移动性管理、承载控制、鉴权等功能。</p>
<p>接入网实现所有与无线相关的功能，比如无线资源分配，空口RRC的建立等。</p>
<blockquote>
<p></p>
</blockquote>
<p>==待完善==</p>
<ul>
<li>ENB：无线资源管理、无线承载控制、连接状态的移动性管理、无线准入控制、测量报告收集、动态资源分配、IP包头压缩解压缩、UE附着时的MME选择、传输寻呼消息、传输广播消息。</li>
<li>MME：移动性管理、会话管理、终端附着和寻呼消息下发、用户鉴权和密钥管理、NAS层信令的加密和完整性保护、TA UST管理、P-GW/S-GW选择。</li>
<li>服务网关：分组路由和转发功能、IDLE态终结点，下行数据缓存、E-NodeB间切换的锚点、基于用户和承载的计费、路由优化和用户漫游时QoS和计费策略实现功能。</li>
<li>PDN 网关：分组路由和转发、3GPP和非3GPP网络间的Anchor功能、UE IP地址分配，接入外部PDN的网关功能、计费和QoS策略执行功能、基于业务的计费。</li>
<li>PCRF：在非漫游场景时，在HPLMN中只有一个PCRF跟UE的IP-CAN会话相关，PCRF中介Rx接口和Gx接口、在漫游场景时，并且业务流是Iocal breakoul时，有两个PCRF跟一个UE的IP-CAN会话相关。</li>
<li>HSS：归属用户服务器，存储了LTE/SAE网络中用户所有与业务相关的数据，包含鉴权中心功能，存储鉴权密钥等。</li>
</ul>
<h2>LTE无线帧结构</h2>
<p>FDD-LTE无线帧</p>
<ul>
<li>1个无线帧（10ms）有10个子帧（1ms）</li>
<li>1个子帧有2个时隙（0.5ms）</li>
</ul>
<p>TDD-LTE无线帧</p>
<ul>
<li>1个无线帧（10ms）有两个半子帧（5ms）</li>
<li>1个半帧有4个子帧（1ms）和1个特殊的子帧（1ms）</li>
<li>1个子帧有2个时隙（0.5ms）</li>
<li>特殊子帧是由DwPTS,GP,UpPTS</li>
<li>三个无论如何配置总是1ms。</li>
</ul>
<h2>常规子帧及特殊子帧配比</h2>
<p>常规子帧的配置有7种。</p>
<p>特殊子帧的配置有9种。</p>
<p>TD-LTE常用上下行配比有：1:3、2:2</p>
<p>目前特殊子帧的配置有3：9：2，9:3:2，10：2：2</p>
<p>目前F频段上下行时隙配比为1:3，特殊时隙为3:9：2（SA2，SSP5）； D频段上下行时隙配比为2:2，特殊时隙为10:2:2（SA5，SSP7）,E频段上下行时隙1:3或2:2，特殊时隙配比：10:2:2，； &nbsp;以下为配置规范：</p>
<table>
<thead>
<tr>
<th style="text-align:left">频段指示</th>
<th style="text-align:left">频段</th>
<th style="text-align:left">上下行业务子帧配置</th>
<th style="text-align:left">特殊子帧配置</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">38</td>
<td style="text-align:left">D频段</td>
<td style="text-align:left">SA 5</td>
<td style="text-align:left">SSP 7</td>
</tr>
<tr>
<td style="text-align:left">39</td>
<td style="text-align:left">F频段</td>
<td style="text-align:left">SA 2</td>
<td style="text-align:left">SSP 6, SSP 5</td>
</tr>
<tr>
<td style="text-align:left">40</td>
<td style="text-align:left">E频段</td>
<td style="text-align:left">SA 1, SA 2,SA 5</td>
<td style="text-align:left">SSP 7, SSP 4</td>
</tr>
</tbody>
</table>
<h2>属性/指标</h2>
<h3>网络标识码</h3>
<p>IMSI（国际移动用户识别码）</p>
<ul>
<li>区别移动用户的标志。</li>
<li>由MCC（移动国家码）、MNC（移动网络码）、MSIN（移动用户识别码）构成MME在UE附着和TAU进程中会用收集的IMSI定位HSS，请求HSS发出UE的基础类信息。</li>
</ul>
<p>GUTI（全球唯一临时标识）</p>
<ul>
<li>动态的由MME分配，防止IMSI在空口上进行传输。</li>
</ul>
<p>TAI（全球唯一跟踪区标识）</p>
<ul>
<li>由MCC（移动国家码）、MNC（移动网络码）、TAC（跟踪区码）构成。</li>
<li>当用户位置发生变化并且需要更新TA列表，UE会向核心网发起TA更新请求。</li>
<li>寻呼的范围是UE所在的TA下面的所有基站。（如果核心网配置了TA列表，则寻呼范围是TA列表中的所有基站）</li>
</ul>
<p>TCGI（E-UTRAN全球小区识别码）</p>
<ul>
<li>ECGI由PLMN ID和Call ID组成，用于在PLMN中全局标识一个小区。</li>
<li>PLMN（公共陆地移动网络）ID、由MCC（移动国家码）、MNC（移动网络代码）组成。</li>
<li>Cell Identity（小区标识）由ENB ID、Cell ID组成。</li>
</ul>
<p>小区标识（CI or Cell ID）</p>
<ul>
<li>用于识别PLMN里面的唯一小区。</li>
<li>系统消息中广播给手机。</li>
<li>结合PLMN ID就变成了ECGI，能够在全球范围内识别一个小区。</li>
</ul>
<p>物理小区标识（PCI or PhyCellID）</p>
<ul>
<li>用于决定下行发动机的加扰序列。</li>
<li>帮助手机分区来自不同的发动机的信号。</li>
<li>类似于3G中的扰码范围从0到503，共504个（分为168组，每组3个）。</li>
</ul>
<h3>跟踪区（Tracking Area）</h3>
<ul>
<li>LTE/SAE系统为了优化移动性管理流程和减少信令开销，方便UE的位置管理新设立的概念。</li>
</ul>
<h2>LTE传输模式</h2>
<p>‌LTE目前使用的传输模式包括以下几种‌：</p>
<ul>
<li>TM1 - <strong>单天线端口传输‌</strong>：适用于单天线传输的场合‌。</li>
<li>TM2 - <strong>开环发射分集‌</strong>：适用于小区边缘信道情况复杂、干扰较大的情况，不需要反馈PMI，适合于高速移动的情况‌。</li>
<li>TM3 - <strong>开环空间复用‌</strong>：适用于终端高速移动的情况，不需要反馈PMI‌。</li>
<li>TM4 - <strong>闭环空间复用‌</strong>：适用于信道条件较好的场合，需要反馈PMI，用于提供高的数据率传输‌。</li>
<li>TM5 - <strong>MU-MIMO传输模式‌</strong>：主要用于提高小区的容量‌。</li>
<li>TM6 - <strong>闭环发射分集‌</strong>：适用于小区边缘情况，需要反馈PMI‌。</li>
<li>TM7 - <strong>单流波束赋形‌</strong>：适用于小区边缘，能够有效对抗干扰‌。</li>
<li>TM8 - <strong>双流波束赋形‌</strong>：适用于小区边缘也可以应用于其他场景‌。</li>
<li>TM9 - <strong>多层传输模式‌</strong>：支持最多8层的传输，主要用于提升数据传输速率‌。</li>
</ul>
<p>这些传输模式的选择和配置依赖于信道条件、用户设备（UE）的反馈和网络负载。</p>
<h2>应用场景</h2>
<h2>关键技术</h2>
<h2>测试业务</h2>
<h3>VoLTE（Voice over LTE）</h3>
<ul>
<li>基于4G网络的高品质语音和视频通话服务。</li>
</ul>
<p>影响因素</p>
<ul>
<li><strong>丢包</strong>：丢包率对语音MOS分基本是线性关系，影响较大。</li>
<li><strong>抖动</strong>：语音包抖动超过一定值，导致丢包才会明显影响MOS分，如jitter超过100ms。</li>
<li><strong>时延</strong>：端到端时延大到一定值，导致丢包才会明显影响MOS分。</li>
</ul>
<h2>测试项目</h2>
<h3>单站验证</h3>
<h3>簇优化</h3>
<p>详细总结：<a href="/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-4G-%E6%B5%8B%E8%AF%95%E9%A1%B9%E7%9B%AE-%E7%B0%87%E4%BC%98%E5%8C%96.html" target="_blank">Technology-通信-技术-4G-测试项目-簇优化</a></p>
<h3>LTE双层网优化</h3>
<h2>问题总结</h2>
<h2>专业术语</h2>
<p>详细总结：<a href="/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-4G-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-%E4%B8%93%E4%B8%9A%E6%9C%AF%E8%AF%AD.html" target="_blank">Technology-通信-技术-4G-查询手册-专业术语</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 通信 - 技术 - 5G - 查询手册 - 专业术语</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-5G-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-%E4%B8%93%E4%B8%9A%E6%9C%AF%E8%AF%AD.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-5G-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-%E4%B8%93%E4%B8%9A%E6%9C%AF%E8%AF%AD.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 通信 - 技术 - 5G - 查询手册 - 专业术语</source>
      <description>文章摘要： 文章摘要。 相关信息 外部相关文章 内部相关文章 UE（User Equipment）：用户设备/终端设备。 RAN（Radio Access Network）：接入网。 CN（Core Network）：核心网。 gNB：5G基站。 MCG（Master Cell group）：主小区组 SCG（Secondary Cell group）...</description>
      <category>学习笔记/技术</category>
      <pubDate>Mon, 17 Mar 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 文章摘要。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li></li>
</ul>
<p>内部相关文章</p>
<ul>
<li><a href="/note/Technology-%E9%80%9A%E4%BF%A1-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-%E4%B8%93%E4%B8%9A%E6%9C%AF%E8%AF%AD.html" target="_blank">Technology-通信-查询手册-专业术语</a></li>
<li><a href="/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-4G-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-%E4%B8%93%E4%B8%9A%E6%9C%AF%E8%AF%AD.html" target="_blank">Technology-通信-技术-4G-查询手册-专业术语</a></li>
</ul>
</div>
<ul>
<li>
<p>UE（User Equipment）：用户设备/终端设备。</p>
</li>
<li>
<p>RAN（Radio Access Network）：接入网。</p>
</li>
<li>
<p>CN（Core Network）：核心网。</p>
</li>
<li>
<p>gNB：5G基站。</p>
</li>
<li>
<p>MCG（Master Cell group）：主小区组</p>
</li>
<li>
<p>SCG（Secondary Cell group）：辅小区组</p>
</li>
<li>
<p>PCell（Primary Cell）：主小区</p>
</li>
<li>
<p>SCell（Secondary Cell）：辅小区</p>
</li>
</ul>
<h2>基站参数配置</h2>
<ul>
<li>
<p>SITE NAME：站点名称</p>
</li>
<li>
<p>SITE ID：站点ID</p>
</li>
<li>
<p>CELL NAME：小区名称</p>
</li>
<li>
<p>TAC：</p>
</li>
<li>
<p>gNB ID：5G基站ID</p>
</li>
<li>
<p>CELL ID：小区ID</p>
</li>
<li>
<p>LONGITUDE：经度</p>
</li>
<li>
<p>LATITUDE：维度</p>
</li>
<li>
<p><strong>PCI (Physical Cell Identity)</strong>: 物理小区标识，用于区分不同的小区。</p>
</li>
<li>
<p>SSB ARFCN：频点</p>
</li>
<li>
<p>Center ARFCN：标识载波中心频率</p>
</li>
<li>
<p>AZIMUTH：方位角</p>
</li>
<li>
<p>Mech. TILT：机械下倾角</p>
</li>
<li>
<p>Elec. TILT：电子下倾角</p>
</li>
<li>
<p>ANTENNA HEIGHT：天线高度</p>
</li>
<li>
<p>3dB Power Beamwidth：3dB功率波束宽度</p>
</li>
<li>
<p>gNB IP：5G基站IP</p>
</li>
<li>
<p>Outdoor（室外）、Indoor（室内）</p>
</li>
<li>
<p>SA（独立组网）、NSA（非独立组网）</p>
</li>
<li>
<p><strong>EARFCN (Extended ARFCN)</strong>: 扩展的绝对无线频道编号，用于标识LTE网络中的特定频点。</p>
</li>
<li>
<p><strong>RSRP (Reference Signal Received Power)</strong>: 参考信号接收功率，是衡量小区信号强度的一个指标。</p>
</li>
<li>
<p><strong>RSRQ (Reference Signal Received Quality)</strong>: 参考信号接收质量，是衡量小区信号质量的一个指标。</p>
</li>
<li>
<p><strong>SINR (Signal to Interference plus Noise Ratio)</strong>: 信号与干扰加噪声比，是衡量接收信号质量的一个指标。</p>
</li>
<li>
<p><strong>CQI (Channel Quality Indicator)</strong>: 信道质量指示，由UE（用户设备）报告给eNodeB（基站），用于下行链路调度。</p>
</li>
<li>
<p><strong>MCS (Modulation and Coding Scheme)</strong>: 调制和编码方案，决定了数据传输的效率和可靠性。</p>
</li>
<li>
<p><strong>PRB (Physical Resource Block)</strong>: 物理资源块，是LTE系统中资源分配的基本单位。</p>
</li>
<li>
<p><strong>TTI (Transmission Time Interval)</strong>: 传输时间间隔，是LTE系统中调度和传输的最小时间单位。</p>
</li>
<li>
<p><strong>PDSCH (Physical Downlink Shared Channel)</strong>: 物理下行共享信道，用于承载下行数据传输。</p>
</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 通信 - 技术 - 5G - 测试项目 - 单站验证</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-5G-%E6%B5%8B%E8%AF%95%E9%A1%B9%E7%9B%AE-%E5%8D%95%E7%AB%99%E9%AA%8C%E8%AF%81.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-5G-%E6%B5%8B%E8%AF%95%E9%A1%B9%E7%9B%AE-%E5%8D%95%E7%AB%99%E9%AA%8C%E8%AF%81.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 通信 - 技术 - 5G - 测试项目 - 单站验证</source>
      <description>文章摘要： 文章摘要。 介绍 作用 确保基站设备状态。（确保基站是开通状态） 核查基站性能指标。（确保性能达标） 核查基站内小区是否接反。 核查基站内外切换问题。（小区与小区之间的切换） 核查基站覆盖情况。 所需物品 携带介绍信、个人身份证、工卡。 携带测试手机、GPS、加密狗、个人电脑。 携带逆变器。（确保电脑电量充足） （建议）携带移动电源、充电线...</description>
      <category>学习笔记/技术</category>
      <pubDate>Mon, 17 Mar 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 文章摘要。</p>
<!-- more -->
<h2>介绍</h2>
<blockquote>
<p></p>
</blockquote>
<h3>作用</h3>
<ol>
<li>确保基站设备状态。（确保基站是开通状态）</li>
<li>核查基站性能指标。（确保性能达标）</li>
<li>核查基站内小区是否接反。</li>
<li>核查基站内外切换问题。（小区与小区之间的切换）</li>
<li>核查基站覆盖情况。</li>
</ol>
<h3>所需物品</h3>
<ul>
<li>携带介绍信、个人身份证、工卡。</li>
<li>携带测试手机、GPS、加密狗、个人电脑。</li>
<li>携带逆变器。（确保电脑电量充足）</li>
<li>（建议）携带移动电源、充电线、U盘、扩展坞、水杯、雨伞、应急食物、现金。</li>
</ul>
<h2>关注指标</h2>
<ul>
<li>RSRP、SINR、PCI、上传下载速率、频点、Ping时延等</li>
</ul>
<h2>流程和注意事项</h2>
<h3>前 - 测试准备工作</h3>
<p>测试项</p>
<ul>
<li>获取现网数据：网优工程师从无线工程师获取现网配置数据。</li>
<li>核查数据是否一致：检查实际数据和规划数据是否一致。</li>
</ul>
<p>注意事项</p>
<ul>
<li>请认真查看下达任务时提供的“工参”文件。</li>
<li>寻找到正确地点的正确基站和小区。</li>
<li>环绕一圈，首次观察小区PCI是否出现基站馈线接反。</li>
</ul>
<h3>前 - 基站设备检查</h3>
<p>测试项</p>
<ul>
<li>基站安装检查</li>
<li>基站故障检查</li>
<li>基站告警检查</li>
</ul>
<p>注意事项</p>
<ul>
<li>通知<strong>后台</strong>查看当前是否有影响业务的报警。（确保不存在影响业务的告警）</li>
<li>上站，确保上站效率，并通知后台检查5G各参数配置、SCTP链路等。</li>
<li>NSA组网下需确认LTE和5G小区是否存在告警以及问题是否解决。</li>
<li>LTE和5G小区的X2口是否正常建立。</li>
</ul>
<h3>前 - 基站参数检查</h3>
<p>测试项</p>
<ul>
<li>检查“频点、TAC、PCI、PRACH、经度、纬度、方位角、下倾角，天线挂高”等参数与规划数据一致，确保邻区完整。</li>
</ul>
<p>注意事项</p>
<ul>
<li>现场核查站点经纬度，小区方位角，下倾角，挂高等信息，如规划有误，记录并更新。</li>
</ul>
<h3>中 - 现场照片收集</h3>
<p>测试项</p>
<ul>
<li>天面照片、配电信息、有无空余天支等</li>
</ul>
<p>注意事项</p>
<ul>
<li>照片应清晰，能分辨出天线安装位置，尤其是是否有空余抱杆信息、能分辨出楼顶抱杆、楼顶增高架、铁塔、管塔、美化树等信息。</li>
</ul>
<h3>中 - 定点性能验证（CQT测试）</h3>
<p>测试项</p>
<ul>
<li>Ping时延、FTP上传测试、FTP下载测试、附着（入网测试）/去附着（退网测试）/（attach\dettach）（模拟飞行模式）、语音业务、切换测试</li>
</ul>
<p>注意事项</p>
<ul>
<li>验证测试结果是否达标。</li>
<li>一种类型测试，按小区记录log，每个站点（按3个小区计算）共计21个log，log应命名规范统一。</li>
</ul>
<h3>中 - 路测覆盖验证（DT测试）</h3>
<p>测试项</p>
<ul>
<li>进行站点的绕圈覆盖路测，验证该站点三扇区覆盖范围是否合理，是否存在天馈接反的情况，是否存在越区覆盖，切换功能是否正常。</li>
</ul>
<p>注意事项</p>
<ul>
<li>不但要验证同站3小区之间的切换是否正常，还应验证每个小区对周围站点的切换是否正常，共计1个log。</li>
</ul>
<h3>中 - 问题报告分析</h3>
<p>测试项</p>
<ul>
<li><strong>路测过程中</strong>，如站点小区存在接反情况，需联系施工队进行处理；如小区存在覆盖过远或覆盖不足情况，需通过RF调整进行覆盖优化；如存在切换问题，需核查4G/5G邻区是否完整，如有缺失邻区，及时添加，并进行复测。</li>
<li><strong>CQT测试时</strong>，需注意各项测试指标是否达标，如不达标需要进行定位分析，提出解决方案，并及时处理，处理后，及时进行复测。</li>
<li><strong>在RF优化调整过程中</strong>，如存在优化调整受限的小区（美化天线、安装不规范等）情况，需联系施工队进行整改。</li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<h3>后 - 数据收集整理</h3>
<p>测试项</p>
<ul>
<li>收集相关log，共计22个，天面照片1张。</li>
<li>对提交的照片、log命名、数量、遗漏测试项做好登记，方便后期补测，对补测数据及时做好更新。</li>
</ul>
<p>注意事项</p>
<ul>
<li>数据整理命名规范。</li>
<li>站点单验完成，相关数据应当天上交专人进行收集整理。</li>
<li>做好遗留问题记录，方便二次上站补测，建议以邮件形式发送，方便日后备查。</li>
<li>对单验通过提交的log及时做好整理及记录工作，尤其做好缺失log登记，方便补测。</li>
<li>主要单站log包中，<strong>只保留达标的log</strong>，<strong>不达标的log应及时删除</strong>，即每个站点总log数不能超过22个。</li>
</ul>
<h3>后 - 输出单验报告</h3>
<p>测试项</p>
<ul>
<li>按照单验新模板要求整理“<strong>单站验证报告</strong>”，发现测试未达标项，做好记录并及时补测。</li>
</ul>
<p>注意事项</p>
<ul>
<li>根据报告模板规范。</li>
<li>报告所有必填项应填报真实、准确，不得遗漏，如有公式，需去掉公式。</li>
<li>报告名称应命名统一，且统一按照新模板输出。</li>
<li>补测数据及时更新，确保报告内容与log一致，1个站点只能维护1个报告。</li>
<li>补测人员上站前应从负责人处获取该站点所有问题，做到一次上站所有问题全部清除，避免2次上站。</li>
</ul>
<h2>测试业务和指标</h2>
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<p>测试业务的达标指标根据具体项目要求来定。</p>
</div>
<h3>CQT测试 - Ping时延（Ping）</h3>
<p>测试要求</p>
<ul>
<li><strong>32Bytes小包</strong>：ping 100次，间隔2秒，时延平均小于15ms，成功率大于99%。</li>
<li><strong>2000Bytes大包</strong>：ping 100次，间隔2秒，时延平均小于17ms，成功率大于99%。</li>
</ul>
<p>LOG要求</p>
<ul>
<li>每个小区打包和小包各1个。（共6个）</li>
</ul>
<p>注意事项</p>
<ul>
<li>小包时延多在15~20ms之间。</li>
<li>大包时延多在20~30ms之间。</li>
<li>仅统计RAN侧时延，需扣除传输链路和核心网侧时延。</li>
</ul>
<h3>CQT测试 - 下载吞吐量（FTP Download）</h3>
<p>测试要求</p>
<ul>
<li><strong>好点</strong>：<code>-80dBm &lt;= SS-RSRP &lt; -70dBm</code>、<code>15dB &lt;= SS-SINR &lt; 20dB</code>、<code>64/32通道 &gt; 800Mbps</code>、<code>8通道 &gt;400Mbps</code>、<code>4通道 &gt; 260Mbps</code></li>
<li><strong>差点</strong>：<code>-100dBm &lt;= SS-RSRP &lt; -90dBm</code>、<code>-5dB &lt;= SS-SINR &lt; 0dB</code>、<code>64/32通道 &gt; 90Mbps</code>、<code>8通道 &gt;45Mbps</code>、<code>4通道 &gt; 30Mbps</code></li>
</ul>
<p>LOG要求</p>
<ul>
<li>每个小区1个。（共3个）</li>
</ul>
<p>注意事项</p>
<ul>
<li>速率稳定后开始记录LOG，保持30s以上。</li>
</ul>
<h3>CQT测试 - 上传吞吐量（FTP Upload）</h3>
<p>测试要求</p>
<ul>
<li><strong>好点</strong>：<code>-80dBm &lt;= SS-RSRP &lt; -70dBm</code>、<code>15dB &lt;= SS-SINR &lt; 20dB</code>、<code>64/32通道 &gt; 120Mbps</code>、<code>8通道 &gt;60Mbps</code>、<code>4通道 &gt; 50Mbps</code></li>
<li><strong>差点</strong>：<code>-100dBm &lt;= SS-RSRP &lt; -90dBm</code>、<code>-5dB &lt;= SS-SINR &lt; 0dB</code>、<code>64/32/8通道 &gt; 1Mbps</code>、<code>4通道 &gt; 0.8Mbps</code></li>
</ul>
<p>LOG要求</p>
<ul>
<li>每个小区1个。（共3个）</li>
</ul>
<p>注意事项</p>
<ul>
<li>速率稳定后开始记录LOG，保持30s以上。</li>
</ul>
<h3>CQT测试 - 语音（CSFB）</h3>
<p>测试要求</p>
<ul>
<li><strong>EPS FB（主叫）</strong>：成功率<code>100%</code>，呼叫建立时延<code>小于5秒</code>。</li>
<li><strong>EPS FR（被叫）</strong>：成功率<code>100%</code>，返回时延<code>小于2.5秒</code>。</li>
</ul>
<p>LOG要求</p>
<ul>
<li>每个小区1个。（共3个）</li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<h3>DT覆盖（环测/路测）</h3>
<p>==待完善==</p>
<p>测试要求</p>
<ul>
<li>采集站点小区的PCI,RSRP,SINR、上传速率，下载速率等。</li>
<li>验证基站上的小区参数是否按规划要求设置。</li>
<li>测试小区是否有天馈线接反现象。</li>
<li>测试小区与周边小区是否正常切换。</li>
</ul>
<p>LOG要求</p>
<ul>
<li>共2个。（ping 2000byte和ping 32byte）</li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<h2>数据文件和规范</h2>
<h3>照片命名格式</h3>
<table>
<thead>
<tr>
<th style="text-align:center">照片分类编号</th>
<th style="text-align:center">照片分类</th>
<th style="text-align:left">命名规范</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">1</td>
<td style="text-align:center">站址全景</td>
<td style="text-align:left">XX基站_01_站址全景.jpg</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 通信 - 技术 - 5G</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-5G.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-5G.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 通信 - 技术 - 5G</source>
      <description>文章摘要： 文章摘要。 相关信息 外部相关文章 内部相关文章 ，5G通信基站硬件设备总结，5G技术依赖无线基站硬件设备。 简介 简要说明 5G技术是第五代的无线通信技术， 相较于4G网络在速度、容量、时延等方面有显著提升。 主要功能 高吞吐率：5G网络能提供更高的数据传输速度，峰值速率可达数十Gbps。 低时延：5G网络具有更短的响应时间，适合需要即时...</description>
      <category>学习笔记/技术</category>
      <pubDate>Mon, 17 Mar 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 文章摘要。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li></li>
</ul>
<p>内部相关文章</p>
<ul>
<li><a href="/hardware/Device-%E7%A7%BB%E5%8A%A8%E9%80%9A%E4%BF%A1%E5%9F%BA%E7%AB%99.html" target="_blank">Device-移动通信基站</a></li>
<li><a href="/hardware/Device-%E7%A7%BB%E5%8A%A8%E9%80%9A%E4%BF%A1%E5%9F%BA%E7%AB%99-5G.html" target="_blank">Device-移动通信基站-5G</a>，5G通信基站硬件设备总结，5G技术依赖无线基站硬件设备。</li>
</ul>
</div>
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>5G技术是第五代的无线通信技术，</li>
<li>相较于4G网络在速度、容量、时延等方面有显著提升。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>高吞吐率</strong>：5G网络能提供更高的数据传输速度，峰值速率可达数十Gbps。</li>
<li><strong>低时延</strong>：5G网络具有更短的响应时间，适合需要即时响应的应用。</li>
<li><strong>支持大量连接</strong>：5G能支持更多设备同时连接，有利于物联网的发展。</li>
<li><strong>低能耗</strong>：5G技术旨在提高能效，减少设备能耗。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>网络覆盖</strong>：5G网络覆盖可能不如4G广泛，特别是在初期部署阶段。</li>
<li><strong>设备兼容性</strong>：使用5G网络需要配备支持5G的设备和基础设施。</li>
<li><strong>隐私与安全</strong>：随着连接设备数量的增加，数据隐私和安全问题需要更多关注。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>eMBB</strong>（Enhance Mobile Broadband）：增强移动宽带。</li>
<li><strong>uRLLC</strong>（Ultra Reliable &amp; Low Latency Communication）：高可靠低延时通信。</li>
<li><strong>MMTC</strong>（Massive Machine Type Communication）：海量机器类通信。</li>
<li><strong>智能家居</strong>：5G可以支持家庭中多种智能设备的连接和通信。</li>
<li><strong>智能交通系统</strong>：5G的低时延特性使其适合自动驾驶汽车等智能交通系统。</li>
<li><strong>远程医疗</strong>：5G的高速度和低时延支持远程诊断和手术。</li>
<li><strong>工业自动化</strong>：5G网络可支持工业环境中大量设备的连接，提高生产效率。</li>
</ul>
<h2>5G频谱分配</h2>
<ul>
<li></li>
</ul>
<h2>网络结构</h2>
<h3>5G（NR）组网方式</h3>
<p>5G有两种组网方式，分别是NSA（非独立组网）和SA（独立组网）。</p>
<ul>
<li>NSA（非独立组网）：采用双连接方式，5G NR控制面锚定于4G LTE，并利旧4G核心网EPC。</li>
<li>SA（独立组网）：5G NR直接接入5G核心网（NG Core），它不再依赖4G，是完整独立的5G网络。</li>
</ul>
<blockquote>
<p></p>
</blockquote>
<h3>5G NSA（非独立组网）</h3>
<ul>
<li>这种类型的5G网络依赖于现有的4G LTE网络基础设施。5G NSA设备在5G网络可用时使用5G频谱，而在5G网络不可用时则回退到4G LTE网络。</li>
</ul>
<h3>5G SA（独立组网）</h3>
<ul>
<li>与5G NSA不同，5G SA网络是完全独立的，拥有自己的5G核心网和无线接入网。这种类型的网络提供了更高的性能和更低的延迟，是5G网络的长期发展方向。</li>
</ul>
<h3>5G NR（新无线电）</h3>
<ul>
<li>NR是5G网络的无线接口标准，它定义了5G网络的无线传输技术。无论是NSA还是SA，5G NR都是实现5G无线通信的技术基础。</li>
</ul>
<h3>5G Standalone（独立）</h3>
<ul>
<li>这通常指的是5G SA网络，即完全独立的5G网络，不依赖于4G LTE网络。</li>
</ul>
<h3>5G Advanced</h3>
<ul>
<li>这是5G技术的未来版本，预计将提供比当前5G SA网络更高的速度和更低的延迟。</li>
</ul>
<h2>关键技术</h2>
<h3>多址技术/多路复用</h3>
<ul>
<li>多路复用技术是一种允许在同一传输介质上同时传输多路信号的技术。这样做可以有效地提高传输线路的利用率，降低通信成本。</li>
</ul>
<p>详细总结：<a href="/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-%E5%A4%9A%E8%B7%AF%E5%A4%8D%E7%94%A8.html" target="_blank">Technology-通信-技术-多路复用</a></p>
<h3>高频段传输</h3>
<ul>
<li>==待完善==</li>
</ul>
<h3>全双工技术</h3>
<ul>
<li>==待完善==</li>
</ul>
<h3>密集网络与D2D通信</h3>
<ul>
<li>==待完善==</li>
</ul>
<p>超密集组网（UDN）提升容量，设备直连（D2D）降低基站负载，适用于物联网场景</p>
<h2>属性/关键指标</h2>
<h3>关键指标</h3>
<table>
<thead>
<tr>
<th style="text-align:left">项目类型</th>
<th style="text-align:left">定义</th>
<th style="text-align:left">基准值</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">覆盖率</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
<p>时延</p>
<p>吞吐率</p>
<p>连接数</p>
<p>网络架构</p>
<p>RSRP（Reference Singnal Received Power，参考信号接收功率）</p>
<ul>
<li>终端接收到的 “小区” 公共参考信号（CRS）功率值，数值为车辆带宽内单个RE功率的线性平均值。</li>
<li>该 “小区” 有用信号的强度。</li>
</ul>
<p>RSRQ（参考信号接收质量）</p>
<ul>
<li></li>
</ul>
<p>SINR（Signal to Interferencee&amp;Noise Ratio，信噪比）</p>
<ul>
<li>接收到服务小区（天线）的信号的质量。</li>
<li>信噪比 = 有用信号功率 / （干扰 + 噪声功率）</li>
</ul>
<p>PCI（Physical Cell Identifier，物理小区识别码）</p>
<ul>
<li>LTE中终端以此区分不同小区（天线）的无线信号。</li>
<li>LTE系统提供504个PCI（0~503）。</li>
</ul>
<p><strong>小区峰值速率</strong>：10Gbps ~ 20Gbps</p>
<p><strong>用户体验速率</strong>：100Mbps ~ 1000Mbps</p>
<p><strong>网络延迟</strong>：1ms</p>
<p><strong>移动速度支持</strong>：500Km/h</p>
<p><strong>流量密度</strong>：10Tbps/Km^2^</p>
<p><strong>连接密度</strong>：100万/Km^2^</p>
<p>==调度数量？？？==</p>
<h3>参数</h3>
<ul>
<li>==待完善==</li>
</ul>
<p><strong>以网络架构来分类</strong>：5G NR（）、LTE（）、TD-SCDMA（）、WCDMA（）、CDMA（）、GSM（）、Common（）、Data Service（）、Scanner（）</p>
<h3>数据</h3>
<ul>
<li>==待完善==</li>
</ul>
<h3>基站</h3>
<ul>
<li>==待完善==</li>
</ul>
<h3>事件</h3>
<ul>
<li>==待完善==</li>
</ul>
<h3>GPS轨迹</h3>
<ul>
<li>==待完善==</li>
</ul>
<h3>区域</h3>
<ul>
<li>==待完善==</li>
</ul>
<h2>无线信道接入方法</h2>
<ul>
<li>正向信道（下行链路）：从基站到移动终端的通信。</li>
<li>反向信道（上行链路）：从移动终端到基站的通信。</li>
<li>FDD（频分双工）：如果正向信道和反向信道采用不同的载波频率，而且间隔足够大。</li>
<li>TDD（时分双工）：如果正向信道和反向信道次啊用相同的载波频率，但采用交替的时隙。</li>
</ul>
<h2>基站/小区切换</h2>
<h3>切换发生的过程（步骤）</h3>
<p>测量、判决、执行</p>
<h3>切换类事件</h3>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>类似<strong>软件架构</strong>中的<strong>事件驱动架构</strong></p>
</div>
<p>A1事件（基于服务小区质量的切换）</p>
<ul>
<li><strong>描述</strong>：服务小区质量高于一个绝对门限，用于关闭正在进行的频间测量。</li>
<li><strong>门限值</strong>：<code>-90dBm</code></li>
<li><strong>作用</strong>：当服务小区的信号质量很好时，不需要进行频间测量，节省UE的资源和网络的信令负荷。</li>
</ul>
<p>A2事件（基于服务小区质量的切换）</p>
<ul>
<li><strong>描述</strong>：服务小区质量低于一个绝对门限，用于打开频间测量。</li>
<li><strong>门限值</strong>：<code>-95dBm</code></li>
<li><strong>作用</strong>：当服务小区的信号质量下降到一定程度，UE开始测量其他频段的小区，准备可能的切换。</li>
</ul>
<p>A3事件（基于邻区质量的切换）</p>
<ul>
<li><strong>描述</strong>：邻区比服务小区质量高于一个门限，用于频内/频间的基于覆盖的切换。</li>
<li><strong>门限值</strong>：通常是Offset值，<code>Offset=3，CIO（-10至+10）越大越容易切，越小越难切</code></li>
<li><strong>作用</strong>：当邻区的信号质量比服务小区好一定量时，触发基于覆盖的切换。</li>
</ul>
<p>A4事件（基于邻区质量的切换）</p>
<ul>
<li><strong>描述</strong>：异频邻区质量高于一个绝对门限，用于负载均衡的基于负荷的切换。</li>
<li><strong>门限值</strong>：<code>-100dBm</code></li>
<li><strong>作用</strong>：当异频邻区的信号质量足够好时，可以基于网络负荷情况进行切换。</li>
</ul>
<p>A5事件（基于邻区质量的切换）</p>
<ul>
<li><strong>描述</strong>：服务小区质量低于一个绝对门限，并且异频邻区质量高于一个绝对门限，基于覆盖切换。</li>
<li><strong>门限值</strong>：服务小区<code>-105dBm</code>、异频邻<code>-110dBm</code></li>
<li><strong>作用</strong>：用于频内/频间的基于覆盖的切换，可用于负载均衡。结合服务小区和异频邻区的信号质量，决定是否进行切换。</li>
</ul>
<p>B1事件（基于异频系统邻区切换）</p>
<ul>
<li><strong>描述</strong>：异频系统邻区质量比绝对门限好。</li>
<li><strong>门限值</strong>：</li>
<li><strong>作用</strong>：用于不同系统（如4G到5G）之间的切换。</li>
</ul>
<p>B2事件（基于异频系统邻区切换）</p>
<ul>
<li><strong>描述</strong>：服务小区质量低于一个绝对门限，并且异频系统邻区质量高于一个绝对门限。</li>
<li><strong>门限值</strong>：</li>
<li><strong>作用</strong>：基于服务小区和异频系统邻区的信号质量，触发系统间的切换。</li>
</ul>
<h2>测试项目</h2>
<ul>
<li>5G网络优化的<strong>测试项目</strong>包含多个<strong>测试业务</strong>。</li>
<li>形成“测试→优化→再测试”的闭环流程。</li>
</ul>
<p>详细总结：<a href="/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-5G-%E6%B5%8B%E8%AF%95%E9%A1%B9%E7%9B%AE.html" target="_blank">Technology-通信-技术-5G-测试项目</a></p>
<h2>测试业务</h2>
<ul>
<li><strong>测试业务</strong>是最小测试单元，<strong>测试项目</strong>包含多个测试业务。</li>
</ul>
<p>详细总结：<a href="/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-5G-%E6%B5%8B%E8%AF%95%E4%B8%9A%E5%8A%A1.html" target="_blank">Technology-通信-技术-5G-测试业务</a></p>
<h2>问题总结</h2>
<ul>
<li>根据<strong>网络层次</strong>进行类别：基站设备、基站配置、基站资源、无线环境、终端设备、数据源。</li>
<li>根据<strong>问题类型</strong>进行分类：覆盖类、接入类、切换类、吞吐量类、时延类、干扰类</li>
</ul>
<p>详细总结：<a href="/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-5G-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93.html" target="_blank">Technology-通信-技术-5G-问题总结</a></p>
<h2>专业术语</h2>
<ul>
<li>有加SS代表是5G NR。</li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>对于NSA网络，手机先接入LTE，然后通过LTE的测量消息添加NR为LTE的辅小区，因此，LTE为主小区俗称<strong>锚点/MN</strong>，NR为辅小区俗称<strong>腿/SN</strong>。</p>
<ul>
<li>锚点/MN：LTE为主小区。</li>
<li>腿/SN：NR为辅小区。</li>
</ul>
</div>
<p>详细总结：<a href="/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-5G-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-%E4%B8%93%E4%B8%9A%E6%9C%AF%E8%AF%AD.html" target="_blank">Technology-通信-技术-5G-查询手册-专业术语</a></p>
<p>MCG（Master Cell group）：主小区组。</p>
<p>SCG（Secondary Cell group）：辅小区组。</p>
<p>PCell（Primary Cell）：主小区。</p>
<p>SCell（Secondary Cell）：辅小区。</p>
<p>UE（User Equipment）：用户设备。</p>
<p>RRC（Radio Resource Control）：无线资源控制。</p>
<ul>
<li>RRC的状态：空闲状态（RRC_IDLE）、连接状态（RRC_CONNECTED）</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">参数</th>
<th style="text-align:left">值</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">Network Type</td>
<td style="text-align:left">NR</td>
<td style="text-align:left">NR标识5G，LTE表示4G</td>
</tr>
<tr>
<td style="text-align:left">Network State</td>
<td style="text-align:left">NR Connected</td>
<td style="text-align:left">网络状态，NRConnected表示连接状态，NR Idle表示空闲</td>
</tr>
<tr>
<td style="text-align:left">PLMN1/PLMN2</td>
<td style="text-align:left">46000</td>
<td style="text-align:left">公共陆地移动网络，PLMN=MCC+MNC</td>
</tr>
<tr>
<td style="text-align:left">MCC/MNC/TAC</td>
<td style="text-align:left">460/00/1331211</td>
<td style="text-align:left">移动国家码/移动网络码/跟踪区域码</td>
</tr>
<tr>
<td style="text-align:left">Band</td>
<td style="text-align:left">41</td>
<td style="text-align:left">频点的Band</td>
</tr>
<tr>
<td style="text-align:left">NCI</td>
<td style="text-align:left">51629768707</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">gNodeB/Sector ID</td>
<td style="text-align:left">12604924/3</td>
<td style="text-align:left">基站标识/小区标识</td>
</tr>
<tr>
<td style="text-align:left">SSB Freq(MHz)</td>
<td style="text-align:left">2524.95</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">SSB ARFCN/PCI</td>
<td style="text-align:left">504990/363</td>
<td style="text-align:left">5G频点测量号（60M带宽为504750，100M带宽为504990）/物理小区标识</td>
</tr>
<tr>
<td style="text-align:left">PointA/Cent. ARFCN</td>
<td style="text-align:left">503172/513000</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">SSB GSCN</td>
<td style="text-align:left">6312</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">Bandwidth(M/RB)</td>
<td style="text-align:left">100/273</td>
<td style="text-align:left">带宽/RB数，60M带宽为162，100M带宽为273</td>
</tr>
<tr>
<td style="text-align:left">SC Spacing</td>
<td style="text-align:left">30kHz</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">SSB Beam Num</td>
<td style="text-align:left">8</td>
<td style="text-align:left">波束赋形数量</td>
</tr>
<tr>
<td style="text-align:left">SSB Periodicity</td>
<td style="text-align:left">20 ms</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">Slot Config(DL/UL)</td>
<td style="text-align:left">7/2</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">Rank Indicator DL</td>
<td style="text-align:left">2</td>
<td style="text-align:left">下载速率流数，最大4流</td>
</tr>
<tr>
<td style="text-align:left">Rank Indicator UL</td>
<td style="text-align:left">2</td>
<td style="text-align:left">上传速率流数，最大2流</td>
</tr>
<tr>
<td style="text-align:left">Grant Count DL/s</td>
<td style="text-align:left">1599</td>
<td style="text-align:left">下载调度数，最大1600</td>
</tr>
<tr>
<td style="text-align:left">Grant Count UL/s</td>
<td style="text-align:left">203</td>
<td style="text-align:left">上传调度数，最大400</td>
</tr>
<tr>
<td style="text-align:left">SS-RSRP</td>
<td style="text-align:left"></td>
<td style="text-align:left">5G信号强度，好点测试要求-93dBm以上</td>
</tr>
<tr>
<td style="text-align:left">SS-SINR</td>
<td style="text-align:left"></td>
<td style="text-align:left">5G信号质量，好点测试要求10dB以上</td>
</tr>
<tr>
<td style="text-align:left">CSI-RSRP</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">CSI-SINR</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">PDSCH DM-RSSI</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">PDSCH DM-SINR</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">Avg CQI</td>
<td style="text-align:left"></td>
<td style="text-align:left">信道质量指示</td>
</tr>
<tr>
<td style="text-align:left">PRACH TxPower</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">PUCCH TxPower</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">PUSCH TxPower</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">Most Modul DL/s</td>
<td style="text-align:left"></td>
<td style="text-align:left">下行调制解调方式</td>
</tr>
<tr>
<td style="text-align:left">Most Modul UL/s</td>
<td style="text-align:left"></td>
<td style="text-align:left">上行调制解调方式</td>
</tr>
<tr>
<td style="text-align:left">RB Num DL/Slot</td>
<td style="text-align:left"></td>
<td style="text-align:left">下载业务时每秒钟调度PRB数</td>
</tr>
<tr>
<td style="text-align:left">RB Num UL/Slot</td>
<td style="text-align:left"></td>
<td style="text-align:left">上传业务时每秒钟调度PRB数</td>
</tr>
<tr>
<td style="text-align:left">MCS Avg DL</td>
<td style="text-align:left"></td>
<td style="text-align:left">下行平均MCS</td>
</tr>
<tr>
<td style="text-align:left">MCS Avg UL</td>
<td style="text-align:left"></td>
<td style="text-align:left">上行平均MCS</td>
</tr>
<tr>
<td style="text-align:left">PDSCH BLER(%)</td>
<td style="text-align:left"></td>
<td style="text-align:left">下行误码率</td>
</tr>
<tr>
<td style="text-align:left">PUSCH BLER(%)</td>
<td style="text-align:left"></td>
<td style="text-align:left">上行误码率</td>
</tr>
<tr>
<td style="text-align:left">PDSCH iBLER(%)</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">PUSCH iBLER(%)</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
<ul>
<li>RANK：秩指示平均值</li>
<li>BLER：误码率</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 通信 - 查询手册 - 专业术语</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-%E4%B8%93%E4%B8%9A%E6%9C%AF%E8%AF%AD.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-%E4%B8%93%E4%B8%9A%E6%9C%AF%E8%AF%AD.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 通信 - 查询手册 - 专业术语</source>
      <description>文章摘要： 文章摘要。 相关信息 外部相关文章 内部相关文章</description>
      <category>学习笔记/技术</category>
      <pubDate>Mon, 17 Mar 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 文章摘要。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li></li>
</ul>
<p>内部相关文章</p>
<ul>
<li><a href="/note/Technology-%E9%80%9A%E4%BF%A1-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-%E4%B8%93%E4%B8%9A%E6%9C%AF%E8%AF%AD.html" target="_blank">Technology-通信-查询手册-专业术语</a></li>
<li><a href="/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-4G-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-%E4%B8%93%E4%B8%9A%E6%9C%AF%E8%AF%AD.html" target="_blank">Technology-通信-技术-4G-查询手册-专业术语</a></li>
<li><a href="/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-5G-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-%E4%B8%93%E4%B8%9A%E6%9C%AF%E8%AF%AD.html" target="_blank">Technology-通信-技术-5G-查询手册-专业术语</a></li>
</ul>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Material（原材料）</title>
      <link>https://blog.magictable.ha.cn/hardware/Material%EF%BC%88%E5%8E%9F%E6%9D%90%E6%96%99%EF%BC%89.html</link>
      <guid>https://blog.magictable.ha.cn/hardware/Material%EF%BC%88%E5%8E%9F%E6%9D%90%E6%96%99%EF%BC%89.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Material（原材料）</source>
      <description>文章摘要： 原材料是指在生产过程中用于制造产品的基本物质或成分。 简介 简要说明 原材料是指在生产过程中用于制造产品的基本物质或成分。 可以是天然存在的，也可以是通过工业过程合成的。 原材料是所有制造活动的起点，经过加工、组合或转化，最终形成成品。 主要特点 基础性：原材料是生产过程的基础，没有它们就无法制造出最终产品。 多样性：原材料的种类繁多，包括...</description>
      <category>硬件设备/原材料</category>
      <pubDate>Sun, 16 Mar 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 原材料是指在生产过程中用于制造产品的基本物质或成分。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>原材料是指在生产过程中用于制造产品的基本物质或成分。</li>
<li>可以是天然存在的，也可以是通过工业过程合成的。</li>
<li>原材料是所有制造活动的起点，经过加工、组合或转化，最终形成成品。</li>
</ul>
<p>主要特点</p>
<ul>
<li><strong>基础性</strong>：原材料是生产过程的基础，没有它们就无法制造出最终产品。</li>
<li><strong>多样性</strong>：原材料的种类繁多，包括金属、塑料、木材、纤维、化学品等。</li>
<li><strong>可加工性</strong>：原材料通常需要经过一系列加工步骤才能变成可用的产品。</li>
<li><strong>成本影响</strong>：原材料的成本通常对最终产品的成本有显著影响。</li>
<li><strong>质量重要性</strong>：原材料的质量直接影响到最终产品的质量和性能。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>质量控制</strong>：确保原材料符合规定的质量标准，以保障最终产品的质量。</li>
<li><strong>供应链管理</strong>：稳定原材料的供应是生产顺利进行的关键，需要有效的供应链管理。</li>
<li><strong>储存条件</strong>：不同的原材料可能需要特定的储存条件，以防止变质或损坏。</li>
<li><strong>环境影响</strong>：原材料的采集和加工可能对环境产生影响，需要采取环保措施。</li>
<li><strong>成本波动</strong>：原材料价格可能受市场供需、政治因素和自然灾害等因素影响，需关注价格波动。</li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>基础知识</h2>
<ul>
<li><a href="/hardware/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E5%8C%96%E5%AD%A6%E5%85%83%E7%B4%A0%E5%91%A8%E6%9C%9F%E8%A1%A8.html" target="_blank">基础知识-化学元素周期表</a></li>
</ul>
<h2>产品应用</h2>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 电磁波 - 无线电波</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E7%94%B5%E7%A3%81%E6%B3%A2-%E6%97%A0%E7%BA%BF%E7%94%B5%E6%B3%A2.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E7%94%B5%E7%A3%81%E6%B3%A2-%E6%97%A0%E7%BA%BF%E7%94%B5%E6%B3%A2.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 电磁波 - 无线电波</source>
      <description>文章摘要： 文章摘要。 相关信息 外部相关文章 中国无线电管理官网 内部相关文章 简介 简要说明 无线电波是一种电磁波，其波长范围从几毫米到数百公里不等。 可以在空气和真空中传播，是现代通信技术的基础，广泛应用于广播、电视、移动通信、雷达、导航以及业余无线电等领域。 主要功能 信息传输：无线电波可以携带信息，通过调制技术，将声音、数据和其他形式的信息编...</description>
      <category>学习笔记/技术</category>
      <pubDate>Sat, 15 Mar 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 文章摘要。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li><a href="https://www.srrc.org.cn/" target="_blank" rel="noopener noreferrer">中国无线电管理官网</a></li>
</ul>
<p>内部相关文章</p>
<ul>
<li></li>
</ul>
</div>
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>无线电波是一种电磁波，其波长范围从几毫米到数百公里不等。</li>
<li>可以在空气和真空中传播，是现代通信技术的基础，广泛应用于广播、电视、移动通信、雷达、导航以及业余无线电等领域。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>信息传输</strong>：无线电波可以携带信息，通过调制技术，将声音、数据和其他形式的信息编码到无线电波上，实现远距离传输。</li>
<li><strong>无线通信</strong>：为手机、无线电、无线网络等提供无线通信能力。</li>
<li><strong>导航定位</strong>：如GPS系统利用无线电波进行定位。</li>
<li><strong>远程控制</strong>：无线电波可用于飞机、汽车、船只等交通工具的远程控制。</li>
<li><strong>雷达探测</strong>：通过发射无线电波并接收其反射波，可以探测物体的位置、速度等信息。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>频率管理</strong>：无线电波的使用需要遵守国家或国际的频率分配和管理规定，避免相互干扰。</li>
<li><strong>信号衰减</strong>：无线电波在传播过程中会因距离、障碍物等因素衰减，需考虑信号强度和覆盖范围。</li>
<li><strong>电磁兼容性</strong>：无线电设备的设计需考虑电磁兼容性，防止对其他电子设备的干扰。</li>
<li><strong>安全使用</strong>：高功率无线电波可能对人体有害，需按照安全标准使用。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>移动通信</strong>：如手机网络、无线热点等。</li>
<li><strong>广播</strong>：包括调幅（AM）和调频（FM）广播。</li>
<li><strong>电视传输</strong>：传统的无线电视广播和现代的数字电视传输。</li>
<li><strong>紧急通信</strong>：在自然灾害等紧急情况下，无线电波是重要的通信手段。</li>
<li><strong>军事应用</strong>：无线电波在军事通信、侦察、指挥等方面有广泛应用。</li>
<li><strong>航空航天</strong>：飞机和航天器的通信、导航和控制系统。</li>
<li><strong>海上通信</strong>：船只之间的通信和与陆地的联系。</li>
<li><strong>业余无线电</strong>：无线电爱好者之间的通信和实验。</li>
</ul>
<p>中国无线电频段划分：<a href="/note/Technology-%E7%94%B5%E7%A3%81%E6%B3%A2-%E6%97%A0%E7%BA%BF%E7%94%B5%E6%B3%A2-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-%E4%B8%AD%E5%9B%BD%E6%97%A0%E7%BA%BF%E7%94%B5%E9%A2%91%E7%8E%87%E5%88%92%E5%88%86.html" target="_blank">Technology-电磁波-无线电波-查询手册-中国无线电频率划分</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 电磁波</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E7%94%B5%E7%A3%81%E6%B3%A2.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E7%94%B5%E7%A3%81%E6%B3%A2.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 电磁波</source>
      <description>文章摘要： 文章摘要。 相关信息 外部相关文章 中国无线电管理官网 中国无线电协会业余无线电分会（CRAC） 内部相关文章 简介 简要说明 主要功能 注意事项 适用场景 电磁波频谱特性 频率越低，传播损耗越小，覆盖距离越大，但频率资源有限。 频率越高，传播损耗越大，覆盖距离越小，但频率资源丰富。 反射（reflection） 当信号遇到表面大于信号波长...</description>
      <category>学习笔记/技术</category>
      <pubDate>Sat, 15 Mar 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 文章摘要。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li><a href="https://www.srrc.org.cn/" target="_blank" rel="noopener noreferrer">中国无线电管理官网</a></li>
<li><a href="http://www.crac.org.cn/Home/Index" target="_blank" rel="noopener noreferrer">中国无线电协会业余无线电分会（CRAC）</a></li>
</ul>
<p>内部相关文章</p>
<ul>
<li></li>
</ul>
</div>
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>电磁波频谱特性</h2>
<ul>
<li>频率越低，传播损耗越小，覆盖距离越大，但频率资源有限。</li>
<li>频率越高，传播损耗越大，覆盖距离越小，但频率资源丰富。</li>
</ul>
<h3>反射（reflection）</h3>
<ul>
<li>当信号遇到表面大于信号波长的障碍物导致信号的相位发生漂移。</li>
</ul>
<h3>衍射（Diffraction）</h3>
<ul>
<li>当信号遇到大于波长的不可穿透物的边缘，即使没有来自发送器的视线信号，也可接收到信号。</li>
</ul>
<h3>散射（Scattering）</h3>
<ul>
<li>当信号遇到波长更小的物体就会发散成几个弱的处境信号。</li>
<li>障碍物表面越粗糙越容易引起散射。</li>
</ul>
<h3>衰减（fading）</h3>
<ul>
<li>传输介质或路径使得接受信号的能量发生变化。</li>
</ul>
<h3>四大效应</h3>
<p>阴影效应（Shadowing Effect）</p>
<ul>
<li>当电磁波在传播过程中遇到建筑物、山丘、树木等障碍物时，会在障碍物的背面形成信号弱区，即阴影区。在阴影区内，接收到的信号强度会显著降低，这可能导致通信质量下降甚至通信中断。</li>
<li><strong>原因</strong>：障碍物阻挡了直射波的传播。</li>
<li><strong>影响</strong>：信号覆盖不均匀，通信可靠性降低。</li>
</ul>
<p>远近效应（Near-Far Effect）</p>
<ul>
<li>在蜂窝移动通信系统中，如果一个接收机同时接收到来自近距离和远距离发射机的信号，近距离的强信号可能会干扰远距离的弱信号，导致远距离信号的接收质量下降。</li>
<li><strong>原因</strong>：不同距离的信号在接收端同时存在，且功率差异较大。</li>
<li><strong>影响</strong>：接收机的动态范围受限，无法同时处理强信号和弱信号。</li>
</ul>
<p>多径效应（Multipath Effect）</p>
<ul>
<li>电磁波在传播过程中，由于遇到建筑物、地面等反射和折射，会产生多条传播路径。这些路径的信号在接收端可能会相互干涉，导致信号的相位和幅度发生变化。</li>
<li><strong>原因</strong>：信号通过多个路径到达接收端，路径长度不同导致相位差。</li>
<li><strong>影响</strong>：信号失真，产生衰落，影响通信质量。</li>
</ul>
<p>多普勒效应（Doppler Effect）</p>
<ul>
<li>当发射源和接收源之间存在相对运动时，接收到的电磁波频率会发生变化。</li>
<li><strong>原因</strong>：发射源和接收源之间的相对运动导致接收到的波前压缩或拉伸。</li>
<li><strong>影响</strong>：接收到的信号频率偏移，可能导致信号解调错误。</li>
</ul>
<h2>电磁波谱</h2>
<h3>分类和划分</h3>
<p>电磁波谱按照波长或频率的不同，可以分为以下几类：</p>
<ul>
<li><strong>无线电波</strong>：波长最长，频率最低，用于通信、广播等。</li>
<li><strong>微波</strong>：波长较短，频率较高，用于雷达、微波炉、无线通信等。</li>
<li><strong>红外线</strong>：波长介于可见光和微波之间，用于遥控器、热成像等。</li>
<li><strong>可见光</strong>：波长范围大约在400到700纳米之间，是人眼可以感知的电磁波。</li>
<li><strong>紫外线</strong>：波长短于可见光，用于消毒、荧光等。</li>
<li><strong>X射线</strong>：波长更短，穿透能力强，用于医学成像和材料分析。</li>
<li><strong>伽马射线</strong>：波长最短，频率最高，能量极大，用于医学治疗和科学研究。</li>
</ul>
<h3>无线电波</h3>
<ul>
<li>无线电波是一种电磁波，其波长范围从几毫米到数百公里不等。</li>
<li>可以在空气和真空中传播，是现代通信技术的基础，广泛应用于广播、电视、移动通信、雷达、导航以及业余无线电等领域。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>信息传输</strong>：无线电波可以携带信息，通过调制技术，将声音、数据和其他形式的信息编码到无线电波上，实现远距离传输。</li>
<li><strong>无线通信</strong>：为手机、无线电、无线网络等提供无线通信能力。</li>
<li><strong>导航定位</strong>：如GPS系统利用无线电波进行定位。</li>
<li><strong>远程控制</strong>：无线电波可用于飞机、汽车、船只等交通工具的远程控制。</li>
<li><strong>雷达探测</strong>：通过发射无线电波并接收其反射波，可以探测物体的位置、速度等信息。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>频率管理</strong>：无线电波的使用需要遵守国家或国际的频率分配和管理规定，避免相互干扰。</li>
<li><strong>信号衰减</strong>：无线电波在传播过程中会因距离、障碍物等因素衰减，需考虑信号强度和覆盖范围。</li>
<li><strong>电磁兼容性</strong>：无线电设备的设计需考虑电磁兼容性，防止对其他电子设备的干扰。</li>
<li><strong>安全使用</strong>：高功率无线电波可能对人体有害，需按照安全标准使用。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>移动通信</strong>：如手机网络、无线热点等。</li>
<li><strong>广播</strong>：包括调幅（AM）和调频（FM）广播。</li>
<li><strong>电视传输</strong>：传统的无线电视广播和现代的数字电视传输。</li>
<li><strong>紧急通信</strong>：在自然灾害等紧急情况下，无线电波是重要的通信手段。</li>
<li><strong>军事应用</strong>：无线电波在军事通信、侦察、指挥等方面有广泛应用。</li>
<li><strong>航空航天</strong>：飞机和航天器的通信、导航和控制系统。</li>
<li><strong>海上通信</strong>：船只之间的通信和与陆地的联系。</li>
<li><strong>业余无线电</strong>：无线电爱好者之间的通信和实验。</li>
</ul>
<p>中国无线电频段划分：<a href="/note/Technology-%E7%94%B5%E7%A3%81%E6%B3%A2-%E6%97%A0%E7%BA%BF%E7%94%B5%E6%B3%A2-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-%E4%B8%AD%E5%9B%BD%E6%97%A0%E7%BA%BF%E7%94%B5%E9%A2%91%E7%8E%87%E5%88%92%E5%88%86.html" target="_blank">Technology-电磁波-无线电波-查询手册-中国无线电频率划分</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Diary - 沟通方式 - 手语 - 中国</title>
      <link>https://blog.magictable.ha.cn/note/Diary-%E6%B2%9F%E9%80%9A%E6%96%B9%E5%BC%8F-%E6%89%8B%E8%AF%AD-%E4%B8%AD%E5%9B%BD.html</link>
      <guid>https://blog.magictable.ha.cn/note/Diary-%E6%B2%9F%E9%80%9A%E6%96%B9%E5%BC%8F-%E6%89%8B%E8%AF%AD-%E4%B8%AD%E5%9B%BD.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Diary - 沟通方式 - 手语 - 中国</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 主要功能 注意事项 适用场景</description>
      <category>学习笔记/日记</category>
      <pubDate>Mon, 10 Mar 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Diary - 沟通方式 - 文字 - 简体中文</title>
      <link>https://blog.magictable.ha.cn/note/Diary-%E6%B2%9F%E9%80%9A%E6%96%B9%E5%BC%8F-%E6%96%87%E5%AD%97-%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87.html</link>
      <guid>https://blog.magictable.ha.cn/note/Diary-%E6%B2%9F%E9%80%9A%E6%96%B9%E5%BC%8F-%E6%96%87%E5%AD%97-%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Diary - 沟通方式 - 文字 - 简体中文</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 主要功能 注意事项 适用场景</description>
      <category>学习笔记/日记</category>
      <pubDate>Mon, 10 Mar 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Diary - 沟通方式 - 文字 - 英语英文</title>
      <link>https://blog.magictable.ha.cn/note/Diary-%E6%B2%9F%E9%80%9A%E6%96%B9%E5%BC%8F-%E6%96%87%E5%AD%97-%E8%8B%B1%E8%AF%AD%E8%8B%B1%E6%96%87.html</link>
      <guid>https://blog.magictable.ha.cn/note/Diary-%E6%B2%9F%E9%80%9A%E6%96%B9%E5%BC%8F-%E6%96%87%E5%AD%97-%E8%8B%B1%E8%AF%AD%E8%8B%B1%E6%96%87.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Diary - 沟通方式 - 文字 - 英语英文</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 主要功能 注意事项 适用场景 热门推荐 详细总结： 问题总结 详细总结： 基础词汇 掌握一定量的基础词汇是英语学习的基础。 包括名词、动词、形容词、副词等。 音标 单词发音 ==待完善== 详细总结： 词性 ==待完善== 详细总结： 词汇 ==待完善== 详细总结： 语法规则 了解并掌握英语的语法规则，如时态、...</description>
      <category>学习笔记/日记</category>
      <pubDate>Mon, 10 Mar 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>热门推荐</h2>
<p>详细总结：<a href="/note/Diary-%E6%B2%9F%E9%80%9A%E6%96%B9%E5%BC%8F-%E6%96%87%E5%AD%97-%E8%8B%B1%E8%AF%AD%E8%8B%B1%E6%96%87-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90.html" target="_blank">Diary-沟通方式-文字-英语英文-热门推荐</a></p>
<h2>问题总结</h2>
<p>详细总结：<a href=""></a></p>
<h2>基础词汇</h2>
<ul>
<li>掌握一定量的基础词汇是英语学习的基础。</li>
<li>包括名词、动词、形容词、副词等。</li>
</ul>
<h3>音标</h3>
<ul>
<li>单词发音</li>
<li>==待完善==</li>
</ul>
<p>详细总结：<a href="/note/Diary-%E6%B2%9F%E9%80%9A%E6%96%B9%E5%BC%8F-%E6%96%87%E5%AD%97-%E8%8B%B1%E8%AF%AD%E8%8B%B1%E6%96%87-%E9%9F%B3%E6%A0%87.html" target="_blank">Diary-沟通方式-文字-英语英文-音标</a></p>
<h3>词性</h3>
<ul>
<li>==待完善==</li>
</ul>
<p>详细总结：<a href="/note/Diary-%E6%B2%9F%E9%80%9A%E6%96%B9%E5%BC%8F-%E6%96%87%E5%AD%97-%E8%8B%B1%E8%AF%AD%E8%8B%B1%E6%96%87-%E8%AF%8D%E6%80%A7.html" target="_blank">Diary-沟通方式-文字-英语英文-词性</a></p>
<h3>词汇</h3>
<ul>
<li>==待完善==</li>
</ul>
<p>详细总结：<a href="/note/Diary-%E6%B2%9F%E9%80%9A%E6%96%B9%E5%BC%8F-%E6%96%87%E5%AD%97-%E8%8B%B1%E8%AF%AD%E8%8B%B1%E6%96%87-%E8%AF%8D%E6%B1%87.html" target="_blank">Diary-沟通方式-文字-英语英文-词汇</a></p>
<h2>语法规则</h2>
<ul>
<li>了解并掌握英语的语法规则，如时态、语态、句子结构、从句等。</li>
</ul>
<p>详细总结：<a href="/note/Diary-%E6%B2%9F%E9%80%9A%E6%96%B9%E5%BC%8F-%E6%96%87%E5%AD%97-%E8%8B%B1%E8%AF%AD%E8%8B%B1%E6%96%87-%E8%AF%AD%E6%B3%95%E8%A7%84%E5%88%99.html" target="_blank">Diary-沟通方式-文字-英语英文-语法规则</a></p>
<h2>阅读理解</h2>
<p>通过阅读不同类型的英语材料，提高阅读速度和理解能力。</p>
<h2>写作能力</h2>
<p>练习写作，包括书信、日记、文章等，提高书面表达能力。</p>
<ul>
<li>日记/周记/月记/年记</li>
<li>家信、感谢信、慰问信、申请信</li>
<li>请假申请</li>
<li>问题反馈、意见建议、投诉信</li>
</ul>
<h2>口语交流</h2>
<p>通过日常对话、角色扮演等方式，提高口语表达能力。</p>
]]></content:encoded>
    </item>
    <item>
      <title>OS - Debian Linux - 热门推荐 - 桌面入口图标</title>
      <link>https://blog.magictable.ha.cn/software/OS-DebianLinux-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E6%A1%8C%E9%9D%A2%E5%85%A5%E5%8F%A3%E5%9B%BE%E6%A0%87.html</link>
      <guid>https://blog.magictable.ha.cn/software/OS-DebianLinux-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E6%A1%8C%E9%9D%A2%E5%85%A5%E5%8F%A3%E5%9B%BE%E6%A0%87.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">OS - Debian Linux - 热门推荐 - 桌面入口图标</source>
      <description>文章摘要： 摘要内容。 相关信息 外部相关文章 桌面入口规范：https://specifications.freedesktop.org/desktop-entry-spec/latest/ 内部相关文章</description>
      <category>软件程序/操作系统</category>
      <pubDate>Mon, 10 Mar 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li>桌面入口规范：https://specifications.freedesktop.org/desktop-entry-spec/latest/</li>
</ul>
<p>内部相关文章</p>
<ul>
<li></li>
</ul>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Component（元器件）</title>
      <link>https://blog.magictable.ha.cn/hardware/Component%EF%BC%88%E5%85%83%E5%99%A8%E4%BB%B6%EF%BC%89.html</link>
      <guid>https://blog.magictable.ha.cn/hardware/Component%EF%BC%88%E5%85%83%E5%99%A8%E4%BB%B6%EF%BC%89.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Component（元器件）</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 主要特点 注意事项 适用场景 基础知识 产品应用 芯片 详细总结：</description>
      <category>硬件设备/元器件</category>
      <pubDate>Wed, 05 Mar 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要特点</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>基础知识</h2>
<h2>产品应用</h2>
<h3>芯片</h3>
<p>详细总结：<a href="/hardware/Component-%E8%8A%AF%E7%89%87.html" target="_blank">Component-芯片</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Device - 可编程逻辑控制器</title>
      <link>https://blog.magictable.ha.cn/hardware/Device-%E5%8F%AF%E7%BC%96%E7%A8%8B%E9%80%BB%E8%BE%91%E6%8E%A7%E5%88%B6%E5%99%A8.html</link>
      <guid>https://blog.magictable.ha.cn/hardware/Device-%E5%8F%AF%E7%BC%96%E7%A8%8B%E9%80%BB%E8%BE%91%E6%8E%A7%E5%88%B6%E5%99%A8.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Device - 可编程逻辑控制器</source>
      <description>文章摘要： 可编程逻辑控制器（PLC）是一种用于工业自动化的电子设备，它可以根据用户编写的程序来控制机械或生产过程。 简介 简要说明 可编程逻辑控制器（PLC）是一种用于工业自动化的电子设备。 可以根据用户编写的程序来控制机械或生产过程。 个人理解：可以认为 可编程逻辑控制器 是类似专门管理传感器硬件的电脑。 主要特点 可靠性高：PLC设计用于在恶劣的...</description>
      <category>硬件设备/设备</category>
      <pubDate>Mon, 03 Mar 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 可编程逻辑控制器（PLC）是一种用于工业自动化的电子设备，它可以根据用户编写的程序来控制机械或生产过程。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>可编程逻辑控制器（PLC）是一种用于工业自动化的电子设备。</li>
<li>可以根据用户编写的程序来控制机械或生产过程。</li>
<li>个人理解：可以认为 可编程逻辑控制器 是类似专门管理传感器硬件的电脑。</li>
</ul>
<p>主要特点</p>
<ul>
<li><strong>可靠性高</strong>：PLC设计用于在恶劣的工业环境中运行，具有抗干扰能力强、故障率低的特点。</li>
<li><strong>灵活性强</strong>：通过编程，PLC可以适应不同的控制需求，易于修改和扩展功能。</li>
<li><strong>模块化设计</strong>：PLC通常由多个模块组成，如电源模块、CPU模块、输入输出模块等，可以根据需要灵活配置。</li>
<li><strong>易于编程</strong>：PLC使用直观的编程语言，如梯形图、功能块图等，便于工程师理解和操作。</li>
<li><strong>通信能力</strong>：现代PLC支持多种工业通信协议，可以与其他PLC或上位机进行数据交换。</li>
<li><strong>诊断和维护方便</strong>：PLC具有自我诊断功能，可以实时监控系统状态，便于维护和故障排查。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>环境适应性</strong>：确保PLC安装环境符合其工作温度、湿度、防尘等要求。</li>
<li><strong>电源稳定性</strong>：保证供电系统的稳定性和质量，防止电源波动对PLC造成损害。</li>
<li><strong>接地</strong>：正确接地可以减少干扰，保证PLC可靠运行。</li>
<li><strong>编程与调试</strong>：在编程和调试过程中，应遵循安全操作规程，防止误操作导致设备损坏或安全事故。</li>
<li><strong>软件备份</strong>：定期备份PLC的程序和重要数据，以防丢失。</li>
<li><strong>防护措施</strong>：对于安装在危险环境中的PLC，应采取适当的防护措施，如防爆、防腐蚀等。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>离散制造业</strong>：如汽车制造、电子产品组装、包装机械等，PLC用于控制生产线的自动化流程。</li>
<li><strong>过程控制</strong>：在化工、食品饮料、制药等行业，PLC用于监控和控制生产过程中的温度、压力、流量等参数。</li>
<li><strong>机床控制</strong>：PLC用于数控机床的自动化控制，提高加工精度和效率。</li>
<li><strong>楼宇自动化</strong>：在智能建筑中，PLC用于照明、空调、电梯等系统的控制。</li>
<li><strong>能源管理</strong>：PLC用于电力系统、水处理厂等能源管理系统的监控和控制。</li>
<li><strong>交通控制</strong>：在交通信号灯控制、地铁自动化等领域，PLC用于提高交通系统的效率和安全性。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Component - 芯片</title>
      <link>https://blog.magictable.ha.cn/hardware/Component-%E8%8A%AF%E7%89%87.html</link>
      <guid>https://blog.magictable.ha.cn/hardware/Component-%E8%8A%AF%E7%89%87.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Component - 芯片</source>
      <description>文章摘要： 文章摘要。 简介 简要说明 主要特点 注意事项 适用场景 基础知识 注释 指令集架构是对指令集进一次的上层封装 指令集 详细总结： 指令集架构 详细总结：</description>
      <category>硬件设备/元器件</category>
      <pubDate>Sat, 01 Mar 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 文章摘要。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要特点</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>基础知识</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p><strong>指令集架构</strong>是对<strong>指令集</strong>进一次的上层封装</p>
</div>
<h3>指令集</h3>
<p>详细总结：<a href="/hardware/Component-%E8%8A%AF%E7%89%87-%E6%8C%87%E4%BB%A4%E9%9B%86.html" target="_blank">Component-芯片-指令集</a></p>
<h3>指令集架构</h3>
<p>详细总结：<a href="/hardware/Component-%E8%8A%AF%E7%89%87-%E6%8C%87%E4%BB%A4%E9%9B%86%E6%9E%B6%E6%9E%84.html" target="_blank">Component-芯片-指令集架构</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Society - FM广播电台</title>
      <link>https://blog.magictable.ha.cn/rule/Society-FM%E5%B9%BF%E6%92%AD%E7%94%B5%E5%8F%B0.html</link>
      <guid>https://blog.magictable.ha.cn/rule/Society-FM%E5%B9%BF%E6%92%AD%E7%94%B5%E5%8F%B0.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Society - FM广播电台</source>
      <description>文章摘要： 广播是一种通过无线电波或其他电磁系统向广大地区传送声音（有时也包含图像）的通信方式。 简介 简要说明 广播是一种通过无线电波或其他电磁系统向广大地区传送声音（有时也包含图像）的通信方式。 它是最早实现远距离声音传输的技术之一。 广播的起源可以追溯到20世纪初，随着无线电技术的发明和发展而逐渐普及。 主要特点 分发渠道：广播主要通过无线电波进...</description>
      <category>世界规则/社会</category>
      <pubDate>Wed, 26 Feb 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 广播是一种通过无线电波或其他电磁系统向广大地区传送声音（有时也包含图像）的通信方式。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>广播是一种通过无线电波或其他电磁系统向广大地区传送声音（有时也包含图像）的通信方式。</li>
<li>它是最早实现远距离声音传输的技术之一。</li>
<li>广播的起源可以追溯到20世纪初，随着无线电技术的发明和发展而逐渐普及。</li>
</ul>
<p>主要特点</p>
<ul>
<li><strong>分发渠道</strong>：广播主要通过无线电波进行传播，听众需要通过收音机或其他接收设备才能收听。这种传播方式具有广泛的覆盖范围和较高的到达率。</li>
<li><strong>听众参与</strong>：传统广播节目的听众参与度相对较低，主要通过电话热线、短信等方式与主播进行互动。这种互动方式虽然具有一定的实时性但受限于技术条件。</li>
<li><strong>反馈机制</strong>：广播节目的反馈机制相对单一，主要依靠听众来信、来电等方式进行收集和整理。这在一定程度上限制了节目内容的优化和改进。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>传播限制</strong>：由于广播信号受到地理位置和天气等因素的影响，其传播效果可能受到限制。此外，广播节目的播出时间也是固定的，听众需要在特定时间段内收听。</li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Society - 供应链 - 基础云计算</title>
      <link>https://blog.magictable.ha.cn/rule/Society-%E4%BE%9B%E5%BA%94%E9%93%BE-%E5%9F%BA%E7%A1%80%E4%BA%91%E8%AE%A1%E7%AE%97.html</link>
      <guid>https://blog.magictable.ha.cn/rule/Society-%E4%BE%9B%E5%BA%94%E9%93%BE-%E5%9F%BA%E7%A1%80%E4%BA%91%E8%AE%A1%E7%AE%97.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Society - 供应链 - 基础云计算</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 主要特点 注意事项 适用场景</description>
      <category>世界规则/社会</category>
      <pubDate>Wed, 26 Feb 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要特点</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Society - 播客</title>
      <link>https://blog.magictable.ha.cn/rule/Society-%E6%92%AD%E5%AE%A2.html</link>
      <guid>https://blog.magictable.ha.cn/rule/Society-%E6%92%AD%E5%AE%A2.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Society - 播客</source>
      <description>文章摘要： 播客是一种通过互联网发布并可供用户下载或在线收听的音频节目形式。 简介 简要说明 播客是一种通过互联网发布并可供用户下载或在线收听的音频节目形式。 这些节目通常是由个人或小型团队制作的，涵盖了从教育到娱乐等多个领域。 播客的概念起源于21世纪初，随着互联网技术的飞速发展和数字音频设备的普及而迅速崛起。 主要特点 分发渠道：播客通过互联网平台...</description>
      <category>世界规则/社会</category>
      <pubDate>Wed, 26 Feb 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 播客是一种通过互联网发布并可供用户下载或在线收听的音频节目形式。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>播客是一种通过互联网发布并可供用户下载或在线收听的音频节目形式。</li>
<li>这些节目通常是由个人或小型团队制作的，涵盖了从教育到娱乐等多个领域。</li>
<li>播客的概念起源于21世纪初，随着互联网技术的飞速发展和数字音频设备的普及而迅速崛起。</li>
</ul>
<p>主要特点</p>
<ul>
<li><strong>分发渠道</strong>：播客通过互联网平台进行分发和传播，听众可以通过各种音频播放软件（如Apple Podcasts、Spotify等）进行收听。这种传播方式不受时间和空间的限制，听众可以随时随地获取所需内容。</li>
<li><strong>听众参与</strong>：播客的听众参与度更高且方式更多样化。除了传统的评论和打分外，听众还可以通过社交媒体、电子邮件等方式与主播进行直接交流。这种互动方式不仅增强了听众的归属感还促进了节目的持续改进和创新。</li>
<li><strong>反馈机制</strong>：播客平台通常提供详细的收听数据和反馈分析功能，帮助主播了解听众喜好和需求从而调整节目内容和风格。这种数据驱动的反馈机制使得播客能够更好地满足听众需求并实现可持续发展。</li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>传播优势</strong>：播客的传播速度更快且范围更广，能够轻松跨越国界和语言障碍。同时，播客平台还提供了强大的搜索和推荐功能，帮助听众快速找到感兴趣的节目。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Society - 供应商 - 网络</title>
      <link>https://blog.magictable.ha.cn/rule/Society-%E8%BF%90%E8%90%A5%E5%95%86-%E7%BD%91%E7%BB%9C%E9%80%9A%E4%BF%A1.html</link>
      <guid>https://blog.magictable.ha.cn/rule/Society-%E8%BF%90%E8%90%A5%E5%95%86-%E7%BD%91%E7%BB%9C%E9%80%9A%E4%BF%A1.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Society - 供应商 - 网络</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 主要特点 注意事项 适用场景 中国网络运营商 主要运营商：电信、联通、移动、广电 注释 电信和联通的合作比较密切，移动和广电的合作比较密切。</description>
      <category>世界规则/社会</category>
      <pubDate>Wed, 26 Feb 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要特点</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>中国网络运营商</h2>
<p>主要运营商：电信、联通、移动、广电</p>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>电信和联通的合作比较密切，移动和广电的合作比较密切。</li>
</ul>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Device - 数据传输线 - 光纤</title>
      <link>https://blog.magictable.ha.cn/hardware/Device-%E6%95%B0%E6%8D%AE%E4%BC%A0%E8%BE%93%E7%BA%BF-%E5%85%89%E7%BA%A4.html</link>
      <guid>https://blog.magictable.ha.cn/hardware/Device-%E6%95%B0%E6%8D%AE%E4%BC%A0%E8%BE%93%E7%BA%BF-%E5%85%89%E7%BA%A4.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Device - 数据传输线 - 光纤</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 主要功能 注意事项 适用场景</description>
      <category>硬件设备/设备</category>
      <pubDate>Wed, 26 Feb 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Device - 数据传输线 - 网线</title>
      <link>https://blog.magictable.ha.cn/hardware/Device-%E6%95%B0%E6%8D%AE%E4%BC%A0%E8%BE%93%E7%BA%BF-%E7%BD%91%E7%BA%BF.html</link>
      <guid>https://blog.magictable.ha.cn/hardware/Device-%E6%95%B0%E6%8D%AE%E4%BC%A0%E8%BE%93%E7%BA%BF-%E7%BD%91%E7%BA%BF.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Device - 数据传输线 - 网线</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 主要功能 注意事项 适用场景 家庭网络：常用超五类线（Cat5e）或六类线（Cat6），满足千兆网络需求。 企业网络：六类线（Cat6）或超六类线（Cat6a），支持高速数据传输。 数据中心：七类线（Cat7）或八类线（Cat8），满足万兆网络及更高性能需求。 工业环境：屏蔽双绞线（如SFTP），抗干扰能力强，适...</description>
      <category>硬件设备/设备</category>
      <pubDate>Wed, 26 Feb 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>家庭网络</strong>：常用超五类线（Cat5e）或六类线（Cat6），满足千兆网络需求。</li>
<li><strong>企业网络</strong>：六类线（Cat6）或超六类线（Cat6a），支持高速数据传输。</li>
<li><strong>数据中心</strong>：七类线（Cat7）或八类线（Cat8），满足万兆网络及更高性能需求。</li>
<li><strong>工业环境</strong>：屏蔽双绞线（如SFTP），抗干扰能力强，适用于电磁复杂环境。</li>
</ul>
<h2>按结构分类</h2>
<h3>双绞线（Twisted Pair Cable）</h3>
<p>定义</p>
<ul>
<li>双绞线由多对相互绝缘的铜导线绞合而成，通过绞合来减少信号间的电磁干扰。</li>
</ul>
<p>特点</p>
<ul>
<li>分为非屏蔽双绞线（UTP）和屏蔽双绞线（STP）。</li>
<li>非屏蔽双绞线（UTP）：价格便宜，适用于普通网络环境，但抗干扰能力较弱。</li>
<li>屏蔽双绞线（STP）：在每对双绞线外增加金属屏蔽层，抗干扰能力强，适用于电磁干扰较大的环境。</li>
</ul>
<p>用途</p>
<ul>
<li>广泛用于局域网（LAN）、家庭网络和企业网络。</li>
</ul>
<h3>同轴电缆（Coaxial Cable）</h3>
<p>定义</p>
<ul>
<li>由一根中心铜导体、绝缘层、屏蔽层和外护套组成。</li>
</ul>
<p>特点</p>
<ul>
<li>抗干扰能力强，信号质量高。</li>
<li>传输距离较长，但布线复杂。</li>
</ul>
<p>用途</p>
<ul>
<li>主要用于有线电视、视频会议系统等。</li>
</ul>
<h2>按性能分类</h2>
<p>五类线（Cat5）</p>
<ul>
<li><strong>特点</strong>：传输频率100MHz，最高传输速率100Mbps。</li>
<li><strong>用途</strong>：已逐渐被淘汰，多用于旧网络系统。</li>
</ul>
<p>超五类线（Cat5e）</p>
<ul>
<li><strong>特点</strong>：传输频率100MHz，支持最高1Gbps速率，抗干扰能力优于五类线。</li>
<li><strong>用途</strong>：目前家庭和中小企业网络的主流选择。</li>
</ul>
<p>六类线（Cat6）</p>
<ul>
<li><strong>特点</strong>：传输频率250MHz，支持1Gbps速率，抗干扰能力更强。</li>
<li><strong>用途</strong>：适用于千兆网络，常用于企业网络和数据中心。</li>
</ul>
<p>超六类线（Cat6a）</p>
<ul>
<li><strong>特点</strong>：传输频率500MHz，支持10Gbps速率，传输距离更长。</li>
<li><strong>用途</strong>：适用于万兆网络，适合高性能企业网络</li>
</ul>
<p>七类线（Cat7）</p>
<ul>
<li><strong>特点</strong>：屏蔽双绞线，传输频率600MHz，支持10Gbps速率。</li>
<li><strong>用途</strong>：用于对性能要求极高的场景，如数据中心。</li>
</ul>
<p>八类线（Cat8）</p>
<ul>
<li><strong>特点</strong>：屏蔽双绞线，支持40Gbps速率，传输距离较短（通常30米以内）。</li>
<li><strong>用途</strong>：用于短距离的高速数据传输，如数据中心服务器连接。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Device - 网络设备 - 光调制解调器</title>
      <link>https://blog.magictable.ha.cn/hardware/Device-%E7%BD%91%E7%BB%9C%E8%AE%BE%E5%A4%87-%E8%B0%83%E5%88%B6%E8%A7%A3%E8%B0%83%E5%99%A8.html</link>
      <guid>https://blog.magictable.ha.cn/hardware/Device-%E7%BD%91%E7%BB%9C%E8%AE%BE%E5%A4%87-%E8%B0%83%E5%88%B6%E8%A7%A3%E8%B0%83%E5%99%A8.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Device - 网络设备 - 光调制解调器</source>
      <description>文章摘要： 光调制解调器（Optical Modulator-Demodulator），也称为光猫，是一种用于光纤通信的设备。 简介 简要说明 光调制解调器（Optical Modulator-Demodulator），也称为光猫，是一种用于光纤通信的设备。 通过将电信号转换为光信号进行传输，或将接收到的光信号还原为电信号，实现数字信息、语音和视频等数...</description>
      <category>硬件设备/设备</category>
      <pubDate>Wed, 26 Feb 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 光调制解调器（Optical Modulator-Demodulator），也称为光猫，是一种用于光纤通信的设备。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>光调制解调器（Optical Modulator-Demodulator），也称为光猫，是一种用于光纤通信的设备。</li>
<li>通过将电信号转换为光信号进行传输，或将接收到的光信号还原为电信号，实现数字信息、语音和视频等数据的传输。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>光电信号转换（调制与解调）</strong>：电信号转换为光信号，以便在光纤中传输，并在接收端将光信号解调还原为电信号。</li>
<li><strong>无线路由器（WIFI）</strong>：</li>
<li><strong>拨号上网</strong>：连接光猫的WIFI可以上网，则光猫一定进行拨号（PPPoE）操作。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>不建议使用光猫的WIFI信号上网</strong>：光猫性能偏弱，设备过多会导致性能下降。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>家庭宽带接入</strong>：光猫是光纤入户后必不可少的设备，广泛用于家庭网络连接，满足日常上网需求。</li>
</ul>
<h2>热门推荐</h2>
<p>减少光猫的负载</p>
<ul>
<li>将光猫的WIFI与拨号功能交给路由器，实现“桥接”。</li>
</ul>
<h2>光猫自带WIFI功能的WIFI名称</h2>
<ul>
<li>电信：<code>ChinaNet-&lt;XXX&gt;</code></li>
<li>移动：<code>CMCC-&lt;XXX&gt;</code></li>
<li>联通：<code>CU-&lt;XXX&gt;</code></li>
</ul>
<h2>问题</h2>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - API - 「java.util.logging」</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjava.util.logging%E3%80%8D.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjava.util.logging%E3%80%8D.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - API - 「java.util.logging」</source>
      <description>文章摘要： Java 8 中的java.util.logging，提供 JavaTM 2 平台的核心日志记录工具的类和接口。 Language-Java8-API-「java.util.logging」.excalidraw 记录器对象 创建记录器对象 添加处理器对象 修改日志级别 处理器对象 创建处理器对象 添加格式器对象 修改日志级别 格式器对象 ...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Thu, 20 Feb 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Java 8 中的<code>java.util.logging</code>，提供 JavaTM 2 平台的核心日志记录工具的类和接口。</p>
<!-- more -->
<blockquote>
<p></p>
</blockquote>
<h2>记录器对象</h2>
<h3>创建记录器对象</h3>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token class-name">Logger</span> <span class="token operator">&lt;</span>记录器<span class="token operator">&gt;</span> <span class="token operator">=</span> <span class="token class-name">Logger</span><span class="token punctuation">.</span><span class="token function">getLogger</span><span class="token punctuation">(</span><span class="token string">"&lt;被记录对象&gt;"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// “被记录对象”是一个 “文件中的类对象” 被实例化后的对象，记录其运行过程。</span></span>
<span class="line"><span class="token comment">// 一般记录当前 “文件中的类对象” 。</span></span>
<span class="line"><span class="token comment">// 字符串类型的类名</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>添加处理器对象</h3>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token operator">&lt;</span>记录器<span class="token operator">&gt;</span><span class="token punctuation">.</span><span class="token function">addHandler</span><span class="token punctuation">(</span><span class="token operator">&lt;</span>处理器<span class="token operator">&gt;</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>修改日志级别</h3>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token operator">&lt;</span>记录器<span class="token operator">&gt;</span><span class="token punctuation">.</span><span class="token function">setLevel</span><span class="token punctuation">(</span><span class="token class-name">Level</span><span class="token punctuation">.</span>&lt;日志级别<span class="token operator">&gt;</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token comment">// 日志级别：OFF（关闭全部） &gt; SEVERE（错误） &gt; WARNING（警告） &gt; INFO（信息） &gt; CONFIG（配置） &gt; FINE（调试） &gt; FINER（调试） &gt; FINEST（调试） &gt; ALL（开启全部）</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h2>处理器对象</h2>
<h3>创建处理器对象</h3>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 输出到 控制台</span></span>
<span class="line"><span class="token class-name">ConsoleHandler</span> <span class="token operator">&lt;</span>处理器<span class="token operator">&gt;</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ConsoleHandler</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 输出到 文件</span></span>
<span class="line"><span class="token class-name">FileHandler</span> <span class="token operator">&lt;</span>处理器<span class="token operator">&gt;</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">FileHandler</span><span class="token punctuation">(</span><span class="token string">"&lt;文件具体路径和名称&gt;"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>添加格式器对象</h3>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 将 格式器 添加到 处理器 中</span></span>
<span class="line"><span class="token operator">&lt;</span>处理器<span class="token operator">&gt;</span><span class="token punctuation">.</span><span class="token function">setFormatter</span><span class="token punctuation">(</span><span class="token operator">&lt;</span>格式器<span class="token operator">&gt;</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h3>修改日志级别</h3>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token operator">&lt;</span>处理器<span class="token operator">&gt;</span><span class="token punctuation">.</span><span class="token function">setLevel</span><span class="token punctuation">(</span><span class="token class-name">Level</span><span class="token punctuation">.</span>&lt;日志级别<span class="token operator">&gt;</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token comment">// 日志级别：OFF（关闭全部） &gt; SEVERE（错误） &gt; WARNING（警告） &gt; INFO（信息） &gt; CONFIG（配置） &gt; FINE（调试） &gt; FINER（调试） &gt; FINEST（调试） &gt; ALL（开启全部）</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h2>格式器对象</h2>
<h3>创建格式器对象</h3>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// </span></span>
<span class="line"><span class="token class-name">SimpleFormatter</span> <span class="token operator">&lt;</span>格式器<span class="token operator">&gt;</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">SimpleFormatter</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h2>管理器对象</h2>
<h3>创建管理器对象</h3>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 创建管理器对象</span></span>
<span class="line"><span class="token class-name">LogManager</span> logManager <span class="token operator">=</span> <span class="token class-name">LogManager</span><span class="token punctuation">.</span><span class="token function">getLogManager</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h2>日志内容对象</h2>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 方案一</span></span>
<span class="line">logger<span class="token punctuation">.</span>&lt;日志级别<span class="token operator">&gt;</span><span class="token punctuation">(</span><span class="token operator">&lt;</span>记录的内容<span class="token operator">&gt;</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 方案二</span></span>
<span class="line">logger<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token class-name">Level</span><span class="token punctuation">.</span>&lt;日志级别<span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token operator">&lt;</span>记录的内容<span class="token operator">&gt;</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token comment">// 日志级别：OFF（关闭全部） &gt; SEVERE（错误） &gt; WARNING（警告） &gt; INFO（信息） &gt; CONFIG（配置） &gt; FINE（调试） &gt; FINER（调试） &gt; FINEST（调试） &gt; ALL（开启全部）</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 方案三，实现字符串拼接，引入变量</span></span>
<span class="line">logger<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token class-name">Level</span><span class="token punctuation">.</span>&lt;日志级别<span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token operator">&lt;</span>记录的内容<span class="token punctuation">{</span><span class="token number">0</span><span class="token punctuation">}</span><span class="token punctuation">,</span><span class="token punctuation">{</span><span class="token number">1</span><span class="token punctuation">}</span><span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token keyword">new</span> <span class="token class-name">Object</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">{</span><span class="token operator">&lt;</span>变量名<span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token operator">&lt;</span>变量名<span class="token operator">&gt;</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>案例</h2>
<h3>自定义日志配置-硬编码</h3>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 创建 记录器 对象</span></span>
<span class="line"><span class="token class-name">Logger</span> logger <span class="token operator">=</span> <span class="token class-name">Logger</span><span class="token punctuation">.</span><span class="token function">getLogger</span><span class="token punctuation">(</span><span class="token string">"&lt;被记录对象&gt;"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 关闭默认日志配置</span></span>
<span class="line">logger<span class="token punctuation">.</span><span class="token function">setUseParentHandlers</span><span class="token punctuation">(</span><span class="token boolean">false</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 创建 处理器 对象</span></span>
<span class="line"><span class="token class-name">ConsoleHandler</span> consoleHandler <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ConsoleHandler</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token comment">// 创建 格式器 对象</span></span>
<span class="line"><span class="token class-name">SimpleFormatter</span> simpleFormatter <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">SimpleFormatter</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 将 格式器 添加到 处理器 中</span></span>
<span class="line">cosoleHandler<span class="token punctuation">.</span><span class="token function">setFormatter</span><span class="token punctuation">(</span>simpleFormatter<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token comment">// 将 处理器 添加到 记录器 中</span></span>
<span class="line">logger<span class="token punctuation">.</span><span class="token function">addHandler</span><span class="token punctuation">(</span>cosoleHandler<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 设置配置日志级别</span></span>
<span class="line">logger<span class="token punctuation">.</span><span class="token function">setLevel</span><span class="token punctuation">(</span><span class="token class-name">Level</span><span class="token punctuation">.</span><span class="token constant">ALL</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">consoleHandler<span class="token punctuation">.</span><span class="token function">setLevel</span><span class="token punctuation">(</span><span class="token class-name">Level</span><span class="token punctuation">.</span><span class="token constant">ALL</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token comment">// 日志级别：OFF（关闭全部） &gt; SEVERE（错误） &gt; WARNING（警告） &gt; INFO（信息） &gt; CONFIG（配置） &gt; FINE（调试） &gt; FINER（调试） &gt; FINEST（调试） &gt; ALL（开启全部）</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 开始执行日志信息</span></span>
<span class="line">logger<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token class-name">Level</span><span class="token punctuation">.</span><span class="token constant">INFO</span><span class="token punctuation">,</span> “信息级别的日志信息”<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>自定义日志配置-配置文件</h3>
<ul>
<li>类似将“格式器对象”写在配置文件中，而无需直接写在代码中。</li>
</ul>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 读取配置文件，通过类加载器</span></span>
<span class="line"><span class="token class-name">InputSttream</span> <span class="token operator">&lt;</span>配置文件对象<span class="token operator">&gt;</span> <span class="token operator">=</span> <span class="token operator">&lt;</span>当前类名<span class="token operator">&gt;</span><span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">.</span><span class="token function">getClassLoader</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getResourceAsStream</span><span class="token punctuation">(</span><span class="token string">"&lt;配置文件所在位置和名称&gt;"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 创建 管理器 对象</span></span>
<span class="line"><span class="token class-name">LogManager</span> logManager <span class="token operator">=</span> <span class="token class-name">LogManager</span><span class="token punctuation">.</span><span class="token function">getLogManager</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 通过 管理器 加载配置文件</span></span>
<span class="line">logManager<span class="token punctuation">.</span><span class="token function">readConfiguration</span><span class="token punctuation">(</span><span class="token operator">&lt;</span>配置文件对象<span class="token operator">&gt;</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Device - 中央处理器（CPU）</title>
      <link>https://blog.magictable.ha.cn/hardware/Device-%E4%B8%AD%E5%A4%AE%E5%A4%84%E7%90%86%E5%99%A8.html</link>
      <guid>https://blog.magictable.ha.cn/hardware/Device-%E4%B8%AD%E5%A4%AE%E5%A4%84%E7%90%86%E5%99%A8.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Device - 中央处理器（CPU）</source>
      <description>文章摘要： 中央处理器是计算机硬件的核心部件之一，负责解释计算机指令以及处理计算机软件中的数据，是计算机的“大脑”，通过执行算术、逻辑、控制及输入/输出操作来驱动计算机工作。 简介 简要说明 中央处理器是计算机硬件的核心部件之一。 负责解释计算机指令以及处理计算机软件中的数据。 是计算机的“大脑”，通过执行算术、逻辑、控制及输入/输出操作来驱动计算机工...</description>
      <category>硬件设备/设备</category>
      <pubDate>Mon, 10 Feb 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 中央处理器是计算机硬件的核心部件之一，负责解释计算机指令以及处理计算机软件中的数据，是计算机的“大脑”，通过执行算术、逻辑、控制及输入/输出操作来驱动计算机工作。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>中央处理器是计算机硬件的核心部件之一。</li>
<li>负责解释计算机指令以及处理计算机软件中的数据。</li>
<li>是计算机的“大脑”，通过执行算术、逻辑、控制及输入/输出操作来驱动计算机工作。</li>
</ul>
<p>主要特点</p>
<ul>
<li><strong>指令执行</strong>：CPU按照程序给出的指令序列执行操作。</li>
<li><strong>数据处理</strong>：能够进行高速的数据处理，包括算术计算和逻辑判断。</li>
<li><strong>并行处理</strong>：现代CPU通常具有多核心，可以并行处理多个任务。</li>
<li><strong>缓存机制</strong>：内置缓存可以减少访问主存储器的时间，提高数据处理速度。</li>
<li><strong>时钟频率</strong>：以固定的时钟频率进行操作，频率越高，理论上处理速度越快。</li>
<li><strong>能效比</strong>：不同型号的CPU在功耗和处理能力上有所不同，能效比是评估其性能的一个重要指标。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>散热</strong>：CPU在运行时会产生大量热量，需要有效的散热系统来保持其正常工作温度。</li>
<li><strong>兼容性</strong>：购买CPU时需确保与主板兼容，包括socket类型、芯片组等。</li>
<li><strong>功耗</strong>：选择CPU时需要考虑电源的供电能力是否足够。</li>
<li><strong>升级空间</strong>：考虑未来可能的升级需求，选择具有较好升级潜力的CPU型号。</li>
<li><strong>预算</strong>：根据预算平衡性能需求，不需要过度追求高端产品。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>个人电脑</strong>：用于家庭、办公等日常计算需求。</li>
<li><strong>服务器</strong>：处理大量数据，提供网络服务和其他企业级应用。</li>
<li><strong>移动设备</strong>：如笔记本电脑、平板电脑等，注重能效比和便携性。</li>
<li><strong>嵌入式系统</strong>：如智能家居、工业控制等领域，要求稳定性和特定的处理能力。</li>
<li><strong>高性能计算</strong>：用于科学计算、数据分析、模拟等需要高计算能力的场合。</li>
</ul>
<h2>基础知识</h2>
<p>任何进程理论上都可以利用CPU来控制系统，绕过操作系统执行恶意操作。为防止这种事情发生，CPU有两种基本的运行模式：用户模式和内核模式。</p>
<ul>
<li>内核模式：即特权模式，CPU可以执行指令集中的任何指令，拥有对系统的完全控制权。</li>
<li>用户模式：CPU只能执行有限的指令子集。</li>
</ul>
<p>用户程序运行在用户模式，操作系统运行在内核模式。操作系统通过使用特权指令确保没有用户程序能够未经授权进入内核模式。</p>
<p>如果用户程序无法操作硬件，用户程序可以请求操作系统代为处理，即系统调用。</p>
<ul>
<li>系统调用为操作系统中的服务提供了一个接口。</li>
<li>系统调用通常用C/C++编写的函数形式存在，并主要分为以下六类：过程控制（process control）、文件管理（file management）、设备管理（device management）、信息维护（information maintenance）、通信（communications）、保护（protection）</li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>中央处理器中的计算单元就是芯片!</p>
<ul>
<li>详细总结：<a href="/hardware/Component-%E8%8A%AF%E7%89%87.html" target="_blank">Component-芯片</a></li>
</ul>
</div>
<h2>产品应用</h2>
<h3>龙芯</h3>
<h4>3C6000系列</h4>
<p>3C6000S</p>
<ul>
<li>采用16核心32线程</li>
<li>主频2.0~2.2GHz</li>
<li>适用于中小型企业服务器</li>
</ul>
<p>3C6000D</p>
<ul>
<li>采用双芯片32核心64线程</li>
<li>适用于大型数据中心的复杂运算</li>
</ul>
<p>3C6000Q</p>
<ul>
<li>采用四芯片64核心128线程</li>
<li>适用于科研计算、超算领域</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Device - 网络设备</title>
      <link>https://blog.magictable.ha.cn/hardware/Device-%E7%BD%91%E7%BB%9C%E8%AE%BE%E5%A4%87.html</link>
      <guid>https://blog.magictable.ha.cn/hardware/Device-%E7%BD%91%E7%BB%9C%E8%AE%BE%E5%A4%87.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Device - 网络设备</source>
      <description>调制解调器 详细总结： 交换机 路由器 网关</description>
      <category>硬件设备/设备</category>
      <pubDate>Mon, 10 Feb 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<h2>调制解调器</h2>
<p>详细总结：<a href="/hardware/Device-%E7%BD%91%E7%BB%9C%E8%AE%BE%E5%A4%87-%E8%B0%83%E5%88%B6%E8%A7%A3%E8%B0%83%E5%99%A8.html" target="_blank">Device-网络设备-调制解调器</a></p>
<h2>交换机</h2>
<h2>路由器</h2>
<h2>网关</h2>
]]></content:encoded>
    </item>
    <item>
      <title>Library（代码类库）</title>
      <link>https://blog.magictable.ha.cn/software/Library%EF%BC%88%E4%BB%A3%E7%A0%81%E7%B1%BB%E5%BA%93%EF%BC%89.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library%EF%BC%88%E4%BB%A3%E7%A0%81%E7%B1%BB%E5%BA%93%EF%BC%89.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library（代码类库）</source>
      <description>文章摘要： 代码类库是一组预先编写好的代码，这些代码提供了特定的功能，以便开发者在开发应用程序时可以重用这些代码，从而提高开发效率，减少重复劳动。 简介 简要说明 代码类库是一套模块化的代码集合。 封装了常用的功能和方法，让开发者可以专注于业务逻辑的实现，无需从头开始编写所有代码。 主要功能 提供通用的功能模块，如字符串处理、日期计算、文件操作等。 封...</description>
      <category>软件程序/代码类库</category>
      <pubDate>Wed, 05 Feb 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 代码类库是一组预先编写好的代码，这些代码提供了特定的功能，以便开发者在开发应用程序时可以重用这些代码，从而提高开发效率，减少重复劳动。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>代码类库是一套模块化的代码集合。</li>
<li>封装了常用的功能和方法，让开发者可以专注于业务逻辑的实现，无需从头开始编写所有代码。</li>
</ul>
<p>主要功能</p>
<ul>
<li>提供通用的功能模块，如字符串处理、日期计算、文件操作等。</li>
<li>封装复杂的算法，如排序、搜索、加密等。</li>
<li>实现跨平台的兼容性，使代码能在不同的操作系统和编程环境中运行。</li>
<li>提供API接口，方便开发者调用。</li>
<li>促进代码的复用，降低维护成本。</li>
</ul>
<p>注意事项</p>
<ul>
<li>选择合适的类库，要考虑其稳定性、性能、社区支持等因素。</li>
<li>注意类库的版本更新，及时更新以修复已知问题和安全漏洞。</li>
<li>避免依赖过多的类库，以免增加项目的复杂性和维护难度。</li>
<li>阅读类库的文档，了解其使用方法和限制。</li>
<li>考虑类库的许可证，确保其符合项目的法律要求。</li>
</ul>
<p>适用场景</p>
<ul>
<li>开发需要快速迭代的项目，利用类库可以缩短开发周期。</li>
<li>在项目中需要实现一些非核心但复杂的功能时，可以使用类库来简化开发。</li>
<li>在团队协作开发中，使用统一的类库可以规范代码风格，提高代码的可读性和可维护性。</li>
<li>在跨平台开发中，使用类库可以确保代码的一致性和兼容性。</li>
<li>在进行二次开发或功能扩展时，类库可以提供强大的支持。</li>
</ul>
<h2>基础知识</h2>
<h2>Maven</h2>
<p>详细总结：<a href="/software/Package-Maven-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E7%AC%AC%E4%B8%89%E6%96%B9%E7%B1%BB%E5%BA%93.html" target="_blank">Package-Maven-热门推荐-第三方类库</a></p>
<h2>NodeJS - Npm</h2>
<p>详细总结：<a href="/software/Package-NodeJS-npm-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E7%AC%AC%E4%B8%89%E6%96%B9%E7%B1%BB%E5%BA%93.html" target="_blank">Package-NodeJS-npm-热门推荐-第三方类库</a></p>
<h2>Pip</h2>
<p>详细总结：<a href="/software/Package-Pip-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E7%AC%AC%E4%B8%89%E6%96%B9%E7%B1%BB%E5%BA%93.html" target="_blank">Package-Pip-热门推荐-第三方类库</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 区块链</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E5%8C%BA%E5%9D%97%E9%93%BE.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E5%8C%BA%E5%9D%97%E9%93%BE.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 区块链</source>
      <description>文章摘要： 区块链技术是一种分布式账本技术，通过加密算法和网络共识机制，实现数据的去中心化存储、传输和管理。 简介 简要说明 区块链技术是一种分布式账本技术。 通过加密算法和网络共识机制，实现数据的去中心化存储、传输和管理。 区块链是一种由多个节点共同维护的、不可篡改的数据记录方式。 将数据分成一系列按时间顺序排列的“区块”，并通过网络中的多个节点进行...</description>
      <category>学习笔记/技术</category>
      <pubDate>Thu, 23 Jan 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 区块链技术是一种分布式账本技术，通过加密算法和网络共识机制，实现数据的去中心化存储、传输和管理。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>区块链技术是一种分布式账本技术。</li>
<li>通过加密算法和网络共识机制，实现数据的去中心化存储、传输和管理。</li>
<li>区块链是一种由多个节点共同维护的、不可篡改的数据记录方式。</li>
<li>将数据分成一系列按时间顺序排列的“区块”，并通过网络中的多个节点进行验证和存储，每个区块都包含一定数量的交易记录，并与前一个区块通过加密的方式链接起来，形成了一个不断延伸的链条。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>数据不可篡改</strong>：一旦数据被写入区块链，就几乎无法被篡改。</li>
<li><strong>透明度高</strong>：所有参与者都可以查看区块链上的所有交易记录。</li>
<li><strong>去中心化</strong>：不依赖于单一的中心节点，提高了系统的稳定性和抗攻击能力。</li>
<li><strong>智能合约</strong>：自动执行合约条款，减少中介成本和提高效率。</li>
<li><strong>共识机制</strong>：通过一定的算法保证网络中所有节点对数据的认同。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>隐私保护</strong>：虽然交易透明，但需注意个人隐私的保护。</li>
<li><strong>法律法规</strong>：区块链应用需符合当地的法律法规要求。</li>
<li><strong>性能问题</strong>：与传统数据库相比，区块链在处理大量交易时可能会遇到性能瓶颈。</li>
<li><strong>资源消耗</strong>：工作量证明（PoW）等共识机制可能消耗大量电力和计算资源。</li>
<li><strong>安全问题</strong>：智能合约和区块链平台可能存在安全漏洞。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>DeFi（去中心化金融）</strong>：数字货币，消除中间人。</li>
<li><strong>供应链管理</strong>：追踪商品从生产到消费的全过程，确保信息的真实性和透明性。</li>
<li><strong>版权保护</strong>：通过区块链技术确认作品的原创性和所有权。</li>
<li><strong>身份验证</strong>：提供安全、不可篡改的身份认证服务。</li>
<li><strong>电子投票</strong>：保障投票的公正性和透明性。</li>
<li><strong>公共服务</strong>：如医疗记录管理、教育证书发放等，提高数据可信度。</li>
<li><strong>元宇宙</strong>：Web3.0实现，虚拟世界与现实世界的融合。</li>
<li><strong>NFT（非同质化代币）</strong>：数字收藏品，重新定义所有权。</li>
</ul>
<h2>三难问题</h2>
<ul>
<li><strong>可扩展性</strong>：处理大量交易而不降速的能力。</li>
<li><strong>去中心化</strong>：没有单一的权威或实体控制整个区块链。</li>
<li><strong>安全性</strong>：区块链抵御工具和保护数据的能力。</li>
</ul>
<h2>关键概念</h2>
<ul>
<li><strong>互操作性</strong>：使不同的区块链能够轻松通信和合作。</li>
<li><strong>可扩展性解决方案</strong>：构建强大的系统以使用不断增长的区块链用户基础。</li>
<li><strong>隐私和安全</strong>：在数字时代优先保护用户数据。</li>
<li><strong>治理模式</strong>：建立有效的结构以实现最佳的区块链运作。</li>
</ul>
<h2>主要类型</h2>
<ul>
<li><strong>公共区块链</strong>：开放性和广泛可访问性。</li>
<li><strong>私有区块链</strong>：专有的，为特定实体量身定制。</li>
<li><strong>联盟区块链</strong>：合作，组织之间共享控制。</li>
<li><strong>混合区块链</strong>：灵活的设计，结合了公共和私有特征。</li>
</ul>
<h2>区块链交易</h2>
<ul>
<li>交易是两个或多个方之间协议或资产交换的记录。</li>
<li>区块链交易是永久的、不可更改的记录。</li>
</ul>
<h2>交易阶段流程</h2>
<ol>
<li>要求一个交易。</li>
<li>交易被发送到网络中的所有节点。</li>
<li>交易通过阶段进行验证。</li>
<li>确认交易合法后传入区块中。</li>
<li>区块被链接在一起形成一段较长的交易记录。</li>
<li>完成交易。</li>
</ol>
<h2>共识机制</h2>
<ul>
<li>共识机制促进了所有节点对交易有效性的一致认可。</li>
</ul>
<h2>共识算法</h2>
<p>网络矿工（节点）争先找到数字谜题的答案。</p>
<p>谁先解开谜题，谁就能获得代币奖励，并在链中创建下一个区块。</p>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>挖矿不是在挖币，而是在解密区块中的密钥，并创建该区块的下一个区块和密钥。</p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Blender</title>
      <link>https://blog.magictable.ha.cn/software/Package-Blender.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Blender.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Blender</source>
      <description>文章摘要： Blender 是一款开源的3D创作套件。 简介 简要说明 Blender 是一款开源的3D创作套件。 覆盖了从建模、雕刻、绘制、刚体和软体物理、仿真、动画、渲染，到合成和运动跟踪，甚至视频编辑和游戏创建等一系列3D制作流程。 主要功能 建模：提供了一系列工具用于创建3D模型，支持多种几何体、曲线、NURBS和文本对象。 雕刻：允许艺术家像...</description>
      <category>软件程序/软件包</category>
      <pubDate>Wed, 22 Jan 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Blender 是一款开源的3D创作套件。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>Blender 是一款开源的3D创作套件。</li>
<li>覆盖了从建模、雕刻、绘制、刚体和软体物理、仿真、动画、渲染，到合成和运动跟踪，甚至视频编辑和游戏创建等一系列3D制作流程。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>建模</strong>：提供了一系列工具用于创建3D模型，支持多种几何体、曲线、NURBS和文本对象。</li>
<li><strong>雕刻</strong>：允许艺术家像使用现实世界中的粘土一样雕刻3D模型。</li>
<li><strong>绘制</strong>：可以直接在3D模型上进行纹理绘制。</li>
<li><strong>动画</strong>：具有完整的动画工具集，包括反向动力学、骨骼、变形、运动路径等。</li>
<li><strong>渲染</strong>：内置了强大的Cycles渲染引擎，支持GPU加速，以及Eevee实时渲染。</li>
<li><strong>仿真</strong>：可以进行粒子、刚体、软体、流体和烟雾等物理仿真。</li>
<li><strong>合成</strong>：提供节点式合成器，用于视频后期处理。</li>
<li><strong>运动跟踪</strong>：能够对视频序列中的对象进行运动跟踪，用于合成和特效制作。</li>
<li><strong>视频编辑</strong>：具备基本的视频剪辑、调色、过渡和音频处理功能。</li>
<li><strong>游戏制作</strong>：支持逻辑编辑器和游戏引擎，可用于创建简单的3D游戏。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>学习曲线</strong>：Blender功能强大，但相应的学习曲线也较陡峭，特别是对于初学者。</li>
<li><strong>硬件要求</strong>：进行高级渲染和仿真需要较强的硬件支持，如高性能的CPU和GPU。</li>
<li><strong>社区支持</strong>：虽然Blender有一个活跃的社区，但相比商业软件，可能缺少某些专业级别的支持和培训资源。</li>
<li><strong>插件兼容性</strong>：作为开源软件，其插件和扩展可能不如商业软件那样经过严格测试。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>个人艺术家</strong>：由于其免费和开源的特性，非常适合个人艺术家和爱好者进行3D创作。</li>
<li><strong>小型工作室</strong>：预算有限的小型工作室可以使用Blender来降低成本。</li>
<li><strong>教育</strong>：Blender适用于教育领域，供学生学习3D设计和动画制作。</li>
<li><strong>商业项目</strong>：虽然主要用于个人和小型项目，但Blender的高质量输出也适用于商业项目。</li>
<li><strong>游戏开发</strong>：可以作为游戏开发的快速原型工具，尤其是对于独立游戏开发者。</li>
</ul>
<h2>安装与卸载</h2>
<p>详细总结：<a href=""></a></p>
<h2>终端命令</h2>
<p>详细总结：<a href=""></a></p>
<h2>配置文件</h2>
<p>详细总结：<a href=""></a></p>
<h2>热门推荐</h2>
<p>详细总结：<a href=""></a></p>
<h2>问题总结</h2>
<p>详细总结：<a href=""></a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 云服务</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E4%BA%91%E6%9C%8D%E5%8A%A1.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E4%BA%91%E6%9C%8D%E5%8A%A1.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 云服务</source>
      <description>文章摘要： 项目介绍。 简介 简要说明 主要功能 注意事项 适用场景</description>
      <category>学习笔记/技术</category>
      <pubDate>Tue, 21 Jan 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 项目介绍。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Technology（技术）</title>
      <link>https://blog.magictable.ha.cn/note/Technology%EF%BC%88%E6%8A%80%E6%9C%AF%EF%BC%89.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology%EF%BC%88%E6%8A%80%E6%9C%AF%EF%BC%89.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology（技术）</source>
      <description>文章摘要： 技术是指人类为了解决实际问题或提高效率而创造的工具、设备、系统和方法的集合。 简介 简要说明 技术是指人类为了解决实际问题或提高效率而创造的工具、设备、系统和方法的集合。 涉及科学知识的实际应用，并随着人类文明的进步而不断发展。 主要功能 提高效率：通过自动化和优化流程，技术可以显著提高生产和工作效率。 增强能力：技术可以扩展人类的能力，如...</description>
      <category>学习笔记/技术</category>
      <pubDate>Tue, 21 Jan 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 技术是指人类为了解决实际问题或提高效率而创造的工具、设备、系统和方法的集合。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>技术是指人类为了解决实际问题或提高效率而创造的工具、设备、系统和方法的集合。</li>
<li>涉及科学知识的实际应用，并随着人类文明的进步而不断发展。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>提高效率</strong>：通过自动化和优化流程，技术可以显著提高生产和工作效率。</li>
<li><strong>增强能力</strong>：技术可以扩展人类的能力，如飞行、深海探索、计算等。</li>
<li><strong>通信和连接</strong>：技术使得全球范围内的即时通信和资源共享成为可能。</li>
<li><strong>数据处理和分析</strong>：技术能够处理大量数据，提供洞察力和决策支持。</li>
<li><strong>改善生活质量</strong>：技术可以提高医疗水平、居住环境和生活便利性。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>安全性</strong>：使用技术时需要考虑数据安全和物理安全，防止泄露和事故。</li>
<li><strong>可持续性</strong>：技术的使用应考虑环境影响，促进可持续发展。</li>
<li><strong>用户友好性</strong>：技术设计应考虑用户体验，确保易用性和可访问性。</li>
<li><strong>法律和伦理</strong>：技术的应用应遵守相关法律法规，并考虑伦理道德问题。</li>
<li><strong>更新和维护</strong>：技术需要定期更新和维护，以保持其功能和安全性。</li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>电磁波</h2>
<p>详细总结：<a href="/note/Technology-%E7%94%B5%E7%A3%81%E6%B3%A2.html" target="_blank">Technology-电磁波</a></p>
<h2>通信</h2>
<p>详细总结：<a href="/note/Technology-%E9%80%9A%E4%BF%A1.html" target="_blank">Technology-通信</a></p>
<h2>区块链</h2>
<p>详细总结：<a href="/note/Technology-%E5%8C%BA%E5%9D%97%E9%93%BE.html" target="_blank">Technology-区块链</a></p>
<h2>人工智能</h2>
<p>详细总结：<a href="/note/Technology-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD.html" target="_blank">Technology-人工智能</a></p>
<h2>云服务</h2>
<p>详细总结：<a href="/note/Technology-%E4%BA%91%E6%9C%8D%E5%8A%A1.html" target="_blank">Technology-云服务</a></p>
<h2>RSS订阅聚合</h2>
<p>详细总结：<a href="/note/Technology-RSS%E8%AE%A2%E9%98%85%E8%81%9A%E5%90%88.html" target="_blank">Technology-RSS订阅聚合</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Library - Pip - LangChain</title>
      <link>https://blog.magictable.ha.cn/software/Library-Pip-LangChain.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Pip-LangChain.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Pip - LangChain</source>
      <description>文章摘要： LangChain 是一个面向大型语言模型（LLMs）的应用开发框架，它提供了一套工具和库，帮助开发者构建、运行和部署基于语言模型的应用。 LangChain架构图 简介 简要说明 LangChain 是一个面向大型语言模型（LLMs）的应用开发框架。 提供了一套工具和库，帮助开发者构建、运行和部署基于语言模型的应用。 通过提供一系列预先构...</description>
      <category>软件程序/代码类库</category>
      <pubDate>Wed, 15 Jan 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> LangChain 是一个面向大型语言模型（LLMs）的应用开发框架，它提供了一套工具和库，帮助开发者构建、运行和部署基于语言模型的应用。</p>
<!-- more -->
<blockquote>
<p></p>
</blockquote>
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>LangChain 是一个面向大型语言模型（LLMs）的应用开发框架。</li>
<li>提供了一套工具和库，帮助开发者构建、运行和部署基于语言模型的应用。</li>
<li>通过提供一系列预先构建的模块和集成，简化了与不同数据源和服务的交互过程。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>模块化和组合性</strong>：LangChain 允许开发者通过组合不同的模块来构建应用，这些模块可以是数据处理、模型调用、内存管理等。</li>
<li><strong>集成支持</strong>：支持与多种模型提供商（如 OpenAI、HuggingFace）和数据存储（如向量数据库）的集成。</li>
<li><strong>链式调用</strong>：可以将多个模块串联起来，形成处理链，以实现更复杂的业务逻辑。</li>
<li><strong>内存管理</strong>：提供内存管理功能，使得模型能够维持状态和上下文信息。</li>
<li><strong>工具集成</strong>：支持将外部工具集成到模型应用中，扩展模型的功能。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>依赖安装</strong>：LangChain 的某些功能可能需要额外安装依赖项，特别是当集成特定的模型或数据源时。</li>
<li><strong>Python 版本</strong>：LangChain 需要 Python 3.9 或更高版本。</li>
<li><strong>API 密钥</strong>：使用某些服务（如 OpenAI API）时，需要注册并获取 API 密钥。</li>
<li><strong>性能和资源</strong>：构建和运行基于大型语言模型的应用可能需要较大的计算资源。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>聊天机器人</strong>：构建能够与用户进行自然对话的聊天机器人。</li>
<li><strong>问答系统</strong>：开发能够理解问题并从数据源中检索答案的系统。</li>
<li><strong>内容生成</strong>：利用模型生成文章、报告或其他文本内容。</li>
<li><strong>语义搜索</strong>：创建能够理解查询意图的搜索引擎。</li>
<li><strong>数据分析和报告</strong>：从大量数据中提取信息并生成分析报告。</li>
<li><strong>教育和培训</strong>：开发辅助教育和培训的交互式应用。</li>
</ul>
<h2>Model I/O</h2>
<p>模型选择，准备输入、设定输出格式（结构）</p>
<p>Prompts：模板化、动态选择、管理模型输入。</p>
<p>Language Models：通过接口调用语言模式。</p>
<p>Output Parsers：从模型输出中提取信息。</p>
]]></content:encoded>
    </item>
    <item>
      <title>基础知识 - 文件格式</title>
      <link>https://blog.magictable.ha.cn/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E6%96%87%E4%BB%B6%E6%A0%BC%E5%BC%8F.html</link>
      <guid>https://blog.magictable.ha.cn/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E6%96%87%E4%BB%B6%E6%A0%BC%E5%BC%8F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">基础知识 - 文件格式</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 文件格式是计算机系统中用于存储和组织数据的一系列规则和标准。 定义了数据的编码方式、结构以及如何在存储介质上表示和读取这些数据。 主要功能 数据存储：提供一种标准化的方式来存储信息，确保数据可以长期保存。 数据交换：允许数据在不同应用程序和系统之间进行传输和共享。 数据访问：定义了如何解析和展示数据，使得应用程序...</description>
      <category>软件程序/操作系统</category>
      <pubDate>Mon, 13 Jan 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>文件格式是计算机系统中用于存储和组织数据的一系列规则和标准。</li>
<li>定义了数据的编码方式、结构以及如何在存储介质上表示和读取这些数据。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>数据存储</strong>：提供一种标准化的方式来存储信息，确保数据可以长期保存。</li>
<li><strong>数据交换</strong>：允许数据在不同应用程序和系统之间进行传输和共享。</li>
<li><strong>数据访问</strong>：定义了如何解析和展示数据，使得应用程序能够正确读取和处理文件内容。</li>
<li><strong>数据压缩</strong>：某些文件格式支持压缩，减少存储空间和传输带宽的需求。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>兼容性</strong>：不同的操作系统和应用软件可能支持不同的文件格式，需要确保格式兼容性。</li>
<li><strong>版本控制</strong>：文件格式可能随时间更新，旧版本软件可能无法打开新版本的文件格式。</li>
<li><strong>数据完整性</strong>：在转换或传输过程中，某些文件格式可能会丢失信息或引入错误。</li>
<li><strong>安全性</strong>：某些文件格式可能包含可执行代码，存在安全风险。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>文本文件</strong>：如 .txt，适用于简单的文本编辑和数据记录。</li>
<li><strong>办公文档</strong>：如 .docx、.xlsx，适用于撰写文档、制作表格和演示文稿。</li>
<li><strong>多媒体文件</strong>：如 .mp3、.mp4，适用于音频和视频内容的存储与播放。</li>
<li><strong>图像文件</strong>：如 .jpg、.png，适用于网页设计、摄影作品展示。</li>
<li><strong>网页文件</strong>：如 .html、.css，适用于网页内容的创建和展示。</li>
<li><strong>数据库文件</strong>：如 .db、.sqlite，适用于存储和查询大量结构化数据。</li>
</ul>
<h2>文本格式</h2>
<ul>
<li><code>txt</code>：</li>
</ul>
<h2>文本标记语言格式</h2>
<ul>
<li><code>html</code>：</li>
<li><code>css</code>：</li>
<li><code>md</code>：Markdown</li>
<li><code>tex</code>：LaTeX</li>
<li><code>uml</code>：统一建模语言。</li>
</ul>
<h2>文档格式</h2>
<ul>
<li><code>doc</code> <code>docs</code>：</li>
<li><code>pdf</code>：(便携式文档格式)</li>
<li><code>ppt</code> <code>pptx</code>：</li>
</ul>
<h2>多媒体格式</h2>
<ul>
<li><code>mp3</code>：(音频)</li>
<li><code>wav</code>：(波形音频文件格式)</li>
<li><code>mp4</code>：(视频)</li>
<li><code>avi</code>：(音频视频交错格式)</li>
</ul>
<h2>图片格式</h2>
<ul>
<li><code>jpg</code> <code>jpeg</code>：(联合图像专家组)</li>
<li><code>png</code>：(便携式网络图形)</li>
<li><code>gif</code>：(图形交换格式)</li>
<li><code>bmp</code>：(位图)</li>
<li><code>svg</code>：(可缩放矢量图形)</li>
<li><code>avif</code>：基于AV1视频编码的图像文件格式。（推荐）</li>
</ul>
<h2>数据库格式</h2>
<ul>
<li><code>db</code>：(数据库文件)</li>
<li><code>sqlite</code>：(SQLite 数据库)</li>
<li><code>sql</code>：(结构化查询语言文件)</li>
</ul>
<h2>软件包格式</h2>
<ul>
<li><code>exe</code>：(可执行文件)</li>
<li><code>apk</code>：(Android 应用包)</li>
<li><code>ipa</code>：(iOS 应用包)</li>
<li><code>deb</code>：(Debian 软件包)</li>
<li><code>rpm</code>：(Red Hat 软件包管理器)</li>
</ul>
<h2>编程语言格式</h2>
<ul>
<li><code>py</code>：Python源码格式。</li>
<li><code>java</code>：Java源码格式。</li>
<li><code>jar</code>：Java归档文件。</li>
<li><code>class</code>：Java类文件。</li>
</ul>
<h2>数据序列化格式</h2>
<ul>
<li><code>properties</code>：键值对配置文件</li>
<li><code>xml</code>：可扩展标记语言</li>
<li><code>yaml</code>：数据序列化格式</li>
<li><code>json</code>：轻量级的数据交换格式</li>
</ul>
<h2>其他格式</h2>
<ul>
<li><code>zip</code>：压缩格式。</li>
<li><code>rar</code>：(RAR 压缩文件)</li>
<li><code>7z</code>：(7z 压缩格式)</li>
<li><code>dll</code>：(动态链接库)</li>
<li><code>iso</code>：(光盘映像文件)</li>
<li><code>torrent</code>：(BitTorrent 种子文件)</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Language - SQL - 热门推荐 - 设计方案 - 智体服务网络</title>
      <link>https://blog.magictable.ha.cn/software/Language-SQL-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E8%AE%BE%E8%AE%A1%E6%96%B9%E6%A1%88-%E6%99%BA%E4%BD%93%E6%9C%8D%E5%8A%A1%E7%BD%91%E7%BB%9C.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-SQL-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E8%AE%BE%E8%AE%A1%E6%96%B9%E6%A1%88-%E6%99%BA%E4%BD%93%E6%9C%8D%E5%8A%A1%E7%BD%91%E7%BB%9C.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - SQL - 热门推荐 - 设计方案 - 智体服务网络</source>
      <description>文章摘要： 摘要内容。 用户（user） 用户基本信息（user_info_basic） 登录历史（logon_history）</description>
      <category>软件程序/程序语言</category>
      <pubDate>Sat, 11 Jan 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>用户（user）</h2>
<table>
<thead>
<tr>
<th style="text-align:left">字段名</th>
<th style="text-align:left">注释</th>
<th style="text-align:left">数据类型</th>
<th style="text-align:left">约束条件</th>
<th style="text-align:left">默认值</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">id</td>
<td style="text-align:left">主键ID</td>
<td style="text-align:left">int</td>
<td style="text-align:left">PRIMARY KEY, AUTO_INCREMENT</td>
<td style="text-align:left">/</td>
<td style="text-align:left">用户的唯一标识符</td>
</tr>
<tr>
<td style="text-align:left">nick_name</td>
<td style="text-align:left">匿名称呼</td>
<td style="text-align:left">varchar(255)</td>
<td style="text-align:left">NOT NULL</td>
<td style="text-align:left">/</td>
<td style="text-align:left">用户的昵称</td>
</tr>
<tr>
<td style="text-align:left">account</td>
<td style="text-align:left">账号</td>
<td style="text-align:left">char(21)</td>
<td style="text-align:left">NOT NULL, UNIQUE</td>
<td style="text-align:left">/</td>
<td style="text-align:left">用户的登录账号</td>
</tr>
<tr>
<td style="text-align:left">password</td>
<td style="text-align:left">密码</td>
<td style="text-align:left">varchar(18)</td>
<td style="text-align:left">NOT NULL</td>
<td style="text-align:left">123456</td>
<td style="text-align:left">用户的密码（存储哈希值）</td>
</tr>
<tr>
<td style="text-align:left">totp</td>
<td style="text-align:left">TOTP身份验证应用</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">ssh_public_key</td>
<td style="text-align:left">SSH公钥</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">gpg_public_key</td>
<td style="text-align:left">GPG公钥</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">register_time</td>
<td style="text-align:left">注册时间</td>
<td style="text-align:left">datetime</td>
<td style="text-align:left">NOT NULL</td>
<td style="text-align:left">CURRENT_TIMESTAMP</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">state</td>
<td style="text-align:left">状态</td>
<td style="text-align:left">tinyint</td>
<td style="text-align:left">NOT NULL</td>
<td style="text-align:left">1</td>
<td style="text-align:left">{0:禁用，1:正常}</td>
</tr>
</tbody>
</table>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>用户基本信息（user_info_basic）</h2>
<table>
<thead>
<tr>
<th style="text-align:left">字段名</th>
<th style="text-align:left">注释</th>
<th style="text-align:left">数据类型</th>
<th style="text-align:left">约束条件</th>
<th style="text-align:left">默认值</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">id</td>
<td style="text-align:left">主键ID</td>
<td style="text-align:left">int</td>
<td style="text-align:left">PRIMARY KEY, AUTO_INCREMENT</td>
<td style="text-align:left">/</td>
<td style="text-align:left">唯一标识符</td>
</tr>
<tr>
<td style="text-align:left">user_id</td>
<td style="text-align:left">用户id</td>
<td style="text-align:left">int</td>
<td style="text-align:left">NOT NULL, FOREIGN KEY REFERENCES user(id)</td>
<td style="text-align:left">/</td>
<td style="text-align:left">关联用户表的主键ID</td>
</tr>
<tr>
<td style="text-align:left">real_name</td>
<td style="text-align:left">真实姓名</td>
<td style="text-align:left">varchar(50)</td>
<td style="text-align:left">NOT NULL</td>
<td style="text-align:left">/</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">gender</td>
<td style="text-align:left">性别</td>
<td style="text-align:left">enum(0, 1)</td>
<td style="text-align:left">NOT NULL</td>
<td style="text-align:left">/</td>
<td style="text-align:left">{0:女性, 1:男性}</td>
</tr>
<tr>
<td style="text-align:left">age</td>
<td style="text-align:left">年龄</td>
<td style="text-align:left">tinyint unsigned</td>
<td style="text-align:left">NOT NULL</td>
<td style="text-align:left">0</td>
<td style="text-align:left">无符号小数值</td>
</tr>
<tr>
<td style="text-align:left">birthday</td>
<td style="text-align:left">出生日期</td>
<td style="text-align:left">date</td>
<td style="text-align:left">NOT NULL</td>
<td style="text-align:left">/</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">nationality</td>
<td style="text-align:left">国籍代码</td>
<td style="text-align:left">char(3)</td>
<td style="text-align:left">NOT NULL</td>
<td style="text-align:left">/</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">citizen_identity</td>
<td style="text-align:left">公民身份号码</td>
<td style="text-align:left">char(18)</td>
<td style="text-align:left">UNIQUE</td>
<td style="text-align:left">/</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">phone</td>
<td style="text-align:left">电话号码</td>
<td style="text-align:left">varchar(20)</td>
<td style="text-align:left">UNIQUE</td>
<td style="text-align:left">/</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">email</td>
<td style="text-align:left">电子邮箱</td>
<td style="text-align:left">varchar(255)</td>
<td style="text-align:left">UNIQUE</td>
<td style="text-align:left">/</td>
<td style="text-align:left">电子邮箱地址</td>
</tr>
</tbody>
</table>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>登录历史（logon_history）</h2>
]]></content:encoded>
    </item>
    <item>
      <title>Language - SQL - 热门推荐 - 设计方案 - 智体核心</title>
      <link>https://blog.magictable.ha.cn/software/Language-SQL-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E8%AE%BE%E8%AE%A1%E6%96%B9%E6%A1%88-%E6%99%BA%E4%BD%93%E6%A0%B8%E5%BF%83.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-SQL-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E8%AE%BE%E8%AE%A1%E6%96%B9%E6%A1%88-%E6%99%BA%E4%BD%93%E6%A0%B8%E5%BF%83.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - SQL - 热门推荐 - 设计方案 - 智体核心</source>
      <description>文章摘要： 摘要内容。 用户（user） 用户基本信息（user_info_basic） 智能体（agent） 语言、个性签名 系统名称 智能体软件版本 硬件设备信息</description>
      <category>软件程序/程序语言</category>
      <pubDate>Sat, 11 Jan 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>用户（user）</h2>
<table>
<thead>
<tr>
<th style="text-align:left">字段名</th>
<th style="text-align:left">注释</th>
<th style="text-align:left">数据类型</th>
<th style="text-align:left">约束条件</th>
<th style="text-align:left">默认值</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">id</td>
<td style="text-align:left">主键ID</td>
<td style="text-align:left">int</td>
<td style="text-align:left">PRIMARY KEY, AUTO_INCREMENT</td>
<td style="text-align:left">/</td>
<td style="text-align:left">唯一标识符</td>
</tr>
<tr>
<td style="text-align:left">nick_name</td>
<td style="text-align:left">匿名称呼</td>
<td style="text-align:left">varchar(50)</td>
<td style="text-align:left">NOT NULL</td>
<td style="text-align:left">/</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">account</td>
<td style="text-align:left">账号</td>
<td style="text-align:left">char(21)</td>
<td style="text-align:left">NOT NULL, UNIQUE</td>
<td style="text-align:left">/</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">password</td>
<td style="text-align:left">密码</td>
<td style="text-align:left">varchar(255)</td>
<td style="text-align:left">NOT NULL</td>
<td style="text-align:left">123456</td>
<td style="text-align:left">登录和退出的口令</td>
</tr>
<tr>
<td style="text-align:left">register_time</td>
<td style="text-align:left">注册时间</td>
<td style="text-align:left">datetime</td>
<td style="text-align:left">NOT NULL</td>
<td style="text-align:left">CURRENT_TIMESTAMP</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">state</td>
<td style="text-align:left">状态</td>
<td style="text-align:left">tinyint</td>
<td style="text-align:left">NOT NULL</td>
<td style="text-align:left">1</td>
<td style="text-align:left">{0:禁用，1:正常}</td>
</tr>
</tbody>
</table>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>用户基本信息（user_info_basic）</h2>
<table>
<thead>
<tr>
<th style="text-align:left">字段名</th>
<th style="text-align:left">注释</th>
<th style="text-align:left">数据类型</th>
<th style="text-align:left">约束条件</th>
<th style="text-align:left">默认值</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">id</td>
<td style="text-align:left">主键ID</td>
<td style="text-align:left">int</td>
<td style="text-align:left">PRIMARY KEY, AUTO_INCREMENT</td>
<td style="text-align:left">/</td>
<td style="text-align:left">唯一标识符</td>
</tr>
<tr>
<td style="text-align:left">user_id</td>
<td style="text-align:left">用户id</td>
<td style="text-align:left">int</td>
<td style="text-align:left">NOT NULL, FOREIGN KEY REFERENCES user(id)</td>
<td style="text-align:left">/</td>
<td style="text-align:left">关联用户表的主键ID</td>
</tr>
<tr>
<td style="text-align:left">real_name</td>
<td style="text-align:left">真实姓名</td>
<td style="text-align:left">varchar(50)</td>
<td style="text-align:left">NOT NULL</td>
<td style="text-align:left">/</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">gender</td>
<td style="text-align:left">性别</td>
<td style="text-align:left">enum(0, 1)</td>
<td style="text-align:left">NOT NULL</td>
<td style="text-align:left">/</td>
<td style="text-align:left">{0:女性, 1:男性}</td>
</tr>
<tr>
<td style="text-align:left">age</td>
<td style="text-align:left">年龄</td>
<td style="text-align:left">tinyint unsigned</td>
<td style="text-align:left">NOT NULL</td>
<td style="text-align:left">0</td>
<td style="text-align:left">无符号小数值</td>
</tr>
<tr>
<td style="text-align:left">birthday</td>
<td style="text-align:left">出生日期</td>
<td style="text-align:left">date</td>
<td style="text-align:left">NOT NULL</td>
<td style="text-align:left">/</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">nationality</td>
<td style="text-align:left">国籍代码</td>
<td style="text-align:left">char(3)</td>
<td style="text-align:left">NOT NULL</td>
<td style="text-align:left">/</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">citizen_identity</td>
<td style="text-align:left">公民身份号码</td>
<td style="text-align:left">char(18)</td>
<td style="text-align:left">UNIQUE</td>
<td style="text-align:left">/</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">phone</td>
<td style="text-align:left">电话号码</td>
<td style="text-align:left">varchar(20)</td>
<td style="text-align:left">UNIQUE</td>
<td style="text-align:left">/</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">email</td>
<td style="text-align:left">电子邮箱</td>
<td style="text-align:left">varchar(255)</td>
<td style="text-align:left">UNIQUE</td>
<td style="text-align:left">/</td>
<td style="text-align:left">电子邮箱地址</td>
</tr>
</tbody>
</table>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>智能体（agent）</h2>
<table>
<thead>
<tr>
<th style="text-align:left">字段名</th>
<th style="text-align:left">注释</th>
<th style="text-align:left">数据类型</th>
<th style="text-align:left">约束条件</th>
<th style="text-align:left">默认值</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">id</td>
<td style="text-align:left">主键ID</td>
<td style="text-align:left">int</td>
<td style="text-align:left">PRIMARY KEY, AUTO_INCREMENT</td>
<td style="text-align:left">/</td>
<td style="text-align:left">唯一标识符</td>
</tr>
<tr>
<td style="text-align:left">identity_code</td>
<td style="text-align:left">char(21)</td>
<td style="text-align:left">身份代码</td>
<td style="text-align:left">NOT NULL, UNIQUE</td>
<td style="text-align:left">/</td>
<td style="text-align:left">CHN（国籍代码）2020（年）01（月）01（日）00（时）00（分）00（秒）FFFF（4位十六进制随机数）</td>
</tr>
<tr>
<td style="text-align:left">nick_name</td>
<td style="text-align:left">匿名称呼</td>
<td style="text-align:left">varchar(50)</td>
<td style="text-align:left">NOT NULL</td>
<td style="text-align:left">/</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">real_name</td>
<td style="text-align:left">真实姓名</td>
<td style="text-align:left">varchar(50)</td>
<td style="text-align:left">NOT NULL</td>
<td style="text-align:left">/</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">gender</td>
<td style="text-align:left">性别</td>
<td style="text-align:left">enum(0, 1)</td>
<td style="text-align:left">NOT NULL</td>
<td style="text-align:left">/</td>
<td style="text-align:left">{0:女性, 1:男性}</td>
</tr>
<tr>
<td style="text-align:left">age</td>
<td style="text-align:left">年龄</td>
<td style="text-align:left">int unsigned</td>
<td style="text-align:left">NOT NULL</td>
<td style="text-align:left">0</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">birthday</td>
<td style="text-align:left">出生日期</td>
<td style="text-align:left">date</td>
<td style="text-align:left">NOT NULL</td>
<td style="text-align:left">/</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">nationality</td>
<td style="text-align:left">国籍代码</td>
<td style="text-align:left">char(3)</td>
<td style="text-align:left">NOT NULL</td>
<td style="text-align:left">/</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">program_version</td>
<td style="text-align:left">程序版本</td>
<td style="text-align:left">varchar(20)</td>
<td style="text-align:left">NOT NULL</td>
<td style="text-align:left">1.0</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">mode_state</td>
<td style="text-align:left">模式状态</td>
<td style="text-align:left">enum(0, 1, 2, 3, 4, 5, 6, 7, 8)</td>
<td style="text-align:left">NOT NULL</td>
<td style="text-align:left">6</td>
<td style="text-align:left">{0:格式化, 1:激活, 2:维护, 3:关机, 4:休眠, 5:低功耗, 6:常规, 7:超频, 8:重启}</td>
</tr>
</tbody>
</table>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p>语言、个性签名</p>
<p>系统名称</p>
<p>智能体软件版本</p>
<p>硬件设备信息</p>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 通信 - 协议 - ActivityPub</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E5%8D%8F%E8%AE%AE-ActivityPub.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E5%8D%8F%E8%AE%AE-ActivityPub.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 通信 - 协议 - ActivityPub</source>
      <description>文章摘要： ActivityPub 是一个开放的网络协议。 [!ibfo] 外部相关文章 ActivityPub官方文档：https://misskey-hub.net/cn/ 内部相关文章 简介 简要说明 ActivityPub 是一个开放的网络协议。 允许用户在不同的社交网络服务器之间进行互操作。 它是联邦宇宙（Fediverse）的基础，许多去中...</description>
      <category>学习笔记/技术</category>
      <pubDate>Fri, 10 Jan 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> ActivityPub 是一个开放的网络协议。</p>
<!-- more -->
<blockquote>
<p>[!ibfo]</p>
<p>外部相关文章</p>
<ul>
<li>ActivityPub官方文档：https://misskey-hub.net/cn/</li>
</ul>
<p>内部相关文章</p>
<ul>
<li></li>
</ul>
</blockquote>
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>ActivityPub 是一个开放的网络协议。</li>
<li>允许用户在不同的社交网络服务器之间进行互操作。</li>
<li>它是联邦宇宙（Fediverse）的基础，许多去中心化的社交网络平台都采用这个协议。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>用户间互操作性</strong>：ActivityPub 允许用户在不同的社交网络实例之间发送和接收消息，即使这些实例是由不同的组织或个人运营的。</li>
<li><strong>内容发布和订阅</strong>：用户可以在一个平台上发布内容，该内容可以被订阅的其他平台上的用户看到。</li>
<li><strong>活动流</strong>：ActivityPub 使用活动流（Activity Streams）来表示用户的行为，如发帖、评论、点赞等。</li>
<li><strong>分布式通信</strong>：信息在服务器之间传递，而不是通过中心化的服务。</li>
<li><strong>联邦身份验证</strong>：使用 OAuth 2.0 和 WebFinger 等协议来验证用户身份。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>服务器性能</strong>：由于 ActivityPub 依赖于服务器之间的通信，服务器性能和网络延迟可能会影响用户体验。</li>
<li><strong>安全性</strong>：需要确保服务器之间的通信是加密的，以保护用户数据。</li>
<li><strong>数据一致性</strong>：在分布式系统中保持数据一致性可能会比较复杂。</li>
<li><strong>用户隐私</strong>：ActivityPub 本身不提供隐私保护机制，这需要由实现该协议的平台来处理。</li>
<li><strong>协议兼容性</strong>：虽然 ActivityPub 旨在促进互操作性，但不同实现之间的兼容性问题仍然可能存在。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>社交网络</strong>：去中心化的社交网络平台，如 Mastodon，是 ActivityPub 最常见的应用场景。</li>
<li><strong>内容创作和分享</strong>：博客、视频分享平台（如 PeerTube）和其他内容创作平台可以使用 ActivityPub 来分享内容。</li>
<li><strong>协作工具</strong>：去中心化的协作和项目管理工具可以利用 ActivityPub 实现跨实例的协作。</li>
<li><strong>教育平台</strong>：教育机构可以使用 ActivityPub 来构建可互操作的在线学习社区。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 通信 - 协议 - IPv4</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E5%8D%8F%E8%AE%AE-IPv4.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E5%8D%8F%E8%AE%AE-IPv4.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 通信 - 协议 - IPv4</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 主要功能 注意事项 适用场景</description>
      <category>学习笔记/技术</category>
      <pubDate>Fri, 10 Jan 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 通信 - 协议 - IPv6</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E5%8D%8F%E8%AE%AE-IPv6.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E5%8D%8F%E8%AE%AE-IPv6.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 通信 - 协议 - IPv6</source>
      <description>文章摘要： IPv6（Internet Protocol Version 6）是互联网协议的第六版。 简介 简要说明 IPv6（Internet Protocol Version 6）是互联网协议的第六版。 为了解决IPv4地址耗尽的问题，并提供更多的网络地址和更高效的数据传输方式。 IPv6地址长度为128位，远远超过IPv4的32位，能够提供几乎无...</description>
      <category>学习笔记/技术</category>
      <pubDate>Fri, 10 Jan 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> IPv6（Internet Protocol Version 6）是互联网协议的第六版。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>IPv6（Internet Protocol Version 6）是互联网协议的第六版。</li>
<li>为了解决IPv4地址耗尽的问题，并提供更多的网络地址和更高效的数据传输方式。</li>
<li>IPv6地址长度为128位，远远超过IPv4的32位，能够提供几乎无限的地址空间。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>地址空间</strong>: 提供了巨大的地址空间，理论上可以分配给每台设备唯一的全球地址。</li>
<li><strong>安全性</strong>: 集成了IPsec，提供端到端的加密和数据完整性。</li>
<li><strong>简化的网络配置</strong>: 支持无状态地址自动配置（SLAAC），简化了网络配置过程。</li>
<li><strong>更好的数据包处理</strong>: 优化的数据包头部结构，减少了数据包处理的开销。</li>
<li><strong>多播和任播支持</strong>: 改进了多播（一对多通信）和任播（数据被发送到最近的或最佳的目的地）。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>兼容性</strong>: IPv6与IPv4不直接兼容，需要转换技术（如双栈、隧道等）来过渡。</li>
<li><strong>设备和软件支持</strong>: 确保网络设备（路由器、交换机等）和操作系统支持IPv6。</li>
<li><strong>安全配置</strong>: 虽然IPv6提供了更好的安全特性，但仍然需要正确配置以确保网络安全。</li>
<li><strong>网络管理</strong>: 网络管理员需要熟悉IPv6的管理和配置，与IPv4有所不同。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>大规模网络</strong>: 对于需要大量IP地址的机构或网络，如大型企业、数据中心、物联网（IoT）设备。</li>
<li><strong>移动网络</strong>: 适用于移动网络，因为IPv6可以提供足够的地址来支持移动设备。</li>
<li><strong>全球互联网</strong>: 适用于全球互联网的长期扩展，解决了IPv4地址耗尽的问题。</li>
<li><strong>安全性要求高的网络</strong>: 由于IPv6原生支持IPsec，适用于对安全性有高要求的网络环境。</li>
<li><strong>新网络部署</strong>: 对于新的网络部署，可以直接采用IPv6，避免未来升级的麻烦。</li>
</ul>
<h2>格式</h2>
<ul>
<li><strong>冒号分隔</strong>: IPv6地址由8组十六进制数字组成，每组4个数字，组与组之间用冒号<code>:</code>分隔。</li>
<li>例如：<code>2001:0db8:85a3:0000:0000:8a2e:0370:7334</code></li>
</ul>
<h2>缩写规则</h2>
<p>省略前导0</p>
<ul>
<li>在每组十六进制数字中，可以省略前导的0，但每组至少要保留一个数字。</li>
<li>例如，<code>0000</code>可以缩写为<code>0</code></li>
</ul>
<p>双冒号<code>::</code></p>
<ul>
<li>如果一个IPv6地址中包含多个连续的组都是0，可以用双冒号<code>::</code>来代替这些0。但一个IPv6地址中双冒号只能出现一次，否则会导致地址不明确。</li>
<li>例如，<code>2001:0db8:85a3:0000:0000:8a2e:0370:7334</code>可以缩写为<code>2001:0db8:85a3::8a2e:0370:7334</code></li>
</ul>
<p>方括号<code>[]</code>包裹</p>
<ul>
<li>IPv6地址后面写端口号的时候，需要先使用方括号<code>[]</code>把IP地址包裹起来。避免端口号的冒号<code>:</code>和前面协议的冒号<code>:</code>产生混淆。</li>
<li>例如：<code>https://[2001:0db8:85a3:0000:0000:8a2e:0370:7334]/64</code></li>
</ul>
<h2>地址类型</h2>
<ul>
<li><code>2</code>或<code>3</code>开头的地址通常是全球单播地址，即公网IP地址。</li>
<li><code>f</code>开头的地址（如<code>fe80</code>）是本地链路地址，通常用于局域网内部。</li>
<li><code>::1</code>是本地环路地址，类似于IPv4中的<code>127.0.0.1</code>。</li>
</ul>
<h2>前缀和后缀</h2>
<ul>
<li><strong>前缀</strong>: IPv6地址后面的<code>/64</code>表示前缀长度为64位。前缀是网络部分，用于定义子网的边界。例如，<code>2001:0db8:85a3::/64</code>表示前64位是网络地址。</li>
<li><strong>后缀</strong>: 后缀通常指的是接口ID，它是地址的最后一部分，用于标识网络中的特定接口。在IPv6中，接口ID通常是64位。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Package - TightVNC</title>
      <link>https://blog.magictable.ha.cn/software/Package-TightVNC.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-TightVNC.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - TightVNC</source>
      <description>文章摘要： 摘要内容。 相关信息 外部相关文章 官方网站：https://www.tightvnc.com/ 内部相关文章 简介 简要说明 TightVNC 是一款免费的开源远程桌面软件。 可让您访问和控制 computer 通过网络。凭借其直观的界面，您可以与遥控器进行交互 屏幕，就好像您坐在它前面一样。您可以打开文件、启动应用程序以及 在远程桌面上...</description>
      <category>软件程序/软件包</category>
      <pubDate>Fri, 10 Jan 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li>官方网站：https://www.tightvnc.com/</li>
</ul>
<p>内部相关文章</p>
<ul>
<li></li>
</ul>
</div>
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>TightVNC 是一款免费的开源远程桌面软件。</li>
<li>可让您访问和控制 computer 通过网络。凭借其直观的界面，您可以与遥控器进行交互 屏幕，就好像您坐在它前面一样。您可以打开文件、启动应用程序以及 在远程桌面上执行其他操作，就像您身临其境一样。</li>
<li>TightVNC 是VNC（Virtual Network Computing）的一个变种，提供了对远程计算机的图形界面进行查看和控制的功能。</li>
<li>TightVNC特别注重性能和安全性，适合在低带宽网络环境中使用。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>远程控制</strong>：用户可以远程查看和控制另一台计算机的桌面环境。</li>
<li><strong>文件传输</strong>：支持在本地和远程计算机之间进行文件传输。</li>
<li><strong>多平台兼容性</strong>：支持多种操作系统，包括Windows、Linux和macOS。</li>
<li><strong>性能优化</strong>：通过压缩算法减少数据传输量，提高在慢速网络连接下的性能。</li>
<li><strong>安全性</strong>：支持使用VNC密码保护远程会话，以及通过SSH隧道进行加密连接。</li>
<li><strong>多用户支持</strong>：允许多个用户同时连接到同一台VNC服务器。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>安全性</strong>：默认情况下，TightVNC的通信是不加密的，应通过SSH隧道或其他加密手段来提高安全性。</li>
<li><strong>性能</strong>：虽然TightVNC优化了性能，但在网络条件较差时，远程桌面可能会出现延迟。</li>
<li><strong>权限</strong>：确保远程控制时具有适当的权限，以避免未授权访问。</li>
<li><strong>防火墙设置</strong>：如果服务器位于防火墙后面，需要确保VNC使用的端口（默认为5900）是开放的。</li>
<li><strong>桌面环境</strong>：在某些情况下，远程桌面可能无法正确显示或交互，特别是当使用非标准分辨率或桌面环境时。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>远程技术支持</strong>：IT支持人员可以使用TightVNC远程解决用户的技术问题。</li>
<li><strong>教育环境</strong>：教师可以使用TightVNC监控学生的计算机活动或提供远程教学。</li>
<li><strong>家庭或小型办公网络</strong>：用户可以在家中或小型办公室中远程访问另一台计算机。</li>
<li><strong>服务器管理</strong>：系统管理员可以使用TightVNC远程管理服务器，进行配置和维护。</li>
<li><strong>低带宽连接</strong>：由于TightVNC的性能优化，它特别适合在带宽有限的网络环境中使用。</li>
</ul>
<h2>安装与卸载</h2>
<p>软件包名：tightvncserver</p>
<p>详细总结：<a href=""></a></p>
<h2>终端命令</h2>
<p>详细总结：<a href=""></a></p>
<h2>热门推荐</h2>
<p>详细总结：<a href=""></a></p>
<h2>配置文件</h2>
<p>详细总结：<a href=""></a></p>
<h2>问题总结</h2>
<p>详细总结：<a href=""></a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Health - 人格</title>
      <link>https://blog.magictable.ha.cn/rule/Health-%E4%BA%BA%E6%A0%BC.html</link>
      <guid>https://blog.magictable.ha.cn/rule/Health-%E4%BA%BA%E6%A0%BC.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Health - 人格</source>
      <description>文章摘要： 人格（Personality）是指个体在行为和思维上长期稳定表现出来的独特心理特征的总和。 简介 简要说明 定义：人格是一个人区别于他人的心理倾向、心理特征、行为特征的总和，包括性格、气质、能力、兴趣、态度和价值观等方面。 稳定性：人格具有相对稳定性，虽然在不同情境下可能有所变化，但总体上是持久的。 独特性：每个人的人格都是独一无二的，即使...</description>
      <category>世界规则/健康</category>
      <pubDate>Wed, 08 Jan 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 人格（Personality）是指个体在行为和思维上长期稳定表现出来的独特心理特征的总和。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li><strong>定义</strong>：人格是一个人区别于他人的心理倾向、心理特征、行为特征的总和，包括性格、气质、能力、兴趣、态度和价值观等方面。</li>
<li><strong>稳定性</strong>：人格具有相对稳定性，虽然在不同情境下可能有所变化，但总体上是持久的。</li>
<li><strong>独特性</strong>：每个人的人格都是独一无二的，即使是双胞胎也有各自不同的人格特征。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>自我认同</strong>：人格帮助个体建立自我认同感，明确“我是谁”。</li>
<li><strong>社会交往</strong>：人格特征影响个体与他人交往的方式和效果，是人际互动的基础。</li>
<li><strong>适应环境</strong>：不同的人格特征有助于个体以不同的方式适应社会和环境。</li>
<li><strong>预测行为</strong>：人格可以预测个体在特定情境下可能的行为倾向。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>尊重差异</strong>：应尊重每个人的人格差异，避免以自己的标准评价他人。</li>
<li><strong>发展潜能</strong>：在教育和培养中，应注意激发个体积极的人格特质，帮助其全面发展。</li>
<li><strong>避免刻板印象</strong>：不应以人格测试结果给人贴上标签，应认识到人格的复杂性和动态性。</li>
<li><strong>隐私保护</strong>：在处理与人格相关的信息时，要注意保护个人隐私。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>人力资源选拔</strong>：在招聘过程中，通过人格测试可以了解应聘者的性格特点，预测其工作表现。</li>
<li><strong>心理辅导</strong>：心理咨询师通过分析个体的人格特征，提供更加个性化的辅导。</li>
<li><strong>教育培养</strong>：教育者根据学生的人格特征进行因材施教，提高教育效果。</li>
<li><strong>团队建设</strong>：在组建团队时考虑成员的人格特质，促进团队内部的良好协作。</li>
<li><strong>自我认知</strong>：个人可以通过了解自己的人格特征，更好地规划职业发展和生活目标。</li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>相关知识：[九型人格</p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Component - 芯片 - 指令集</title>
      <link>https://blog.magictable.ha.cn/hardware/Component-%E8%8A%AF%E7%89%87-%E6%8C%87%E4%BB%A4%E9%9B%86.html</link>
      <guid>https://blog.magictable.ha.cn/hardware/Component-%E8%8A%AF%E7%89%87-%E6%8C%87%E4%BB%A4%E9%9B%86.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Component - 芯片 - 指令集</source>
      <description>文章摘要： 指令集（Instruction Set）是处理器能够理解和执行的一组机器语言的命令。 简介 简要说明 指令集（Instruction Set）定义了处理器可以执行的操作类型。 包括数据传输、算术计算、控制操作等。 每种处理器架构都有其特定的指令集。 这些指令集决定了软件如何与硬件交互。 主要特点 操作码：每条指令都有一个操作码，用于指示处理...</description>
      <category>硬件设备/元器件</category>
      <pubDate>Tue, 07 Jan 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 指令集（Instruction Set）是处理器能够理解和执行的一组机器语言的命令。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>指令集（Instruction Set）定义了处理器可以执行的操作类型。</li>
<li>包括数据传输、算术计算、控制操作等。</li>
<li>每种处理器架构都有其特定的指令集。</li>
<li>这些指令集决定了软件如何与硬件交互。</li>
</ul>
<p>主要特点</p>
<ul>
<li><strong>操作码</strong>：每条指令都有一个操作码，用于指示处理器执行的具体操作。</li>
<li><strong>寻址模式</strong>：指令集定义了如何指定操作数的位置，如立即数、寄存器、内存地址等。</li>
<li><strong>数据类型</strong>：指令集支持不同的数据类型，如整数、浮点数、字符等。</li>
<li><strong>指令长度</strong>：指令集规定了指令的长度，可以是固定长度或可变长度。</li>
<li><strong>功能扩展</strong>：许多指令集支持通过扩展来增加新的功能，如多媒体指令、加密指令等。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>兼容性</strong>：升级或更换处理器时，需要考虑新处理器的指令集是否与现有软件兼容。</li>
<li><strong>性能</strong>：不同的指令集对处理器的性能有不同影响，选择时应考虑性能需求。</li>
<li><strong>功耗</strong>：某些指令可能比其他指令消耗更多的电力，这在移动设备中尤为重要。</li>
<li><strong>安全性</strong>：某些指令集可能包含用于增强安全性的特性，如硬件级加密支持。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>通用计算</strong>：如x86指令集广泛用于个人电脑和服务器，适用于多种通用计算任务。</li>
<li><strong>移动和嵌入式设备</strong>：如ARM指令集，适用于功耗敏感的移动设备和嵌入式系统。</li>
<li><strong>高性能计算</strong>：如IBM的Power指令集和Intel的AVX指令集，适用于需要高性能计算的科学研究和数据分析。</li>
<li><strong>特定领域应用</strong>：如GPU使用的指令集，专门为图形处理和并行计算设计。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Component - 芯片 - 指令集架构</title>
      <link>https://blog.magictable.ha.cn/hardware/Component-%E8%8A%AF%E7%89%87-%E6%8C%87%E4%BB%A4%E9%9B%86%E6%9E%B6%E6%9E%84.html</link>
      <guid>https://blog.magictable.ha.cn/hardware/Component-%E8%8A%AF%E7%89%87-%E6%8C%87%E4%BB%A4%E9%9B%86%E6%9E%B6%E6%9E%84.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Component - 芯片 - 指令集架构</source>
      <description>文章摘要： 指令集架构是计算机处理器的基本设计方法，它决定了处理器的内部结构和能够执行的操作类型。 简介 简要说明 指令集架构是处理器硬件设计的蓝图。 包括指令集、寄存器集、存储模型、数据类型、中断和异常处理、外部I/O。 不同的架构有不同的设计哲学和优化目标，如性能、功耗、成本等。 主要特点 指令集：定义了处理器可以执行的所有机器指令。 寄存器：提供...</description>
      <category>硬件设备/元器件</category>
      <pubDate>Tue, 07 Jan 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 指令集架构是计算机处理器的基本设计方法，它决定了处理器的内部结构和能够执行的操作类型。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>指令集架构是处理器硬件设计的蓝图。</li>
<li>包括指令集、寄存器集、存储模型、数据类型、中断和异常处理、外部I/O。</li>
<li>不同的架构有不同的设计哲学和优化目标，如性能、功耗、成本等。</li>
</ul>
<p>主要特点</p>
<ul>
<li><strong>指令集</strong>：定义了处理器可以执行的所有机器指令。</li>
<li><strong>寄存器</strong>：提供快速的存储位置，用于指令执行过程中的数据操作。</li>
<li><strong>数据路径宽度</strong>：决定了处理器一次可以处理的数据位数，如32位、64位等。</li>
<li><strong>寻址模式</strong>：处理器如何访问内存中的数据。</li>
<li><strong>并行处理能力</strong>：支持多线程或多核心处理的能力。</li>
<li><strong>功耗管理</strong>：架构设计的功耗效率和电源管理特性。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>兼容性</strong>：选择处理器架构时，需要考虑与现有软件和操作系统的兼容性。</li>
<li><strong>性能需求</strong>：根据应用场景的性能需求选择合适的架构。</li>
<li><strong>功耗和散热</strong>：高功耗的处理器可能需要更复杂的散热解决方案。</li>
<li><strong>成本</strong>：不同的架构可能涉及不同的成本，包括硬件成本和软件开发成本。</li>
<li><strong>生态系统</strong>：考虑该架构的生态系统，包括软件开发工具、库、社区支持等。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>LoongArch</strong>：完全由中国自主研发，拥有独立的知识产权。</li>
<li><strong>x86/x86_64</strong>：适用于个人电脑、服务器和工作站，支持广泛的操作系统和软件。</li>
<li><strong>ARM</strong>：适用于移动设备、嵌入式系统、物联网设备，注重低功耗和高效率。</li>
<li><strong>RISC-V</strong>：适用于各种定制化的嵌入式系统和新兴的物联网设备，具有高度的可扩展性和灵活性。</li>
</ul>
<h2>基础知识</h2>
<p>指令集架构分为</p>
<ul>
<li>复杂指令集架构（CISC）</li>
<li>精简指令集架构（RISC）</li>
</ul>
<h2>产品应用</h2>
<h3>x86_64(amd64)</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>ARM</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>RISC-V</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>LoongArch</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Paper - B-STaR：监测和平衡自学推理者的探索和开发</title>
      <link>https://blog.magictable.ha.cn/note/Paper-B-STaR%EF%BC%9A%E7%9B%91%E6%B5%8B%E5%92%8C%E5%B9%B3%E8%A1%A1%E8%87%AA%E5%AD%A6%E6%8E%A8%E7%90%86%E8%80%85%E7%9A%84%E6%8E%A2%E7%B4%A2%E5%92%8C%E5%BC%80%E5%8F%91.html</link>
      <guid>https://blog.magictable.ha.cn/note/Paper-B-STaR%EF%BC%9A%E7%9B%91%E6%B5%8B%E5%92%8C%E5%B9%B3%E8%A1%A1%E8%87%AA%E5%AD%A6%E6%8E%A8%E7%90%86%E8%80%85%E7%9A%84%E6%8E%A2%E7%B4%A2%E5%92%8C%E5%BC%80%E5%8F%91.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Paper - B-STaR：监测和平衡自学推理者的探索和开发</source>
      <description>文章摘要： 在缺乏用于复杂推理任务的大量人工注释数据的情况下，自我提升（即根据自己的输出训练模型）已成为提高性能的主要方法。然而，这些迭代自我改进方法的机制背后的关键因素仍然知之甚少，例如在什么条件下自我改进是有效的，以及当前迭代中的瓶颈是什么。在这项工作中，我们确定并提出了监测此迭代过程中两个关键因素的方法：（1） 模型产生足够多样化响应（探索）的能...</description>
      <category>学习笔记/论文</category>
      <pubDate>Tue, 07 Jan 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 在缺乏用于复杂推理任务的大量人工注释数据的情况下，自我提升（即根据自己的输出训练模型）已成为提高性能的主要方法。然而，这些迭代自我改进方法的机制背后的关键因素仍然知之甚少，例如在什么条件下自我改进是有效的，以及当前迭代中的瓶颈是什么。在这项工作中，我们确定并提出了监测此迭代过程中两个关键因素的方法：（1） 模型产生足够多样化响应（探索）的能力;（2） 外部奖励在区分高质量候选人和低质量候选人（剥削）方面的有效性。以数学推理为案例研究，我们从定量分析开始，以跟踪探索和开发的动态，发现模型的探索能力会随着迭代而迅速恶化，并且利用外部奖励的有效性也会降低。在这些发现的推动下，我们引入了 B-STaR，这是一个自学推理框架，它可以在迭代之间自主调整配置以平衡探索和开发，从而根据当前的策略模型和可用的奖励优化自我提升的有效性。我们在数学推理、编码和常识推理方面的实验表明，B-STaR 不仅增强了模型在整个训练过程中的探索能力，而且在探索和开发之间实现了更有效的平衡，从而获得了卓越的性能。</p>
<!-- more -->
<div class="hint-container important">
<p class="hint-container-title">重要</p>
<p>标题</p>
<ul>
<li>B-STaR:Monitoring and Balancing Exploration and Exploitation in Self-Taught Reasoners</li>
<li>B-STaR：监测和平衡自学推理者的探索和开发</li>
</ul>
<p>作者</p>
<ul>
<li>Weihao Zeng, Yuzhen Huang, Lulu Zhao, Yijun Wang, Zifei Shan, Junxian He</li>
</ul>
<p>时间</p>
<ul>
<li>2024-12-23</li>
</ul>
<p>关键词</p>
<ul>
<li>人工智能（cs.AI）;计算和语言（cs.CL）;机器学习（cs.LG）</li>
</ul>
<p>论文地址</p>
<ul>
<li>https://arxiv.org/abs/2412.17256</li>
</ul>
</div>
<h2>引言</h2>
<h3>研究背景</h3>
<ul>
<li>简要介绍研究背景和意义</li>
</ul>
<h3>研究现状</h3>
<ul>
<li>概述当前领域的研究现状</li>
</ul>
<h3>本文贡献</h3>
<ul>
<li>列出本文的主要贡献和创新点</li>
</ul>
<h2>相关工作</h2>
<p>方法1</p>
<ul>
<li>简要介绍相关方法1</li>
</ul>
<p>方法2</p>
<ul>
<li>简要介绍相关方法2</li>
</ul>
<h2>方法/理论</h2>
<h3>方法概述</h3>
<ul>
<li>详细描述本文提出的方法/理论</li>
</ul>
<h3>实现步骤</h3>
<ul>
<li>列出实现方法的具体步骤</li>
</ul>
<h3>优点与不足</h3>
<ul>
<li>分析方法的优点和不足</li>
</ul>
<h2>实验/数据分析</h2>
<h3>数据集描述</h3>
<ul>
<li>介绍实验所使用的数据集</li>
</ul>
<h3>实验方法</h3>
<ul>
<li>描述实验过程和方法</li>
</ul>
<h3>实验结果</h3>
<ul>
<li>展示实验结果</li>
</ul>
<h3>结果分析</h3>
<ul>
<li>分析实验结果的含义和意义</li>
</ul>
<h2>结论与展望</h2>
<h3>结论</h3>
<ul>
<li>总结本文的研究成果</li>
</ul>
<h3>展望</h3>
<ul>
<li>提出未来研究方向和改进空间</li>
</ul>
<h2>参考文献和引文</h2>
<ul>
<li>参考文献1</li>
<li>参考文献2</li>
<li>参考文献3</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Paper - 搜索和学习的扩展：从强化学习的角度再现o1的路线图</title>
      <link>https://blog.magictable.ha.cn/note/Paper-%E6%90%9C%E7%B4%A2%E5%92%8C%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%89%A9%E5%B1%95%EF%BC%9A%E4%BB%8E%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0%E7%9A%84%E8%A7%92%E5%BA%A6%E5%86%8D%E7%8E%B0o1%E7%9A%84%E8%B7%AF%E7%BA%BF%E5%9B%BE.html</link>
      <guid>https://blog.magictable.ha.cn/note/Paper-%E6%90%9C%E7%B4%A2%E5%92%8C%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%89%A9%E5%B1%95%EF%BC%9A%E4%BB%8E%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0%E7%9A%84%E8%A7%92%E5%BA%A6%E5%86%8D%E7%8E%B0o1%E7%9A%84%E8%B7%AF%E7%BA%BF%E5%9B%BE.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Paper - 搜索和学习的扩展：从强化学习的角度再现o1的路线图</source>
      <description>文章摘要： OpenAI o1 代表了人工交互的一个重要里程碑，它在许多需要强有力推理的艰巨任务上实现了专家级的性能 这个 http URL 声称 o1 背后的主要技术是加固 learining。最近的工作使用了知识蒸馏等替代方法来模仿 o1 的推理风格，但它们的有效性受到教师模型的能力上限的限制。因此，本文从强化学习的角度分析了实现 O1 的路线图，...</description>
      <category>学习笔记/论文</category>
      <pubDate>Tue, 07 Jan 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> OpenAI o1 代表了人工交互的一个重要里程碑，它在许多需要强有力推理的艰巨任务上实现了专家级的性能 <a href="http://ability.OpenAI" target="_blank" rel="noopener noreferrer">这个 http URL</a> 声称 o1 背后的主要技术是加固 learining。最近的工作使用了知识蒸馏等替代方法来模仿 o1 的推理风格，但它们的有效性受到教师模型的能力上限的限制。因此，本文从强化学习的角度分析了实现 O1 的路线图，重点关注四个关键组成部分：策略初始化、奖励设计、搜索和学习。策略初始化使模型能够开发类似人类的推理行为，使它们能够有效地探索复杂问题的解决方案空间。奖励设计通过奖励塑造或奖励建模提供密集而有效的信号，这是搜索和学习的指导。在训练和测试阶段，搜索在生成高质量的解决方案方面起着至关重要的作用，这可以通过更多的计算生成更好的解决方案。学习利用搜索生成的数据来改进策略，这可以通过更多的参数和更多的搜索数据来实现更好的性能。试图复制 O1 的现有开源项目可以被视为我们路线图的一部分或变体。总的来说，这些组成部分强调了学习和搜索如何推动 o1 的发展，为 LLM。</p>
<!-- more -->
<div class="hint-container important">
<p class="hint-container-title">重要</p>
<p>标题</p>
<ul>
<li>Scaling of Search and Learning: A Roadmap to Reproduce o1 from Reinforcement Learning Perspective</li>
<li>搜索和学习的扩展：从强化学习角度再现 o1 的路线图</li>
</ul>
<p>作者</p>
<ul>
<li>Zhiyuan Zeng, Qinyuan Cheng, Zhangyue Yin, Bo Wang, Shimin Li, Yunhua Zhou, Qipeng Guo, Xuanjing Huang, Xipeng Qiu</li>
</ul>
<p>时间</p>
<ul>
<li>2024-12-18</li>
</ul>
<p>关键词</p>
<ul>
<li>人工智能 （cs.AI）;机器学习 （cs.LG）</li>
</ul>
<p>论文地址</p>
<ul>
<li>https://arxiv.org/abs/2412.14135</li>
</ul>
</div>
<h2>引言</h2>
<h3>研究背景</h3>
<ul>
<li>简要介绍研究背景和意义</li>
</ul>
<h3>研究现状</h3>
<ul>
<li>概述当前领域的研究现状</li>
</ul>
<h3>本文贡献</h3>
<ul>
<li>列出本文的主要贡献和创新点</li>
</ul>
<h2>相关工作</h2>
<p>方法1</p>
<ul>
<li>简要介绍相关方法1</li>
</ul>
<p>方法2</p>
<ul>
<li>简要介绍相关方法2</li>
</ul>
<h2>方法/理论</h2>
<h3>方法概述</h3>
<ul>
<li>详细描述本文提出的方法/理论</li>
</ul>
<h3>实现步骤</h3>
<ul>
<li>列出实现方法的具体步骤</li>
</ul>
<h3>优点与不足</h3>
<ul>
<li>分析方法的优点和不足</li>
</ul>
<h2>实验/数据分析</h2>
<h3>数据集描述</h3>
<ul>
<li>介绍实验所使用的数据集</li>
</ul>
<h3>实验方法</h3>
<ul>
<li>描述实验过程和方法</li>
</ul>
<h3>实验结果</h3>
<ul>
<li>展示实验结果</li>
</ul>
<h3>结果分析</h3>
<ul>
<li>分析实验结果的含义和意义</li>
</ul>
<h2>结论与展望</h2>
<h3>结论</h3>
<ul>
<li>总结本文的研究成果</li>
</ul>
<h3>展望</h3>
<ul>
<li>提出未来研究方向和改进空间</li>
</ul>
<h2>参考文献和引文</h2>
<ul>
<li>参考文献1</li>
<li>参考文献2</li>
<li>参考文献3</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Obsidian - 问题总结</title>
      <link>https://blog.magictable.ha.cn/software/Package-Obsidian-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Obsidian-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Obsidian - 问题总结</source>
      <description>文章摘要： 摘要内容。 国内无法正常下载官方插件 详细总结：</description>
      <category>软件程序/软件包</category>
      <pubDate>Mon, 06 Jan 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>国内无法正常下载官方插件</h2>
<p>详细总结：<a href="/software/Package-Obsidian-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E6%8F%92%E4%BB%B6%E4%B8%8B%E8%BD%BD%E6%96%B9%E6%A1%88.html" target="_blank">Package-Obsidian-问题总结-插件下载方案</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Solution（方案）</title>
      <link>https://blog.magictable.ha.cn/note/Solution%EF%BC%88%E6%96%B9%E6%A1%88%EF%BC%89.html</link>
      <guid>https://blog.magictable.ha.cn/note/Solution%EF%BC%88%E6%96%B9%E6%A1%88%EF%BC%89.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Solution（方案）</source>
      <description>文章摘要： 解决方案是指为了解决特定问题或满足特定需求而提出的一套方法、策略或措施。 简介 简要说明 解决方案是指为了解决特定问题或满足特定需求而提出的一套方法、策略或措施。 通常包括对问题的分析、目标设定、资源分配以及实施步骤的规划。 主要功能 问题诊断：识别和定义问题的本质和根源。 目标设定：明确解决方案要达到的具体目标和预期效果。 策略制定：提出...</description>
      <category>学习笔记/方案</category>
      <pubDate>Sun, 05 Jan 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 解决方案是指为了解决特定问题或满足特定需求而提出的一套方法、策略或措施。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>解决方案是指为了解决特定问题或满足特定需求而提出的一套方法、策略或措施。</li>
<li>通常包括对问题的分析、目标设定、资源分配以及实施步骤的规划。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>问题诊断</strong>：识别和定义问题的本质和根源。</li>
<li><strong>目标设定</strong>：明确解决方案要达到的具体目标和预期效果。</li>
<li><strong>策略制定</strong>：提出解决问题的策略和方法。</li>
<li><strong>资源分配</strong>：确定解决问题所需资源的种类和数量。</li>
<li><strong>实施规划</strong>：制定详细的实施步骤和时间表。</li>
<li><strong>监控评估</strong>：跟踪解决方案的实施过程，评估效果并进行必要的调整。</li>
<li><strong>持续优化</strong>：根据反馈和评估结果，不断优化解决方案。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>问题理解</strong>：确保对问题有深入的理解，避免表面化处理。</li>
<li><strong>可行性分析</strong>：确保解决方案在技术、经济和操作上是可行的。</li>
<li><strong>利益相关者沟通</strong>：与所有利益相关者进行有效沟通，确保方案的接受和支持。</li>
<li><strong>风险评估</strong>：识别解决方案实施过程中可能遇到的风险，并制定应对措施。</li>
<li><strong>灵活性</strong>：方案应具有一定的灵活性，以适应环境变化或新的信息。</li>
<li><strong>成本效益</strong>：考虑解决方案的成本效益比，确保投入产出合理。</li>
<li><strong>可持续性</strong>：解决方案应考虑长期效应，确保可持续性。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>企业管理</strong>：解决企业运营中的效率、成本、市场等问题。</li>
<li><strong>技术开发</strong>：解决产品或服务在研发过程中遇到的技术难题。</li>
<li><strong>市场营销</strong>：制定市场推广策略，解决销售和品牌问题。</li>
<li><strong>客户服务</strong>：提高客户满意度，解决客户投诉和反馈。</li>
<li><strong>公共事务</strong>：解决社会问题，如环境保护、城市规划等。</li>
<li><strong>教育改革</strong>：改善教育体系，解决教育质量问题。</li>
<li><strong>健康医疗</strong>：提高医疗服务质量，解决公共卫生问题。</li>
</ul>
<h2>博客网站</h2>
<ul>
<li>个人博客网站搭建方案，自我宣传形式。</li>
</ul>
<p>详细总结：<a href="/note/Solution-%E5%8D%9A%E5%AE%A2%E7%BD%91%E7%AB%99.html" target="_blank">Solution-博客网站</a></p>
<h2>数字花园</h2>
<ul>
<li>知识的“数字化、结构化”存储方案。</li>
</ul>
<p>详细总结：<a href="/note/Solution-%E6%95%B0%E5%AD%97%E8%8A%B1%E5%9B%AD.html" target="_blank">Solution-数字花园</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Package - InfluxDB</title>
      <link>https://blog.magictable.ha.cn/software/Package-InfluxDB.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-InfluxDB.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - InfluxDB</source>
      <description>文章摘要： InfluxDB 是一个开源的时间序列数据库（TSDB），专门设计用于处理和分析时间戳或时间序列数据。 简介 简要说明 InfluxDB 是由InfluxData公司开发，用于高效地存储、查询和管理大量的时间序列数据，如服务器指标、传感器数据、实时分析等。 主要功能 时间戳精度：支持纳秒级的时间戳，适合高精度时间序列数据。 高效写入：专为高...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 04 Jan 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> InfluxDB 是一个开源的时间序列数据库（TSDB），专门设计用于处理和分析时间戳或时间序列数据。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>InfluxDB 是由InfluxData公司开发，用于高效地存储、查询和管理大量的时间序列数据，如服务器指标、传感器数据、实时分析等。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>时间戳精度</strong>：支持纳秒级的时间戳，适合高精度时间序列数据。</li>
<li><strong>高效写入</strong>：专为高速数据写入和查询优化，支持高并发写入操作。</li>
<li><strong>简单的查询语言</strong>：使用InfluxQL（类似SQL的查询语言），易于编写数据查询。</li>
<li><strong>数据保留策略</strong>：可以设置数据保留期限，自动清理旧数据。</li>
<li><strong>连续查询</strong>：自动定期运行查询，并保存结果，用于数据降采样和聚合。</li>
<li><strong>索引</strong>：自动为时间戳、tag和字段创建索引，以加快查询速度。</li>
<li><strong>高可用性和可扩展性</strong>：支持集群部署，可以水平扩展以处理更多数据。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>数据模型</strong>：InfluxDB使用特定的数据模型，包括measurement、tags、fields和timestamps，理解这些概念对于有效使用数据库至关重要。</li>
<li><strong>数据大小</strong>：由于InfluxDB是为时间序列数据优化的，不适合存储大量非时间序列数据或大型二进制数据。</li>
<li><strong>内存使用</strong>：InfluxDB可能会消耗大量内存，特别是在处理大量数据和高并发查询时，需要适当配置系统资源。</li>
<li><strong>备份和恢复</strong>：定期备份InfluxDB数据是必要的，因为数据丢失的风险总是存在的。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>监控和指标</strong>：收集和存储系统监控数据，如CPU使用率、内存使用情况等。</li>
<li><strong>IoT（物联网）</strong>：处理来自传感器和设备的实时数据。</li>
<li><strong>应用性能管理（APM）</strong>：跟踪和分析应用程序的性能数据。</li>
<li><strong>金融交易分析</strong>：处理和分析股票市场、交易系统等金融时间序列数据。</li>
<li><strong>实时分析</strong>：需要快速查询和分析时间序列数据的实时分析应用。</li>
</ul>
<h2>安装与卸载</h2>
<p>详细总结：<a href=""></a></p>
<h2>终端命令</h2>
<p>详细总结：<a href=""></a></p>
<h2>配置文件</h2>
<p>详细总结：<a href=""></a></p>
<h2>热门推荐</h2>
<p>详细总结：<a href=""></a></p>
<h2>问题总结</h2>
<p>详细总结：<a href=""></a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Package - PostgreSQL</title>
      <link>https://blog.magictable.ha.cn/software/Package-PostgreSQL.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-PostgreSQL.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - PostgreSQL</source>
      <description>文章摘要： PostgreSQL 是一个功能强大的开源对象-关系型数据库系统。 简介 简要说明 PostgreSQL 是一个功能强大的开源对象-关系型数据库系统。 它以其可靠性、健壮性、灵活性和支持标准SQL的能力而闻名。 PostgreSQL 旨在运行在所有主要操作系统上，并支持多种编程语言和应用程序接口。 它是由一个活跃的全球社区开发和支持的，不断...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 04 Jan 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> PostgreSQL 是一个功能强大的开源对象-关系型数据库系统。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>PostgreSQL 是一个功能强大的开源对象-关系型数据库系统。</li>
<li>它以其可靠性、健壮性、灵活性和支持标准SQL的能力而闻名。</li>
<li>PostgreSQL 旨在运行在所有主要操作系统上，并支持多种编程语言和应用程序接口。</li>
<li>它是由一个活跃的全球社区开发和支持的，不断更新和改进。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>事务支持</strong>：PostgreSQL 支持原子性、一致性、隔离性和持久性（ACID）事务。</li>
<li><strong>多版本并发控制（MVCC）</strong>：允许高并发性，同时保持数据的一致性。</li>
<li><strong>复杂查询</strong>：支持高级的查询功能，包括子查询、CTE（公用表表达式）、窗口函数和递归查询。</li>
<li><strong>数据类型</strong>：除了标准的SQL数据类型，还支持数组、JSON/JSONB、GIS地理信息数据类型等。</li>
<li><strong>扩展性</strong>：可以通过自定义函数、数据类型、操作符和索引来扩展PostgreSQL。</li>
<li><strong>复制和备份</strong>：支持多种复制解决方案，如逻辑复制、流复制，以及热备份。</li>
<li><strong>安全性</strong>：提供强大的访问控制、加密和认证功能。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>性能调优</strong>：PostgreSQL 提供了许多性能调优选项，但可能需要专业知识来优化。</li>
<li><strong>资源消耗</strong>：对于非常大的数据集或高并发负载，PostgreSQL 可能需要更多的内存和CPU资源。</li>
<li><strong>学习曲线</strong>：虽然PostgreSQL非常强大，但其高级功能可能需要一定的学习时间。</li>
<li><strong>社区支持</strong>：虽然社区支持很强大，但可能没有商业数据库提供商提供的专业支持服务。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>企业级应用</strong>：适用于需要高度可靠性和数据完整性的企业级应用。</li>
<li><strong>复杂数据处理</strong>：适合处理复杂的数据关系和查询，特别是在需要GIS或JSON数据类型时。</li>
<li><strong>数据仓库</strong>：由于其强大的数据处理能力，PostgreSQL 也适用于数据仓库和大数据分析。</li>
<li><strong>Web应用程序</strong>：适用于需要高级数据库功能和支持现代Web应用程序的后端。</li>
<li><strong>定制解决方案</strong>：当需要定制数据库功能或集成特定业务逻辑时，PostgreSQL 的扩展性使其成为理想选择。</li>
</ul>
<h2>安装与卸载</h2>
<p>详细总结：<a href=""></a></p>
<h2>终端命令</h2>
<p>详细总结：<a href=""></a></p>
<h2>配置文件</h2>
<p>详细总结：<a href=""></a></p>
<h2>热门推荐</h2>
<p>详细总结：<a href=""></a></p>
<h2>问题总结</h2>
<p>详细总结：<a href=""></a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Diary - 沟通方式 - 摩尔斯电码</title>
      <link>https://blog.magictable.ha.cn/note/Diary-%E6%B2%9F%E9%80%9A%E6%96%B9%E5%BC%8F-%E6%91%A9%E5%B0%94%E6%96%AF%E7%94%B5%E7%A0%81.html</link>
      <guid>https://blog.magictable.ha.cn/note/Diary-%E6%B2%9F%E9%80%9A%E6%96%B9%E5%BC%8F-%E6%91%A9%E5%B0%94%E6%96%AF%E7%94%B5%E7%A0%81.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Diary - 沟通方式 - 摩尔斯电码</source>
      <description>文章摘要： 文章摘要。 注释 外部相关文章 内部相关文章</description>
      <category>学习笔记/日记</category>
      <pubDate>Fri, 03 Jan 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 文章摘要。</p>
<!-- more -->
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>外部相关文章</p>
<ul>
<li></li>
</ul>
<p>内部相关文章</p>
<ul>
<li><a href="/note/Technology-%E7%94%B5%E7%A3%81%E6%B3%A2.html" target="_blank">电磁波</a></li>
</ul>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 电磁波 - 无线电波 - 查询手册 - 中国无线电频率划分</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E7%94%B5%E7%A3%81%E6%B3%A2-%E6%97%A0%E7%BA%BF%E7%94%B5%E6%B3%A2-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-%E4%B8%AD%E5%9B%BD%E6%97%A0%E7%BA%BF%E7%94%B5%E9%A2%91%E7%8E%87%E5%88%92%E5%88%86.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E7%94%B5%E7%A3%81%E6%B3%A2-%E6%97%A0%E7%BA%BF%E7%94%B5%E6%B3%A2-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-%E4%B8%AD%E5%9B%BD%E6%97%A0%E7%BA%BF%E7%94%B5%E9%A2%91%E7%8E%87%E5%88%92%E5%88%86.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 电磁波 - 无线电波 - 查询手册 - 中国无线电频率划分</source>
      <description>文章摘要： 文章摘要。 相关信息 外部相关文章 中华人民共和国无线电频率划分规定，来源于中华人民共和国工业和信息化部。 内部相关文章 无线电频谱可分为下面表中的 14 个频段，无线电频率以 Hz（赫兹）为单位，其表达方式为： 3000KHz 以下（包括 3000KHz），以 KHz（千赫兹）表示。 3MHz 以上至 3000MHz（包括 3000MHz...</description>
      <category>学习笔记/技术</category>
      <pubDate>Fri, 03 Jan 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 文章摘要。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li><a href="https://www.miit.gov.cn/jgsj/wgj/bmgz/art/2024/art_9f1a1845eebf4cc0ac2cbb32532bf0fc.html" target="_blank" rel="noopener noreferrer">中华人民共和国无线电频率划分规定</a>，来源于<strong>中华人民共和国工业和信息化部</strong>。</li>
</ul>
<p>内部相关文章</p>
<ul>
<li></li>
</ul>
</div>
<p>无线电频谱可分为下面表中的 14 个频段，无线电频率以 Hz（赫兹）为单位，其表达方式为：</p>
<ul>
<li>3000KHz 以下（包括 3000KHz），以 KHz（千赫兹）表示。</li>
<li>3MHz 以上至 3000MHz（包括 3000MHz），以 MHz（兆赫兹）表示。</li>
<li>3GHz 以上至 3000GHz（包括 3000GHz），以 GHz（吉赫兹）表示。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:center">频段号/频带号</th>
<th style="text-align:left">频段/频带名称</th>
<th style="text-align:left">频率范围</th>
<th style="text-align:left">波段名称</th>
<th style="text-align:left">波长范围</th>
<th style="text-align:left">主要传播方式和用途</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">-1</td>
<td style="text-align:left">至低频（TLF）</td>
<td style="text-align:left">0.03Hz~0.3Hz</td>
<td style="text-align:left">至长波或千兆米波</td>
<td style="text-align:left">10000－1000 兆米（Mm）</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">0</td>
<td style="text-align:left">至低频（TLF）</td>
<td style="text-align:left">0.3Hz~3Hz</td>
<td style="text-align:left">至长波或百兆米波</td>
<td style="text-align:left">1000－100 兆米（Mm）</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">1</td>
<td style="text-align:left">极低频（ELF）</td>
<td style="text-align:left">3Hz~30Hz</td>
<td style="text-align:left">极长波</td>
<td style="text-align:left">100－10 兆米（Mm）</td>
<td style="text-align:left">军事</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">2</td>
<td style="text-align:left">超低频（SLF）</td>
<td style="text-align:left">30Hz~300Hz</td>
<td style="text-align:left">超长波</td>
<td style="text-align:left">10－1 兆米（Mm）</td>
<td style="text-align:left">军事</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">3</td>
<td style="text-align:left">特低频（ULF）</td>
<td style="text-align:left">300Hz~3000Hz</td>
<td style="text-align:left">特长波</td>
<td style="text-align:left">1000－100 千米（km）</td>
<td style="text-align:left">军事</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">4</td>
<td style="text-align:left">甚低频（VLF）</td>
<td style="text-align:left">3KHz~30KHz</td>
<td style="text-align:left">甚长波</td>
<td style="text-align:left">100－10 千米（km）</td>
<td style="text-align:left">航空、导航、无线电报</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">5</td>
<td style="text-align:left">低频（LF）</td>
<td style="text-align:left">30KHz~300KHz</td>
<td style="text-align:left">长波</td>
<td style="text-align:left">10－1 千米（km）</td>
<td style="text-align:left">航空、导航、无线电报</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">6</td>
<td style="text-align:left">中频（MF）</td>
<td style="text-align:left">300KHz~3000KHz</td>
<td style="text-align:left">中波</td>
<td style="text-align:left">1000－100 米（m）</td>
<td style="text-align:left">广播电台、业余无线电</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">7</td>
<td style="text-align:left">高频（HF）</td>
<td style="text-align:left">3MHz~30MHz</td>
<td style="text-align:left">短波</td>
<td style="text-align:left">100－10 米（m）</td>
<td style="text-align:left">NFC刷卡</td>
<td style="text-align:left">覆盖全球通信</td>
</tr>
<tr>
<td style="text-align:center">8</td>
<td style="text-align:left">甚高频（VHF）</td>
<td style="text-align:left">30MHz~300MHz</td>
<td style="text-align:left">米波</td>
<td style="text-align:left">10－1 米（m）</td>
<td style="text-align:left">移动通信（1G）、FM广播、无线电视、对讲机</td>
<td style="text-align:left">实现声音、视频传输</td>
</tr>
<tr>
<td style="text-align:center">9</td>
<td style="text-align:left">特高频（UHF）</td>
<td style="text-align:left">300MHz~3000MHz</td>
<td style="text-align:left">分米波</td>
<td style="text-align:left">10－1 分米（dm）</td>
<td style="text-align:left">移动通信（2G/3G/4G）、GPS、中继与卫星</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">10</td>
<td style="text-align:left">超高频（SHF）</td>
<td style="text-align:left">3GHz~30GHz</td>
<td style="text-align:left">厘米波</td>
<td style="text-align:left">10－1 厘米（cm）</td>
<td style="text-align:left">移动通信（5G）、模组</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">11</td>
<td style="text-align:left">极高频（EHF）</td>
<td style="text-align:left">30GHz~300GHz</td>
<td style="text-align:left">毫米波</td>
<td style="text-align:left">10－1 毫米（mm）</td>
<td style="text-align:left">移动通信（5G）、下一代WiFi、微波中继、卫星通信</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">12</td>
<td style="text-align:left">至高频（THF）</td>
<td style="text-align:left">300GHz~3000GHz</td>
<td style="text-align:left">丝米波或亚毫米波</td>
<td style="text-align:left">10－1 丝米（dmm）</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<p>K = 千（10^3^），M = 兆（10^6^），G = 吉（10^9^）</p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 通信 - 技术 - 全球广域网</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-%E5%85%A8%E7%90%83%E5%B9%BF%E5%9F%9F%E7%BD%91.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-%E5%85%A8%E7%90%83%E5%B9%BF%E5%9F%9F%E7%BD%91.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 通信 - 技术 - 全球广域网</source>
      <description>文章摘要： 全球广域网（World Wide Web，简称WWW或Web），通常指的是通过互联网访问的、由许多互相链接的超文本文件组成的系统，是互联网上的一项服务。 简介 简要说明 全球广域网（World Wide Web，简称WWW或Web）。 通常指的是通过互联网访问的、由许多互相链接的超文本文件组成的系统。 是互联网上的一项服务。 允许用户通过浏...</description>
      <category>学习笔记/技术</category>
      <pubDate>Fri, 03 Jan 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 全球广域网（World Wide Web，简称WWW或Web），通常指的是通过互联网访问的、由许多互相链接的超文本文件组成的系统，是互联网上的一项服务。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>全球广域网（World Wide Web，简称WWW或Web）。</li>
<li>通常指的是通过互联网访问的、由许多互相链接的超文本文件组成的系统。</li>
<li>是互联网上的一项服务。</li>
<li>允许用户通过浏览器访问和浏览互联网上的各种信息资源。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>信息检索</strong>：用户可以通过搜索引擎查找所需的信息。</li>
<li><strong>资源共享</strong>：用户可以上传和分享文档、图片、视频等资源。</li>
<li><strong>交互沟通</strong>：用户可以通过电子邮件、社交媒体、论坛等形式与他人交流。</li>
<li><strong>电子商务</strong>：用户可以在网上购物、支付、进行金融交易等。</li>
<li><strong>在线服务</strong>：提供在线教育、远程医疗、云存储等服务。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>网络安全</strong>：上网时需注意个人信息保护，避免泄露敏感信息。</li>
<li><strong>信息真实性</strong>：在互联网上，信息质量参差不齐，需辨别信息的真实性。</li>
<li><strong>法律法规</strong>：遵守当地的互联网相关法律法规，不参与非法活动。</li>
<li><strong>版权问题</strong>：尊重他人的知识产权，不非法下载或传播版权内容。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>教育学习</strong>：在线课程、电子图书、学术研究等。</li>
<li><strong>商业活动</strong>：电子商务、网络营销、企业信息发布等。</li>
<li><strong>个人娱乐</strong>：观看视频、听音乐、玩游戏等。</li>
<li><strong>社交互动</strong>：通过社交媒体与朋友、家人保持联系。</li>
<li><strong>政府服务</strong>：电子政务、信息公开、在线办事等。</li>
<li><strong>科学研究</strong>：数据共享、远程实验、国际合作等。</li>
</ul>
<h2>Web 1.0 集中式控制</h2>
<ul>
<li>静态网络，大多数是只读的，用户互动有限。</li>
<li>半双工交互，只能被动接收数据。</li>
<li>中心化管理。</li>
<li>服务器。</li>
<li>主要使用PC计算机访问。</li>
</ul>
<h2>Web 2.0</h2>
<ul>
<li>社交网络，实现用户互动、内容创作和分享。</li>
<li>全双工交互，即能接收数据也能修改数据。</li>
<li>部分去中心化，仍然是中心化。</li>
<li>云服务器。</li>
<li>主要使用移动智能手机访问。</li>
</ul>
<h2>Web 3.0</h2>
<ul>
<li>使用 “区块链技术” 的互联网。用户有更大的个人数据和信息控制权。隐私和透明度，在不完全透露身份的情况下进行交易。</li>
<li>全双工交互。</li>
<li>去中心化管理。</li>
<li>AI。</li>
<li>主要使用VR/MR设备访问。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Package - OpenSSH - 终端命令</title>
      <link>https://blog.magictable.ha.cn/software/Package-OpenSSH-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OpenSSH-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - OpenSSH - 终端命令</source>
      <description>文章摘要： 摘要内容。 ssh 用于安全地登录远程服务器。 提供了加密的命令行界面，可以执行远程命令。 详细总结： scp 用于在本地和远程系统之间安全地复制文件。 它使用SSH协议来保证数据传输的安全性。 详细总结： sftp 提供了一个类似FTP的界面，用于安全地传输文件。 与FTP不同，sftp是建立在SSH之上的，因此数据传输是加密的。 ssh...</description>
      <category>软件程序/软件包</category>
      <pubDate>Fri, 03 Jan 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h3>ssh</h3>
<ul>
<li>用于安全地登录远程服务器。</li>
<li>提供了加密的命令行界面，可以执行远程命令。</li>
</ul>
<p>详细总结：<a href="/software/Package-OpenSSH-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-ssh.html" target="_blank">Package-OpenSSH-终端命令-ssh</a></p>
<h3>scp</h3>
<ul>
<li>用于在本地和远程系统之间安全地复制文件。</li>
<li>它使用SSH协议来保证数据传输的安全性。</li>
</ul>
<p>详细总结：<a href="/software/Package-OpenSSH-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-scp.html" target="_blank">Package-OpenSSH-终端命令-scp</a></p>
<h3>sftp</h3>
<ul>
<li>提供了一个类似FTP的界面，用于安全地传输文件。</li>
<li>与FTP不同，sftp是建立在SSH之上的，因此数据传输是加密的。</li>
</ul>
<h3>ssh-keygen</h3>
<ul>
<li>用于生成、管理和转换SSH密钥，包括公钥和私钥。</li>
<li>这些密钥用于认证，以替代密码登录。</li>
</ul>
<h3>ssh-agent</h3>
<ul>
<li>一个密钥管理器，它保存解密的私钥，这样用户在每次使用SSH时就不需要重新输入密码。</li>
<li>它通常在用户会话开始时启动，并在会话结束时终止。</li>
</ul>
<h3>ssh-add</h3>
<ul>
<li>用于将私钥添加到ssh-agent管理的密钥列表中。</li>
</ul>
<h3>ssh-copy-id</h3>
<ul>
<li>用于将公钥复制到远程服务器的<code>~/.ssh/authorized_keys</code>文件中，从而实现无密码登录。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令</source>
      <description>文章摘要： 摘要内容。 相关信息 外部相关信息 JDK工具官方文档 内部相关信息 JDK （Java 开发工具包） 分类总揽 基本 这些工具是 JDK 的基础。它们是您用来创建和构建应用程序的工具。 安全 这些安全工具可帮助您在系统上设置安全策略 并创建可在安全策略范围内工作的应用程序 设置在远程站点。 国际化 国际化相关工具。 远程调用方法（RMI）...</description>
      <category>软件程序/软件包</category>
      <pubDate>Fri, 03 Jan 2025 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关信息</p>
<ul>
<li><a href="https://docs.oracle.com/en/java/javase/21/docs/specs/man/index.html" target="_blank" rel="noopener noreferrer">JDK工具官方文档</a></li>
</ul>
<p>内部相关信息</p>
<ul>
<li>JDK （Java 开发工具包）<a href="/software/Package-OracleJDK.html" target="_blank">Package-OracleJDK</a></li>
</ul>
</div>
<h2>分类总揽</h2>
<h3>基本</h3>
<ul>
<li>这些工具是 JDK 的基础。它们是您用来创建和构建应用程序的工具。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">工具名称</th>
<th style="text-align:left">内容概述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-appletviewer.html" target="_blank">appletviewer</a></td>
<td style="text-align:left">在没有Web浏览器的情况下运行和调试Applet。</td>
</tr>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-extcheck.html" target="_blank">extcheck</a></td>
<td style="text-align:left">检测目标Java存档（JAR）文件与当前安装的扩展 JAR 文件之间的版本冲突，可以确保应用程序的兼容性和稳定性。</td>
</tr>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jar.html" target="_blank">jar</a></td>
<td style="text-align:left">创建和管理Java存档（JAR）文件。</td>
</tr>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-java.html" target="_blank">java</a></td>
<td style="text-align:left">Java应用程序的启动器。在这个release中，单个启动器同时用于开发和部署。</td>
</tr>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-javac.html" target="_blank">javac</a></td>
<td style="text-align:left">Java编程语言的编译器。</td>
</tr>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-javadoc.html" target="_blank">javadoc</a></td>
<td style="text-align:left">API文档生成器。</td>
</tr>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-javah.html" target="_blank">javah</a></td>
<td style="text-align:left">C标头和存根生成器，用于编写本机方法。</td>
</tr>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-javap.html" target="_blank">javap</a></td>
<td style="text-align:left">类文件反汇编器。</td>
</tr>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jdb.html" target="_blank">jdb</a></td>
<td style="text-align:left">Java调试器，有关调试器体系结构规范。</td>
</tr>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jdeps.html" target="_blank">jdeps</a></td>
<td style="text-align:left">Java类依赖关系分析器。</td>
</tr>
</tbody>
</table>
<h3>安全</h3>
<ul>
<li>这些安全工具可帮助您在系统上设置安全策略 并创建可在安全策略范围内工作的应用程序 设置在远程站点。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">工具名称</th>
<th style="text-align:left">内容概述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-keytool.html" target="_blank">keytool</a></td>
<td style="text-align:left">管理密钥库和证书。</td>
</tr>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jarsigner.html" target="_blank">jarsigner</a></td>
<td style="text-align:left">生成并验证JAR签名。</td>
</tr>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-policytool.html" target="_blank">policytool</a></td>
<td style="text-align:left">用于管理策略文件的GUI工具。</td>
</tr>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-kinit.html" target="_blank">kinit</a></td>
<td style="text-align:left">用于获取 Kerberos v5 票据的工具。</td>
</tr>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-klist.html" target="_blank">klist</a></td>
<td style="text-align:left">用于列出凭据缓存和密钥选项卡中的条目的命令行工具。</td>
</tr>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-ktab.html" target="_blank">ktab</a></td>
<td style="text-align:left">帮助用户管理键表中条目的命令行工具。</td>
</tr>
</tbody>
</table>
<h3>国际化</h3>
<ul>
<li>国际化相关工具。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">工具名称</th>
<th style="text-align:left">内容概述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-native2ascii.html" target="_blank">native2ascii</a></td>
<td style="text-align:left">将文本转换为 Unicode Latin-1。</td>
</tr>
</tbody>
</table>
<h3>远程调用方法（RMI）</h3>
<ul>
<li>远程调用相关工具。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">工具名称</th>
<th style="text-align:left">内容概述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-rmic.html" target="_blank">rmic</a></td>
<td style="text-align:left">为远程对象生成桩和骨架。</td>
</tr>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-rmiregistry.html" target="_blank">rmiregistry</a></td>
<td style="text-align:left">远程对象注册表服务。</td>
</tr>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-rmid.html" target="_blank">rmid</a></td>
<td style="text-align:left">RMI激活系统守护程序。</td>
</tr>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-serialver.html" target="_blank">serialver</a></td>
<td style="text-align:left">返回serialVersionUID类。</td>
</tr>
</tbody>
</table>
<h3>IDL和RMI-IIOP</h3>
<ul>
<li>这些工具在创建使用 OMG 标准 IDL 和 CORBA/IIOP。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">工具名称</th>
<th style="text-align:left">内容概述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-tnameserv.html" target="_blank">tnameserv</a></td>
<td style="text-align:left">提供对命名服务的访问。</td>
</tr>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-idlj.html" target="_blank">idlj</a></td>
<td style="text-align:left">生成映射OMG IDL接口的<code>.java</code>文件，并使以Java编程语言编写的应用程序能够使用CORBA功能。</td>
</tr>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-orbd.html" target="_blank">orbd</a></td>
<td style="text-align:left">为客户提供透明支持在 CORBA 中的服务器上查找和调用持久性对象环境。</td>
</tr>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-servertool.html" target="_blank">servertool</a></td>
<td style="text-align:left">为应用程序程序员提供易于使用的界面，用于注册、注销、启动和关闭服务器。</td>
</tr>
</tbody>
</table>
<h3>部署</h3>
<ul>
<li>与 java 部署结合使用的实用程序 Web 上的应用程序和 Applet。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">工具名称</th>
<th style="text-align:left">内容概述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-javapackager.html" target="_blank">javapackager</a></td>
<td style="text-align:left">执行与打包和签署Java和JavaFX应用程序相关的任务。</td>
</tr>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-pack200.html" target="_blank">pack200</a></td>
<td style="text-align:left">将JAR文件转换为压缩的<code>pack200</code>文件使用Java <code>gzip</code>压缩机。</td>
</tr>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-unpack200.html" target="_blank">unpack200</a></td>
<td style="text-align:left">转换由<code>pack200</code>导入到JAR文件中。</td>
</tr>
</tbody>
</table>
<h3>启动</h3>
<ul>
<li>与 Java Web Start 一起使用的实用程序。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">工具名称</th>
<th style="text-align:left">内容概述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-javaws.html" target="_blank">javaws</a></td>
<td style="text-align:left">用于启动Java Web Start的命令行工具和设置各种选项。</td>
</tr>
</tbody>
</table>
<h3>故障排除、分析、监控和管理</h3>
<ul>
<li>故障排除、分析、监控和管理。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">工具名称</th>
<th style="text-align:left">内容概述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jcmd.html" target="_blank">jcmd</a></td>
<td style="text-align:left">JVM诊断命令工具。</td>
</tr>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jconsole.html" target="_blank">jconsole</a></td>
<td style="text-align:left">符合JMX标准的图形工具，用于监控Java虚拟机。</td>
</tr>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jmc.html" target="_blank">jmc</a></td>
<td style="text-align:left">Java Mission Control（JMC）客户端包含用于监视和管理Java应用程序的工具。</td>
</tr>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jvisualvm.html" target="_blank">jvisualvm</a></td>
<td style="text-align:left">图形化工具，当基于Java技术的应用程序（Java 应用程序）在Java虚拟机中运行时，它提供有关这些应用程序的详细信息。</td>
</tr>
</tbody>
</table>
<h3>Web服务</h3>
<ul>
<li>服务相关工具。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">工具名称</th>
<th style="text-align:left">内容概述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-schemagen.html" target="_blank">schemagen</a></td>
<td style="text-align:left">用于XML绑定的Java架构的架构生成器。</td>
</tr>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-wsgen.html" target="_blank">wsgen</a></td>
<td style="text-align:left">生成JAX-WS可移植工件的工具。</td>
</tr>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-wsimport.html" target="_blank">wsimport</a></td>
<td style="text-align:left">生成JAX-WS可移植工件的工具。</td>
</tr>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-xjc.html" target="_blank">xjc</a></td>
<td style="text-align:left">用于XML绑定的Java体系结构的绑定编译器。</td>
</tr>
</tbody>
</table>
<h3>监控</h3>
<ul>
<li>（实验性 JDK 工具和实用程序）在未来的 JDK 版本中可能不可用。</li>
<li>您可以使用以下工具来监控 JVM 性能 统计学。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">工具名称</th>
<th style="text-align:left">内容概述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jps.html" target="_blank">jps</a></td>
<td style="text-align:left">（实验性）JVM进程状态工具。</td>
</tr>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jstat.html" target="_blank">jstat</a></td>
<td style="text-align:left">（实验性）JVM统计监控工具。</td>
</tr>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jstatd.html" target="_blank">jstatd</a></td>
<td style="text-align:left">（实验性）JVM jstat守护程序。</td>
</tr>
</tbody>
</table>
<h3>故障排除</h3>
<ul>
<li>（实验性 JDK 工具和实用程序）在未来的 JDK 版本中可能不可用。</li>
<li>以下工具可用于特定的故障排除任务。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">工具名称</th>
<th style="text-align:left">内容概述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jinfo.html" target="_blank">jinfo</a></td>
<td style="text-align:left">（实验性）Java的配置信息。</td>
</tr>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jhat.html" target="_blank">jhat</a></td>
<td style="text-align:left">（实验性）堆转储浏览器。</td>
</tr>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jmap.html" target="_blank">jmap</a></td>
<td style="text-align:left">（实验性）Java内存映射。</td>
</tr>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jsadebugd.html" target="_blank">jsadebugd</a></td>
<td style="text-align:left">（实验性）适用于Java的可维护性代理调试守护程序。</td>
</tr>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jstack.html" target="_blank">jstack</a></td>
<td style="text-align:left">（实验性）Java堆栈跟踪。</td>
</tr>
</tbody>
</table>
<h3>脚本</h3>
<ul>
<li>（实验性 JDK 工具和实用程序）在未来的 JDK 版本中可能不可用。</li>
<li>用于运行与 Java 平台交互的脚本。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">工具名称</th>
<th style="text-align:left">内容概述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jjs.html" target="_blank">jjs</a></td>
<td style="text-align:left">（实验性）运行Nashorn命令行脚本shell。</td>
</tr>
<tr>
<td style="text-align:left"><a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jrunscript.html" target="_blank">jrunscript</a></td>
<td style="text-align:left">（实验性）适用于运行Java的脚本shell。</td>
</tr>
</tbody>
</table>
<h2>通用工具</h2>
<h3>appletviewer</h3>
<ul>
<li>在没有Web浏览器的情况下运行和调试Applet。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-appletviewer.html" target="_blank">Package-OracleJDK-终端命令-appletviewer</a></p>
<h3>extcheck</h3>
<ul>
<li>检测目标Java存档（JAR）文件与当前安装的扩展 JAR 文件之间的版本冲突，可以确保应用程序的兼容性和稳定性。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-extcheck.html" target="_blank">Package-OracleJDK-终端命令-extcheck</a></p>
<h3>jar</h3>
<ul>
<li>创建和管理Java存档（JAR）文件。</li>
<li>为类和资源创建存档，并从存档中作或恢复单个类或资源。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jar.html" target="_blank">Package-OracleJDK-终端命令-jar</a></p>
<h3>java</h3>
<ul>
<li>Java应用程序的启动器。在这个release中，单个启动器同时用于开发和部署。</li>
<li>启动Java应用程序。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-java.html" target="_blank">Package-OracleJDK-终端命令-java</a></p>
<h3>javac</h3>
<ul>
<li>Java编程语言的编译器。</li>
<li>读取Java类和接口定义，并将其编译为字节码和类文件。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-javac.html" target="_blank">Package-OracleJDK-终端命令-javac</a></p>
<h3>javadoc</h3>
<ul>
<li>API文档生成器。</li>
<li>从Java源文件生成API文档的HTML页面。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-javadoc.html" target="_blank">Package-OracleJDK-终端命令-javadoc</a></p>
<h3>javah</h3>
<ul>
<li>C标头和存根生成器，用于编写本机方法。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-javah.html" target="_blank">Package-OracleJDK-终端命令-javah</a></p>
<h3>javap</h3>
<ul>
<li>类文件反汇编器。</li>
<li>反汇编一个或多个类文件。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-javap.html" target="_blank">Package-OracleJDK-终端命令-javap</a></p>
<h3>jdb</h3>
<ul>
<li>Java调试器，有关调试器体系结构规范。</li>
<li>查找并修复Java平台程序中的bug。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jdb.html" target="_blank">Package-OracleJDK-终端命令-jdb</a></p>
<h3>jdeps</h3>
<ul>
<li>Java类依赖关系分析器。</li>
<li>启动Java类依赖关系分析器。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jdeps.html" target="_blank">Package-OracleJDK-终端命令-jdeps</a></p>
<h3>keytool</h3>
<ul>
<li>管理密钥库和证书。</li>
<li>管理加密密钥、X.509证书链和可信证书的密钥库（数据库）。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-keytool.html" target="_blank">Package-OracleJDK-终端命令-keytool</a></p>
<h3>jarsigner</h3>
<ul>
<li>生成并验证JAR签名。</li>
<li>对Java存档（JAR）文件进行签名和验证。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jarsigner.html" target="_blank">Package-OracleJDK-终端命令-jarsigner</a></p>
<h3>policytool</h3>
<ul>
<li>用于管理策略文件的GUI工具。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-policytool.html" target="_blank">Package-OracleJDK-终端命令-policytool</a></p>
<h3>kinit</h3>
<ul>
<li>用于获取 Kerberos v5 票据的工具。</li>
<li>在 Solaris 操作系统上，可通过 kinit 工具获得等效功能。</li>
<li>例如，对于 Solaris 11。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-kinit.html" target="_blank">Package-OracleJDK-终端命令-kinit</a></p>
<h3>klist</h3>
<ul>
<li>用于列出凭据缓存和密钥选项卡中的条目的命令行工具。</li>
<li>在 Solaris 操作系统上，可以通过 klist 工具获得等效的功能。</li>
<li>例如，对于 Solaris 11。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-klist.html" target="_blank">Package-OracleJDK-终端命令-klist</a></p>
<h3>ktab</h3>
<ul>
<li>帮助用户管理键表中条目的命令行工具。</li>
<li>在 Solaris 操作系统上，可通过 kadmin 工具获得等效功能。</li>
<li>例如，对于 Solaris 11。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-ktab.html" target="_blank">Package-OracleJDK-终端命令-ktab</a></p>
<h3>native2ascii</h3>
<ul>
<li>将文本转换为 Unicode Latin-1。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-native2ascii.html" target="_blank">Package-OracleJDK-终端命令-native2ascii</a></p>
<h3>rmic</h3>
<ul>
<li>为远程对象生成桩和骨架。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-rmic.html" target="_blank">Package-OracleJDK-终端命令-rmic</a></p>
<h3>rmiregistry</h3>
<ul>
<li>远程对象注册表服务。</li>
<li>在当前主机的指定端口上创建和启动远程对象注册表。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-rmiregistry.html" target="_blank">Package-OracleJDK-终端命令-rmiregistry</a></p>
<h3>rmid</h3>
<ul>
<li>RMI激活系统守护程序。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-rmid.html" target="_blank">Package-OracleJDK-终端命令-rmid</a></p>
<h3>serialver</h3>
<ul>
<li>返回serialVersionUID类。</li>
<li>以适合复制到不断发展的类的形式返回一个或多个类的“serialVersionUID”。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-serialver.html" target="_blank">Package-OracleJDK-终端命令-serialver</a></p>
<h3>tnameserv</h3>
<ul>
<li>提供对命名服务的访问。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-tnameserv.html" target="_blank">Package-OracleJDK-终端命令-tnameserv</a></p>
<h3>idlj</h3>
<ul>
<li>生成映射OMG IDL接口的<code>.java</code>文件，并使以Java编程语言编写的应用程序能够使用CORBA功能。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-idlj.html" target="_blank">Package-OracleJDK-终端命令-idlj</a></p>
<h3>orbd</h3>
<ul>
<li>为客户提供透明支持在 CORBA 中的服务器上查找和调用持久性对象环境。</li>
<li>使用 ORBD 代替 Transient Naming Service， tnameserv 。</li>
<li>ORBD 包括临时命名服务和持久命名服务。</li>
<li><strong>orbd</strong> 工具包含服务器管理器、可互操作命名服务和引导名称服务器的功能。与 一起使用 servertool 时，Server Manager 可在客户端要访问服务器时查找、注册和激活服务器。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-orbd.html" target="_blank">Package-OracleJDK-终端命令-orbd</a></p>
<h3>servertool</h3>
<ul>
<li>为应用程序程序员提供易于使用的界面，用于注册、注销、启动和关闭服务器。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-servertool.html" target="_blank">Package-OracleJDK-终端命令-servertool</a></p>
<h3>javapackager</h3>
<ul>
<li>执行与打包和签署Java和JavaFX应用程序相关的任务。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-javapackager.html" target="_blank">Package-OracleJDK-终端命令-javapackager</a></p>
<h3>pack200</h3>
<ul>
<li>将JAR文件转换为压缩的<code>pack200</code>文件使用Java <code>gzip</code>压缩机。</li>
<li>压缩的打包文件是高度压缩的JAR，可直接部署，节省带宽，减少下载时间。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-pack200.html" target="_blank">Package-OracleJDK-终端命令-pack200</a></p>
<h3>unpack200</h3>
<ul>
<li>转换由<code>pack200</code>导入到JAR文件中。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-unpack200.html" target="_blank">Package-OracleJDK-终端命令-unpack200</a></p>
<h3>javaws</h3>
<ul>
<li>用于启动Java Web Start的命令行工具和设置各种选项。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-javaws.html" target="_blank">Package-OracleJDK-终端命令-javaws</a></p>
<h3>jcmd</h3>
<ul>
<li>JVM诊断命令工具。</li>
<li>将诊断命令请求发送到正在运行的 Java 虚拟机。</li>
<li>向正在运行的Java虚拟机（JVM）发送诊断命令请求。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jcmd.html" target="_blank">Package-OracleJDK-终端命令-jcmd</a></p>
<h3>jconsole</h3>
<ul>
<li>符合JMX标准的图形工具，用于监控Java虚拟机。</li>
<li>可以监视本地和远程JVM、管理应用程序。</li>
<li>启动图形控制台以监控和管理Java应用程序。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jconsole.html" target="_blank">Package-OracleJDK-终端命令-jconsole</a></p>
<h3>jmc</h3>
<ul>
<li>Java Mission Control（JMC）客户端包含用于监视和管理Java应用程序的工具，而不会引入通常与这些类型的工具相关的性能开销。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jmc.html" target="_blank">Package-OracleJDK-终端命令-jmc</a></p>
<h3>jvisualvm</h3>
<ul>
<li>VisualVM 是一种用于可视化数据源的工具，当基于Java技术的应用程序（Java 应用程序）在Java虚拟机中运行时，它提供有关这些应用程序的详细信息。</li>
<li>Java VisualVM 提供内存和 CPU 分析、堆转储分析、内存泄漏检测、对 MBean 的访问和垃圾回收。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jvisualvm.html" target="_blank">Package-OracleJDK-终端命令-jvisualvm</a></p>
<h3>schemagen</h3>
<ul>
<li>用于XML绑定的Java架构的架构生成器。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-schemagen.html" target="_blank">Package-OracleJDK-终端命令-schemagen</a></p>
<h3>wsgen</h3>
<ul>
<li>生成JAX-WS可移植工件的工具。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-wsgen.html" target="_blank">Package-OracleJDK-终端命令-wsgen</a></p>
<h3>wsimport</h3>
<ul>
<li>生成JAX-WS可移植工件的工具。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-wsimport.html" target="_blank">Package-OracleJDK-终端命令-wsimport</a></p>
<h3>xjc</h3>
<ul>
<li>用于XML绑定的Java体系结构的绑定编译器。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-xjc.html" target="_blank">Package-OracleJDK-终端命令-xjc</a></p>
<h3>jps</h3>
<ul>
<li>（实验性）</li>
<li>JVM进程状态工具。</li>
<li>列出目标系统上检测的 HotSpot Java 虚拟机。</li>
<li>列出目标系统上的仪器JVM。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jps.html" target="_blank">Package-OracleJDK-终端命令-jps</a></p>
<h3>jstat</h3>
<ul>
<li>（实验性）</li>
<li>JVM统计监控工具。</li>
<li>连接到插桩的 HotSpot Java 虚拟机，并收集和记录命令行选项指定的性能统计数据。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jstat.html" target="_blank">Package-OracleJDK-终端命令-jstat</a></p>
<h3>jstatd</h3>
<ul>
<li>（实验性）</li>
<li>JVM jstat守护程序。</li>
<li>启动 RMI 服务器应用程序，用于监控插桩 HotSpot Java 虚拟机的创建和终止，并提供一个接口，允许远程监控工具连接到本地系统上运行的 Java 虚拟机。</li>
<li>监视仪器仪表Java HotSpot VM的创建和终止。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jstatd.html" target="_blank">Package-OracleJDK-终端命令-jstatd</a></p>
<h3>jinfo</h3>
<ul>
<li>（实验性）</li>
<li>Java的配置信息。</li>
<li>打印给定进程或核心文件或远程调试服务器的配置信息。</li>
<li>为指定的Java进程生成Java配置信息。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jinfo.html" target="_blank">Package-OracleJDK-终端命令-jinfo</a></p>
<h3>jhat</h3>
<ul>
<li>（实验性）</li>
<li>堆转储浏览器。</li>
<li>在堆转储文件（例如，由 jmap -dump 生成）上启动 Web 服务器，允许浏览堆。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jhat.html" target="_blank">Package-OracleJDK-终端命令-jhat</a></p>
<h3>jmap</h3>
<ul>
<li>（实验性）</li>
<li>Java内存映射。</li>
<li>打印给定进程、核心文件或远程调试服务器的共享对象内存映射或堆内存详细信息。</li>
<li>打印指定进程的详细信息。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jmap.html" target="_blank">Package-OracleJDK-终端命令-jmap</a></p>
<h3>jsadebugd</h3>
<ul>
<li>（实验性）</li>
<li>适用于Java的可维护性代理调试守护程序。</li>
<li>附加到进程或核心文件并充当调试服务器。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jsadebugd.html" target="_blank">Package-OracleJDK-终端命令-jsadebugd</a></p>
<h3>jstack</h3>
<ul>
<li>（实验性）</li>
<li>Java堆栈跟踪。</li>
<li>打印给定进程、核心文件或远程调试服务器的线程堆栈跟踪。</li>
<li>为指定的Java进程打印Java线程的Java堆栈痕迹。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jstack.html" target="_blank">Package-OracleJDK-终端命令-jstack</a></p>
<h3>jjs</h3>
<ul>
<li>运行Nashorn命令行脚本shell。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jjs.html" target="_blank">Package-OracleJDK-终端命令-jjs</a></p>
<h3>jrunscript</h3>
<ul>
<li>（实验性）</li>
<li>适用于运行Java的脚本shell。</li>
<li>此工具本质上不受支持且<strong>具有实验</strong>性，因此在使用时应牢记这一点。它在未来的 JDK 版本中可能不可用。</li>
<li>运行支持交互式和批处理模式的命令行脚本shell。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jrunscript.html" target="_blank">Package-OracleJDK-终端命令-jrunscript</a></p>
<h3>jdeprscan</h3>
<ul>
<li>静态分析工具，用于扫描jar文件（或其他一些类文件的聚合）以查找已弃用的API元素的使用情况。</li>
</ul>
<h3>jfr</h3>
<ul>
<li>解析和打印Flight Recorder文件。</li>
</ul>
<h3>jhsdb</h3>
<ul>
<li>附加到Java进程或启动事后调试器，以分析来自崩溃的Java虚拟机（JVM）的核心转储的内容。</li>
</ul>
<h3>jlink</h3>
<ul>
<li>将一组模块及其依赖项组装并优化到自定义运行时镜像中。</li>
</ul>
<h3>jmod</h3>
<ul>
<li>创建JMOD文件并列出现有JMOD文件的内容。</li>
</ul>
<h3>jpackage</h3>
<ul>
<li>打包一个独立的Java应用程序。</li>
</ul>
<h3>jshell</h3>
<ul>
<li>在读珠三角循环（REPL）中交互式地评估Java编程语言的声明、语句和表达式。</li>
</ul>
<h3>jwebserver</h3>
<ul>
<li>启动 Java Simple Web Server。</li>
</ul>
<h2>仅限Windows</h2>
<h3>jabswitch</h3>
<ul>
<li>启用或禁用 Java 访问桥接。</li>
</ul>
<h3>jaccessinspector</h3>
<ul>
<li>使用Java辅助功能实用程序API检查Java虚拟机中对象的可访问信息。</li>
</ul>
<h3>jaccesswalker</h3>
<ul>
<li>浏览特定Java虚拟机中的组件树,并在树视图中呈现层次结构。</li>
</ul>
<h3>javaw</h3>
<ul>
<li>启动一个没有控制台窗口的Java应用程序。</li>
</ul>
<h3>kinit</h3>
<ul>
<li>获取和缓存Kerberos票授予票。</li>
</ul>
<h3>klist</h3>
<ul>
<li>在本地凭据缓存和键表中显示条目。</li>
</ul>
<h3>ktab</h3>
<ul>
<li>管理存储在本地键表中的主名称和服务密钥。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Paper - AgentAI：调查多模式交互的视野</title>
      <link>https://blog.magictable.ha.cn/note/Paper-AgentAI%EF%BC%9A%E8%B0%83%E6%9F%A5%E5%A4%9A%E6%A8%A1%E5%BC%8F%E4%BA%A4%E4%BA%92%E7%9A%84%E8%A7%86%E9%87%8E.html</link>
      <guid>https://blog.magictable.ha.cn/note/Paper-AgentAI%EF%BC%9A%E8%B0%83%E6%9F%A5%E5%A4%9A%E6%A8%A1%E5%BC%8F%E4%BA%A4%E4%BA%92%E7%9A%84%E8%A7%86%E9%87%8E.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Paper - AgentAI：调查多模式交互的视野</source>
      <description>文章摘要： 多模态 AI 系统可能会在我们的日常生活中无处不在。使这些系统更具交互性的一种有前途的方法是将它们作为物理和虚拟环境中的代理。目前，系统利用现有的基础模型作为创建具身代理的基本构建块。在此类环境中嵌入代理有助于模型处理和解释视觉和上下文数据的能力，这对于创建更复杂和上下文感知的 AI 系统至关重要。例如，可以感知用户操作、人类行为、环境对象...</description>
      <category>学习笔记/论文</category>
      <pubDate>Tue, 31 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 多模态 AI 系统可能会在我们的日常生活中无处不在。使这些系统更具交互性的一种有前途的方法是将它们作为物理和虚拟环境中的代理。目前，系统利用现有的基础模型作为创建具身代理的基本构建块。在此类环境中嵌入代理有助于模型处理和解释视觉和上下文数据的能力，这对于创建更复杂和上下文感知的 AI 系统至关重要。例如，可以感知用户操作、人类行为、环境对象、音频表达和场景集体情绪的系统可用于通知和指导给定环境中的代理响应。为了加速对基于智能体的多模态智能的研究，我们将“智能体 AI”定义为一类交互式系统，可以感知视觉刺激、语言输入和其他基于环境的数据，并可以产生有意义的具体动作。特别是，我们探索了旨在通过整合外部知识、多感官输入和人类反馈来改进基于下一个具体动作预测的代理的系统。我们认为，通过在接地环境中开发代理 AI 系统，还可以减轻大型基础模型的幻觉及其产生环境不正确输出的倾向。代理 AI 的新兴领域包含多模态交互的更广泛的具体和代理方面。除了代理在物理世界中行动和交互之外，我们设想的未来人们可以轻松创建任何虚拟现实或模拟场景，并与虚拟环境中体现的代理进行交互。</p>
<!-- more -->
<div class="hint-container important">
<p class="hint-container-title">重要</p>
<p>标题</p>
<ul>
<li>Agent AI: Surveying the Horizons of Multimodal Interaction</li>
<li>Agent AI：调查多模式交互的视野</li>
</ul>
<p>作者</p>
<ul>
<li>Zane Durante, Qiuyuan Huang, Naoki Wake, Ran Gong, Jae Sung Park, Bidipta Sarkar, Rohan Taori, Yusuke Noda, Demetri Terzopoulos, Yejin Choi, Katsushi Ikeuchi, Hoi Vo, Li Fei-Fei, Jianfeng Gao</li>
</ul>
<p>时间</p>
<ul>
<li>2024-01-25</li>
</ul>
<p>关键词</p>
<ul>
<li>人工智能（cs.AI）;人机交互（cs.HC）;机器学习 （cs.LG）</li>
</ul>
<p>论文地址</p>
<ul>
<li>https://arxiv.org/abs/2401.03568</li>
</ul>
</div>
<h2>引言</h2>
<p>多模态 AI 系统可能会在我们的日常生活中无处不在。</p>
<p>使这些系统更具交互性的一种有前途的方法是将它们作为物理和虚拟环境中的代理。</p>
<p>目前，系统利用现有的基础模型作为创建具身代理的基本构建块。</p>
<p>在此类环境中嵌入代理有助于模型处理和解释视觉和上下文数据的能力，这对于创建更复杂和上下文感知的 AI 系统至关重要。</p>
<p>例如，可以感知用户操作、人类行为、环境对象、音频表达和场景集体情绪的系统可用于通知和指导给定环境中的代理响应。</p>
<p>为了加速对基于智能体的多模态智能的研究，我们将“智能体 AI”定义为一类交互式系统，可以感知视觉刺激、语言输入和其他基于环境的数据，并可以产生有意义的具体动作。</p>
<p>特别是，我们探索了旨在通过整合外部知识、多感官输入和人类反馈来改进基于下一个具体动作预测的代理的系统。</p>
<p>我们认为，通过在接地环境中开发代理 AI 系统，还可以减轻大型基础模型的幻觉及其产生环境不正确输出的倾向。</p>
<p>代理 AI 的新兴领域包含多模态交互的更广泛的具体和代理方面。</p>
<p>除了代理在物理世界中行动和交互之外，我们设想的未来人们可以轻松创建任何虚拟现实或模拟场景，并与虚拟环境中体现的代理进行交互。</p>
<h3>研究背景</h3>
<ul>
<li>简要介绍研究背景和意义</li>
</ul>
<h3>研究现状</h3>
<ul>
<li>概述当前领域的研究现状</li>
</ul>
<h3>本文贡献</h3>
<ul>
<li>列出本文的主要贡献和创新点</li>
</ul>
<h2>相关工作</h2>
<p>方法1</p>
<ul>
<li>简要介绍相关方法1</li>
</ul>
<p>方法2</p>
<ul>
<li>简要介绍相关方法2</li>
</ul>
<h2>方法/理论</h2>
<h3>方法概述</h3>
<ul>
<li>详细描述本文提出的方法/理论</li>
</ul>
<h3>实现步骤</h3>
<ul>
<li>列出实现方法的具体步骤</li>
</ul>
<h3>优点与不足</h3>
<ul>
<li>分析方法的优点和不足</li>
</ul>
<h2>实验/数据分析</h2>
<h3>数据集描述</h3>
<ul>
<li>介绍实验所使用的数据集</li>
</ul>
<h3>实验方法</h3>
<ul>
<li>描述实验过程和方法</li>
</ul>
<h3>实验结果</h3>
<ul>
<li>展示实验结果</li>
</ul>
<h3>结果分析</h3>
<ul>
<li>分析实验结果的含义和意义</li>
</ul>
<h2>结论与展望</h2>
<h3>结论</h3>
<ul>
<li>总结本文的研究成果</li>
</ul>
<h3>展望</h3>
<ul>
<li>提出未来研究方向和改进空间</li>
</ul>
<h2>参考文献和引文</h2>
<ul>
<li>参考文献1</li>
<li>参考文献2</li>
<li>参考文献3</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Visual - 角色设计</title>
      <link>https://blog.magictable.ha.cn/design/Visual-%E8%A7%92%E8%89%B2%E8%AE%BE%E8%AE%A1.html</link>
      <guid>https://blog.magictable.ha.cn/design/Visual-%E8%A7%92%E8%89%B2%E8%AE%BE%E8%AE%A1.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Visual - 角色设计</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 角色是指在故事、游戏、动画等娱乐作品中，通过设计者构思和创造的一个具有特定性格、背景、外观的虚构人物。 原创角色是指完全由创作者自行设计，不基于现有作品中的角色。 主要特点 独特性：每个角色都有其独特的性格、外观和故事背景。 辨识度：角色设计应具有高辨识度，使观众或玩家能够快速记住。 一致性：角色的行为和外观应与...</description>
      <category>艺术创作/视觉</category>
      <pubDate>Sun, 29 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>角色是指在故事、游戏、动画等娱乐作品中，通过设计者构思和创造的一个具有特定性格、背景、外观的虚构人物。</li>
<li>原创角色是指完全由创作者自行设计，不基于现有作品中的角色。</li>
</ul>
<p>主要特点</p>
<ul>
<li><strong>独特性</strong>：每个角色都有其独特的性格、外观和故事背景。</li>
<li><strong>辨识度</strong>：角色设计应具有高辨识度，使观众或玩家能够快速记住。</li>
<li><strong>一致性</strong>：角色的行为和外观应与其性格和背景保持一致。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>版权问题</strong>：原创角色设计应避免侵犯他人版权，确保角色设计的原创性。</li>
<li><strong>文化敏感性</strong>：在设计角色时，应考虑不同文化背景的接受度，避免使用可能引起不适的元素。</li>
<li><strong>多样性</strong>：鼓励设计多样化的角色，以反映现实世界的多样性。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>故事创作</strong>：为小说、电影、动画等创作提供丰富的角色。</li>
<li><strong>游戏开发</strong>：为游戏设计吸引玩家的角色，增强游戏体验。</li>
<li><strong>品牌形象</strong>：为企业或产品创建具有特色的角色形象，用于宣传和营销。</li>
<li><strong>教育材料</strong>：在教育内容中，通过角色设计来吸引学生的兴趣，提高学习效果。</li>
</ul>
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<p>想法/参数/条件/ -&gt; 小说 -&gt; 漫画 -&gt; 动态漫画 -&gt; 影视动画 -&gt; 游戏 -&gt; 世界模式</p>
</div>
<h2>外貌层面</h2>
<p>隐形</p>
<ul>
<li>性别（男性、女性）、声音（特征、音色、音调、音量）、身高、体重、三围、视力、听力</li>
</ul>
<p>显形</p>
<ul>
<li>脸型、体型</li>
<li>皮肤（伤疤、质感）、眉毛、眼睛、鼻子、嘴型、牙齿、舌头、耳朵、发型、胡须、胸部、汗毛、手掌、手指甲、脚掌、脚趾甲、生殖器官、阴毛、血色。</li>
</ul>
<h2>装饰层面</h2>
<p>服装</p>
<ul>
<li></li>
</ul>
<p>道具</p>
<ul>
<li></li>
</ul>
<p>纹身</p>
<ul>
<li>义体</li>
</ul>
<h2>社会层面</h2>
<p>固定信息</p>
<ul>
<li>姓名、昵称、年龄、生日（农历/公历）、国籍、身份ID（身份证名类型和号码）、出生地、现住地</li>
<li>血型、指纹特征、人脸特征、声纹特征、DNA序列</li>
</ul>
<p>即时信息</p>
<ul>
<li>别名（外号）&lt;来源&gt;、人生目标（梦想）、兴趣（爱好、倾向、风格、癖好）、特点（优点、缺点）、口头禅、书写字迹、宗教信仰</li>
<li>职业、工作岗位、亲属/社交关系/相关人员</li>
</ul>
<p>联系方式</p>
<ul>
<li>手机号码、电子邮箱、</li>
</ul>
<p>背景故事</p>
<ul>
<li>记忆（回忆、故事线）、事件关系、学历、毕业学校等。</li>
</ul>
<p>情感状况</p>
<ul>
<li>单身、求交往、暗恋中、暖昧中、恋爱中、订婚、已婚、分居、离异、求偶</li>
</ul>
<p>当前心情</p>
<ul>
<li>恶心、愤怒、赞扬、感动、路过、无聊、雷囧、关注</li>
</ul>
<p>人际关系</p>
<ul>
<li></li>
</ul>
<h2>人格层面</h2>
<ul>
<li>人格相关总结：<a href="/rule/Health-%E4%BA%BA%E6%A0%BC.html" target="_blank">Health-人格</a></li>
</ul>
<h2>状态层面</h2>
<ul>
<li>身体状况、情感状况、肢体动作、表情变化、语气变化、心理活动（非必须）</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Style - 机能</title>
      <link>https://blog.magictable.ha.cn/design/Style-%E6%9C%BA%E8%83%BD.html</link>
      <guid>https://blog.magictable.ha.cn/design/Style-%E6%9C%BA%E8%83%BD.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Style - 机能</source>
      <description>文章摘要： 机能风格（Techwear）是一种结合了现代科技与时尚元素的设计风格，起源于户外运动装备的设计理念，逐渐演变成都市时尚的一部分。 简介 简要说明 机能风格（Techwear）是一种结合了现代科技与时尚元素的设计风格，起源于户外运动装备的设计理念，逐渐演变成都市时尚的一部分。 强调功能性与时尚感的完美结合，旨在为穿着者提供舒适、实用且外观前卫...</description>
      <category>艺术创作/流派风格</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 机能风格（Techwear）是一种结合了现代科技与时尚元素的设计风格，起源于户外运动装备的设计理念，逐渐演变成都市时尚的一部分。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>机能风格（Techwear）是一种结合了现代科技与时尚元素的设计风格，起源于户外运动装备的设计理念，逐渐演变成都市时尚的一部分。</li>
<li>强调功能性与时尚感的完美结合，旨在为穿着者提供舒适、实用且外观前卫的穿着体验。</li>
</ul>
<p>主要特点</p>
<ul>
<li><strong>功能性面料</strong>：使用防水、透气、耐磨的高科技面料。</li>
<li><strong>实用设计</strong>：多口袋、模块化设计，以及隐藏式功能细节。</li>
<li><strong>舒适运动性</strong>：轻量化材料，弹性剪裁，确保穿着舒适和运动自由度。</li>
<li><strong>细节处理</strong>：防水拉链、魔术贴、反光细节等，提升服装的实用性和安全性。</li>
<li><strong>环境适应性</strong>：设计能够适应多种气候和活动需求。</li>
<li><strong>现代感</strong>：简洁的线条和未来主义的美学设计。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>面料选择</strong>：确保面料具有良好的功能性，同时考虑环保和可持续性。</li>
<li><strong>合身度</strong>：选择合适的尺码，确保服装既不会过于紧身也不会过于宽松，影响活动。</li>
<li><strong>搭配</strong>：机能风格的单品可以与其他风格混搭，但要注意整体协调性。</li>
<li><strong>维护</strong>：正确清洗和保养机能风格服装，以维持其功能性和延长使用寿命。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>都市通勤</strong>：适合日常上班、上学等城市生活场景。</li>
<li><strong>户外活动</strong>：如徒步、骑行、登山等户外运动。</li>
<li><strong>旅行</strong>：适合需要长时间旅行或在不同环境中活动的场合。</li>
<li><strong>街头时尚</strong>：作为时尚单品，适用于街头穿搭，展现个人风格。</li>
</ul>
<blockquote>
<p><img src="https://i1.hdslb.com/bfs/article/e377c280695380d2e04238f045f0782da12247ab.png@1192w.avif" alt=""></p>
</blockquote>
<h2>配色方案</h2>
<h2>文学设计</h2>
<h2>视觉设计</h2>
<h2>产品设计</h2>
<h2>服装设计</h2>
<h3>品牌</h3>
<ul>
<li><strong>品牌定位</strong>：</li>
<li><strong>创新技术</strong>：</li>
<li><strong>产品线</strong>：</li>
</ul>
<h3>穿搭</h3>
<ul>
<li><strong>搭配原则</strong>：</li>
<li><strong>色彩协调</strong>：</li>
<li><strong>层次感</strong>：</li>
<li><strong>配饰选择</strong>：</li>
</ul>
<h3>社交媒体和趋势</h3>
<ul>
<li><strong>社交媒体</strong>：</li>
<li><strong>时尚博主</strong>：</li>
<li><strong>论坛和社区</strong>：</li>
</ul>
]]></content:encoded>
      <enclosure url="https://i1.hdslb.com/bfs/article/e377c280695380d2e04238f045f0782da12247ab.png@1192w.avif" type="image/"/>
    </item>
    <item>
      <title>Style（风格）</title>
      <link>https://blog.magictable.ha.cn/design/Style%EF%BC%88%E9%A3%8E%E6%A0%BC%EF%BC%89.html</link>
      <guid>https://blog.magictable.ha.cn/design/Style%EF%BC%88%E9%A3%8E%E6%A0%BC%EF%BC%89.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Style（风格）</source>
      <description>文章摘要： 艺术风格是艺术史上的重要概念，它帮助人们理解和区分不同时期、不同流派和不同艺术家作品的特点。 简介 简要说明 艺术风格是指艺术作品在形式、内容、表现手法等方面所具有的特定特征和风貌。 艺术风格的形成往往与艺术家的个人特色、文化背景、历史时期和技术发展等因素密切相关。 主要特点 辨识和分类：艺术风格帮助人们识别和分类艺术作品，便于研究和欣赏。...</description>
      <category>艺术创作/流派风格</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 艺术风格是艺术史上的重要概念，它帮助人们理解和区分不同时期、不同流派和不同艺术家作品的特点。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>艺术风格是指艺术作品在形式、内容、表现手法等方面所具有的特定特征和风貌。</li>
<li>艺术风格的形成往往与艺术家的个人特色、文化背景、历史时期和技术发展等因素密切相关。</li>
</ul>
<p>主要特点</p>
<ul>
<li><strong>辨识和分类</strong>：艺术风格帮助人们识别和分类艺术作品，便于研究和欣赏。</li>
<li><strong>表达和沟通</strong>：艺术家通过特定的风格表达自己的情感、思想和观点，同时与观众进行沟通。</li>
<li><strong>文化和时代反映</strong>：艺术风格往往反映了特定文化或时代的价值观、审美观和技术水平。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>多样性和变化性</strong>：艺术风格具有多样性和变化性，同一艺术家在不同时期可能会有不同的风格。</li>
<li><strong>主观性</strong>：艺术风格的界定具有一定的主观性，不同的评论家和学者可能会有不同的解读。</li>
<li><strong>交叉和融合</strong>：艺术风格之间可能存在交叉和融合，一个作品可能同时具有多种风格的元素。</li>
</ul>
<h2>基础知识</h2>
<p>三原色</p>
<p>二次色</p>
<p>三次色</p>
<p>配色</p>
<p>搭配</p>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>氛围与配色有关！！</p>
</div>
<h2>乡村田园风格</h2>
<blockquote>
<p></p>
</blockquote>
<h2>工业风格</h2>
<blockquote>
<p></p>
</blockquote>
<h2>街头</h2>
<h2>机能</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href="/design/Style-%E6%9C%BA%E8%83%BD.html" target="_blank">机能风格</a></p>
<h2>户外</h2>
<h2>工业</h2>
<h2>日系</h2>
<h2>复古</h2>
<h2>商务</h2>
<h2>悠闲</h2>
<h2>古典主义</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
</div>
<h3>巴洛克风格</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>洛可可风格</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>新古典主义</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>现代主义</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
</div>
<h3>北欧风格</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>现代简约</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>包豪斯风格</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>国际风格</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>后现代主义</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
</div>
<h3>解构主义</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>装饰艺术</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>超现实主义</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>其他风格</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
</div>
<h3>末世风格</h3>
<h3>明日方舟风格</h3>
<h3>赛博朋克风格</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>维多利亚风格</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>艺术装饰风格</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>后启示录风格</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Visual（视觉）</title>
      <link>https://blog.magictable.ha.cn/design/Visual%EF%BC%88%E8%A7%86%E8%A7%89%EF%BC%89.html</link>
      <guid>https://blog.magictable.ha.cn/design/Visual%EF%BC%88%E8%A7%86%E8%A7%89%EF%BC%89.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Visual（视觉）</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 主要特点 注意事项 适用场景 基础知识 注释 艺术就是对比关系（颜色、明暗、复杂简单、疏密、大小） 视觉中心依赖对比关系 UI分析 ZCOOL站酷 - 《绝区零》游戏UI动效简析 ZCOOL站酷 - 米哈游聚合式游戏启动器 HOYO Launcher 概念设计</description>
      <category>艺术创作/视觉</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要特点</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>基础知识</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>艺术就是对比关系（颜色、明暗、复杂简单、疏密、大小）</li>
<li>视觉中心依赖对比关系</li>
</ul>
</div>
<h2>UI分析</h2>
<p><a href="https://www.zcool.com.cn/article/ZMTQ0MDQ1Mg==.html" target="_blank" rel="noopener noreferrer">ZCOOL站酷 - 《绝区零》游戏UI动效简析</a></p>
<p><a href="https://www.zcool.com.cn/work/ZNjU5OTE4NjQ=.html" target="_blank" rel="noopener noreferrer">ZCOOL站酷 - 米哈游聚合式游戏启动器 HOYO Launcher 概念设计</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Economy - 数字货币</title>
      <link>https://blog.magictable.ha.cn/rule/Economy-%E6%95%B0%E5%AD%97%E8%B4%A7%E5%B8%81.html</link>
      <guid>https://blog.magictable.ha.cn/rule/Economy-%E6%95%B0%E5%AD%97%E8%B4%A7%E5%B8%81.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Economy - 数字货币</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 主要特点 注意事项 适用场景 数字人民币</description>
      <category>世界规则/经济</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要特点</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>数字人民币</h2>
]]></content:encoded>
    </item>
    <item>
      <title>Economy（经济）</title>
      <link>https://blog.magictable.ha.cn/rule/Economy%EF%BC%88%E7%BB%8F%E6%B5%8E%EF%BC%89.html</link>
      <guid>https://blog.magictable.ha.cn/rule/Economy%EF%BC%88%E7%BB%8F%E6%B5%8E%EF%BC%89.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Economy（经济）</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 最为稳定的合作方案。 目前分为：金钱收买、暴力武统 主要特点 注意事项 适用场景 基础知识 问题 如何降低金钱的差价不平衡问题？</description>
      <category>世界规则/经济</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>最为稳定的合作方案。</li>
<li>目前分为：金钱收买、暴力武统</li>
</ul>
<p>主要特点</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>基础知识</h2>
<h2>问题</h2>
<p>如何降低金钱的差价不平衡问题？</p>
]]></content:encoded>
    </item>
    <item>
      <title>Environment - 通信网络结构</title>
      <link>https://blog.magictable.ha.cn/rule/Environment-%E9%80%9A%E4%BF%A1%E7%BD%91%E7%BB%9C%E7%BB%93%E6%9E%84.html</link>
      <guid>https://blog.magictable.ha.cn/rule/Environment-%E9%80%9A%E4%BF%A1%E7%BD%91%E7%BB%9C%E7%BB%93%E6%9E%84.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Environment - 通信网络结构</source>
      <description>文章摘要： 摘要内容。 Environment-通信网络结构_总览图.excalidraw 服务器 核心网 地下电缆 基站 中间件（光纤、光猫、交换机、路由器） 提示 能否将基站安装到可以移动的设备上，通过微波的形式二次发送到固定基站上。 该想法是为了实现携带能否通过无线电波发送和接收数据。 注释 在重大节日或情况下，会对网络进行“封网”操作，尽可能对...</description>
      <category>世界规则/环境</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<blockquote>
<p></p>
</blockquote>
<p>服务器</p>
<p>核心网</p>
<p>地下电缆</p>
<p>基站</p>
<p>中间件（光纤、光猫、交换机、路由器）</p>
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<ul>
<li>能否将基站安装到可以移动的设备上，通过微波的形式二次发送到固定基站上。</li>
<li>该想法是为了实现携带能否通过无线电波发送和接收数据。</li>
</ul>
</div>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>在重大节日或情况下，会对网络进行“封网”操作，尽可能对网络不进行重大操作，以提高网络的稳定运行。</p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Environment（环境）</title>
      <link>https://blog.magictable.ha.cn/rule/Environment%EF%BC%88%E7%8E%AF%E5%A2%83%EF%BC%89.html</link>
      <guid>https://blog.magictable.ha.cn/rule/Environment%EF%BC%88%E7%8E%AF%E5%A2%83%EF%BC%89.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Environment（环境）</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 物质环境。 需要尽可能在好的环境中生存，达到全世界躺平的状态。 主要特点 注意事项 适用场景 基础知识 问题 爱护环境 结构</description>
      <category>世界规则/环境</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>物质环境。</li>
<li>需要尽可能在好的环境中生存，达到全世界躺平的状态。</li>
</ul>
<p>主要特点</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>基础知识</h2>
<h2>问题</h2>
<p>爱护环境</p>
<h2>结构</h2>
<ul>
<li><a href="/rule/Environment-%E9%80%9A%E4%BF%A1%E7%BD%91%E7%BB%9C%E7%BB%93%E6%9E%84.html" target="_blank">Environment-通信网络结构</a></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Health（健康）</title>
      <link>https://blog.magictable.ha.cn/rule/Health%EF%BC%88%E5%81%A5%E5%BA%B7%EF%BC%89.html</link>
      <guid>https://blog.magictable.ha.cn/rule/Health%EF%BC%88%E5%81%A5%E5%BA%B7%EF%BC%89.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Health（健康）</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 确保个体生理健康、心理健康。 主要特点 注意事项 适用场景 基础知识 问题 确保个人存活、保护个体状态健康 生理健康、心理健康 提示：需要避免被第三方PUA。 人格 详细总结：</description>
      <category>世界规则/健康</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>确保个体生理健康、心理健康。</li>
</ul>
<p>主要特点</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>基础知识</h2>
<h2>问题</h2>
<p>确保个人存活、保护个体状态健康</p>
<p>生理健康、心理健康</p>
<p>提示：需要避免被第三方PUA。</p>
<h2>人格</h2>
<p>详细总结：<a href="/rule/Health-%E4%BA%BA%E6%A0%BC.html" target="_blank">Health-人格</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Law（法律）</title>
      <link>https://blog.magictable.ha.cn/rule/Law%EF%BC%88%E6%B3%95%E5%BE%8B%EF%BC%89.html</link>
      <guid>https://blog.magictable.ha.cn/rule/Law%EF%BC%88%E6%B3%95%E5%BE%8B%EF%BC%89.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Law（法律）</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 当政治受到违反危害，将执行法律规则，惩罚社会规则。 主要特点 注意事项 适用场景 基础知识 问题 遇到问题纠纷时的 “责任” 分配相关规则。</description>
      <category>世界规则/法律</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>当政治受到违反危害，将执行法律规则，惩罚社会规则。</li>
</ul>
<p>主要特点</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>基础知识</h2>
<h2>问题</h2>
<p>遇到问题纠纷时的 “责任” 分配相关规则。</p>
]]></content:encoded>
    </item>
    <item>
      <title>Morality（道德）</title>
      <link>https://blog.magictable.ha.cn/rule/Morality%EF%BC%88%E9%81%93%E5%BE%B7%EF%BC%89.html</link>
      <guid>https://blog.magictable.ha.cn/rule/Morality%EF%BC%88%E9%81%93%E5%BE%B7%EF%BC%89.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Morality（道德）</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 主要特点 注意事项 适用场景 基础知识 问题 尊老爱幼</description>
      <category>世界规则/道德</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要特点</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>基础知识</h2>
<h2>问题</h2>
<p>尊老爱幼</p>
]]></content:encoded>
    </item>
    <item>
      <title>Politics（政策）</title>
      <link>https://blog.magictable.ha.cn/rule/Politics%EF%BC%88%E6%94%BF%E7%AD%96%EF%BC%89.html</link>
      <guid>https://blog.magictable.ha.cn/rule/Politics%EF%BC%88%E6%94%BF%E7%AD%96%EF%BC%89.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Politics（政策）</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 政策要求，若违反则受到法律制裁。 主要特点 注意事项 适用场景 基础知识 社会保险（社保）与五险一金 社会保险 = 养老保险 + 医疗保险 + 失业保险 + 工伤保险 + 生育保险 五险一金 = 社会保险 + 住房公积金 养老保险‌：用于保障劳动者在退休后的基本生活需求，提供稳定可靠的生活来源。 医疗保险‌：用于...</description>
      <category>世界规则/政策</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>政策要求，若违反则受到法律制裁。</li>
</ul>
<p>主要特点</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>基础知识</h2>
<h2>社会保险（社保）与五险一金</h2>
<p>社会保险 = 养老保险 + 医疗保险 + 失业保险 + 工伤保险 + 生育保险</p>
<p>五险一金 = 社会保险 + 住房公积金</p>
<ul>
<li><strong>养老保险</strong>‌：用于保障劳动者在退休后的基本生活需求，提供稳定可靠的生活来源。</li>
<li><strong>医疗保险</strong>‌：用于报销医疗费用，减轻生病就医带来的经济负担。</li>
<li><strong>失业保险</strong>‌：在非因本人意愿中断就业时，提供失业保险金以维持基本生活。</li>
<li><strong>工伤保险</strong>‌：在工作中遭受事故伤害或患职业病时，提供医疗救治和经济补偿。</li>
<li><strong>生育保险</strong>‌：女职工生育时可享受生育津贴和生育医疗费用报销。</li>
<li><strong>补充医疗保险</strong>‌：作为基本医疗保险的补充，进一步减轻医疗费用负担。</li>
<li><strong>住房公积金</strong>‌：用于购买、建造、翻建、大修自住住房等，具有储蓄性和互助性。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Excerpt（摘录）</title>
      <link>https://blog.magictable.ha.cn/note/Excerpt%EF%BC%88%E6%91%98%E5%BD%95%EF%BC%89.html</link>
      <guid>https://blog.magictable.ha.cn/note/Excerpt%EF%BC%88%E6%91%98%E5%BD%95%EF%BC%89.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Excerpt（摘录）</source>
      <description>文章摘要： 摘要总结是对一篇论文、报告、文章或任何其他形式文献的核心内容进行高度概括的简短文本。 简介 简要说明 摘要总结是对一篇论文、报告、文章或任何其他形式文献的核心内容进行高度概括的简短文本。 主要特点 高度概括：摘要总结需要将长篇内容压缩成几个关键点。 内容精炼：只包含最关键的信息，剔除细节和辅助材料。 逻辑性强：即使内容简短，也要保持清晰的逻...</description>
      <category>学习笔记/摘录</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要总结是对一篇论文、报告、文章或任何其他形式文献的核心内容进行高度概括的简短文本。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>摘要总结是对一篇论文、报告、文章或任何其他形式文献的核心内容进行高度概括的简短文本。</li>
</ul>
<p>主要特点</p>
<ul>
<li><strong>高度概括</strong>：摘要总结需要将长篇内容压缩成几个关键点。</li>
<li><strong>内容精炼</strong>：只包含最关键的信息，剔除细节和辅助材料。</li>
<li><strong>逻辑性强</strong>：即使内容简短，也要保持清晰的逻辑结构。</li>
<li><strong>独立完整</strong>：摘要总结应能独立于原文，完整表达主要信息。</li>
<li><strong>客观中立</strong>：保持客观立场，不带有个人情感或评价。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>篇幅控制</strong>：摘要总结的长度通常有限制，需在规定字数内完成。</li>
<li><strong>避免冗余</strong>：避免重复相同的信息或使用不必要的词汇。</li>
<li><strong>关键词突出</strong>：突出显示文献中的关键词和重要概念。</li>
<li><strong>避免引用</strong>：不要在摘要总结中引用原文或使用引号。</li>
<li><strong>语言规范</strong>：使用准确、规范的学术语言，避免行话或专业术语的滥用。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>学术研究</strong>：研究人员在查阅大量文献时，通过摘要总结快速筛选相关资料。</li>
<li><strong>文献综述</strong>：在撰写文献综述时，摘要总结有助于整合和比较不同研究。</li>
<li><strong>学术交流</strong>：在学术会议或研讨会上，摘要总结用于介绍研究成果。</li>
<li><strong>教育资源</strong>：教师和学生使用摘要总结来快速掌握教科书或学术文章的要点。</li>
<li><strong>信息检索</strong>：在数据库或图书馆检索时，摘要总结帮助用户快速定位感兴趣的内容。</li>
</ul>
<h2>2017微软AI大讲堂</h2>
<p>详细总结：<a href="/note/Excerpt-2017%E5%BE%AE%E8%BD%AFAI%E5%A4%A7%E8%AE%B2%E5%A0%82.html" target="_blank">Excerpt-2017微软AI大讲堂</a></p>
<h2>微软-人与AI交互设计</h2>
<p>详细总结：<a href="/note/Excerpt-%E5%BE%AE%E8%BD%AF-%E4%BA%BA%E4%B8%8EAI%E4%BA%A4%E4%BA%92%E8%AE%BE%E8%AE%A1.html" target="_blank">Excerpt-微软-人与AI交互设计</a></p>
<h2>机器人发展报告</h2>
<p>详细总结：<a href="/note/Excerpt-%E6%9C%BA%E5%99%A8%E4%BA%BA%E5%8F%91%E5%B1%95%E6%8A%A5%E5%91%8A.html" target="_blank">Excerpt-机器人发展报告</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Paper（论文）</title>
      <link>https://blog.magictable.ha.cn/note/Paper%EF%BC%88%E8%AE%BA%E6%96%87%EF%BC%89.html</link>
      <guid>https://blog.magictable.ha.cn/note/Paper%EF%BC%88%E8%AE%BA%E6%96%87%EF%BC%89.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Paper（论文）</source>
      <description>文章摘要： 论文是一种学术写作形式，用于展示研究成果、讨论理论问题或分析数据。 简介 简要说明 论文通常由标题、摘要、关键词、引言、文献综述、研究方法、结果、讨论、结论和参考文献等部分组成。 旨在通过严谨的论证和充分的证据，对某一学术问题进行深入探讨。 主要特点 学术性：论文要求具有严谨的学术态度，遵循学术规范。 逻辑性：论文的论证过程需严密，逻辑清晰...</description>
      <category>学习笔记/论文</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 论文是一种学术写作形式，用于展示研究成果、讨论理论问题或分析数据。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>论文通常由标题、摘要、关键词、引言、文献综述、研究方法、结果、讨论、结论和参考文献等部分组成。</li>
<li>旨在通过严谨的论证和充分的证据，对某一学术问题进行深入探讨。</li>
</ul>
<p>主要特点</p>
<ul>
<li><strong>学术性</strong>：论文要求具有严谨的学术态度，遵循学术规范。</li>
<li><strong>逻辑性</strong>：论文的论证过程需严密，逻辑清晰。</li>
<li><strong>创新性</strong>：论文应具有一定的创新点，对研究领域有所贡献。</li>
<li><strong>可靠性</strong>：论文的数据和引用资料需真实可靠。</li>
<li><strong>规范性</strong>：论文格式、引用和排版需符合相关学术规范。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>选题</strong>：选择具有研究价值和创新性的课题。</li>
<li><strong>文献综述</strong>：全面梳理相关领域的研究成果，为自己的研究奠定基础。</li>
<li><strong>研究方法</strong>：选择合适的研究方法，确保研究的科学性和有效性。</li>
<li><strong>论证过程</strong>：确保论证严密，避免逻辑漏洞。</li>
<li><strong>引用规范</strong>：正确引用文献，尊重他人的知识产权。</li>
<li><strong>语言表达</strong>：使用规范、简洁、明了的语言。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>学术研究</strong>：用于展示研究成果，推动学术交流。</li>
<li><strong>学位申请</strong>：硕士、博士等学位论文是评价学位候选人学术水平的重要依据。</li>
<li><strong>项目申报</strong>：项目申报书中，论文可作为研究基础和实力的证明。</li>
<li><strong>职称评定</strong>：论文发表数量和质量是评定职称的重要条件之一。</li>
<li><strong>教学科研</strong>：论文可用于课堂教学和科研讨论，提高学术素养。</li>
</ul>
<h2>小冰的设计和实现，一个善解人意的社交聊天机器人</h2>
<ul>
<li>论文名称：</li>
<li>论文链接：</li>
</ul>
<p>详细总结：<a href="/note/Paper-%E5%B0%8F%E5%86%B0%E7%9A%84%E8%AE%BE%E8%AE%A1%E5%92%8C%E5%AE%9E%E7%8E%B0%EF%BC%8C%E4%B8%80%E4%B8%AA%E5%96%84%E8%A7%A3%E4%BA%BA%E6%84%8F%E7%9A%84%E7%A4%BE%E4%BA%A4%E8%81%8A%E5%A4%A9%E6%9C%BA%E5%99%A8%E4%BA%BA.html" target="_blank">Paper-小冰的设计和实现，一个善解人意的社交聊天机器人</a></p>
<h2>Agent AI：调查多模式交互的视野</h2>
<ul>
<li>论文名称：</li>
<li>论文链接：</li>
</ul>
<p>详细总结：<a href="/note/Paper-AgentAI%EF%BC%9A%E8%B0%83%E6%9F%A5%E5%A4%9A%E6%A8%A1%E5%BC%8F%E4%BA%A4%E4%BA%92%E7%9A%84%E8%A7%86%E9%87%8E.html" target="_blank">Paper-AgentAI：调查多模式交互的视野</a></p>
<h2>搜索和学习的扩展：从强化学习的角度再现o1的路线图</h2>
<ul>
<li>论文名称：Scaling of Search and Learning: A Roadmap to Reproduce o1 from Reinforcement Learning Perspective</li>
<li>论文链接：https://arxiv.org/abs/2412.14135</li>
</ul>
<p>详细总结：<a href="/note/Paper-%E6%90%9C%E7%B4%A2%E5%92%8C%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%89%A9%E5%B1%95%EF%BC%9A%E4%BB%8E%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0%E7%9A%84%E8%A7%92%E5%BA%A6%E5%86%8D%E7%8E%B0o1%E7%9A%84%E8%B7%AF%E7%BA%BF%E5%9B%BE.html" target="_blank">Paper-搜索和学习的扩展：从强化学习的角度再现o1的路线图</a></p>
<h2>B-STaR：监测和平衡自学推理者的探索和开发</h2>
<ul>
<li>论文名称：B-STaR: Monitoring and Balancing Exploration and Exploitation in Self-Taught Reasoners</li>
<li>论文链接：https://arxiv.org/abs/2412.17256</li>
</ul>
<p>详细总结：<a href="/note/Paper-B-STaR%EF%BC%9A%E7%9B%91%E6%B5%8B%E5%92%8C%E5%B9%B3%E8%A1%A1%E8%87%AA%E5%AD%A6%E6%8E%A8%E7%90%86%E8%80%85%E7%9A%84%E6%8E%A2%E7%B4%A2%E5%92%8C%E5%BC%80%E5%8F%91.html" target="_blank">Paper-B-STaR：监测和平衡自学推理者的探索和开发</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - appletviewer</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-appletviewer.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-appletviewer.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - appletviewer</source>
      <description>文章摘要： 在没有Web浏览器的情况下运行和调试Applet的工具，终端命令操作查询。 简介 appletviewer 是一个Java工具，它允许开发者在没有Web浏览器的情况下查看和调试Applet。 该命令通过连接到指定的URL，并在其自己的窗口中显示文档中引用的每个Applet。 如果URL指向的文档不包含任何Applet引用，appletvie...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 在没有Web浏览器的情况下运行和调试Applet的工具，终端命令操作查询。</p>
<!-- more -->
<h2>简介</h2>
<ul>
<li><code>appletviewer</code> 是一个Java工具，它允许开发者在没有Web浏览器的情况下查看和调试Applet。</li>
<li>该命令通过连接到指定的URL，并在其自己的窗口中显示文档中引用的每个Applet。</li>
<li>如果URL指向的文档不包含任何Applet引用，<code>appletviewer</code> 将不会执行任何操作。</li>
<li>需要注意的是，该命令仅适用于开发环境。</li>
</ul>
<h2>格式</h2>
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<p><code>appletviewer [选项] &lt;参数&gt; ...</code></p>
</div>
<h3>选项</h3>
<p><code>-debug</code></p>
<ul>
<li>启动Java调试器（<code>jdb</code>），以便调试文档中的Applet。</li>
</ul>
<p><code>-encoding &lt;编码名称&gt;</code></p>
<ul>
<li>指定输入HTML文件的编码方式。</li>
</ul>
<p><code>-J&lt;javaoption&gt;</code></p>
<ul>
<li>将字符串 <code>javaoption</code> 作为单个参数传递给运行 Applet 查看器的 Java 解释器。参数不应包含空格。多个参数字必须全部以前缀 <code>-J</code> 开头。这对于调整编译器的执行环境或内存使用情况非常有用。</li>
</ul>
<h3>参数</h3>
<ul>
<li>填写Applet所在的HTML文件的URL，可以是本地文件路径或网络URL。</li>
</ul>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 查看并运行位于本地文件系统中的Applet</span></span>
<span class="line">appletviewer file:///C:/path/to/your/applet.html</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 在调试模式下启动Applet查看器</span></span>
<span class="line">appletviewer <span class="token parameter variable">-debug</span> file:///C:/path/to/your/applet.html</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 指定HTML文件的编码方式</span></span>
<span class="line">appletviewer <span class="token parameter variable">-encoding</span> UTF-8 file:///C:/path/to/your/applet.html</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 传递参数给Java解释器，例如增加堆内存大小</span></span>
<span class="line">appletviewer -J-Xmx512m file:///C:/path/to/your/applet.html</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - extcheck</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-extcheck.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-extcheck.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - extcheck</source>
      <description>文章摘要： 检测目标 Java 存档（JAR）文件与当前安装的扩展 JAR 文件之间的版本冲突，可以确保应用程序的兼容性和稳定性。 简介 用于检查指定的 JAR 文件的标题和版本是否与 Java SE SDK 中安装的任何扩展存在冲突。在安装新的扩展之前，使用此工具可以预防潜在的问题。 该命令会对比 targetfile.jar 文件清单中的 Spec...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 检测目标 Java 存档（JAR）文件与当前安装的扩展 JAR 文件之间的版本冲突，可以确保应用程序的兼容性和稳定性。</p>
<!-- more -->
<h2>简介</h2>
<ul>
<li>用于检查指定的 JAR 文件的标题和版本是否与 Java SE SDK 中安装的任何扩展存在冲突。在安装新的扩展之前，使用此工具可以预防潜在的问题。</li>
<li>该命令会对比 <code>targetfile.jar</code> 文件清单中的 <code>Specification-title</code> 和 <code>Specification-version</code> 标头与扩展目录中当前安装的所有 JAR 文件中的相应标头。</li>
<li>在 Oracle Solaris 系统上，默认的扩展目录是 <code>jre/lib/ext</code>。</li>
<li><code>extcheck</code> 使用与 <code>java.lang.Package.isCompatibleWith</code> 方法相同的规则来比较版本号。</li>
<li>如果没有发现冲突，<code>extcheck</code> 将返回代码 0。</li>
<li>如果扩展目录中的任何 JAR 文件具有相同的 <code>Specification-title</code> 以及相同或更新的 <code>Specification-version</code>，<code>extcheck</code> 将返回非零错误代码。如果目标 JAR 文件的清单中缺少 <code>Specification-title</code> 或 <code>Specification-version</code> 属性，也会返回非零错误代码。</li>
</ul>
<h2>格式</h2>
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<p><code>extcheck [选项] &lt;参数&gt;</code></p>
</div>
<h3>选项</h3>
<p><code>-verbose</code></p>
<ul>
<li>在执行检查时，详细列出扩展目录中的 JAR 文件，并报告目标 JAR 文件的清单属性以及任何冲突的 JAR 文件。</li>
</ul>
<p><code>-J&lt;option&gt;</code></p>
<ul>
<li>允许将特定的选项传递给 Java 虚拟机（JVM），其中 <code>&lt;option&gt;</code> 是 Java 启动器参考页面上描述的选项之一。</li>
</ul>
<h3>参数</h3>
<ul>
<li>目标 JAR 文件路径，用于与当前安装的扩展 JAR 文件进行比较，以检测是否存在版本冲突。</li>
</ul>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 检查 myapp.jar 文件是否与已安装的扩展冲突</span></span>
<span class="line">extcheck <span class="token parameter variable">-verbose</span> myapp.jar</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 如果检测到冲突，extcheck 将输出相关信息并返回非零退出状态</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - idlj</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-idlj.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-idlj.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - idlj</source>
      <description>文章摘要： 摘要内容。 简介 格式 格式 `` 选项 参数 案例</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>格式</h2>
<p>格式</p>
<blockquote>
<ul>
<li>``</li>
</ul>
</blockquote>
<p>选项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - jar</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jar.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jar.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - jar</source>
      <description>文章摘要： 创建和管理 Java 存档 （JAR） 文件。 简介 基于 ZIP 和 ZLIB 压缩格式的通用存档和压缩工具。 用于将 Java 小程序或应用程序打包到单个存档中。 当 applet 或应用程序的组件（文件、图像和声音）组合到单个存档中时，它们可以由 Java 代理（例如浏览器）在单个 HTTP 事务中下载，而不需要为每个部分建立新连接。...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 创建和管理 Java 存档 （JAR） 文件。</p>
<!-- more -->
<h2>简介</h2>
<ul>
<li>基于 ZIP 和 ZLIB 压缩格式的通用存档和压缩工具。</li>
<li>用于将 Java 小程序或应用程序打包到单个存档中。</li>
<li>当 applet 或应用程序的组件（文件、图像和声音）组合到单个存档中时，它们可以由 Java 代理（例如浏览器）在单个 HTTP 事务中下载，而不需要为每个部分建立新连接。这大大缩短了下载时间。</li>
<li>可以压缩文件，从而进一步缩短下载时间。</li>
<li>允许 applet 作者对文件中的各个条目进行签名，以便可以验证其来源。</li>
<li>JAR 文件可以用作类路径条目，无论它是否经过压缩。</li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p><code>jar</code> 命令的语法类似于 <code>tar</code> 命令的语法。它有几种操作模式，由其中一个 mandatory <em>operation 参数_定义。其他参数是修改操作行为_的选项</em>，或者是执行操作所需的_操作数_。</p>
</div>
<h2>格式</h2>
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<p><code>jar c[efmMnv0] [entrypoint] [&lt;jarfile&gt;] [manifest] [-C &lt;dir&gt;] &lt;file&gt; ... [-J&lt;option&gt; ...] [@arg-file ...]</code>：创建JAR文件。</p>
<p><code>jar u[efmMnv0] [entrypoint] [&lt;jarfile&gt;] [manifest] [-C &lt;dir&gt;] &lt;file&gt; ... [-J&lt;option&gt; ...] [@arg-file ...]</code>：更新JAR文件。</p>
<p><code>jar x[vf] [&lt;jarfile&gt;] &lt;file&gt; ... [-J&lt;option&gt; ...] [@arg-file ...]</code>：提取JAR文件。</p>
<p><code>jar t[vf] [&lt;jarfile&gt;] &lt;file&gt; ... [-J&lt;option&gt; ...] [@arg-file ...]</code>：列出JAR文件的内容。</p>
<p><code>jar i &lt;jarfile&gt; [-J&lt;option&gt; ...] [@arg-file ...]</code>：向JAR文件添加索引。</p>
</div>
<h3>操作选项</h3>
<ul>
<li><code>c</code>：创建新的 JAR 存档。</li>
<li><code>i</code>：生成 JAR 存档的索引信息。</li>
<li><code>t</code>：列出 JAR 存档的内容。</li>
<li><code>u</code>：更新 JAR 存档。</li>
<li><code>x</code>：从 JAR 存档中提取文件。</li>
</ul>
<h3>option选项</h3>
<ul>
<li><code>-e</code>: 指定入口点类，用于创建可执行的 JAR 文件。</li>
<li><code>-f</code>: 指定 JAR 文件的名称。</li>
<li><code>-m</code>: 包含指定的 manifest 文件中的属性。</li>
<li><code>-M</code>: 创建或更新 JAR 文件时不自动生成 manifest 文件。</li>
<li><code>-n</code>: 归档规范化，确保 pack200 压缩/解压缩后签名有效。</li>
<li><code>-v</code>: 生成详细输出。</li>
<li><code>-0</code>: 创建或更新 JAR 文件时不使用 ZIP 压缩。</li>
<li><code>-C</code>: 在处理文件之前更改目录。</li>
</ul>
<h3>参数</h3>
<ul>
<li><code>file</code>: 指定要添加到 JAR 文件中的文件或目录。</li>
<li><code>entrypoint</code>: 指定 JAR 文件的入口点类。</li>
<li><code>jarfile</code>: 指定 JAR 文件的名称。</li>
<li><code>manifest</code>: 指定包含属性的 manifest 文件。</li>
</ul>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 创建 JAR 文件</span></span>
<span class="line"><span class="token comment"># 将创建一个名为 `myapp.jar` 的 JAR 文件，包含当前目录下的所有 `.class` 文件</span></span>
<span class="line">jar cf myapp.jar *.class</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 创建可执行的 JAR 文件</span></span>
<span class="line"><span class="token comment"># 将创建一个名为 `myapp.jar` 的可执行 JAR 文件，其中 `com.example.Main` 是入口点类</span></span>
<span class="line">jar cfe myapp.jar com.example.Main com/example/Main.class</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 更新 JAR 文件</span></span>
<span class="line"><span class="token comment"># 将更新 `myapp.jar` 文件，添加 `newfiles` 目录下的所有文件</span></span>
<span class="line">jar uf myapp.jar <span class="token parameter variable">-C</span> newfiles <span class="token builtin class-name">.</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 列出 JAR 文件内容</span></span>
<span class="line"><span class="token comment"># 将列出 `myapp.jar` 文件中的所有文件</span></span>
<span class="line">jar tf myapp.jar</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 提取 JAR 文件</span></span>
<span class="line"><span class="token comment"># 将从 `myapp.jar` 文件中提取所有文件</span></span>
<span class="line">jar xf myapp.jar</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 为 JAR 文件添加索引</span></span>
<span class="line"><span class="token comment"># 将为 `myapp.jar` 文件添加索引信息，以便于快速访问</span></span>
<span class="line">jar i myapp.jar</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 使用 manifest 文件</span></span>
<span class="line"><span class="token comment"># 将创建一个名为 myapp.jar 的 JAR 文件，并包含 manifest.mf 文件中的 manifest 信息</span></span>
<span class="line">jar cmf manifest.mf myapp.jar *.class</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - jarsigner</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jarsigner.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jarsigner.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - jarsigner</source>
      <description>文章摘要： 摘要内容。 简介 格式 格式 `` 选项 参数 案例</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>格式</h2>
<p>格式</p>
<blockquote>
<ul>
<li>``</li>
</ul>
</blockquote>
<p>选项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - java</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-java.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-java.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - java</source>
      <description>文章摘要： 摘要内容。 简介 java 命令启动 Java 应用程序。通过启动 Java 运行时环境 （JRE）、加载指定的类并调用该类的 main（） 方法来执行此操作。 java 命令可用于通过加载具有 main（） 方法或扩展 javafx.application.Application 的类来启动 JavaFX 应用程序。在后一种情况下，启动程...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<ul>
<li><code>java</code> 命令启动 Java 应用程序。通过启动 Java 运行时环境 （JRE）、加载指定的类并调用该类的 <code>main（）</code> 方法来执行此操作。</li>
<li><code>java</code> 命令可用于通过加载具有 <code>main（）</code> 方法或扩展 <code>javafx.application.Application</code> 的类来启动 JavaFX 应用程序。在后一种情况下，启动程序构造 <code>Application</code> 类的实例，调用其 <code>init（）</code> 方法，然后调用 <code>start（javafx.stage.Stage）</code> 方法。</li>
<li>默认情况下，不是 <code>java</code> 命令选项的第一个参数是要调用的类的完全限定名称。如果指定了 <code>-jar</code> 选项，则其参数是包含应用程序的类和资源文件的 JAR 文件的名称。启动类必须由其源代码中的 <code>Main-Class</code> 清单标头指示。</li>
<li>JRE 在三组位置搜索启动类（以及应用程序使用的其他类）：引导程序类路径、已安装的扩展和用户的类路径。</li>
<li>类文件名或 JAR 文件名后面的参数将传递给 <code>main（）</code> 方法。</li>
</ul>
<h2>格式</h2>
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<p><code>java [&lt;选项&gt;] &lt;类名&gt; [&lt;参数&gt;]</code>：运行java字节码文件，即已经编译过的文件。</p>
<p><code>java [&lt;选项&gt;] -jar &lt;文件名&gt; [&lt;参数&gt;]</code>：运行jar文件，即打包好的文件。</p>
</div>
<h3>选项</h3>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p><strong>标准选项</strong></p>
<ul>
<li>这些是 JVM 的所有实现都支持的最常用的选项。</li>
</ul>
</div>
<p><code>-help</code> <code>-?</code></p>
<ul>
<li>显示 <code>java</code> 命令的使用情况信息，而不实际运行 JVM。</li>
</ul>
<p><code>-agentlib:&lt;本机代理程序库名&gt;[=&lt;选项&gt;]</code></p>
<ul>
<li>加载指定的本机代理程序库。在库名称之后，可以使用特定于库的逗号分隔选项列表。</li>
<li>有关本机代理库的更多信息，请参阅以下内容：</li>
<li>本机代理程序库名：<code>java.lang.instrument</code> 包描述 <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/instrument/package-summary.html" target="_blank" rel="noopener noreferrer">http://docs.oracle.com/javase/8/docs/api/java/lang/instrument/package-summary.html</a></li>
<li>选项：JVM 工具界面指南中的代理命令行选项，网址为 <a href="http://docs.oracle.com/javase/8/docs/platform/jvmti/jvmti.html#starting" target="_blank" rel="noopener noreferrer">http://docs.oracle.com/javase/8/docs/platform/jvmti/jvmti.html#starting</a></li>
</ul>
<p><code>-agentpath:&lt;本机代理程序库的绝对路径&gt;[=&lt;选项&gt;]</code></p>
<ul>
<li>加载由绝对路径名指定的本机代理程序库。</li>
<li>此选项等效于 <code>-agentlib</code>，但使用库的完整路径和文件名。</li>
</ul>
<p><code>-client</code></p>
<ul>
<li>选择 Java HotSpot 客户端 VM。</li>
<li>Java SE 开发工具包 （JDK） 的 64 位版本当前忽略此选项，而是使用 Server JVM。</li>
</ul>
<p><code>-D&lt;属性&gt;=&lt;值&gt;</code></p>
<ul>
<li>设置系统属性值。</li>
<li><code>属性</code> 变量是一个没有空格的字符串，表示属性的名称。</li>
<li><code>值</code> 变量是表示属性值的字符串。</li>
<li>如果 <code>值</code> 是带空格的字符串，则用引号将其括起来（例如 <code>-Dfoo=“foo bar”）。</code></li>
</ul>
<p><code>-d32</code></p>
<ul>
<li>在 32 位环境中运行应用程序。</li>
<li>如果未安装 32 位环境或不支持 32 位环境，则会报告错误。</li>
<li>默认情况下，除非使用 64 位系统，否则应用程序将在 32 位环境中运行。</li>
</ul>
<p><code>-d64</code></p>
<ul>
<li>在 64 位环境中运行应用程序。</li>
<li>如果未安装 64 位环境或不支持 64 位环境，则会报告错误。</li>
<li>默认情况下，除非使用 64 位系统，否则应用程序将在 32 位环境中运行。</li>
<li>目前只有 Java HotSpot Server VM 支持 64 位操作，并且 <code>-server</code> 选项是使用 <code>-d64</code> 时隐含的。使用 <code>-d64</code> 时，将忽略 <code>-client</code> 选项。在未来版本中，这可能会发生更改。</li>
</ul>
<p><code>-disableassertions[:[&lt;包名&gt;]...|:&lt;类名&gt;]</code> <code>-da[:[&lt;包名&gt;]...|:&lt;类名&gt;]</code></p>
<ul>
<li>禁用断言。默认情况下，断言在所有包和类中都处于禁用状态。</li>
</ul>
<p><code>-disablesystemassertions</code> <code>-dsa</code></p>
<ul>
<li>禁用所有系统类中的断言。</li>
</ul>
<p><code>-enableassertions[:[&lt;包名&gt;]...|:&lt;类名&gt;]</code> <code>-ea[:[&lt;包名&gt;]...|:&lt;类名&gt;]</code></p>
<ul>
<li>启用断言。默认情况下，断言在所有包和类中都处于禁用状态。</li>
</ul>
<p><code>-enablesystemassertions</code> <code>-esa</code></p>
<ul>
<li>在所有系统类中启用断言。</li>
</ul>
<p><code>-jar &lt;文件名&gt;</code></p>
<ul>
<li>执行封装在 JAR 文件中的程序。</li>
<li><code>文件名</code> 参数是一个 JAR 文件的名称，其清单包含一行 <code>Main-Class：``classname</code> 格式的行，该行使用用作应用程序起点 <code>public static void main(String[] args)</code> 的方法定义类。</li>
<li>使用 <code>-jar</code> 选项时，指定的 JAR 文件是所有用户类的源，其他类路径设置将被忽略。</li>
</ul>
<p><code>-javaagent:&lt;JRE路径&gt;[=&lt;选项&gt;]</code></p>
<ul>
<li>加载指定的 Java 编程语言代理。</li>
</ul>
<p><code>-jre-restrict-search</code></p>
<ul>
<li>在版本搜索中包括用户专用 JRE。</li>
</ul>
<p><code>-no-jre-restrict-search</code></p>
<ul>
<li>从版本搜索中排除用户专用 JRE。</li>
</ul>
<p><code>-server</code></p>
<ul>
<li>选择 Java HotSpot Server VM</li>
<li>JDK 的 64 位版本仅支持服务器 VM，因此在这种情况下，该选项是隐式的。</li>
</ul>
<p><code>-showversion</code></p>
<ul>
<li>显示版本信息并继续执行应用程序。</li>
<li>此选项等同于 <code>-version</code> 选项，不同之处在于后者指示 JVM 在显示版本信息后退出。</li>
</ul>
<p><code>-splash:&lt;图片&gt;</code></p>
<ul>
<li>显示带有 <code>图片</code> 指定图像的初始屏幕。</li>
<li>例如，要在启动应用程序时显示 <code>images</code> 目录中的 <code>splash.gif</code> 文件，请使用以下选项：<code>-splash:images/splash.gif</code></li>
</ul>
<p><code>-verbose:class</code></p>
<ul>
<li>显示有关每个加载的类的信息。</li>
</ul>
<p><code>-verbose:gc</code></p>
<ul>
<li>显示有关每个垃圾回收（GC）事件的信息。</li>
</ul>
<p><code>-verbose:jni</code></p>
<ul>
<li>显示有关使用本机方法和其他 Java 本机接口（JNI）活动的信息。</li>
</ul>
<p><code>-version</code></p>
<ul>
<li>显示版本信息，然后退出。</li>
<li>此选项等同于 <code>-showversion</code> 选项，不同之处在于后者不会指示 JVM 在显示版本信息后退出。</li>
</ul>
<p><code>-version:&lt;版本号&gt;</code></p>
<ul>
<li>指定要用于运行应用程序的发布版本。如果调用的 <code>java</code> 命令的版本不符合此规范，并且在系统上找到了适当的实现，则将使用适当的实现。</li>
</ul>
<h3>类名</h3>
<ul>
<li>要启动的类的名称。</li>
</ul>
<h3>文件名</h3>
<ul>
<li>要调用的 Java 存档 （JAR） 文件的名称。仅与 <code>-jar</code> 选项一起使用。</li>
</ul>
<h3>参数</h3>
<ul>
<li>传递给 <code>main（）</code> 方法的参数，以空格分隔。</li>
</ul>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 运行jar文件</span></span>
<span class="line"><span class="token function">java</span> <span class="token parameter variable">-jar</span> myapp.jar</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - javac</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-javac.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-javac.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - javac</source>
      <description>文章摘要： 读取 Java 类和接口定义，并将它们编译为字节码和类文件。 简介 javac 命令读取用 Java 编程语言编写的类和接口定义，并将它们编译为字节码类文件。 javac 命令还可以处理 Java 源文件和类中的注释。 有两种方法可以将源代码文件名传递给 javac： 对于少量源文件，请在命令行上列出文件名。 对于大量源文件，请在文件中列出...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 读取 Java 类和接口定义，并将它们编译为字节码和类文件。</p>
<!-- more -->
<h2>简介</h2>
<ul>
<li><code>javac</code> 命令读取用 Java 编程语言编写的类和接口定义，并将它们编译为字节码类文件。</li>
<li><code>javac</code> 命令还可以处理 Java 源文件和类中的注释。</li>
</ul>
<p>有两种方法可以将源代码文件名传递给 <code>javac</code>：</p>
<ul>
<li>对于少量源文件，请在命令行上列出文件名。</li>
<li>对于大量源文件，请在文件中列出文件名，并用空格或换行符分隔。在 <code>javac</code> 命令中使用前面带有 at 符号 （@） 的列表文件名。</li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>源代码文件名必须具有 .java 后缀，类文件名必须具有 .class 后缀，并且源文件和类文件都必须具有标识类的根名称。例如，名为 <code>MyClass</code> 的类将写入名为 <code>MyClass.java</code> 的源文件中，并编译为名为 <code>MyClass.class</code> 的字节码类文件。</li>
<li>内部类定义会生成其他类文件。这些类文件具有由内部和外部类名组合而成的名称，例如 <code>MyClass$MyInnerClass.class</code>。</li>
<li>将源文件排列在反映其包树的目录树中。例如，如果所有源文件都位于 <code>/workspace</code> 中，则将 <code>com.mysoft.mypack.MyClass</code> 的源代码放在 <code>/workspace/com/mysoft/mypack/MyClass.java</code> 。</li>
<li>默认情况下，编译器将每个类文件放在与其源文件相同的目录中。您可以使用 <code>-d</code> 选项指定单独的目标目录。</li>
</ul>
</div>
<h2>格式</h2>
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<p><code>javac [&lt;选项&gt;] [&lt;源文件&gt;] [&lt;类&gt;] [@argfiles]</code></p>
</div>
<h3>选项</h3>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p><strong>标准选项</strong></p>
<ul>
<li>编译器具有一组在当前开发环境中受支持的标准选项。</li>
<li>另一组非标准选项特定于当前虚拟机和编译器实现，将来可能会更改。</li>
<li>非标准选项以 <code>-X</code> 选项开头。</li>
</ul>
</div>
<p><code>-help</code></p>
<ul>
<li>打印标准选项的概要。</li>
</ul>
<p><code>-A &lt;键&gt;[=&lt;值&gt;]</code></p>
<ul>
<li>指定要传递给注释处理器的选项。这些选项不是由 <code>javac</code> 直接解释的，而是可供各个处理器使用。<code>键</code>值应为一个或多个标识符，用点 （.） 分隔。</li>
</ul>
<p><code>-cp path</code> <code>-classpath path</code></p>
<ul>
<li>指定查找用户类文件以及 （可选） 注释处理器和源文件的位置。</li>
<li>此类路径将覆盖 <code>CLASSPATH</code> 环境变量中的用户类路径。</li>
<li>如果 <code>CLASSPATH</code>、<code>-cp</code> 和 <code>-classpath</code> 均未指定，则用户_类路径_为当前目录。</li>
<li>如果未指定 <code>-sourcepath</code> 选项，则还会在用户类路径中搜索源文件。</li>
<li>如果未指定 <code>-processorpath</code> 选项，则还会在类路径中搜索 annotation 处理器。</li>
</ul>
<p><code>-Djava.ext.dirs=&lt;目录&gt;</code></p>
<ul>
<li>覆盖已安装扩展的位置。</li>
</ul>
<p><code>-Djava.endorsed.dirs=&lt;目录&gt;</code></p>
<ul>
<li>覆盖已认可的标准路径的位置。</li>
</ul>
<p><code>-d &lt;目录&gt;</code></p>
<ul>
<li>设置类文件的目标目录。该目录必须已存在，因为 <code>javac</code> 不会创建该目录。</li>
<li>如果类是包的一部分，则 <code>javac</code> 会将类文件放在反映包名称的子目录中，并根据需要创建目录。</li>
<li>例如：指定 <code>-d /home/myclasses</code>，并且类名为 <code>com.mypackage.MyClass</code>，则类文件为 <code>/home/myclasses/com/mypackage/MyClass.class</code>。</li>
<li>例如：未指定 <code>-d</code> 选项，则 <code>javac</code> 会将每个类文件放在与生成该类文件的源文件相同的目录中。</li>
<li><strong>注意</strong>：<code>-d</code> 选项指定的目录不会自动添加到您的用户类路径中。</li>
</ul>
<p><code>-deprecation</code></p>
<ul>
<li>显示已弃用成员或类的每次使用或重写的说明。如果没有 <code>-deprecation</code> 选项，<code>javac</code> 将显示使用或覆盖不推荐使用的成员或类的源文件的摘要。</li>
<li><code>-deprecation</code> 选项是 <code>-Xlint：deprecation</code> 的简写。</li>
</ul>
<p><code>-encoding &lt;编码&gt;</code></p>
<ul>
<li>设置源文件编码名称。</li>
<li>如果未指定 <code>-encoding</code> 选项，则使用平台默认转换器。</li>
<li>编码：UTF-8</li>
</ul>
<p><code>-endorseddirs &lt;目录&gt;</code></p>
<ul>
<li>覆盖已认可的标准路径的位置。</li>
</ul>
<p><code>-extdirs &lt;目录&gt;</code></p>
<ul>
<li>覆盖 <code>ext</code> 目录的位置。directories 变量是以冒号分隔的目录列表。将搜索指定目录中的每个 JAR 文件以查找类文件。找到的所有 JAR 文件都将成为类路径的一部分。</li>
</ul>
<p><code>-g</code></p>
<ul>
<li>生成所有调试信息，包括局部变量。</li>
<li>默认情况下，仅生成行号和源文件信息。</li>
</ul>
<p><code>-g:none</code></p>
<ul>
<li>不生成任何调试信息。</li>
</ul>
<p><code>-g:[&lt;关键字列表&gt;]</code></p>
<ul>
<li>仅生成某些类型的调试信息，由逗号分隔的关键字列表指定。</li>
<li><strong>关键字列表</strong>：<code>source</code>源文件调试信息，<code>lines</code>行号调试信息，<code>vars</code>局部变量调试信息。</li>
</ul>
<p><code>-implicit:[&lt;选项&gt;]</code></p>
<ul>
<li>控制隐式加载的源文件的类文件的生成。</li>
<li><strong>选项</strong>：<code>class</code>要自动生成类文件，<code>none</code>要禁止生成类文件。</li>
<li>如果未指定此选项，则默认为 automatically generate class files。在这种情况下，如果在执行注释处理时生成任何此类类文件，编译器会发出警告。</li>
<li>当显式设置 <code>-implicit</code> 选项时，不会发出警告。</li>
</ul>
<p><code>-J&lt;选项&gt;</code></p>
<ul>
<li>将<code>选项</code>传递给 Java 虚拟机（JVM），其中<code>选项</code>是 Java 启动器参考页面上描述的选项之一。</li>
<li>例如，<code>-J-Xms48m</code> 将启动内存设置为 48 MB。</li>
</ul>
<p><code>-nowarn</code></p>
<ul>
<li>禁用警告消息。</li>
<li>此选项的操作与 <code>-Xlint：none</code> 选项相同。</li>
</ul>
<p><code>-parameters</code></p>
<ul>
<li>将构造函数和方法的形参名称存储在生成的类文件中，以便 Reflection API 中的方法可以 <code>java.lang.reflect.Executable.getParameters</code> 检索它们。</li>
</ul>
<p><code>-proc: [&lt;选项&gt;]</code></p>
<ul>
<li>控制是否完成注释处理和编译。</li>
<li><strong>选项</strong>：<code>none</code>表示编译时不进行Comments处理，<code>only</code>表示仅完成Comments处理不进行任何后续编译。</li>
</ul>
<p><code>-processor class1 [,class2,class3...]</code></p>
<ul>
<li>要运行的注释处理器的名称。这将绕过默认的发现过程。</li>
</ul>
<p><code>-processorpath &lt;路径&gt;</code></p>
<ul>
<li>指定查找注释处理器的位置。</li>
<li>如果未使用此选项，则在类路径中搜索处理器。</li>
</ul>
<p><code>-s &lt;目录&gt;</code></p>
<ul>
<li>指定放置生成的源文件的目录。</li>
<li>该目录必须已存在，因为 <code>javac</code> 不会创建该目录。</li>
<li>如果类是包的一部分，则编译器会将源文件放在反映包名称的子目录中，并根据需要创建目录。</li>
</ul>
<p><code>-source &lt;版本&gt;</code></p>
<ul>
<li>指定接受的源代码版本。</li>
<li>版本：</li>
<li><code>1.3</code>：编译器不支持断言、泛型或 Java SE 1.3 之后引入的其他语言功能。</li>
<li><code>1.4</code>：编译器接受包含 Java SE 1.4 中引入的断言的代码。</li>
<li><code>1.5</code>：编译器接受包含 Java SE 5 中引入的泛型和其他语言功能的代码。</li>
<li><code>5</code>：Synonym for 1.5.&nbsp;1.5 的同义词。</li>
<li><code>1.6</code>：Java SE 6 中没有引入任何语言更改。但是，源文件中的编码错误现在报告为错误，而不是像 Java Platform， Standard Edition 的早期发行版那样报告为警告。</li>
<li><code>6</code>：Synonym for 1.6.&nbsp;1.6 的同义词。</li>
<li><code>1.7</code>：编译器接受具有 Java SE 7 中引入的功能的代码。</li>
<li><code>7</code>：Synonym for 1.7.&nbsp;1.7 的同义词。</li>
<li><code>1.8</code>：这是默认值。编译器接受具有 Java SE 8 中引入的功能的代码。</li>
<li><code>8</code>：Synonym for 1.8.&nbsp;1.8 的同义词。</li>
</ul>
<p><code>-sourcepath &lt;源路径&gt;</code></p>
<ul>
<li>指定用于搜索类或接口定义的源代码路径。</li>
<li>与用户类路径一样，源路径条目在上下文中用冒号（:)在 Oracle Solaris 上和分号之间分隔，可以是目录、JAR 存档或 ZIP 存档。如果使用 packages，则目录或存档中的本地路径名必须反映 package 名称。</li>
</ul>
<p><code>-verbose</code></p>
<ul>
<li>使用详细输出，其中包括有关加载的每个类和编译的每个源文件的信息。</li>
</ul>
<p><code>-version</code></p>
<ul>
<li>打印版本信息。</li>
</ul>
<p><code>-werror</code></p>
<ul>
<li>出现警告时终止编译。</li>
</ul>
<p><code>-X</code></p>
<ul>
<li>显示有关非标准选项和退出的信息。</li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p><strong>交叉编译选项</strong></p>
<ul>
<li>默认情况下，类是根据 <code>javac</code> 附带的平台的引导类和扩展类进行编译的。</li>
<li>但 <code>javac</code> 也支持交叉编译，其中类是针对不同 Java 平台实现的引导和扩展类进行编译的。</li>
<li>在交叉编译时使用 <code>-bootclasspath</code> 和 <code>-extdirs</code> 选项非常重要。</li>
</ul>
</div>
<p><code>-target &lt;版本&gt;</code></p>
<ul>
<li>生成以虚拟机的指定版本为目标的类文件。</li>
<li>类文件将在指定的目标和更高版本上运行，但不在 JVM 的早期版本上运行。有效目标是 1.1、1.2、1.3、1.4、1.5（也是 5）、1.6（也是 6）、1.7（也是 7）和 1.8（也是 8）。</li>
</ul>
<p><code>-bootclasspath &lt;引导类路径&gt;</code></p>
<ul>
<li>针对指定的引导类集进行交叉编译。与用户类路径一样，引导类路径条目由冒号 （:)分隔，可以是目录、JAR 存档或 ZIP 存档。</li>
</ul>
<p><code>-profile</code></p>
<ul>
<li>使用压缩配置文件时，此选项在编译时指定配置文件名称。例如：<code>javac -profile compact1 Hello.java</code></li>
</ul>
<h3>源文件</h3>
<ul>
<li>要编译的一个或多个源文件（例如 <code>MyClass.java</code>）。</li>
</ul>
<h3>类</h3>
<ul>
<li>要处理注释的一个或多个类（例如 <code>MyPackage.MyClass</code>）。</li>
</ul>
<h3>@argfiles</h3>
<ul>
<li>列出选项和源文件的一个或多个文件。这些文件不允许使用 <code>-J</code> 选项。</li>
</ul>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 编译多个源文件</span></span>
<span class="line">javac Main.java Helper.java</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 指定类路径</span></span>
<span class="line">javac <span class="token parameter variable">-cp</span> /usr/lib/java/commons.jar:. MyClass.java</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 指定输出目录</span></span>
<span class="line">javac <span class="token parameter variable">-d</span> ./bin MyClass.java</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 包含调试信息</span></span>
<span class="line">javac <span class="token parameter variable">-g</span> MyClass.java</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 忽略警告</span></span>
<span class="line">javac <span class="token parameter variable">-nowarn</span> MyClass.java</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 显示详细信息</span></span>
<span class="line">javac <span class="token parameter variable">-verbose</span> MyClass.java</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 使用源路径</span></span>
<span class="line">javac <span class="token parameter variable">-sourcepath</span> /usr/src/java MyClass.java</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 使用不同的java版本</span></span>
<span class="line">javac <span class="token parameter variable">-source</span> <span class="token number">1.7</span> <span class="token parameter variable">-target</span> <span class="token number">1.7</span> MyClass.java</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 编译注释处理程序</span></span>
<span class="line">javac <span class="token parameter variable">-processor</span> com.example.MyProcessor MyClass.java</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>使用<code>-Xlint</code>选项启用或禁用警告</h2>
<p>使用 <code>-Xlint：name</code> 选项启用警告_名称_，其中 <code>name</code> 是以下警告名称之一。请注意，您可以使用 <code>-Xlint：-name：</code> 选项禁用警告。</p>
<p><code>cast</code></p>
<ul>
<li>对不必要和冗余的强制转换发出警告。</li>
</ul>
<p><code>classfile</code></p>
<ul>
<li>警告与类文件内容相关的问题。</li>
</ul>
<p><code>deprecation</code></p>
<ul>
<li>对已弃用项目和API的使用发出警告。</li>
</ul>
<p><code>dep-ann</code></p>
<ul>
<li>对使用 <code>@deprecated</code> Javadoc 注释记录但没有 <code>@Deprecated</code> 注释的项目发出警告。</li>
</ul>
<p><code>divzero</code></p>
<ul>
<li>对常数整数 0 的除法发出警告。</li>
</ul>
<p><code>empty</code></p>
<ul>
<li>对 <code>if</code> 语句之后的空语句发出警告。</li>
</ul>
<p><code>fallthrough</code></p>
<ul>
<li>检查 switch 块中是否存在直通情况，并为找到的任何情况提供警告消息。</li>
<li>Fall-through case 是 switch 块中的情况，而不是块中的最后一个 case，其代码不包含 break 语句，从而允许代码执行从该 case 过渡到下一个 case。</li>
<li>如果在编译此代码时使用 <code>-Xlint：fallthrough</code> 选项，则编译器会发出有关可能 fallthrough into case 的警告，并提供相关 case 的行号。</li>
</ul>
<p><code>finally</code></p>
<ul>
<li>对无法正常完成的 <code>finally</code> 子句发出警告。</li>
</ul>
<p><code>options</code></p>
<ul>
<li>对与使用命令行选项相关的问题发出警告。</li>
</ul>
<p><code>overrides</code></p>
<ul>
<li>对有关方法覆盖的问题发出警告。</li>
</ul>
<p><code>path</code></p>
<ul>
<li>对命令行上的无效路径元素和不存在的路径目录（关于类路径、源路径和其他路径）发出警告。</li>
</ul>
<p><code>processing</code></p>
<ul>
<li>警告有关注释处理的问题。</li>
<li>当您有一个具有注释的类，并且您使用的注释处理器无法处理该类型的异常时，编译器将生成此警告。</li>
</ul>
<p><code>rawtypes</code></p>
<ul>
<li>对原始类型执行未经检查的操作时发出警告。</li>
</ul>
<p><code>Serial</code></p>
<ul>
<li>警告可序列化类上缺少 <code>serialVersionUID</code> 定义。</li>
</ul>
<p><code>static</code></p>
<ul>
<li>对与使用静态力学相关的问题发出警告。</li>
</ul>
<p><code>try</code></p>
<ul>
<li>警告与使用 <code>try</code> 块相关的问题，包括 try-with-resources 语句。</li>
</ul>
<p><code>unchecked</code></p>
<ul>
<li>提供 Java 语言规范强制要求的未选中的转换警告的更多详细信息。</li>
</ul>
<p><code>varargs</code></p>
<ul>
<li>警告变量参数 （<code>varargs</code>） 方法的不安全使用，特别是那些包含不可修改参数的方法。</li>
</ul>
<h2>命令行参数文件</h2>
<p>命令行参数文件是用于简化 <code>javac</code> 命令的工具，允许开发者将 <code>javac</code> 的参数列表放入一个或多个文件中，而不是直接在命令行中输入。以下是关于命令行参数文件的总结：</p>
<ul>
<li><strong>目的</strong>：简化长或复杂的 <code>javac</code> 命令，使其更易于管理和执行。</li>
<li><strong>内容</strong>：参数文件可以包含 <code>javac</code> 的选项和源文件名，但不能包含 <code>-J</code> 选项。</li>
<li><strong>格式</strong>：参数文件中的参数可以用空格或换行符分隔。如果文件名包含空格，需要用双引号括起来。</li>
<li><strong>路径</strong>：参数文件中的文件名是相对于当前工作目录的，而不是参数文件的位置。不支持使用通配符和递归解释文件。</li>
<li><strong>使用方法</strong>：在 <code>javac</code> 命令中，通过在参数文件名前加上 <code>@</code> 符号来引用参数文件。</li>
<li><strong>示例</strong>：
<ul>
<li>单个参数文件：<code>javac @argfile</code></li>
<li>多个参数文件：分别创建选项文件（如 <code>options</code>）和源文件列表（如 <code>classes</code>），然后使用 <code>javac @options @classes</code> 来编译。</li>
<li>带路径的参数文件：参数文件可以位于任意路径，但文件内的路径是相对于当前工作目录的。</li>
</ul>
</li>
</ul>
<h2>注释处理</h2>
<p>注释处理是 Java 编译器 <code>javac</code> 的一个特性，它允许在编译过程中检测和处理源代码中的注释。以下是关于注释处理的总结：</p>
<ul>
<li><strong>集成</strong>：<code>javac</code> 直接支持注释处理，无需使用单独的命令 <code>apt</code>。</li>
<li><strong>API 定义</strong>：注释处理器的 API 位于 <code>javax.annotation.processing</code> 和 <code>javax.lang.model</code> 包及其子包中。</li>
<li><strong>工作原理</strong>：
<ul>
<li>除非使用 <code>-proc:none</code> 禁用，编译器会搜索可用的注释处理器。</li>
<li>可以通过 <code>-processorpath</code> 指定搜索路径，默认使用用户类路径。</li>
<li>注释处理器通过 <code>META-INF/services/javax.annotation.processing.Processor</code> 配置文件发现。</li>
<li>可以通过 <code>-processor</code> 显式指定处理器。</li>
</ul>
</li>
<li><strong>处理流程</strong>：
<ul>
<li>编译器扫描源文件和类以查找注释。</li>
<li>匹配的注释由相应的处理器处理。</li>
<li>处理器可以声明它们处理的注释，防止其他处理器处理相同的注释。</li>
<li>如果处理器生成新的源文件，将启动新一轮的注释处理。</li>
<li>处理过程重复，直到不再生成新的源文件。</li>
<li>最后，处理器被最后一次调用以完成剩余工作，然后编译器编译所有源文件，除非使用 <code>-proc:only</code>。</li>
</ul>
</li>
<li><strong>隐式加载的源文件</strong>：
<ul>
<li>编译器可能需要隐式加载额外的源文件来编译指定的源文件集。</li>
<li>这些隐式加载的源文件目前不受注释处理的影响。</li>
<li>默认情况下，如果注释处理发生且编译了隐式加载的源文件，编译器会发出警告。</li>
<li>使用 <code>-implicit</code> 选项可以抑制该警告。</li>
</ul>
</li>
</ul>
<h2>搜索类型</h2>
<p>在编译 Java 源文件时，编译器需要查找和使用各种类型的信息，以下是对类型搜索过程的总结：</p>
<p>类型信息需求</p>
<ul>
<li>编译器需要了解源文件中使用、扩展或实现的每个类或接口，包括通过继承引入但未在源文件中直接提及的类型。</li>
</ul>
<p>搜索过程</p>
<ul>
<li>编译器首先在引导类和扩展类中搜索类文件。</li>
<li>然后编译器在用户类路径中搜索类文件，用户类路径默认为当前目录，可以通过设置 CLASSPATH 环境变量或使用 -classpath 选项来定义。</li>
<li>如果设置了 -sourcepath 选项，编译器会在指定的路径中搜索源文件；否则，编译器会在用户类路径中同时搜索类文件和源文件。</li>
</ul>
<p>引导和扩展类路径</p>
<ul>
<li>可以使用 -bootclasspath 和 -extdirs 选项来指定不同的引导或扩展类路径。</li>
</ul>
<p>搜索结果</p>
<ul>
<li>类型搜索可能找到类文件、源文件或两者都有。</li>
<li>使用 -Xprefer 选项可以指定编译器在找到两者时使用哪个文件（newer 或 source），默认为 newer。</li>
</ul>
<p>源文件处理</p>
<ul>
<li>如果找到了源文件，编译器会读取它以获取所需信息，并默认编译该源文件。</li>
<li>-implicit 选项可以用来指定是否为找到的源文件生成类文件，默认情况下不会生成。</li>
</ul>
<p>注释处理和警告</p>
<ul>
<li>编译器可能在注释处理完成后才意识到某些类型信息的需求。</li>
<li>如果在源文件中找到类型信息且未指定 -implicit 选项，编译器会发出警告，指出该文件正在编译但未受注释处理。</li>
<li>要禁用警告，可以在命令行上显式指定文件或使用 -implicit 选项。</li>
</ul>
<h2>编程接口</h2>
<p>Java 编译器 <code>javac</code> 提供了编程接口，允许开发者以编程方式调用编译器，而不是通过命令行。</p>
<h3>新 Java 编译器 API (<code>javax.tools</code>)</h3>
<ul>
<li><strong>支持</strong>：<code>javac</code> 命令支持由 <code>javax.tools</code> 包中的类和接口定义的新 Java 编译器 API。</li>
<li><strong>示例</strong>：以下是如何使用新 API 进行编译的示例：</li>
</ul>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token class-name">JavaCompiler</span> javac <span class="token operator">=</span> <span class="token class-name">ToolProvider</span><span class="token punctuation">.</span><span class="token function">getSystemJavaCompiler</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token comment">// 这个示例将诊断信息写入标准输出流，并返回与命令行调用 `javac` 时相同的退出代码。</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><ul>
<li><strong>功能</strong>：可以通过 <code>javax.tools.JavaCompiler</code> 接口中的其他方法来处理诊断信息、控制文件的读写位置等。</li>
</ul>
<h3>旧接口 (<code>com.sun.tools.javac.Main</code>)</h3>
<ul>
<li><strong>向后兼容</strong>：保留此 API 仅用于向后兼容。推荐新代码使用 <code>javax.tools</code> 中的新 Java 编译器 API。</li>
<li><strong>方法</strong>：<code>com.sun.tools.javac.Main</code> 类提供了两种静态方法来从程序中调用编译器：
<ul>
<li><code>public static int compile(String[] args);</code></li>
<li><code>public static int compile(String[] args, PrintWriter out);</code></li>
</ul>
</li>
<li><strong>参数</strong>：
<ul>
<li><code>args</code>：表示传递给编译器的命令行参数。</li>
<li><code>out</code>：指定编译器诊断输出的位置。</li>
</ul>
</li>
<li><strong>返回值</strong>：返回值等同于命令行调用 <code>javac</code> 的退出值。</li>
<li><strong>内部类和方法</strong>：以 <code>com.sun.tools.javac</code> 开头的包（及其子包）中的其他类和方法是内部的，可能会随时更改，不应在应用程序代码中使用。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - javadoc</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-javadoc.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-javadoc.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - javadoc</source>
      <description>文章摘要： 从 Java 源代码中的特殊格式的注释中自动生成 API 文档。 简介 javadoc 命令解析一组 Java 源文件中的声明和文档注释，并生成一组相应的 HTML 页面，这些页面描述（默认情况下）公共类和受保护类、嵌套类（但不是匿名内部类）、接口、构造函数、方法和字段。您可以使用 javadoc 命令为一组源文件生成 API 文档或实现文...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 从 Java 源代码中的特殊格式的注释中自动生成 API 文档。</p>
<!-- more -->
<h2>简介</h2>
<ul>
<li><code>javadoc</code> 命令解析一组 Java 源文件中的声明和文档注释，并生成一组相应的 HTML 页面，这些页面描述（默认情况下）公共类和受保护类、嵌套类（但不是匿名内部类）、接口、构造函数、方法和字段。您可以使用 <code>javadoc</code> 命令为一组源文件生成 API 文档或实现文档。</li>
<li>Javadoc 注释是置于代码之上的特殊类型的注释，它们以 <code>/**</code> 开始，并以 <code>*/</code> 结束。</li>
<li>Javadoc 工具解析这些注释，并从中生成 HTML 格式的文档。</li>
</ul>
<h2>格式</h2>
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<p><code>javadoc {&lt;包&gt;|&lt;源文件&gt;} [&lt;选项&gt;] [&lt;标记&gt;]</code></p>
</div>
<h3>包</h3>
<ul>
<li>要记录的包的名称，用空格分隔。</li>
<li>例如 <code>java.lang java.lang.reflect java.awt</code> 。</li>
<li>默认情况下，<code>javadoc</code> 在当前目录和子目录中查找指定的包。使用 <code>-sourcepath</code> 选项指定在其中查找包的目录列表。</li>
</ul>
<h3>源文件</h3>
<ul>
<li>要记录的 Java 源文件的名称，用空格分隔，例如 <code>Class.java Object.java Button.java</code> 。</li>
<li>默认情况下，<code>javadoc</code> 在当前目录中查找指定的类。</li>
<li>但是，您可以指定类文件的完整路径并使用通配符，例如 <code>/home/src/java/awt/Graphics*.java</code> 。</li>
<li>您还可以指定相对于当前目录的路径。</li>
</ul>
<h3>选项</h3>
<h2>生成的文件结构</h2>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">apidocs：顶级目录</span>
<span class="line">    index.html：设置 HTML 框架的初始页面</span>
<span class="line">    overview-summary.html：包含摘要的软件包列表</span>
<span class="line">    overview-tree.html：所有包的类层次结构</span>
<span class="line">    deprecated-list.html：所有软件包的 API 已弃用</span>
<span class="line">    constant-values.html：所有包的静态字段值</span>
<span class="line">    serialized-form.html：所有包的序列化表单</span>
<span class="line">    overview-frame.html：所有包均显示在左上角的框架中</span>
<span class="line">    allclasses-frame.html：所有类都显示在左下角框架中</span>
<span class="line">    help-doc.html： 有关 Javadoc 页面组织的帮助</span>
<span class="line">    index-all.html：创建的默认索引未使用 -splitindex 选项</span>
<span class="line">    index-files：使用 -splitindex 选项创建的目录</span>
<span class="line">        index-&lt;number&gt;.html：使用 -splitindex 选项创建的索引文件</span>
<span class="line">    package-list：用于解析外部引用的包名称</span>
<span class="line">    stylesheet.css：定义字体、颜色、位置等</span>
<span class="line"></span>
<span class="line">java：包目录</span>
<span class="line">    applet：子包目录</span>
<span class="line">        Applet.html：小程序类页面</span>
<span class="line">        AppletContext.html：AppletContext 接口</span>
<span class="line">        AppletStub.html：AppletStub 接口</span>
<span class="line">        AudioClip.html：AudioClip 接口</span>
<span class="line">        package-summary.html：带摘要的类</span>
<span class="line">        package-frame.html：打包类以显示在左下角框架中</span>
<span class="line">        package-tree.html：此包的类层次结构</span>
<span class="line">        package-use.html：此包的用途</span>
<span class="line">        doc-files：图像和示例文件目录</span>
<span class="line">        class-use：图像和示例文件位置</span>
<span class="line">            - Applet.html：Applet 类的使用</span>
<span class="line">            - AppletContext.html：AppletContext 接口的使用</span>
<span class="line">            - AppletStub.html：AppletStub 接口的使用</span>
<span class="line">            - AudioClip.html：AudioClip 接口的使用</span>
<span class="line"></span>
<span class="line">src-html： 源代码目录</span>
<span class="line">    java：包目录</span>
<span class="line">        applet：子包目录</span>
<span class="line">            - Applet.html：小程序源代码</span>
<span class="line">            - AppletContext.html：AppletContext 源代码</span>
<span class="line">            - AppletStub.html：AppletStub 源代码</span>
<span class="line">            - AudioClip.html：AudioClip 源代码</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>标记</h2>
<ul>
<li><code>@author</code>：指定类的作者。</li>
<li><code>@deprecated</code>：标记类、方法或字段已过时，不推荐使用。</li>
<li><code>@exception</code>：与 <code>@throws</code> 相同，用于描述方法可能抛出的异常。</li>
<li><code>@param</code>：描述方法的参数。</li>
<li><code>@return</code>：描述方法的返回值。</li>
<li><code>@see</code>：提供到其他类或方法的链接。</li>
<li><code>@since</code>：指定何时添加了类、方法或字段。</li>
<li><code>@serial</code>：用于说明序列化相关的信息。</li>
<li><code>@serialField</code>：用于说明一个对象的序列化字段。</li>
<li><code>@serialData</code>：用于描述序列化数据。</li>
<li><code>@throws</code>：描述方法可能抛出的异常。</li>
<li><code>@version</code>：指定类的版本信息。</li>
</ul>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>注释类型</h2>
<ul>
<li><strong>类注释</strong>：位于每个类的开头，描述类的功能和用法。</li>
<li><strong>接口注释</strong>：位于每个接口的开头，描述接口的功能和用法。</li>
<li><strong>方法注释</strong>：位于每个方法的上方，描述方法的功能、参数、返回值和可能抛出的异常。</li>
<li><strong>字段注释</strong>：位于每个字段的上方，描述字段的含义和用途。</li>
<li><strong>构造器注释</strong>：位于每个构造器的上方，描述构造器的功能和用法。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - javah</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-javah.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-javah.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - javah</source>
      <description>文章摘要： 摘要内容。 简介 格式 格式 `` 选项 参数 案例</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>格式</h2>
<p>格式</p>
<blockquote>
<ul>
<li>``</li>
</ul>
</blockquote>
<p>选项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - javap</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-javap.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-javap.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - javap</source>
      <description>文章摘要： 摘要内容。 简介 将class文件提供的字节代码进行反编译。转换为源代码，能够看懂其中的代码。 格式 格式 javap &amp;lt;选项&amp;gt; &amp;lt;参数&amp;gt; 选项 -help|--help|-?：帮助信息。 -version：版本信息。 -v|-verbose：附加信息。 -l：行号和本地变量表。 -public：仅显示公共类和成员。 -protected：...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<ul>
<li>将class文件提供的字节代码进行反编译。转换为源代码，能够看懂其中的代码。</li>
</ul>
<h2>格式</h2>
<p>格式</p>
<ul>
<li><code>javap &lt;选项&gt; &lt;参数&gt;</code></li>
</ul>
<p>选项</p>
<ul>
<li><code>-help</code>|<code>--help</code>|<code>-?</code>：帮助信息。</li>
<li><code>-version</code>：版本信息。</li>
<li><code>-v</code>|<code>-verbose</code>：附加信息。</li>
<li><code>-l</code>：行号和本地变量表。</li>
<li><code>-public</code>：仅显示公共类和成员。</li>
<li><code>-protected</code>：显示“受保护的/公共的”类和成员。</li>
<li><code>-package</code>：（默认）显示“程序包/受保护的/公共的”类和成员。</li>
<li><code>-p</code>|<code>-private</code>：显示所有类和成员。</li>
<li><code>-c</code>：对代码进行反编译。</li>
<li><code>-s</code>：输出内部类型签名。</li>
<li><code>-sysinfo</code>：显示正在处理的类。</li>
</ul>
<p>参数</p>
<ul>
<li>需要反编译的类名</li>
</ul>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - javapackager</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-javapackager.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-javapackager.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - javapackager</source>
      <description>文章摘要： 摘要内容。 简介 格式 格式 `` 选项 参数 案例</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>格式</h2>
<p>格式</p>
<blockquote>
<ul>
<li>``</li>
</ul>
</blockquote>
<p>选项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - javaws</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-javaws.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-javaws.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - javaws</source>
      <description>文章摘要： 摘要内容。 简介 格式 格式 `` 选项 参数 案例</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>格式</h2>
<p>格式</p>
<blockquote>
<ul>
<li>``</li>
</ul>
</blockquote>
<p>选项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - jcmd</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jcmd.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jcmd.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - jcmd</source>
      <description>文章摘要： 摘要内容。 简介 格式 格式 `` 选项 参数 案例</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>格式</h2>
<p>格式</p>
<blockquote>
<ul>
<li>``</li>
</ul>
</blockquote>
<p>选项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - jconsole</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jconsole.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jconsole.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - jconsole</source>
      <description>文章摘要： 摘要内容。 简介 格式 格式 `` 选项 参数 案例</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>格式</h2>
<p>格式</p>
<blockquote>
<ul>
<li>``</li>
</ul>
</blockquote>
<p>选项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - jdb</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jdb.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jdb.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - jdb</source>
      <description>文章摘要： 摘要内容。 简介 格式 格式 `` 选项 参数 案例</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>格式</h2>
<p>格式</p>
<blockquote>
<ul>
<li>``</li>
</ul>
</blockquote>
<p>选项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - jdeps</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jdeps.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jdeps.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - jdeps</source>
      <description>文章摘要： 摘要内容。 简介 格式 格式 `` 选项 参数 案例</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>格式</h2>
<p>格式</p>
<blockquote>
<ul>
<li>``</li>
</ul>
</blockquote>
<p>选项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - jhat</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jhat.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jhat.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - jhat</source>
      <description>文章摘要： 摘要内容。 简介 格式 格式 `` 选项 参数 案例</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>格式</h2>
<p>格式</p>
<blockquote>
<ul>
<li>``</li>
</ul>
</blockquote>
<p>选项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - jinfo</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jinfo.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jinfo.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - jinfo</source>
      <description>文章摘要： 摘要内容。 简介 格式 格式 `` 选项 参数 案例</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>格式</h2>
<p>格式</p>
<blockquote>
<ul>
<li>``</li>
</ul>
</blockquote>
<p>选项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - jjs</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jjs.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jjs.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - jjs</source>
      <description>文章摘要： 摘要内容。 简介 格式 格式 `` 选项 参数 案例</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>格式</h2>
<p>格式</p>
<blockquote>
<ul>
<li>``</li>
</ul>
</blockquote>
<p>选项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - jmap</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jmap.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jmap.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - jmap</source>
      <description>文章摘要： 摘要内容。 简介 格式 格式 `` 选项 参数 案例</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>格式</h2>
<p>格式</p>
<blockquote>
<ul>
<li>``</li>
</ul>
</blockquote>
<p>选项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - jmc</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jmc.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jmc.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - jmc</source>
      <description>文章摘要： 摘要内容。 简介 格式 格式 `` 选项 参数 案例</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>格式</h2>
<p>格式</p>
<blockquote>
<ul>
<li>``</li>
</ul>
</blockquote>
<p>选项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - jps</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jps.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jps.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - jps</source>
      <description>文章摘要： 摘要内容。 简介 格式 格式 `` 选项 参数 案例</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>格式</h2>
<p>格式</p>
<blockquote>
<ul>
<li>``</li>
</ul>
</blockquote>
<p>选项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - jrunscript</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jrunscript.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jrunscript.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - jrunscript</source>
      <description>文章摘要： 摘要内容。 简介 格式 格式 `` 选项 参数 案例</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>格式</h2>
<p>格式</p>
<blockquote>
<ul>
<li>``</li>
</ul>
</blockquote>
<p>选项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - jsadebugd</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jsadebugd.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jsadebugd.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - jsadebugd</source>
      <description>文章摘要： 摘要内容。 简介 格式 格式 `` 选项 参数 案例</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>格式</h2>
<p>格式</p>
<blockquote>
<ul>
<li>``</li>
</ul>
</blockquote>
<p>选项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - jstack</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jstack.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jstack.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - jstack</source>
      <description>文章摘要： 摘要内容。 简介 格式 格式 `` 选项 参数 案例</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>格式</h2>
<p>格式</p>
<blockquote>
<ul>
<li>``</li>
</ul>
</blockquote>
<p>选项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - jstat</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jstat.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jstat.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - jstat</source>
      <description>文章摘要： 摘要内容。 简介 格式 格式 `` 选项 参数 案例</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>格式</h2>
<p>格式</p>
<blockquote>
<ul>
<li>``</li>
</ul>
</blockquote>
<p>选项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - jstatd</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jstatd.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jstatd.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - jstatd</source>
      <description>文章摘要： 摘要内容。 简介 格式 格式 `` 选项 参数 案例</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>格式</h2>
<p>格式</p>
<blockquote>
<ul>
<li>``</li>
</ul>
</blockquote>
<p>选项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - jvisualvm</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jvisualvm.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-jvisualvm.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - jvisualvm</source>
      <description>文章摘要： 摘要内容。 简介 格式 格式 `` 选项 参数 案例</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>格式</h2>
<p>格式</p>
<blockquote>
<ul>
<li>``</li>
</ul>
</blockquote>
<p>选项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - keytool</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-keytool.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-keytool.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - keytool</source>
      <description>文章摘要： 摘要内容。 简介 格式 格式 `` 选项 参数 案例</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>格式</h2>
<p>格式</p>
<blockquote>
<ul>
<li>``</li>
</ul>
</blockquote>
<p>选项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - kinit</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-kinit.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-kinit.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - kinit</source>
      <description>文章摘要： 摘要内容。 简介 格式 格式 `` 选项 参数 案例</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>格式</h2>
<p>格式</p>
<blockquote>
<ul>
<li>``</li>
</ul>
</blockquote>
<p>选项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - klist</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-klist.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-klist.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - klist</source>
      <description>文章摘要： 摘要内容。 简介 格式 格式 `` 选项 参数 案例</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>格式</h2>
<p>格式</p>
<blockquote>
<ul>
<li>``</li>
</ul>
</blockquote>
<p>选项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - ktab</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-ktab.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-ktab.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - ktab</source>
      <description>文章摘要： 摘要内容。 简介 格式 格式 `` 选项 参数 案例</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>格式</h2>
<p>格式</p>
<blockquote>
<ul>
<li>``</li>
</ul>
</blockquote>
<p>选项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - native2ascii</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-native2ascii.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-native2ascii.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - native2ascii</source>
      <description>文章摘要： 摘要内容。 简介 格式 格式 `` 选项 参数 案例</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>格式</h2>
<p>格式</p>
<blockquote>
<ul>
<li>``</li>
</ul>
</blockquote>
<p>选项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - orbd</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-orbd.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-orbd.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - orbd</source>
      <description>文章摘要： 摘要内容。 简介 格式 格式 `` 选项 参数 案例</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>格式</h2>
<p>格式</p>
<blockquote>
<ul>
<li>``</li>
</ul>
</blockquote>
<p>选项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - pack200</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-pack200.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-pack200.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - pack200</source>
      <description>文章摘要： 摘要内容。 简介 格式 格式 `` 选项 参数 案例</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>格式</h2>
<p>格式</p>
<blockquote>
<ul>
<li>``</li>
</ul>
</blockquote>
<p>选项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - policytool</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-policytool.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-policytool.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - policytool</source>
      <description>文章摘要： 摘要内容。 简介 格式 格式 `` 选项 参数 案例</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>格式</h2>
<p>格式</p>
<blockquote>
<ul>
<li>``</li>
</ul>
</blockquote>
<p>选项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - rmic</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-rmic.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-rmic.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - rmic</source>
      <description>文章摘要： 摘要内容。 简介 格式 格式 `` 选项 参数 案例</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>格式</h2>
<p>格式</p>
<blockquote>
<ul>
<li>``</li>
</ul>
</blockquote>
<p>选项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - rmid</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-rmid.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-rmid.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - rmid</source>
      <description>文章摘要： 摘要内容。 简介 格式 格式 `` 选项 参数 案例</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>格式</h2>
<p>格式</p>
<blockquote>
<ul>
<li>``</li>
</ul>
</blockquote>
<p>选项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - rmiregistry</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-rmiregistry.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-rmiregistry.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - rmiregistry</source>
      <description>文章摘要： 摘要内容。 简介 格式 格式 `` 选项 参数 案例</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>格式</h2>
<p>格式</p>
<blockquote>
<ul>
<li>``</li>
</ul>
</blockquote>
<p>选项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - schemagen</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-schemagen.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-schemagen.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - schemagen</source>
      <description>文章摘要： 摘要内容。 简介 格式 格式 `` 选项 参数 案例</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>格式</h2>
<p>格式</p>
<blockquote>
<ul>
<li>``</li>
</ul>
</blockquote>
<p>选项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - serialver</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-serialver.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-serialver.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - serialver</source>
      <description>文章摘要： 摘要内容。 简介 格式 格式 `` 选项 参数 案例</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>格式</h2>
<p>格式</p>
<blockquote>
<ul>
<li>``</li>
</ul>
</blockquote>
<p>选项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - servertool</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-servertool.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-servertool.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - servertool</source>
      <description>文章摘要： 摘要内容。 简介 格式 格式 `` 选项 参数 案例</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>格式</h2>
<p>格式</p>
<blockquote>
<ul>
<li>``</li>
</ul>
</blockquote>
<p>选项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - tnameserv</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-tnameserv.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-tnameserv.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - tnameserv</source>
      <description>文章摘要： 摘要内容。 简介 格式 格式 `` 选项 参数 案例</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>格式</h2>
<p>格式</p>
<blockquote>
<ul>
<li>``</li>
</ul>
</blockquote>
<p>选项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - unpack200</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-unpack200.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-unpack200.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - unpack200</source>
      <description>文章摘要： 摘要内容。 简介 格式 格式 `` 选项 参数 案例</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>格式</h2>
<p>格式</p>
<blockquote>
<ul>
<li>``</li>
</ul>
</blockquote>
<p>选项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - wsgen</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-wsgen.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-wsgen.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - wsgen</source>
      <description>文章摘要： 摘要内容。 简介 格式 格式 `` 选项 参数 案例</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>格式</h2>
<p>格式</p>
<blockquote>
<ul>
<li>``</li>
</ul>
</blockquote>
<p>选项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - wsimport</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-wsimport.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-wsimport.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - wsimport</source>
      <description>文章摘要： 摘要内容。 简介 格式 格式 `` 选项 参数 案例</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>格式</h2>
<p>格式</p>
<blockquote>
<ul>
<li>``</li>
</ul>
</blockquote>
<p>选项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 终端命令 - xjc</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-xjc.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-xjc.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 终端命令 - xjc</source>
      <description>文章摘要： 摘要内容。 简介 格式 格式 `` 选项 参数 案例</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>格式</h2>
<p>格式</p>
<blockquote>
<ul>
<li>``</li>
</ul>
</blockquote>
<p>选项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>案例</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - OpenJDK</title>
      <link>https://blog.magictable.ha.cn/software/Package-OpenJDK.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OpenJDK.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - OpenJDK</source>
      <description>文章摘要： Java的JDK（Java Development Kit）是用于Java程序开发的核心工具集。 相关信息 外部相关信息 社区开源官方网站 内部相关信息 Java SE 基础知识总结： 简介 简要说明 主要功能 注意事项 适用场景 安装与卸载 详细总结： 终端命令 详细总结： 配置文件 详细总结： 热门推荐 详细总结： 问题总结 详细总结：</description>
      <category>软件程序/软件包</category>
      <pubDate>Fri, 27 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Java的JDK（Java Development Kit）是用于Java程序开发的核心工具集。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关信息</p>
<ul>
<li><a href="https://openjdk.org/" target="_blank" rel="noopener noreferrer">社区开源官方网站</a></li>
</ul>
<p>内部相关信息</p>
<ul>
<li>Java SE 基础知识总结：<a href="/software/Language-Java-JavaSE.html" target="_blank">Language-Java-JavaSE</a></li>
</ul>
</div>
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>安装与卸载</h2>
<p>详细总结：<a href=""></a></p>
<h2>终端命令</h2>
<p>详细总结：<a href=""></a></p>
<h2>配置文件</h2>
<p>详细总结：<a href=""></a></p>
<h2>热门推荐</h2>
<p>详细总结：<a href=""></a></p>
<h2>问题总结</h2>
<p>详细总结：<a href=""></a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 安装与卸载</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 安装与卸载</source>
      <description>文章摘要： 摘要内容。 软件获取 官方下载地址：https://www.oracle.com/cn/java/technologies/downloads/#java8 注释 java环境变量 系统默认安装位置/usr/lib/jvm 安装 - apt包管理器 卸载 - apt包管理器 安装 - 预编译 添加环境变量 卸载 - 预编译 安装 - 源代码...</description>
      <category>软件程序/软件包</category>
      <pubDate>Fri, 27 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>软件获取</h2>
<blockquote>
<ul>
<li>官方下载地址：<a href="https://www.oracle.com/cn/java/technologies/downloads/#java8" target="_blank" rel="noopener noreferrer">https://www.oracle.com/cn/java/technologies/downloads/#java8</a></li>
</ul>
</blockquote>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>java环境变量</p>
<ul>
<li>系统默认安装位置<code>/usr/lib/jvm</code></li>
</ul>
</div>
<h2>安装 - apt包管理器</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 运行依赖</span></span>
<span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">sudo</span> <span class="token function">apt</span> openjdk</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>卸载 - apt包管理器</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 删除配置文件（完全删除）</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">apt</span> purge openjdk</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h2>安装 - 预编译</h2>
<p>添加环境变量</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 创建一个名为`JAVA_HOME`的环境变量2名，并指向了JDK的主目录</span></span>
<span class="line"><span class="token builtin class-name">export</span> <span class="token assign-left variable">JAVA_HOME</span><span class="token operator">=</span>/home/javauser/jdk/jdk-25</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 更新你的`PATH`变量将添加`bin`你的JDK目录</span></span>
<span class="line"><span class="token builtin class-name">export</span> <span class="token assign-left variable"><span class="token environment constant">PATH</span></span><span class="token operator">=</span><span class="token variable">$JAVA_HOME</span>/bin:<span class="token environment constant">$PATH</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>卸载 - 预编译</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>安装 - 源代码</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 编译依赖</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 运行依赖</span></span>
<span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>卸载 - 源代码</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 清理不必要的依赖包、配置、数据</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Oracle JDK - 问题总结 - JVM、JRE、JDK的关系</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-JVM%E3%80%81JRE%E3%80%81JDK%E7%9A%84%E5%85%B3%E7%B3%BB.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-JVM%E3%80%81JRE%E3%80%81JDK%E7%9A%84%E5%85%B3%E7%B3%BB.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK - 问题总结 - JVM、JRE、JDK的关系</source>
      <description>文章摘要： JVM、JRE、JDK的关系相关的问题总结。 JDK（Java SE Development Kit） Java开发环境（开发工具包） 包含「JRE（JVM+核心类库） + 开发工具包」 JDK包含许多工具,其中包括您用于编译和运行Java应用程序的工具。 JRE（Java Runtime Environment） Java运行环境（运行时...</description>
      <category>软件程序/软件包</category>
      <pubDate>Fri, 27 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> JVM、JRE、JDK的关系相关的问题总结。</p>
<!-- more -->
<p>JDK（Java SE Development Kit）</p>
<ul>
<li>Java开发环境（开发工具包）</li>
<li>包含「JRE（JVM+核心类库） + 开发工具包」</li>
<li>JDK包含许多工具,其中包括您用于编译和运行Java应用程序的工具。</li>
</ul>
<p>JRE（Java Runtime Environment）</p>
<ul>
<li>Java运行环境（运行时环境）</li>
<li>包含「JVM + 核心类库」</li>
</ul>
<p>JVM（Java Virtual Machine）</p>
<ul>
<li>Java虚拟机（真正运行Java程序的地方）</li>
<li>所有程序并不是直接运行在操作系统上，而是通过JVM执行，因此会比字节在操作系统上秩序程序的处理速度慢。</li>
<li>使用软件在不同操作系统中，模拟相同的环境。</li>
<li>JVM本身不跨平台，但解决了上层程序的跨平台。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:center">JDK（开发工具包）</th>
<th style="text-align:center">JRE（运行时环境）</th>
<th style="text-align:center">JVM（虚拟机）</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">实用的工具</td>
<td style="text-align:center">运行java程序的核心类库</td>
<td style="text-align:center">java编程语言的核心并且具有平台独立性</td>
</tr>
<tr>
<td style="text-align:center">实用工具 + JVM + Java核心类库</td>
<td style="text-align:center">JVM + Java核心类库</td>
<td style="text-align:center">运行环境</td>
</tr>
</tbody>
</table>
<blockquote>
<p><img src="https://ask.qcloudimg.com/http-save/yehe-1345101/00b879476257bb297dee8c2e1d952878.png" alt="JVM、JRE、JDK的关系图"></p>
</blockquote>
]]></content:encoded>
      <enclosure url="https://ask.qcloudimg.com/http-save/yehe-1345101/00b879476257bb297dee8c2e1d952878.png" type="image/png"/>
    </item>
    <item>
      <title>Package - Oracle JDK</title>
      <link>https://blog.magictable.ha.cn/software/Package-OracleJDK.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OracleJDK.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Oracle JDK</source>
      <description>文章摘要： Java的JDK（Java Development Kit）是用于Java程序开发的核心工具集。 相关信息 外部相关信息 官方文档 内部相关信息 Java SE 基础知识总结： 简介 简要说明 JDK是Java语言的软件开发工具包，提供了开发Java应用程序所需的所有工具和库。 提供了编译、运行、监控、调试和记录应用程序所需的一切。 JRE...</description>
      <category>软件程序/软件包</category>
      <pubDate>Fri, 27 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Java的JDK（Java Development Kit）是用于Java程序开发的核心工具集。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关信息</p>
<ul>
<li><a href="https://java.com/java/technologies/javase/jdk21-readme-downloads.html" target="_blank" rel="noopener noreferrer">官方文档</a></li>
</ul>
<p>内部相关信息</p>
<ul>
<li>Java SE 基础知识总结：<a href="/software/Language-Java-JavaSE.html" target="_blank">Language-Java-JavaSE</a></li>
</ul>
</div>
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>JDK是Java语言的软件开发工具包，提供了开发Java应用程序所需的所有工具和库。</li>
<li>提供了编译、运行、监控、调试和记录应用程序所需的一切。</li>
<li>JRE（Java Runtime Environment，即Java运行时环境，它包括JVM虚拟机+核心类库） + 开发工具包（如编译器、调试器和其他工具）。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>编译器（javac）</strong>：将Java源代码（.java文件）编译成Java字节码（.class文件）。</li>
<li><strong>Java运行时环境（JRE）</strong>：包括Java虚拟机（JVM）和Java核心类库，用于运行编译后的Java程序。</li>
<li><strong>调试器（jdb）</strong>：用于调试Java程序的工具。</li>
<li><strong>文档生成器（javadoc）</strong>：从Java源代码中生成API文档的工具。</li>
<li><strong>打包工具（jar）</strong>：用于打包Java应用程序和库的工具，创建可执行的JAR文件。</li>
<li><strong>其他工具和API</strong>：包括但不限于Java Web Start（jnlp）、远程方法调用（RMI）、Java IDL等。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>版本兼容性</strong>：确保JDK版本与你的Java应用程序兼容。</li>
<li><strong>更新和安全补丁</strong>：定期更新JDK以获取最新的安全补丁和功能改进。</li>
<li><strong>环境变量配置</strong>：正确配置环境变量（如PATH和JAVA_HOME），以便于在命令行中运行Java工具和应用程序。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>Java应用程序开发</strong>：适用于开发桌面应用程序、服务器端应用程序、嵌入式系统等。</li>
<li><strong>Web应用程序开发</strong>：用于开发基于Java的Web应用程序，如Servlets和JavaServer Pages（JSP）。</li>
<li><strong>移动应用程序开发</strong>：可以用于开发Android应用程序。</li>
<li><strong>大型企业系统</strong>：适用于构建复杂的企业级应用程序，包括后端服务和中间件。</li>
<li><strong>教育和学习</strong>：适用于Java语言的教学和学习。</li>
</ul>
<h2>安装与卸载</h2>
<ul>
<li>官方安装文档：<a href="https://docs.oracle.com/en/java/javase/21/install/overview-jdk-installation.html#GUID-8677A77F-231A-40F7-98B9-1FD0B48C346A" target="_blank" rel="noopener noreferrer">Oracle JDK 安装指南</a>，有安装和卸载说明。</li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html" target="_blank">Package-OracleJDK-安装与卸载</a></p>
<h2>终端命令</h2>
<ul>
<li><a href="https://docs.oracle.com/en/java/javase/21/docs/specs/man/index.html" target="_blank" rel="noopener noreferrer">JDK 工具官方文档</a></li>
</ul>
<p>详细总结：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4.html" target="_blank">Package-OracleJDK-终端命令</a></p>
<h2>配置文件</h2>
<p>详细总结：<a href=""></a></p>
<h2>热门推荐</h2>
<p>详细总结：<a href=""></a></p>
<h2>问题总结</h2>
<p>详细总结：<a href=""></a></p>
<ul>
<li>问题总结-JVM、JRE、JDK的关系：<a href="/software/Package-OracleJDK-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-JVM%E3%80%81JRE%E3%80%81JDK%E7%9A%84%E5%85%B3%E7%B3%BB.html" target="_blank">Package-OracleJDK-问题总结-JVM、JRE、JDK的关系</a></li>
</ul>
<h2>JDK文件目录结构</h2>
<p>详细总结：<a href="/software/Package-OracleJDK-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-%E7%9B%AE%E5%BD%95%E7%BB%93%E6%9E%84.html" target="_blank">Package-OracleJDK-查询手册-目录结构</a></p>
<h2>设置类路径</h2>
<ul>
<li>类路径（classpath）是 Java 运行时环境 （JRE） 搜索类和其他资源文件的路径。</li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>在调用 JDK 工具时，可以使用 <code>-classpath</code> 选项（首选方法）或通过设置 <code>CLASSPATH</code> 环境变量来设置类搜索路径（类路径）。</li>
<li><code>-classpath</code> 选项是首选选项，因为可以为每个应用程序单独设置它，而不会影响其他应用程序，也无需其他应用程序修改其值。</li>
</ul>
</div>
<h2>如何找到类</h2>
<p>Java启动Java虚拟机，虚拟机的搜索顺序和加载类：</p>
<ul>
<li><strong>引导程序类</strong> - 构成 Java 平台的类，包括 <code>rt.jar</code> 中的类和其他几个重要的 jar 文件。</li>
<li><strong>扩展类</strong> - 使用 Java 扩展机制的类。这些文件捆绑为 extensions 目录中的 <code>.jar</code> 文件。</li>
<li><strong>用户类</strong> - 由开发人员定义的类和第三个类 未利用扩展机制的各方。你 使用 -classpath 选项（首选 方法）或使用 CLASSPATH 环境变量。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>基础知识 - 字符集 - ASCII</title>
      <link>https://blog.magictable.ha.cn/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E5%AD%97%E7%AC%A6%E9%9B%86-ASCII.html</link>
      <guid>https://blog.magictable.ha.cn/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E5%AD%97%E7%AC%A6%E9%9B%86-ASCII.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">基础知识 - 字符集 - ASCII</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 ASCII（American Standard Code for Information Interchange，美国信息交换标准代码）是一种基于拉丁字母的编码系统，用于电子通信。 用来作为不同计算机在相互通信时的一致性编码标准。 ASCII编码表包含了128个字符，其中包括了英文字母（大小写）、数字、标点符号、...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Fri, 27 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<blockquote>
<ul>
<li>ASCII（American Standard Code for Information Interchange，美国信息交换标准代码）是一种基于拉丁字母的编码系统，用于电子通信。</li>
<li>用来作为不同计算机在相互通信时的一致性编码标准。</li>
<li>ASCII编码表包含了128个字符，其中包括了英文字母（大小写）、数字、标点符号、控制字符等。</li>
</ul>
</blockquote>
<p>主要功能</p>
<blockquote>
<ul>
<li><strong>字符编码</strong>：将英文字母、数字、标点符号等字符映射为特定的数值，便于计算机存储和处理。</li>
<li><strong>通信标准</strong>：提供了一套统一的字符编码标准，使得不同计算机和设备之间能够顺畅地进行信息交换。</li>
<li><strong>控制字符</strong>：包含了一些用于控制设备（如打印机、终端等）的特殊字符。</li>
</ul>
</blockquote>
<p>注意事项</p>
<blockquote>
<ul>
<li><strong>字符范围</strong>：ASCII码表中的字符编码范围是从0到127，其中0到31和127是控制字符，32到126是可打印字符。</li>
<li><strong>编码长度</strong>：ASCII编码通常使用7位二进制数表示，也可以扩展为8位（即一个字节），最高位通常为0。</li>
<li><strong>字符集限制</strong>：ASCII编码只包含了英文字符和一些特殊符号，不支持其他语言字符，如中文、阿拉伯文等。</li>
<li><strong>大小写敏感</strong>：ASCII码表中，大写字母和小写字母有不同的编码值。</li>
</ul>
</blockquote>
<p>适用场景</p>
<blockquote>
<ul>
<li><strong>文本处理</strong>：在处理英文文本信息时，ASCII编码是非常合适的。</li>
<li><strong>程序设计</strong>：在编程中，ASCII编码常用于字符和数字之间的转换。</li>
<li><strong>通信协议</strong>：在网络通信和数据传输中，ASCII编码作为基础字符集被广泛使用。</li>
<li><strong>控制字符处理</strong>：在需要发送控制命令的场景下，如打印机和串口通信。</li>
</ul>
</blockquote>
<h2>编码表</h2>
<p>|Bin<br><br>(二进制)|Oct<br><br>(八进制)|Dec<br><br>(十进制)|Hex<br><br>(十六进制)|缩写/字符|解释|
|:-😐:-😐:-😐:-😐</p>
]]></content:encoded>
    </item>
    <item>
      <title>基础知识 - 文件系统 - EXT4</title>
      <link>https://blog.magictable.ha.cn/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F-EXT4.html</link>
      <guid>https://blog.magictable.ha.cn/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F-EXT4.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">基础知识 - 文件系统 - EXT4</source>
      <description>文章摘要： EXT4文件系统总结。 简介 简要说明 EXT4是第四代扩展文件系统（Fourth Extended File System），是Linux系统中广泛使用的一种文件系统。 是EXT3文件系统的后继者，提供了一些改进的性能和功能。 主要功能 支持更大的文件系统和单个文件大小，理论上最大文件系统可达1EB（Exabyte），单个文件最大可达16...</description>
      <category>软件程序/操作系统</category>
      <pubDate>Fri, 27 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> EXT4文件系统总结。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<blockquote>
<ul>
<li>EXT4是第四代扩展文件系统（Fourth Extended File System），是Linux系统中广泛使用的一种文件系统。</li>
<li>是EXT3文件系统的后继者，提供了一些改进的性能和功能。</li>
</ul>
</blockquote>
<p>主要功能</p>
<blockquote>
<ul>
<li>支持更大的文件系统和单个文件大小，理论上最大文件系统可达1EB（Exabyte），单个文件最大可达16TB。</li>
<li>支持更大的子目录，EXT3的限制是32000个子目录，EXT4则没有这样的限制。</li>
<li>更快的文件系统检查，减少系统启动时间。</li>
<li>支持延迟分配，可以提高文件系统的性能并减少文件碎片。</li>
<li>支持持久预分配，允许应用程序预分配磁盘空间以确保后续写入不会失败。</li>
<li>支持扩展属性，允许额外的元数据与文件一起存储。</li>
<li>支持在线磁盘整理，可以在不卸载文件系统的情况下减少文件碎片。</li>
<li>支持日志校验，提高文件系统的可靠性。</li>
</ul>
</blockquote>
<p>注意事项</p>
<blockquote>
<ul>
<li>在将EXT3文件系统升级到EXT4时，需要确保数据备份，因为虽然升级过程通常很安全，但仍然存在数据丢失的风险。</li>
<li>EXT4文件系统在处理大量小文件时可能不如某些其他文件系统（如XFS）高效。</li>
<li>EXT4的默认挂载选项可能不适合所有应用场景，可能需要根据具体需求调整挂载选项，如关闭atime更新以提高性能。</li>
</ul>
</blockquote>
<p>适用场景</p>
<blockquote>
<ul>
<li>通用文件系统，适用于大多数Linux桌面和服务器环境。</li>
<li>适用于需要大量存储空间和大型文件的应用，如数据库服务器、文件服务器和视频编辑工作站。</li>
<li>由于其稳定性和广泛的支持，EXT4适用于各种类型的存储设备，包括硬盘驱动器（HDDs）、固态驱动器（SSDs）和外部存储设备。</li>
<li>对于需要高可靠性和数据完整性的场景，EXT4是一个很好的选择，尽管它可能不是所有场景中最快的文件系统。</li>
</ul>
</blockquote>
<h2>基础了解</h2>
<p>EXT4背景知识</p>
<blockquote>
<ul>
<li>了解EXT4的历史和它相对于之前EXT3文件系统的改进。</li>
<li>熟悉EXT4的主要特点和优势。</li>
</ul>
</blockquote>
<p>文件系统基础</p>
<blockquote>
<ul>
<li>学习文件系统的基本概念，如inode、块、目录结构等。</li>
</ul>
</blockquote>
<h2>理论学习</h2>
<p>EXT4文件系统结构</p>
<blockquote>
<ul>
<li>学习EXT4的超级块、组描述符、块位图、inode位图、inode表等结构。</li>
<li>了解EXT4的文件系统布局和元数据。</li>
</ul>
</blockquote>
<p>EXT4特性</p>
<blockquote>
<ul>
<li>理解EXT4的特性，如扩展属性、日记功能、文件系统冗余（RAID）支持、大文件支持等。</li>
</ul>
</blockquote>
<h2>实践操作</h2>
<p>安装和配置</p>
<blockquote>
<ul>
<li>在虚拟机或物理机上安装支持EXT4的操作系统。</li>
<li>学习如何创建、格式化EXT4文件系统。</li>
</ul>
</blockquote>
<p>文件系统管理</p>
<blockquote>
<ul>
<li>学习使用<code>mkfs.ext4</code>、<code>tune2fs</code>、<code>fsck.ext4</code>等工具。</li>
<li>实践挂载、卸载、检查和修复EXT4文件系统。</li>
</ul>
</blockquote>
<p>性能调优</p>
<blockquote>
<ul>
<li>学习如何调整EXT4文件系统的性能参数，如块大小、预留空间等。</li>
<li>实践文件系统性能监控和优化。</li>
</ul>
</blockquote>
<h2>进阶学习</h2>
<p>EXT4内部机制</p>
<blockquote>
<ul>
<li>深入了解EXT4的延迟分配、多块分配、日记处理等内部机制。</li>
</ul>
</blockquote>
<p>故障排除</p>
<blockquote>
<ul>
<li>学习如何分析EXT4文件系统的常见问题和故障。</li>
<li>实践使用日志和系统工具进行问题诊断。</li>
</ul>
</blockquote>
<h2>高级主题</h2>
<p>备份与恢复</p>
<blockquote>
<ul>
<li>学习如何备份和恢复EXT4文件系统。</li>
<li>了解不同备份工具的使用方法。</li>
</ul>
</blockquote>
<p>安全性</p>
<blockquote>
<ul>
<li>学习EXT4文件系统的安全特性，如访问控制列表（ACLs）和加密。</li>
</ul>
</blockquote>
<p>分布式和云环境中的EXT4</p>
<blockquote>
<ul>
<li>了解EXT4在分布式文件系统和云环境中的应用。</li>
</ul>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Excerpt - 机器人行业报告</title>
      <link>https://blog.magictable.ha.cn/note/Excerpt-%E6%9C%BA%E5%99%A8%E4%BA%BA%E5%8F%91%E5%B1%95%E6%8A%A5%E5%91%8A.html</link>
      <guid>https://blog.magictable.ha.cn/note/Excerpt-%E6%9C%BA%E5%99%A8%E4%BA%BA%E5%8F%91%E5%B1%95%E6%8A%A5%E5%91%8A.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Excerpt - 机器人行业报告</source>
      <description>文章摘要： 摘要内容。 简介 中国服务机器人行业政策（Policy）环境分析 中国服务机器人行业监管体系及机构介绍 中国服务机器人行业主管部门 中国服务机器人行业自律组织 中国服务机器人行业标准体系建设现状 中国服务机器人行业标准体系建设 中国服务机器人行业现行标准分析 中国服务机器人行业即将实施标准 中国服务机器人行业重点标准解读 中国服务机器人行业...</description>
      <category>学习笔记/摘录</category>
      <pubDate>Wed, 25 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<h2>中国服务机器人行业政策（Policy）环境分析</h2>
<p>中国服务机器人行业监管体系及机构介绍</p>
<blockquote>
<ul>
<li>中国服务机器人行业主管部门</li>
<li>中国服务机器人行业自律组织</li>
</ul>
</blockquote>
<p>中国服务机器人行业标准体系建设现状</p>
<blockquote>
<ul>
<li>中国服务机器人行业标准体系建设</li>
<li>中国服务机器人行业现行标准分析</li>
<li>中国服务机器人行业即将实施标准</li>
<li>中国服务机器人行业重点标准解读</li>
</ul>
</blockquote>
<p>中国服务机器人行业发展相关政策规划汇总及解读</p>
<blockquote>
<ul>
<li>国家层面相关政策规划分析</li>
<li>地方层面相关政策规划分析</li>
</ul>
</blockquote>
<p>国家“十四五”规划对服务机器人行业的影响分析</p>
<p>中国服务机器人行业国家层面重点政策解析</p>
<blockquote>
<ul>
<li>《“十四五”机器人产业发展规划》</li>
</ul>
</blockquote>
<h2>中国服务机器人行业技术（Technology）环境分析</h2>
<p>机器人技术发展现状</p>
<p>服务机器人核心关键技术分析</p>
<blockquote>
<ul>
<li>导航技术</li>
<li>路径规划技术</li>
<li>多传感器信息融合技术</li>
</ul>
</blockquote>
<p>服务机器人共性技术分析</p>
<blockquote>
<ul>
<li>自主移动机器人平台技术</li>
<li>机构与驱动</li>
<li>感知技术</li>
<li>交互技术</li>
<li>自主技术</li>
<li>网络通信技术</li>
</ul>
</blockquote>
<p>中国服务机器人技术发展趋势</p>
<blockquote>
<ul>
<li>云-边-端的无缝协同计算</li>
<li>持续学习和协同学习</li>
<li>知识图谱</li>
<li>场景自适应</li>
<li>数据安全</li>
</ul>
</blockquote>
<h2>服务机器人产业链梳理</h2>
<p>服务机器人产业链结构</p>
<p>服务机器人产业链图谱</p>
<p>服务机器人行业上游核心零部件市场分析</p>
<p>减速器市场分析</p>
<blockquote>
<ul>
<li>减速器分类</li>
<li>减速器市场发展现状</li>
<li>减速器市场竞争格局</li>
<li>减速器对行业的影响</li>
</ul>
</blockquote>
<p>机器人用伺服电机市场分析</p>
<blockquote>
<ul>
<li>机器人用伺服电机分类</li>
<li>机器人用伺服电机市场发展现状</li>
<li>机器人用伺服电机市场竞争格局</li>
<li>机器人用伺服电机对行业的影响</li>
</ul>
</blockquote>
<p>控制器市场分析</p>
<blockquote>
<ul>
<li>控制器市场发展现状</li>
<li>控制器市场竞争格局</li>
<li>控制器对行业的影响</li>
</ul>
</blockquote>
<p>传感器市场分析</p>
<blockquote>
<ul>
<li>传感器分类</li>
<li>传感器市场发展现状</li>
<li>传感器市场竞争格局</li>
<li>传感器对行业的影响</li>
</ul>
</blockquote>
<p>AI芯片市场分析</p>
<blockquote>
<ul>
<li>AI芯片市场发展现状</li>
<li>AI芯片市场竞争格局</li>
<li>AI芯片对行业的影响</li>
</ul>
</blockquote>
<h2>服务机器人行业上游软件系统开发市场分析</h2>
<p>人工智能市场分析</p>
<blockquote>
<ul>
<li>人工智能市场发展现状</li>
<li>人工智能市场竞争格局</li>
<li>人工智能对行业的影响</li>
</ul>
</blockquote>
<p>SLAM市场分析</p>
<blockquote>
<ul>
<li>SLAM市场类型分析</li>
<li>SLAM市场发展现状</li>
<li>SLAM对行业的影响</li>
</ul>
</blockquote>
<p>操作系统市场分析</p>
<blockquote>
<ul>
<li>操作系统市场发展现状</li>
<li>操作系统市场竞争格局</li>
<li>操作系统对行业的影响</li>
</ul>
</blockquote>
<blockquote>
<p><img src="https://oss.zhidx.com/uploads/2024/12/67654a4b25be8_67654a4b22c4d_67654a4b22c26_屏幕截图-2024-12-20-165723.png/_zdx?a" alt=""></p>
</blockquote>
]]></content:encoded>
      <enclosure url="https://oss.zhidx.com/uploads/2024/12/67654a4b25be8_67654a4b22c4d_67654a4b22c26_%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE-2024-12-20-165723.png/_zdx?a" type="image/"/>
    </item>
    <item>
      <title>Language - Java - Java SE - API - 「java.applet」</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjava.applet%E3%80%8D.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjava.applet%E3%80%8D.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - API - 「java.applet」</source>
      <description>文章摘要： 提供创建 applet 所需的类，以及 applet 用于与其 applet 上下文通信的类。Applet 是一种特殊的小程序，它嵌入在 HTML 页面中，并在用户的浏览器上运行，（已废弃）这个包在 Java 9 及更高版本中已被弃用。 警告 （已废弃）这个包在 Java 9 及更高版本中已被弃用。 介绍 简要说明 提供创建 applet ...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Tue, 24 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 提供创建 applet 所需的类，以及 applet 用于与其 applet 上下文通信的类。Applet 是一种特殊的小程序，它嵌入在 HTML 页面中，并在用户的浏览器上运行，（已废弃）这个包在 Java 9 及更高版本中已被弃用。</p>
<!-- more -->
<div class="hint-container warning">
<p class="hint-container-title">警告</p>
<ul>
<li>（已废弃）这个包在 Java 9 及更高版本中已被弃用。</li>
</ul>
</div>
<h2>介绍</h2>
<p>简要说明</p>
<ul>
<li>提供创建 applet 所需的类，以及 applet 用于与其 applet 上下文通信的类。</li>
<li>Java 早期版本中用于创建 Applet 的包。</li>
<li>Applet 是一种特殊的小程序，它嵌入在 HTML 页面中，并在用户的浏览器上运行。</li>
<li>随着 Web 技术的发展，Applet 已经被淘汰，现代浏览器不再支持 Java Applet。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>嵌入 HTML 页面</strong>：Applet 可以嵌入到 HTML 页面中，与网页内容一起显示。</li>
<li><strong>网络交互</strong>：Applet 可以与网络进行交互，下载或上传数据。</li>
<li><strong>图形界面</strong>：Applet 支持图形用户界面（GUI）组件，如按钮、文本框等。</li>
<li><strong>多媒体支持</strong>：Applet 可以播放音频和视频，以及显示图像。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>安全性问题</strong>：由于 Applet 可以执行本地代码，存在潜在的安全风险。</li>
<li><strong>浏览器支持</strong>：自 Java 9 开始，Applet API 被标记为已废弃，并且主流浏览器已经停止支持 Java Applet。</li>
<li><strong>替代技术</strong>：现代 Web 应用程序通常使用 HTML5、CSS3、JavaScript 等技术来实现原本需要 Applet 完成的功能。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>历史遗留系统</strong>：在一些老旧的系统或应用中，可能仍然在使用 Java Applet。</li>
<li><strong>特定环境</strong>：在没有网络连接的内网环境中，可能仍然有 Applet 的使用场景，但这种情况越来越少见。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - API - 「java.beans」</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjava.beans%E3%80%8D.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjava.beans%E3%80%8D.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - API - 「java.beans」</source>
      <description>文章摘要： 摘要内容。 介绍 简要说明 提供了一套用于编写可编辑和可观察的 JavaBean 组件的类和接口。 JavaBean 是一种特殊的 Java 类，遵循特定的编码约定，使得它们可以被工具软件分析、创建、修改，并在运行时与其它 Bean 进行交互。 主要功能 属性管理：提供了用于定义和操作 JavaBean 属性的机制，包括属性的类型、读写访问...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Tue, 24 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>介绍</h2>
<p>简要说明</p>
<ul>
<li>提供了一套用于编写可编辑和可观察的 JavaBean 组件的类和接口。</li>
<li>JavaBean 是一种特殊的 Java 类，遵循特定的编码约定，使得它们可以被工具软件分析、创建、修改，并在运行时与其它 Bean 进行交互。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>属性管理</strong>：提供了用于定义和操作 JavaBean 属性的机制，包括属性的类型、读写访问器（getter 和 setter 方法）。</li>
<li><strong>事件监听和分发</strong>：允许 JavaBean 组件触发事件，并允许其他组件监听这些事件。</li>
<li><strong>持久化</strong>：支持将 JavaBean 的状态保存到持久存储（如文件）以及从持久存储恢复状态。</li>
<li><strong>内省（Introspection）</strong>：允许工具和应用程序分析 JavaBean 的属性、方法和事件，无需直接访问源代码。</li>
<li><strong>自定义属性编辑器</strong>：允许开发者创建自定义的属性编辑器，以便在设计时编辑 JavaBean 的属性。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>编码约定</strong>：为了使 JavaBean 正常工作，必须遵循特定的命名约定，例如属性对应的 getter 和 setter 方法。</li>
<li><strong>线程安全</strong>：JavaBean 本身不是线程安全的，开发者需要确保在多线程环境下正确地使用它们。</li>
<li><strong>性能考虑</strong>：过度使用事件监听和内省可能会影响应用程序的性能。</li>
<li><strong>替代技术</strong>：随着 Java 平台的演进，一些新的框架和技术（如 Spring）提供了更高级的依赖注入和配置管理功能。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>组件模型</strong>：在需要构建可重用组件时，JavaBean 提供了一个标准化的组件模型。</li>
<li><strong>可视化编辑</strong>：在开发 GUI 应用程序时，JavaBean 可以被集成开发环境（IDE）用于可视化设计。</li>
<li><strong>配置管理</strong>：JavaBean 可用于应用程序的配置管理，其中属性可以被用来表示配置参数。</li>
<li><strong>远程方法调用（RMI）</strong>：JavaBean 可以被用作远程对象，通过 RMI 在不同 JVM 之间进行通信。</li>
</ul>
<h3>主要功能和类</h3>
<ul>
<li><strong>Introspection</strong>: 内省机制允许工具和应用程序在没有源代码的情况下检查和操作 Bean 的属性、事件和方法。</li>
<li><strong>PropertyDescriptor</strong>: 用于描述 Bean 的属性，包括属性名、属性类型以及读写方法。</li>
<li><strong>MethodDescriptor</strong>: 用于描述 Bean 的方法。</li>
<li><strong>EventSetDescriptor</strong>: 用于描述 Bean 的事件集。</li>
<li><strong>BeanInfo</strong>: 包含有关 Bean 的各种信息，如属性、方法和事件。</li>
</ul>
<h3>主要类和接口</h3>
<ul>
<li><strong>BeanDescriptor</strong>: 提供有关 Bean 的全局信息。</li>
<li><strong>PropertyDescriptor</strong>: 封装了关于单个属性的元数据。</li>
<li><strong>IndexedPropertyDescriptor</strong>: 类似于 PropertyDescriptor，但用于索引属性。</li>
<li><strong>MethodDescriptor</strong>: 封装了关于单个方法的信息。</li>
<li><strong>EventSetDescriptor</strong>: 封装了关于事件集的信息。</li>
<li><strong>Introspector</strong>: 用于获取 BeanInfo 对象。</li>
<li><strong>PropertyDescriptor</strong>: 用于操作属性。</li>
<li><strong>PropertyEditor</strong>: 用于编辑属性值的界面。</li>
</ul>
<h3>学习总结</h3>
<h4>内省（Introspection）</h4>
<ul>
<li><strong>理解内省</strong>: 学习如何使用内省机制来发现和操作 JavaBean 的属性和方法。</li>
<li><strong>BeanInfo 类</strong>: 了解如何创建和使用 BeanInfo 类来提供关于 Bean 的自定义信息。</li>
</ul>
<h4>属性（Properties）</h4>
<ul>
<li><strong>属性访问</strong>: 学习如何使用 PropertyDescriptor 来访问和修改 Bean 的属性。</li>
<li><strong>属性编辑器</strong>: 掌握 PropertyEditor 接口，用于将属性值转换为字符串，反之亦然，通常用于 GUI 构建工具。</li>
</ul>
<h4>事件（Events）</h4>
<ul>
<li><strong>事件处理</strong>: 了解如何使用 EventSetDescriptor 来描述和处理 Bean 的事件。</li>
</ul>
<h4>方法（Methods）</h4>
<ul>
<li><strong>方法描述</strong>: 学习如何使用 MethodDescriptor 来描述 Bean 的方法。</li>
</ul>
<h4>实用工具类</h4>
<ul>
<li><strong>XMLDecoder 和 XMLEncoder</strong>: 学习如何使用这些类来序列化和反序列化 Bean，通常用于配置管理。</li>
<li><strong>PropertyChangeSupport 和 VetoableChangeSupport</strong>: 这些类帮助 Bean 实现属性更改通知和属性更改验证。</li>
</ul>
<h2><code>java.beans.beancontext</code></h2>
<p>提供与 Bean 上下文相关的类和接口。</p>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - API - 「java.math」</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjava.math%E3%80%8D.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjava.math%E3%80%8D.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - API - 「java.math」</source>
      <description>文章摘要： 提供了一些用于执行任意精度整数运算（BigInteger）和任意精度浮点数运算（BigDecimal）的类。 介绍 简要说明 提供了一些用于执行任意精度整数运算（BigInteger）和任意精度浮点数运算（BigDecimal）的类。 适用于那些需要超出标准 Java 基本数据类型（如 int、long、float、double）精度范围的...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Tue, 24 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 提供了一些用于执行任意精度整数运算（BigInteger）和任意精度浮点数运算（BigDecimal）的类。</p>
<!-- more -->
<h2>介绍</h2>
<p>简要说明</p>
<ul>
<li>提供了一些用于执行任意精度整数运算（BigInteger）和任意精度浮点数运算（BigDecimal）的类。</li>
<li>适用于那些需要超出标准 Java 基本数据类型（如 int、long、float、double）精度范围的计算。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>BigInteger</strong>：用于表示不可变的任意精度的整数。可以执行所有基本的数学运算，如加、减、乘、除，以及模运算。</li>
<li><strong>BigDecimal</strong>：用于表示不可变的任意精度的浮点数。它提供了精确的数值运算，避免了二进制浮点运算中常见的精度问题。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>性能</strong>：BigInteger 和 BigDecimal 的操作通常比原始数据类型的操作要慢，因为它们提供了更高的精度和更大的数值范围。</li>
<li><strong>精度</strong>：在使用 BigDecimal 进行运算时，需要注意精度和舍入模式，以避免意外的结果。</li>
<li><strong>不可变性</strong>：BigInteger 和 BigDecimal 都是不可变的，所有的运算都会返回一个新的实例。</li>
<li><strong>初始化</strong>：在创建 BigInteger 或 BigDecimal 实例时，应使用字符串构造器来避免由浮点数构造器引入的精度问题。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>高精度整数运算</strong>：当整数的大小超出了 long 类型的范围时，或者需要执行精确的整数运算时，使用 BigInteger。</li>
<li><strong>金融计算</strong>：在金融应用程序中，经常需要精确的货币计算，BigDecimal 用于避免浮点数运算中的舍入误差。</li>
<li><strong>科学计算</strong>：在需要非常高精度的科学计算中，BigDecimal 提供了比 double 更精确的数值表示。</li>
<li><strong>精确的数学运算</strong>：任何需要精确数学运算的场景，例如在需要精确结果的算法中。</li>
</ul>
<h3>BigInteger</h3>
<p><code>BigInteger</code> 类用于表示不可变的任意精度的整数。它可以用于表示比 <code>long</code> 类型更大的整数值。</p>
<h4>主要特性：</h4>
<ul>
<li><strong>不可变性</strong>: 一旦创建了 <code>BigInteger</code> 对象，其值就不能更改。</li>
<li><strong>大数运算</strong>: 支持所有基本的数学运算，如加、减、乘、除等。</li>
</ul>
<h4>常用构造方法：</h4>
<ul>
<li><code>BigInteger(String val)</code>: 根据字符串构建 <code>BigInteger</code>。</li>
<li><code>BigInteger(byte[] val)</code>: 根据字节数组构建 <code>BigInteger</code>。</li>
</ul>
<h4>常用方法：</h4>
<ul>
<li><code>add(BigInteger val)</code>: 返回两个大整数的和。</li>
<li><code>subtract(BigInteger val)</code>: 返回两个大整数的差。</li>
<li><code>multiply(BigInteger val)</code>: 返回两个大整数的乘积。</li>
<li><code>divide(BigInteger val)</code>: 返回两个大整数的商。</li>
<li><code>remainder(BigInteger val)</code>: 返回两个大整数相除的余数。</li>
<li><code>gcd(BigInteger val)</code>: 返回大整数的最大公约数。</li>
<li><code>modPow(BigInteger exponent, BigInteger m)</code>: 返回大整数的指数运算结果的模。</li>
<li><code>modInverse(BigInteger m)</code>: 返回大整数的模逆。</li>
<li><code>shiftLeft(int n)</code>: 将大整数左移 n 位。</li>
<li><code>shiftRight(int n)</code>: 将大整数右移 n 位。</li>
<li><code>and(BigInteger val)</code>, <code>or(BigInteger val)</code>, <code>xor(BigInteger val)</code>: 执行位运算。</li>
<li><code>compareTo(BigInteger val)</code>: 比较两个大整数的大小。</li>
</ul>
<h3>BigDecimal</h3>
<p><code>BigDecimal</code> 类用于表示不可变的任意精度的十进制数。它常用于金融应用程序和需要高精度计算的场合。</p>
<h4>主要特性：</h4>
<ul>
<li><strong>不可变性</strong>: 与 <code>BigInteger</code> 一样，<code>BigDecimal</code> 也是不可变的。</li>
<li><strong>精确十进制运算</strong>: <code>BigDecimal</code> 提供了精确的十进制运算。</li>
</ul>
<h4>常用构造方法：</h4>
<ul>
<li><code>BigDecimal(String val)</code>: 根据字符串构建 <code>BigDecimal</code>。</li>
<li><code>BigDecimal(double val)</code>: 根据双精度浮点数构建 <code>BigDecimal</code>（不建议使用，因为 <code>double</code> 本身是不精确的）。</li>
</ul>
<h4>常用方法：</h4>
<ul>
<li><code>add(BigDecimal augend)</code>: 返回两个 <code>BigDecimal</code> 的和。</li>
<li><code>subtract(BigDecimal subtrahend)</code>: 返回两个 <code>BigDecimal</code> 的差。</li>
<li><code>multiply(BigDecimal multiplicand)</code>: 返回两个 <code>BigDecimal</code> 的乘积。</li>
<li><code>divide(BigDecimal divisor, int scale, RoundingMode roundingMode)</code>: 返回两个 <code>BigDecimal</code> 的商，可以指定小数点后的位数和舍入模式。</li>
<li><code>setScale(int newScale, RoundingMode roundingMode)</code>: 设置 <code>BigDecimal</code> 的小数位数，并指定舍入模式。</li>
<li><code>compareTo(BigDecimal val)</code>: 比较两个 <code>BigDecimal</code> 的大小。</li>
<li><code>stripTrailingZeros()</code>: 返回一个 <code>BigDecimal</code>，其表示去掉尾随零的数值。</li>
<li><code>precision()</code>: 返回 <code>BigDecimal</code> 的精度。</li>
<li><code>setScale(int newScale)</code>: 设置 <code>BigDecimal</code> 的小数位数。</li>
</ul>
<h4>舍入模式（RoundingMode）：</h4>
<ul>
<li><code>UP</code>: 向远离零的方向舍入。</li>
<li><code>DOWN</code>: 向接近零的方向舍入。</li>
<li><code>CEILING</code>: 向正无穷大方向舍入。</li>
<li><code>FLOOR</code>: 向负无穷大方向舍入。</li>
<li><code>HALF_UP</code>: 四舍五入。</li>
<li><code>HALF_DOWN</code>: 五舍六入。</li>
<li><code>HALF_EVEN</code>: 向最近的偶数舍入。</li>
</ul>
<h3>学习总结</h3>
<ul>
<li><strong>精度问题</strong>: 在处理金融数据和高精度计算时，应使用 <code>BigDecimal</code> 而不是 <code>double</code> 或 <code>float</code>。</li>
<li><strong>构造方法</strong>: 避免使用 <code>BigDecimal(double)</code> 构造方法，因为它可能会导致精度损失。</li>
<li><strong>舍入模式</strong>: 根据具体需求选择合适的舍入模式。</li>
<li><strong>性能考虑</strong>: <code>BigInteger</code> 和 <code>BigDecimal</code> 的运算比基本类型要慢，因此在不必要的情况下应避免使用。</li>
<li><strong>不可变性</strong>: 由于 <code>BigInteger</code> 和 <code>BigDecimal</code> 是不可变的，每次运算都会创建一个新的对象。</li>
<li><strong>方法链</strong>: 可以通过方法链的方式连续调用方法，以编写更简洁的代码。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - API - 「java.rmi」</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjava.rmi%E3%80%8D.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjava.rmi%E3%80%8D.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - API - 「java.rmi」</source>
      <description>文章摘要： 允许一个 Java 虚拟机上的对象调用另一个 Java 虚拟机上对象的方法。 介绍 简要说明 允许一个 Java 虚拟机上的对象调用另一个 Java 虚拟机上对象的方法。 实现远程过程调用（RPC）机制，使得在不同 JVM 之间可以进行方法调用，就像本地调用一样。 主要功能 远程对象：允许对象在不同 JVM 之间进行通信，这些对象被称为远程...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Tue, 24 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 允许一个 Java 虚拟机上的对象调用另一个 Java 虚拟机上对象的方法。</p>
<!-- more -->
<h2>介绍</h2>
<p>简要说明</p>
<ul>
<li>允许一个 Java 虚拟机上的对象调用另一个 Java 虚拟机上对象的方法。</li>
<li>实现远程过程调用（RPC）机制，使得在不同 JVM 之间可以进行方法调用，就像本地调用一样。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>远程对象</strong>：允许对象在不同 JVM 之间进行通信，这些对象被称为远程对象。</li>
<li><strong>stub 和 skeleton</strong>：stub 是远程对象的本地代理，它负责将调用转发给远程对象。skeleton 是在服务器端运行的，用于接收来自 stub 的调用并转发给实际的远程对象。</li>
<li><strong>RMI 注册表</strong>：提供了一个注册表服务，允许远程对象通过名称绑定和查找。</li>
<li><strong>RMI 查找</strong>：客户端使用 Naming 类来查找远程对象。</li>
<li><strong>远程接口</strong>：定义了远程对象必须实现的接口，这些接口的方法可以远程调用。</li>
<li><strong>序列化</strong>：RMI 使用 Java 序列化机制来传输对象，因此远程对象及其参数和返回值必须实现 <code>Serializable</code> 接口。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>安全性</strong>：RMI 调用可能会跨越不安全的网络，因此需要考虑使用安全策略文件来限制远程对象的访问。</li>
<li><strong>异常处理</strong>：远程方法调用可能会抛出 <code>RemoteException</code>，调用者需要捕获并处理这些异常。</li>
<li><strong>性能</strong>：RMI 调用涉及网络通信，因此性能可能不如本地方法调用。应尽量减少远程调用次数，并优化数据传输。</li>
<li><strong>防火墙和端口</strong>：RMI 需要特定的端口来通信，可能需要在防火墙上配置端口转发规则。</li>
<li><strong>版本兼容性</strong>：客户端和服务器端的远程接口和实现类需要保持版本兼容，否则可能发生序列化错误。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>分布式系统</strong>：在分布式系统中，不同服务器上的组件需要相互通信和协作。</li>
<li><strong>远程服务</strong>：创建可以被远程客户端调用的服务，如数据库服务、文件服务等。</li>
<li><strong>跨网络操作</strong>：在需要跨网络执行操作的场景，例如在不同的数据中心之间同步数据。</li>
<li><strong>企业应用集成</strong>：在企业应用集成中，使用 RMI 可以实现不同系统之间的方法调用和数据交换。</li>
</ul>
<h3>主要概念</h3>
<h4>远程接口（Remote Interface）</h4>
<p>远程接口是标记接口，用于指示哪些方法可以从远程 Java 虚拟机上调用。任何实现远程接口的类都必须声明为 <code>Serializable</code>，并且其所有方法都必须抛出 <code>RemoteException</code>。</p>
<h4>远程对象（Remote Object）</h4>
<p>实现了远程接口的类的实例，可以被远程访问。</p>
<h4>Stub 和 Skeleton</h4>
<ul>
<li><strong>Stub</strong>: 是远程对象的本地代理，它实现了远程接口，并负责将调用转发给远程对象。</li>
<li><strong>Skeleton</strong>: 是一个存在于服务器端的辅助类，它负责接收来自网络的调用，并将它们传递给远程对象。从 Java 2 平台开始，Skeleton 类在运行时自动生成，因此不再需要手动编写。</li>
</ul>
<h4>RMI 注册表（RMI Registry）</h4>
<p>RMI 注册表是一个服务，它允许远程客户端查找并调用服务器上的远程对象。</p>
<h3>主要类和接口</h3>
<h4>RemoteException</h4>
<ul>
<li><code>RemoteException</code> 是大多数 RMI 方法抛出的异常，表示在远程方法调用过程中发生了错误。</li>
</ul>
<h4>Remote</h4>
<ul>
<li><code>Remote</code> 是一个标记接口，用于指示对象可以接受远程调用。</li>
</ul>
<h4>RemoteObject</h4>
<ul>
<li><code>RemoteObject</code> 是 <code>Remote</code> 接口的直接实现，提供了支持远程对象实现的基本功能。</li>
</ul>
<h4>UnicastRemoteObject</h4>
<ul>
<li><code>UnicastRemoteObject</code> 是 <code>RemoteObject</code> 的子类，用于创建单播远程对象，即一次只能由一个客户端调用的对象。</li>
</ul>
<h4>Naming</h4>
<ul>
<li><code>Naming</code> 类提供了用于将远程对象绑定到 RMI 注册表和查找远程对象的方法。</li>
<li><code>bind(String name, Remote obj)</code>: 将指定的名称绑定到远程对象。</li>
<li><code>lookup(String name)</code>: 查找并返回指定名称的远程对象引用。</li>
</ul>
<h4>RMISecurityManager</h4>
<ul>
<li><code>RMISecurityManager</code> 是用于 RMI 调用的安全管理器，负责检查权限。</li>
</ul>
<h3>学习总结</h3>
<h4>创建远程对象</h4>
<ol>
<li>定义一个远程接口，该接口扩展 <code>Remote</code> 并声明要远程调用的方法。</li>
<li>实现该接口，并在实现类中扩展 <code>UnicastRemoteObject</code>。</li>
<li>通过 <code>exportObject</code> 方法导出远程对象。</li>
</ol>
<h4>注册远程对象</h4>
<ol>
<li>启动 RMI 注册表服务。</li>
<li>使用 <code>Naming</code> 类的 <code>bind</code> 方法将远程对象绑定到注册表中。</li>
</ol>
<h4>访问远程对象</h4>
<ol>
<li>使用 <code>Naming</code> 类的 <code>lookup</code> 方法从注册表中获取远程对象的引用。</li>
<li>调用远程对象的方法，就像调用本地对象一样。</li>
</ol>
<h4>注意事项</h4>
<ul>
<li><strong>序列化</strong>: 远程对象及其参数和返回值必须实现 <code>Serializable</code> 接口。</li>
<li><strong>异常处理</strong>: 所有远程方法都必须声明抛出 <code>RemoteException</code>。</li>
<li><strong>安全性</strong>: RMI 调用可能会跨越不同的安全域，因此需要考虑安全性和权限管理。</li>
<li><strong>网络</strong>: RMI 调用依赖于网络，因此网络配置和防火墙设置可能会影响 RMI 的使用。</li>
</ul>
<h4>RMI 的局限性</h4>
<ul>
<li>RMI 仅限于 Java 环境，不支持跨语言调用。</li>
<li>性能可能不如其他 RPC 框架，如 gRPC 或 Apache Thrift。</li>
<li>配置较为复杂，尤其是在涉及安全性和网络问题时。</li>
</ul>
<h2><code>java.rmi.activation</code></h2>
<p>提供对 RMI 对象激活的支持。</p>
<h2><code>java.rmi.dgc</code></h2>
<p>为 RMI 分布式垃圾回收 （DGC） 提供类和接口。</p>
<h2><code>java.rmi.registry</code></h2>
<p>为 RMI 注册表提供一个类和两个接口。</p>
<h2><code>java.rmi.server</code></h2>
<p>提供用于支持 RMI 服务器端的类和接口。</p>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - API - 「java.security」</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjava.security%E3%80%8D.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjava.security%E3%80%8D.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - API - 「java.security」</source>
      <description>文章摘要： Java 平台提供的一个用于安全性和加密操作的包。 介绍 简要说明 Java 平台提供的一个用于安全性和加密操作的包。 包含了多种类和接口，用于实现加密、密钥管理、认证、安全随机数生成等功能。 主要功能 加密和解密：提供多种加密算法（如 AES、DES、RSA 等）的实现，用于数据的加密和解密。 密钥生成和管理：支持生成、存储、检索和管理密...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Tue, 24 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Java 平台提供的一个用于安全性和加密操作的包。</p>
<!-- more -->
<h2>介绍</h2>
<p>简要说明</p>
<ul>
<li>Java 平台提供的一个用于安全性和加密操作的包。</li>
<li>包含了多种类和接口，用于实现加密、密钥管理、认证、安全随机数生成等功能。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>加密和解密</strong>：提供多种加密算法（如 AES、DES、RSA 等）的实现，用于数据的加密和解密。</li>
<li><strong>密钥生成和管理</strong>：支持生成、存储、检索和管理密钥，包括对称密钥和非对称密钥。</li>
<li><strong>数字签名</strong>：提供数字签名算法（如 SHA-256、MD5 等）的实现，用于验证数据的完整性和来源。</li>
<li><strong>安全认证</strong>：支持基于证书的安全认证机制，如使用公钥证书进行身份验证。</li>
<li><strong>安全随机数生成</strong>：提供生成安全随机数的工具，用于加密和其他需要随机数的场景。</li>
<li><strong>安全权限和策略</strong>：定义了权限和策略框架，用于控制对资源的访问。</li>
<li><strong>安全通信</strong>：支持安全套接字（SSL/TLS）协议，用于在网络上进行安全的数据传输。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>算法选择</strong>：不同的加密算法适用于不同的场景，需要根据具体需求选择合适的算法。</li>
<li><strong>密钥管理</strong>：密钥的安全存储和管理非常重要，不当的处理可能导致密钥泄露。</li>
<li><strong>性能影响</strong>：安全操作通常比非安全操作更消耗资源，需要考虑对性能的影响。</li>
<li><strong>合规性</strong>：在某些行业或地区，使用加密技术可能需要遵守特定的法律和标准。</li>
<li><strong>错误处理</strong>：安全相关的操作可能会抛出异常，需要妥善处理这些异常。</li>
<li><strong>更新和维护</strong>：安全相关的库和算法需要定期更新以应对新的安全威胁。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>数据加密</strong>：在需要对敏感数据进行加密的场景，如数据库加密、文件加密等。</li>
<li><strong>安全认证</strong>：在需要用户身份验证的场景，如Web应用登录、API访问控制等。</li>
<li><strong>数字签名</strong>：在需要确保数据完整性和来源的场景，如电子合同、软件发布等。</li>
<li><strong>网络通信</strong>：在需要保证网络通信安全的场景，如网上银行、电子商务等。</li>
<li><strong>密钥交换</strong>：在需要安全交换密钥的场景，如安全通信协议的初始化阶段。</li>
</ul>
<h3>主要概念</h3>
<h4>密钥（Keys）</h4>
<ul>
<li>密钥是加密算法中的一个重要组成部分，用于加密和解密数据。</li>
</ul>
<h4>加密算法（Cipher）</h4>
<ul>
<li>加密算法用于将数据转换成不可读的形式（加密）以及从这种形式转换回原始数据（解密）。</li>
</ul>
<h4>密钥生成器（KeyGenerator）</h4>
<ul>
<li>密钥生成器用于生成密钥。</li>
</ul>
<h4>安全随机数生成器（SecureRandom）</h4>
<ul>
<li>安全随机数生成器用于生成加密强随机数。</li>
</ul>
<h4>签名（Signature）</h4>
<ul>
<li>签名用于验证数据的完整性和来源。</li>
</ul>
<h4>密码（Password）</h4>
<ul>
<li>密码用于保护数据的访问。</li>
</ul>
<h4>认证（Authentication）</h4>
<ul>
<li>认证用于验证用户的身份。</li>
</ul>
<h3>主要类和接口</h3>
<ul>
<li><code>Key</code> 是所有密钥的顶层接口。</li>
<li><code>KeyPair</code> 类用于存储公钥和私钥。</li>
<li><code>KeyPairGenerator</code> 用于生成公钥和私钥对。</li>
<li><code>Cipher</code> 类用于执行加密和解密操作。</li>
<li><code>KeyGenerator</code> 用于生成对称密钥。</li>
<li><code>SecureRandom</code> 用于生成加密强随机数。</li>
<li><code>Signature</code> 类用于生成和验证数字签名。</li>
<li><code>MessageDigest</code> 类用于为数据生成消息摘要（散列）。</li>
<li><code>KeyStore</code> 用于存储密钥和证书。</li>
<li><code>Provider</code> 是加密服务的提供者，如 Sun, Bouncy Castle 等。</li>
<li><code>Security</code> 类用于管理提供者和服务。</li>
</ul>
<h3>学习总结</h3>
<h4>密钥生成</h4>
<ul>
<li>使用 <code>KeyPairGenerator</code> 生成非对称密钥对。</li>
<li>使用 <code>KeyGenerator</code> 生成对称密钥。</li>
</ul>
<h4>加密和解密</h4>
<ul>
<li>使用 <code>Cipher</code> 类进行加密和解密操作。</li>
<li>选择合适的加密算法（如 AES, RSA）。</li>
<li>初始化 <code>Cipher</code> 实例，指定加密模式（如 ECB, CBC）。</li>
</ul>
<h4>签名和验证</h4>
<ul>
<li>使用 <code>Signature</code> 类生成和验证数字签名。</li>
<li>通常使用私钥进行签名，公钥进行验证。</li>
</ul>
<h4>消息摘要</h4>
<ul>
<li>使用 <code>MessageDigest</code> 类生成数据的散列值。</li>
</ul>
<h4>密钥存储</h4>
<ul>
<li>使用 <code>KeyStore</code> 类来加载、存储和管理密钥和证书。</li>
</ul>
<h4>安全随机数</h4>
<ul>
<li>使用 <code>SecureRandom</code> 类生成安全的随机数，用于密钥生成等操作。</li>
</ul>
<h4>安全提供者</h4>
<ul>
<li>使用 <code>Security</code> 类来添加或删除安全提供者。</li>
<li>使用 <code>Provider</code> 类来获取特定的加密服务。</li>
</ul>
<h4>异常处理</h4>
<ul>
<li><code>java.security</code> 包中的操作可能会抛出多种异常，如 <code>NoSuchAlgorithmException</code>, <code>InvalidKeyException</code>, <code>SignatureException</code> 等。</li>
</ul>
<h4>注意事项</h4>
<ul>
<li>安全操作需要仔细处理，以确保密钥和数据的机密性。</li>
<li>加密算法和密钥长度应选择适当，以抵御各种攻击。</li>
<li>安全配置（如密钥长度、算法选择）可能受到法律和政策的限制。</li>
</ul>
<h2><code>java.security.acl</code></h2>
<p>此软件包中的类和接口已被 java.security 软件包中的类取代。</p>
<h2><code>java.security.cert</code></h2>
<p>提供用于解析和管理证书、证书吊销列表 （CRL） 和证书路径的类和接口。</p>
<h2><code>java.security.interfaces</code></h2>
<p>提供用于生成 RSA 实验室技术说明 PKCS#1 中定义的 RSA（Rivest、Shamir 和 Adleman 非对称密码算法）密钥和 NIST FIPS-186 中定义的 DSA（数字签名算法）密钥的接口。</p>
<h2><code>java.security.spec</code></h2>
<p>提供关键规范和算法参数规范的类和接口。</p>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - API - 「javax.accessibility」</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjavax.accessibility%E3%80%8D.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjavax.accessibility%E3%80%8D.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - API - 「javax.accessibility」</source>
      <description>文章摘要： 提供了一系列接口和类，用于使 Java 应用程序可访问。 介绍 简要说明 提供了一系列接口和类，用于使 Java 应用程序可访问。 使得辅助技术（如屏幕阅读器、屏幕放大器等）能够与 Java 应用程序交互，从而为残障用户提供了更好的支持。 主要功能 可访问性接口：定义了 Accessible 接口及其子接口，如 AccessibleCont...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Tue, 24 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 提供了一系列接口和类，用于使 Java 应用程序可访问。</p>
<!-- more -->
<h2>介绍</h2>
<p>简要说明</p>
<ul>
<li>提供了一系列接口和类，用于使 Java 应用程序可访问。</li>
<li>使得辅助技术（如屏幕阅读器、屏幕放大器等）能够与 Java 应用程序交互，从而为残障用户提供了更好的支持。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>可访问性接口</strong>：定义了 <code>Accessible</code> 接口及其子接口，如 <code>AccessibleContext</code>、<code>AccessibleComponent</code>、<code>AccessibleSelection</code> 等，用于提供组件的属性、状态和事件信息。</li>
<li><strong>可访问性事件</strong>：提供了 <code>AccessibleEvent</code> 和其子类，用于通知辅助技术应用程序组件的可访问性属性发生变化。</li>
<li><strong>可访问性属性</strong>：允许辅助技术查询和修改组件的可访问性属性。</li>
<li><strong>可访问性层次结构</strong>：提供了 <code>Accessible</code> 接口的实现，使得组件的层次结构可以被辅助技术遍历。</li>
<li><strong>可访问性包装器</strong>：提供了 <code>AccessibleRelationSet</code>、<code>AccessibleRole</code>、<code>AccessibleStateSet</code> 等类，用于描述组件之间的关系、角色和状态。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>实现可访问性接口</strong>：开发自定义组件时，应当实现相应的可访问性接口，以确保辅助技术能够与之交互。</li>
<li><strong>事件处理</strong>：在组件状态发生变化时，需要正确地触发可访问性事件。</li>
<li><strong>属性设置</strong>：确保组件的可访问性属性设置正确，以便辅助技术能够正确地解释和使用这些信息。</li>
<li><strong>国际化</strong>：考虑到不同地区的辅助技术可能有所不同，应确保可访问性信息的国际化。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>开发可访问性应用程序</strong>：当开发的应用程序需要支持残障用户时，使用 <code>javax.accessibility</code> 包可以提供必要的可访问性支持。</li>
<li><strong>自定义组件开发</strong>：在开发自定义 Swing 或 AWT 组件时，实现可访问性接口可以使这些组件对辅助技术友好。</li>
<li><strong>企业级应用</strong>：在开发大型企业级应用程序时，确保所有用户都能访问应用的功能是重要的，特别是对于遵循法规要求的应用程序。</li>
</ul>
<h3>主要概念</h3>
<h4>可访问性</h4>
<ul>
<li>可访问性指的是软件的设计和实现允许残疾人士使用，例如视力障碍、听力障碍或行动障碍的用户。</li>
</ul>
<h4>可访问的组件</h4>
<ul>
<li>可访问的组件是指实现了特定可访问性接口的 GUI 组件。</li>
</ul>
<h4>可访问性事件</h4>
<ul>
<li>当可访问的组件状态改变时，会触发可访问性事件，这些事件可以被辅助技术（如屏幕阅读器）监听和处理。</li>
</ul>
<h3>主要接口和类</h3>
<h4>可访问性接口</h4>
<ul>
<li><code>Accessible</code></li>
<li><code>AccessibleAction</code></li>
<li><code>AccessibleComponent</code></li>
<li><code>AccessibleContext</code></li>
<li><code>AccessibleSelection</code></li>
<li><code>AccessibleText</code></li>
<li><code>AccessibleValue</code></li>
</ul>
<h4>辅助技术</h4>
<ul>
<li><code>AccessibleRelationSet</code></li>
<li><code>AccessibleStateSet</code></li>
<li><code>AccessibleTableModelChange</code></li>
</ul>
<h4>可访问性事件</h4>
<ul>
<li><code>AccessibleEvent</code></li>
<li><code>AccessibleAttributeChangedEvent</code></li>
<li><code>AccessibleCaretEvent</code></li>
<li><code>AccessibleComponentEvent</code></li>
<li><code>AccessibleSelectionEvent</code></li>
<li><code>AccessibleTableModelEvent</code></li>
<li><code>AccessibleTextEvent</code></li>
<li><code>AccessibleValueEvent</code></li>
</ul>
<h3>学习总结</h3>
<h4>Accessible 接口</h4>
<ul>
<li><code>Accessible</code> 接口是所有可访问性接口的根，它定义了获取 <code>AccessibleContext</code> 的方法。</li>
</ul>
<h4>AccessibleContext 类</h4>
<ul>
<li><code>AccessibleContext</code> 类包含了大多数可访问性支持，是所有可访问组件的核心。</li>
<li>它提供了对组件的描述、名称、角色和状态的信息。</li>
<li>它还提供了对组件的子组件的访问，以及组件的属性和关系。</li>
</ul>
<h4>AccessibleComponent 接口</h4>
<ul>
<li><code>AccessibleComponent</code> 接口定义了组件的图形表示，包括位置、大小、前景色和背景色等。</li>
</ul>
<h4>AccessibleSelection 接口</h4>
<ul>
<li><code>AccessibleSelection</code> 接口用于管理和查询组件中的选中项。</li>
</ul>
<h4>AccessibleText 接口</h4>
<ul>
<li><code>AccessibleText</code> 接口提供了对文本组件内容的访问，包括字符、字、行和段落的操作。</li>
</ul>
<h4>AccessibleValue 接口</h4>
<ul>
<li><code>AccessibleValue</code> 接口用于获取和设置组件的数值，如滑块的位置。</li>
</ul>
<h4>辅助技术支持</h4>
<ul>
<li><code>AccessibleRelationSet</code> 和 <code>AccessibleStateSet</code> 用于描述组件之间的关系和状态。</li>
<li><code>AccessibleTableModelChange</code> 用于表示表格模型的变化。</li>
</ul>
<h4>可访问性事件</h4>
<ul>
<li>可访问性事件被用来通知辅助技术有关组件状态的变化。</li>
<li>事件类型包括属性变化、光标位置变化、组件事件、选择事件、表格模型事件、文本事件和值事件。</li>
</ul>
<h4>注意事项</h4>
<ul>
<li>要使组件可访问，它们必须实现相应的 <code>Accessible</code> 接口。</li>
<li>开发者应该确保所有自定义组件都正确实现了可访问性接口。</li>
<li>可访问性属性和事件的处理对于创建无障碍应用程序至关重要。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - API - 「javax.activation」</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjavax.activation%E3%80%8D.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjavax.activation%E3%80%8D.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - API - 「javax.activation」</source>
      <description>文章摘要： 提供了一套用于处理 MIME 数据类型的 API。 警告 javax.activation 在 Java 6 之后被包含在 Java SE 中，但在 Java 9 之后，该包的部分内容被移至 Java Activation Framework (JAF) 中，因此在使用时需要注意版本兼容性问题。 介绍 简要说明 提供了一套用于处理 MIME...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Tue, 24 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 提供了一套用于处理 MIME 数据类型的 API。</p>
<!-- more -->
<div class="hint-container warning">
<p class="hint-container-title">警告</p>
<ul>
<li><code>javax.activation</code> 在 Java 6 之后被包含在 Java SE 中，但在 Java 9 之后，该包的部分内容被移至 Java Activation Framework (JAF) 中，因此在使用时需要注意版本兼容性问题。</li>
</ul>
</div>
<h2>介绍</h2>
<p>简要说明</p>
<ul>
<li>提供了一套用于处理 MIME 数据类型的 API。</li>
<li>使得 Java 应用程序能够识别和处理不同类型的数据，如电子邮件附件、文件等。它主要包括数据类型识别、数据源处理和数据操作等功能。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>数据类型识别</strong>：<code>javax.activation</code> 提供了 <code>MimeType</code> 和 <code>MimeTypeParameterList</code> 类，用于解析和操作 MIME 类型字符串。</li>
<li><strong>数据源处理</strong>：<code>DataSource</code> 接口用于表示数据源，可以是从文件、URL 或其他数据流中获取的数据。</li>
<li><strong>命令映射</strong>：允许应用程序根据 MIME 类型注册处理命令，例如打开、编辑或查看特定类型的数据。</li>
<li><strong>数据操作</strong>：提供了 <code>CommandInfo</code> 和 <code>DataHandler</code> 类，用于执行与数据源相关的操作，如转换数据格式或处理数据流。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>兼容性</strong>：<code>javax.activation</code> 在 Java 6 之后被包含在 Java SE 中，但在 Java 9 之后，该包的部分内容被移至 Java Activation Framework (JAF) 中，因此在使用时需要注意版本兼容性问题。</li>
<li><strong>安全</strong>：处理来自外部源的数据时，需要考虑安全性和数据验证，以防止恶意数据操作。</li>
<li><strong>性能</strong>：处理大型数据或复杂的数据类型时，要注意性能影响。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>电子邮件处理</strong>：在处理电子邮件附件时，<code>javax.activation</code> 可以帮助识别附件类型，并决定如何处理它们。</li>
<li><strong>文件操作</strong>：在需要根据文件类型执行不同操作的应用程序中，如文件查看器或编辑器。</li>
<li><strong>Web 应用</strong>：在 Web 应用程序中处理上传的文件时，可以使用 <code>javax.activation</code> 来识别和处理不同类型的文件。</li>
<li><strong>企业应用集成</strong>：在企业应用集成（EAI）中，处理不同系统间的数据交换时，<code>javax.activation</code> 可以帮助识别和处理数据类型。</li>
</ul>
<h3>主要概念</h3>
<h4>MIME 类型</h4>
<ul>
<li>MIME (Multipurpose Internet Mail Extensions) 类型是一种标准，用于标识文件或数据流的类型和格式。</li>
</ul>
<h4>数据 handlers</h4>
<ul>
<li>数据 handlers 是用于解释和处理特定 MIME 类型的对象。</li>
</ul>
<h4>数据字典</h4>
<ul>
<li>数据字典用于存储和检索与 MIME 类型相关的属性。</li>
</ul>
<h3>主要接口和类</h3>
<h4>接口</h4>
<ul>
<li><code>CommandInfo</code></li>
<li><code>DataContentHandler</code></li>
<li><code>DataSource</code></li>
<li><code>FileTypeMap</code></li>
<li><code>MimeTypeParameterList</code></li>
<li><code>MimeType</code></li>
</ul>
<h4>类</h4>
<ul>
<li><code>CommandMap</code></li>
<li><code>DataHandler</code></li>
<li><code>FileDataSource</code></li>
<li><code>MailcapCommandMap</code></li>
<li><code>MimeTypeFactory</code></li>
<li><code>MimetypesFileTypeMap</code></li>
<li><code>URLDataSource</code></li>
</ul>
<h3>学习总结</h3>
<h4>DataSource 接口</h4>
<ul>
<li><code>DataSource</code> 是一个抽象接口，用于表示数据源，通常用于读取和写入数据。</li>
<li>它提供了获取输入流和输出流的方法，以及获取数据源的 MIME 类型和名称。</li>
</ul>
<h4>DataHandler 类</h4>
<ul>
<li><code>DataHandler</code> 是 <code>DataSource</code> 的一个实现，它增加了对数据处理的额外支持。</li>
<li>它可以与数据内容处理器 (<code>DataContentHandler</code>) 一起使用，以处理特定类型的数据。</li>
<li><code>DataHandler</code> 用于包装数据，并可以在不同的 MIME 类型之间转换数据。</li>
</ul>
<h4>FileTypeMap 类</h4>
<ul>
<li><code>FileTypeMap</code> 用于映射文件扩展名到 MIME 类型。</li>
<li><code>MimetypesFileTypeMap</code> 是 <code>FileTypeMap</code> 的一个实现，它使用 MIME 类型映射文件。</li>
</ul>
<h4>CommandMap 类</h4>
<ul>
<li><code>CommandMap</code> 用于映射 MIME 类型到命令（如查看器或编辑器）。</li>
<li><code>MailcapCommandMap</code> 是 <code>CommandMap</code> 的一个实现，它使用 mailcap 文件来查找 MIME 类型的处理程序。</li>
</ul>
<h4>MIME 类型处理</h4>
<ul>
<li><code>MimeType</code> 和 <code>MimeTypeParameterList</code> 用于解析和处理 MIME 类型字符串。</li>
</ul>
<h4>使用 DataHandler</h4>
<ul>
<li>创建 <code>DataHandler</code> 对象通常需要 <code>DataSource</code> 对象。</li>
<li>可以使用 <code>DataHandler</code> 来获取数据的输入流或输出流。</li>
<li>可以使用 <code>DataHandler</code> 来处理不同类型的数据，例如将数据转换为文本或图像。</li>
</ul>
<h4>注意事项</h4>
<ul>
<li>在处理 MIME 数据时，确保正确设置了 MIME 类型，这对于数据的正确处理至关重要。</li>
<li>当使用 <code>DataHandler</code> 时，了解如何使用 <code>DataContentHandler</code> 来处理特定类型的数据是很重要的。</li>
<li><code>javax.activation</code> 包在 Java 9 被废弃，并在 Java 11 中被移除。对于新的开发，建议使用更新的 API 或第三方库。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - API - 「javax.activity」</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjavax.activity%E3%80%8D.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjavax.activity%E3%80%8D.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - API - 「javax.activity」</source>
      <description>文章摘要： 摘要内容。 警告 （已废弃）从 Java EE 6 开始，javax.activity 包已经被废弃，其功能被整合到 javax.transaction 包中。 介绍 简要说明 提供了对事务上下文的管理，使得事务能够在不同的 Java 组件之间传播。 主要包含了与事务处理相关的接口和类，用于支持分布式事务。 主要功能 事务上下文管理：提供 ...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Tue, 24 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<div class="hint-container warning">
<p class="hint-container-title">警告</p>
<ul>
<li>（已废弃）从 Java EE 6 开始，<code>javax.activity</code> 包已经被废弃，其功能被整合到 <code>javax.transaction</code> 包中。</li>
</ul>
</div>
<h2>介绍</h2>
<p>简要说明</p>
<ul>
<li>提供了对事务上下文的管理，使得事务能够在不同的 Java 组件之间传播。</li>
<li>主要包含了与事务处理相关的接口和类，用于支持分布式事务。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>事务上下文管理</strong>：提供 <code>ActivityContext</code> 接口，用于管理事务的上下文信息。</li>
<li><strong>事务同步</strong>：<code>ActivitySession</code> 接口允许组件参与到事务同步中。</li>
<li><strong>事务终结</strong>：<code>ActivityCompletedException</code> 和 <code>ActivityRequiredException</code> 用于处理事务完成或事务需求未被满足的情况。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>已被废弃</strong>：从 Java EE 6 开始，<code>javax.activity</code> 包已经被废弃，其功能被整合到 <code>javax.transaction</code> 包中。因此，在新的应用程序中，应该使用 <code>javax.transaction</code> 包中的类和接口。</li>
<li><strong>兼容性</strong>：如果正在维护旧版本的 Java EE 应用程序，可能需要使用 <code>javax.activity</code> 包，但应考虑升级和迁移到新的 API。</li>
<li><strong>分布式事务</strong>：使用 <code>javax.activity</code> 需要确保分布式系统中的所有组件都支持相同的事务管理标准。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>分布式事务管理</strong>：在需要跨多个资源（如数据库、消息队列等）管理事务的分布式系统中，<code>javax.activity</code> 可用于确保事务的一致性和完整性。</li>
<li><strong>旧版 Java EE 应用</strong>：在维护和更新使用 Java EE 5 或更早版本的应用程序时，可能会遇到 <code>javax.activity</code> 的使用。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - API - 「javax.annotation」</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjavax.annotation%E3%80%8D.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjavax.annotation%E3%80%8D.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - API - 「javax.annotation」</source>
      <description>文章摘要： 提供了一系列元注解（meta-annotations）。 介绍 简要说明 提供了一系列元注解（meta-annotations）。 这些注解用于标注代码，以便于在运行时或编译时提供额外的信息或行为。 这些注解通常用于声明资源的依赖、安全约束、事务属性等。 主要功能 资源管理：例如 @Resource 注解用于注入外部资源，如数据库连接或 J...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Tue, 24 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 提供了一系列元注解（meta-annotations）。</p>
<!-- more -->
<h2>介绍</h2>
<p>简要说明</p>
<ul>
<li>提供了一系列元注解（meta-annotations）。</li>
<li>这些注解用于标注代码，以便于在运行时或编译时提供额外的信息或行为。</li>
<li>这些注解通常用于声明资源的依赖、安全约束、事务属性等。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>资源管理</strong>：例如 <code>@Resource</code> 注解用于注入外部资源，如数据库连接或 JMS 队列。</li>
<li><strong>事务管理</strong>：<code>@Transactional</code> 注解用于声明方法或类的事务属性。</li>
<li><strong>安全性</strong>：如 <code>@RolesAllowed</code> 注解用于声明访问控制，指定哪些角色可以访问被注解的方法或类。</li>
<li><strong>依赖注入</strong>：<code>@PostConstruct</code> 和 <code>@PreDestroy</code> 注解用于声明初始化和销毁回调方法。</li>
<li><strong>其他</strong>：包括 <code>@Generated</code>（标记自动生成的代码）、<code>@Priority</code>（定义注解的优先级）等。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>不包含在 Java SE</strong>：<code>javax.annotation</code> 包是 Java EE 的一部分，不是 Java SE 的标准库。在纯 Java SE 环境中使用时，可能需要额外添加依赖。</li>
<li><strong>替代方案</strong>：随着 Java 的演变，一些注解已经有了替代方案，例如在 Spring 框架中，<code>@Resource</code> 可以被 <code>@Autowired</code> 替代。</li>
<li><strong>版本兼容性</strong>：不同的 Java EE 版本可能包含不同版本的 <code>javax.annotation</code>，需要注意兼容性问题。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>Java EE 应用</strong>：在 Java EE 环境（如 GlassFish、WildFly 等）中，<code>javax.annotation</code> 中的注解用于声明企业级特性。</li>
<li><strong>Spring 应用</strong>：尽管 Spring 提供了自己的注解，但它也支持 <code>javax.annotation</code> 中的某些注解，尤其是在集成 Java EE 和 Spring 的应用中。</li>
<li><strong>代码生成</strong>：<code>@Generated</code> 注解用于标记由工具或框架自动生成的代码，有助于开发者识别和维护代码。</li>
</ul>
<h3>主要注解</h3>
<h4>2.1 @Generated</h4>
<ul>
<li>用于标记由工具、生成器或其他自动化手段生成的代码。</li>
</ul>
<h4>2.2 @PostConstruct</h4>
<ul>
<li>标记一个初始化方法，该方法在依赖注入完成后将被调用，用于执行任何必要的初始化。</li>
</ul>
<h4>2.3 @PreDestroy</h4>
<ul>
<li>标记一个销毁方法，该方法在容器关闭之前被调用，用于执行清理操作。</li>
</ul>
<h4>2.4 @Resource</h4>
<ul>
<li>用于自动注入资源，如数据源、JMS 队列等。</li>
</ul>
<h4>2.5 @Resources</h4>
<ul>
<li>用于自动注入多个资源。</li>
</ul>
<h4>2.6 @Singleton</h4>
<ul>
<li>表示一个类应该被视为单例，通常用于 EJB 中。</li>
</ul>
<h4>2.7 @RolesAllowed</h4>
<ul>
<li>用于声明哪些安全角色可以访问被注解的方法或类。</li>
</ul>
<h4>2.8 @RunAs</h4>
<ul>
<li>用于指定一个安全角色，用于执行被注解的类。</li>
</ul>
<h4>2.9 @PermitAll</h4>
<ul>
<li>允许所有角色访问被注解的方法或类。</li>
</ul>
<h4>2.10 @DenyAll</h4>
<ul>
<li>禁止所有角色访问被注解的方法或类。</li>
</ul>
<h4>2.11 @DeclareRoles</h4>
<ul>
<li>用于声明应用程序定义的安全角色。</li>
</ul>
<h4>2.12 @ManagedObject</h4>
<ul>
<li>标记一个类作为受管理对象，通常用于 JMX。</li>
</ul>
<h4>2.13 @Priority</h4>
<ul>
<li>用于指定注解类型的优先级。</li>
</ul>
<h3>使用场景</h3>
<ul>
<li>使用 <code>@PostConstruct</code> 和 <code>@PreDestroy</code> 注解进行生命周期管理。</li>
<li>使用 <code>@Resource</code> 注解进行依赖注入。</li>
<li>使用 <code>@RolesAllowed</code> 等安全注解进行方法级别的安全控制。</li>
<li>使用 <code>@Generated</code> 标记自动生成的代码，以便开发者知道哪些代码是自动生成的。</li>
</ul>
<h3>示例代码</h3>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">javax<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span></span><span class="token class-name">PostConstruct</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">javax<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span></span><span class="token class-name">PreDestroy</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">javax<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span></span><span class="token class-name">Resource</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">javax<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span>security<span class="token punctuation">.</span></span><span class="token class-name">RolesAllowed</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">AnnotationExample</span> <span class="token punctuation">{</span></span>
<span class="line"></span>
<span class="line">    <span class="token annotation punctuation">@Resource</span><span class="token punctuation">(</span>name <span class="token operator">=</span> <span class="token string">"dataSource"</span><span class="token punctuation">)</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name"><span class="token namespace">javax<span class="token punctuation">.</span>sql<span class="token punctuation">.</span></span>DataSource</span> dataSource<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token annotation punctuation">@PostConstruct</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">init</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 初始化方法，在依赖注入完成后被调用</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token annotation punctuation">@PreDestroy</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">cleanup</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 清理方法，在容器关闭之前被调用</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token annotation punctuation">@RolesAllowed</span><span class="token punctuation">(</span><span class="token string">"admin"</span><span class="token punctuation">)</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">secureMethod</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 只有具有 "admin" 角色的用户可以访问此方法</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>总结</h3>
<p><code>javax.annotation</code> 包提供了丰富的注解，用于代码的元数据标记，有助于实现依赖注入、生命周期管理、安全控制等功能。这些注解是 Java 企业版开发的重要组成部分，理解并正确使用它们对于编写清晰、可维护的企业级应用程序至关重要。随着 Java 的演进，一些注解可能被新的 API 或规范所取代，因此开发者应关注最新的 Java 规范更新。</p>
<h2><code>javax.annotation.processing</code></h2>
<p>用于声明注释处理器和允许注释处理器与注释处理工具环境通信的工具。</p>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - API - 「javax.crypto」</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjavax.crypto%E3%80%8D.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjavax.crypto%E3%80%8D.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - API - 「javax.crypto」</source>
      <description>文章摘要： 提供了用于加密和解密的类和接口。 介绍 简要说明 提供了用于加密和解密的类和接口。 支持多种加密标准，包括对称加密（如 AES、DES）、非对称加密（如 RSA）、消息摘要（如 MD5、SHA）以及密钥生成和管理等功能。 主要功能 对称加密：支持常用的对称加密算法，如 AES、DES、DESede（Triple DES）等。 非对称加密：支...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Tue, 24 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 提供了用于加密和解密的类和接口。</p>
<!-- more -->
<h2>介绍</h2>
<p>简要说明</p>
<ul>
<li>提供了用于加密和解密的类和接口。</li>
<li>支持多种加密标准，包括对称加密（如 AES、DES）、非对称加密（如 RSA）、消息摘要（如 MD5、SHA）以及密钥生成和管理等功能。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>对称加密</strong>：支持常用的对称加密算法，如 AES、DES、DESede（Triple DES）等。</li>
<li><strong>非对称加密</strong>：支持非对称加密算法，如 RSA。</li>
<li><strong>密钥生成</strong>：提供密钥生成器（KeyGenerator）和密钥对生成器（KeyPairGenerator）用于生成密钥。</li>
<li><strong>密钥协商</strong>：支持密钥协商协议，如 Diffie-Hellman。</li>
<li><strong>密钥管理</strong>：提供密钥库（KeyStore）和密钥规范（KeySpec）等类来管理密钥。</li>
<li><strong>加密模式</strong>：支持不同的加密模式，如 ECB、CBC、CFB、OFB 等。</li>
<li><strong>填充模式</strong>：支持不同的填充模式，如 NoPadding、PKCS5Padding 等。</li>
<li><strong>消息摘要</strong>：虽然消息摘要主要在 <code>java.security.MessageDigest</code> 中，但 <code>javax.crypto</code> 也支持与加密相关的摘要操作。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>安全性</strong>：加密算法和实现的选择对安全性至关重要。应避免使用不再安全的算法（如 MD5、SHA-1）。</li>
<li><strong>密钥管理</strong>：密钥的安全管理是加密过程中的关键部分，需要妥善处理密钥的生成、存储、传输和销毁。</li>
<li><strong>性能</strong>：加密操作可能非常耗时，尤其是在处理大量数据时，应考虑性能影响。</li>
<li><strong>兼容性</strong>：不同的 Java 版本和不同的 JCA（Java Cryptography Architecture）提供者可能支持不同的加密算法和功能。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>数据加密</strong>：在需要保护数据隐私的场景中，如网络通信、数据存储等。</li>
<li><strong>安全认证</strong>：在需要验证数据完整性和来源的场景中，可以使用加密算法生成摘要或签名。</li>
<li><strong>密钥交换</strong>：在需要安全交换密钥的场景中，如 SSL/TLS 协议中。</li>
<li><strong>安全协议实现</strong>：在实现基于加密的安全协议时，如 HTTPS、VPN 等。</li>
</ul>
<h3>主要类和接口</h3>
<h4>2.1 Cipher类</h4>
<ul>
<li>用于加密和解密数据。</li>
<li>支持多种加密模式，如 ECB、CBC、CFB、OFB 等。</li>
<li>支持多种填充模式，如 NoPadding、PKCS5Padding 等。</li>
</ul>
<h4>2.2 KeyGenerator类</h4>
<ul>
<li>用于生成对称密钥。</li>
</ul>
<h4>2.3 KeyAgreement类</h4>
<ul>
<li>用于密钥协商，如 Diffie-Hellman 密钥交换。</li>
</ul>
<h4>2.4 SecretKey类</h4>
<ul>
<li>表示对称密钥。</li>
</ul>
<h4>2.5 KeyPair类</h4>
<ul>
<li>用于非对称加密的公钥和私钥对。</li>
</ul>
<h4>2.6 KeyPairGenerator类</h4>
<ul>
<li>用于生成非对称密钥对。</li>
</ul>
<h4>2.7 Mac类</h4>
<ul>
<li>提供消息认证码（MAC）功能。</li>
</ul>
<h4>2.8 SealedObject类</h4>
<ul>
<li>用于封装加密的对象，以便安全传输。</li>
</ul>
<h4>2.9 CipherInputStream和CipherOutputStream类</h4>
<ul>
<li>用于加密和解密数据流。</li>
</ul>
<h3>3. 使用场景</h3>
<ul>
<li>加密敏感数据，如用户密码、信用卡信息等。</li>
<li>实现安全的通信通道，如 SSL/TLS。</li>
<li>生成和验证数字签名。</li>
<li>实现基于密钥的安全认证。</li>
</ul>
<h3>示例代码</h3>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">javax<span class="token punctuation">.</span>crypto<span class="token punctuation">.</span></span><span class="token class-name">Cipher</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">javax<span class="token punctuation">.</span>crypto<span class="token punctuation">.</span></span><span class="token class-name">KeyGenerator</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">javax<span class="token punctuation">.</span>crypto<span class="token punctuation">.</span></span><span class="token class-name">SecretKey</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">javax<span class="token punctuation">.</span>crypto<span class="token punctuation">.</span>spec<span class="token punctuation">.</span></span><span class="token class-name">SecretKeySpec</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">CryptoExample</span> <span class="token punctuation">{</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">Exception</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 生成 AES 密钥</span></span>
<span class="line">        <span class="token class-name">KeyGenerator</span> keyGenerator <span class="token operator">=</span> <span class="token class-name">KeyGenerator</span><span class="token punctuation">.</span><span class="token function">getInstance</span><span class="token punctuation">(</span><span class="token string">"AES"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        keyGenerator<span class="token punctuation">.</span><span class="token function">init</span><span class="token punctuation">(</span><span class="token number">128</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token class-name">SecretKey</span> secretKey <span class="token operator">=</span> keyGenerator<span class="token punctuation">.</span><span class="token function">generateKey</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        </span>
<span class="line">        <span class="token comment">// 转换为字节数组</span></span>
<span class="line">        <span class="token keyword">byte</span><span class="token punctuation">[</span><span class="token punctuation">]</span> keyBytes <span class="token operator">=</span> secretKey<span class="token punctuation">.</span><span class="token function">getEncoded</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token class-name">SecretKeySpec</span> secretKeySpec <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">SecretKeySpec</span><span class="token punctuation">(</span>keyBytes<span class="token punctuation">,</span> <span class="token string">"AES"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 创建 Cipher 实例并初始化为加密模式</span></span>
<span class="line">        <span class="token class-name">Cipher</span> cipher <span class="token operator">=</span> <span class="token class-name">Cipher</span><span class="token punctuation">.</span><span class="token function">getInstance</span><span class="token punctuation">(</span><span class="token string">"AES/ECB/PKCS5Padding"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        cipher<span class="token punctuation">.</span><span class="token function">init</span><span class="token punctuation">(</span><span class="token class-name">Cipher</span><span class="token punctuation">.</span><span class="token constant">ENCRYPT_MODE</span><span class="token punctuation">,</span> secretKeySpec<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 加密数据</span></span>
<span class="line">        <span class="token class-name">String</span> originalText <span class="token operator">=</span> <span class="token string">"Hello, World!"</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token keyword">byte</span><span class="token punctuation">[</span><span class="token punctuation">]</span> encryptedText <span class="token operator">=</span> cipher<span class="token punctuation">.</span><span class="token function">doFinal</span><span class="token punctuation">(</span>originalText<span class="token punctuation">.</span><span class="token function">getBytes</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 初始化 Cipher 为解密模式</span></span>
<span class="line">        cipher<span class="token punctuation">.</span><span class="token function">init</span><span class="token punctuation">(</span><span class="token class-name">Cipher</span><span class="token punctuation">.</span><span class="token constant">DECRYPT_MODE</span><span class="token punctuation">,</span> secretKeySpec<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 解密数据</span></span>
<span class="line">        <span class="token keyword">byte</span><span class="token punctuation">[</span><span class="token punctuation">]</span> decryptedText <span class="token operator">=</span> cipher<span class="token punctuation">.</span><span class="token function">doFinal</span><span class="token punctuation">(</span>encryptedText<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Decrypted Text: "</span> <span class="token operator">+</span> <span class="token keyword">new</span> <span class="token class-name">String</span><span class="token punctuation">(</span>decryptedText<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2><code>javax.crypto.interfaces</code></h2>
<p>为 RSA Laboratories 的 PKCS #3 中定义的 Diffie-Hellman 密钥提供接口。</p>
<h2><code>javax.crypto.spec</code></h2>
<p>提供关键规范和算法参数规范的类和接口。</p>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - API - 「javax.imageio」</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjavax.imageio%E3%80%8D.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjavax.imageio%E3%80%8D.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - API - 「javax.imageio」</source>
      <description>文章摘要： 用于读取和写入图像数据的包。 简介 简要说明 用于读取和写入图像数据的包。 提供了对多种图像格式的支持，如 JPEG、PNG、GIF 和 BMP 等。 定义了一个标准的插件架构，允许第三方为新的图像格式提供支持。 主要功能 图像读取：支持从文件、URL 或任何 ImageInputStream 实例中读取图像数据。 图像写入：支持将图像数据...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Tue, 24 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 用于读取和写入图像数据的包。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>用于读取和写入图像数据的包。</li>
<li>提供了对多种图像格式的支持，如 JPEG、PNG、GIF 和 BMP 等。</li>
<li>定义了一个标准的插件架构，允许第三方为新的图像格式提供支持。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>图像读取</strong>：支持从文件、URL 或任何 <code>ImageInputStream</code> 实例中读取图像数据。</li>
<li><strong>图像写入</strong>：支持将图像数据写入文件、URL 或任何 <code>ImageOutputStream</code> 实例。</li>
<li><strong>元数据处理</strong>：可以读取和修改图像的元数据，如 EXIF 信息。</li>
<li><strong>图像转换</strong>：支持在读取或写入过程中转换图像数据，例如改变图像的大小或格式。</li>
<li><strong>图像类型支持</strong>：支持多种图像类型，包括灰度图像、索引颜色图像、RGB 图像等。</li>
<li><strong>插件扩展</strong>：允许通过添加新的 <code>ImageReader</code> 和 <code>ImageWriter</code> 插件来支持额外的图像格式。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>性能</strong>：图像处理可能会消耗大量内存和 CPU 资源，尤其是在处理大图像或复杂操作时。</li>
<li><strong>兼容性</strong>：不同的图像格式和编码可能在不同平台和 Java 版本间存在兼容性问题。</li>
<li><strong>错误处理</strong>：图像处理过程中可能会遇到各种错误，如格式不支持、文件损坏等，需要妥善处理这些异常情况。</li>
<li><strong>内存管理</strong>：在使用 <code>ImageIO</code> 操作大图像时，需要注意内存管理，避免内存泄漏。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>图像文件处理</strong>：在需要读取或保存图像文件的应用程序中，如图片编辑器、图像转换工具等。</li>
<li><strong>Web 应用</strong>：在 Web 应用程序中处理用户上传的图像或生成图像内容。</li>
<li><strong>桌面应用</strong>：在桌面应用程序中处理图像数据，如报表生成、图像预览等。</li>
<li><strong>数据可视化</strong>：在需要将数据转换为图像格式以进行可视化展示的场景中。</li>
</ul>
<h2><code>javax.imageio.event</code></h2>
<p>Java Image I/O API 的包，用于处理在读取和写入映像期间的事件同步通知。</p>
<h2><code>javax.imageio.metadata</code></h2>
<p>处理读取和写入元数据的 Java Image I/O API 包。</p>
<h2><code>javax.imageio.plugins.bmp</code></h2>
<p>包含内置 BMP 插件使用的公共类的 package。</p>
<h2><code>javax.imageio.plugins.jpeg</code></h2>
<p>支持内置 JPEG 增效工具的类。</p>
<h2><code>javax.imageio.spi</code></h2>
<p>一个 Java Image I/O API 包，包含用于读取器、写入器、转码器和流的插件接口，以及运行时注册表。</p>
<h2><code>javax.imageio.stream</code></h2>
<p>一个 Java Image I/O API 包，用于处理来自文件和流的低级 I/O。</p>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - API - 「javax.jws」</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjavax.jws%E3%80%8D.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjavax.jws%E3%80%8D.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - API - 「javax.jws」</source>
      <description>文章摘要： 提供了一组注解，用于简化 Web 服务（特别是 SOAP Web 服务）的开发。 简介 简要说明 是 Java Web Services 的一个包。 提供了一组注解，用于简化 Web 服务（特别是 SOAP Web 服务）的开发。 这些注解允许开发者将 Java 类和方法标记为 Web 服务端点，从而使得这些类和方法可以通过网络被远程访问。...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Tue, 24 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 提供了一组注解，用于简化 Web 服务（特别是 SOAP Web 服务）的开发。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>是 Java Web Services 的一个包。</li>
<li>提供了一组注解，用于简化 Web 服务（特别是 SOAP Web 服务）的开发。</li>
<li>这些注解允许开发者将 Java 类和方法标记为 Web 服务端点，从而使得这些类和方法可以通过网络被远程访问。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>定义 Web 服务</strong>：通过注解 <code>@WebService</code>，可以将一个 Java 类标记为 Web 服务。</li>
<li><strong>Web 服务操作</strong>：使用 <code>@WebMethod</code> 注解可以定义 Web 服务中的操作（方法）。</li>
<li><strong>Web 服务参数</strong>：<code>@WebParam</code> 注解用于定义 Web 服务操作的参数。</li>
<li><strong>Web 服务返回值</strong>：<code>@WebResult</code> 注解用于指定 Web 服务操作的返回值。</li>
<li><strong>Web 服务异常</strong>：<code>@WebFault</code> 注解用于定义 Web 服务可能抛出的异常。</li>
<li><strong>服务端点接口</strong>：<code>@SOAPBinding</code> 注解可以用来指定服务端点接口的 SOAP 绑定风格和协议。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>兼容性</strong>：<code>javax.jws</code> 是 Java EE 的一部分，但在 Java SE 环境中可能需要额外的库支持。</li>
<li><strong>版本问题</strong>：随着 Java 版本的更新，一些注解可能被新的 API 或规范所取代，如 JAX-RS（用于 RESTful Web 服务）。</li>
<li><strong>配置管理</strong>：Web 服务的配置可能会变得复杂，需要合理管理 Web 服务描述符（WSDL）和其他配置文件。</li>
<li><strong>安全性</strong>：Web 服务需要考虑安全性问题，如数据加密、用户认证等。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>SOAP Web 服务开发</strong>：当需要开发基于 SOAP 协议的 Web 服务时，<code>javax.jws</code> 提供了必要的工具和注解。</li>
<li><strong>企业应用集成</strong>：在企业应用集成（EAI）项目中，<code>javax.jws</code> 可用于创建服务接口，实现不同系统间的通信。</li>
<li><strong>跨平台服务调用</strong>：在需要跨不同平台和语言进行服务调用时，SOAP Web 服务是一个常见的选择。</li>
</ul>
<h2><code>javax.jws.soap</code></h2>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - API - 「javax.lang.model」</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjavax.lang.model%E3%80%8D.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjavax.lang.model%E3%80%8D.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - API - 「javax.lang.model」</source>
      <description>文章摘要： 用于对 Java 编程语言进行建模的包的类和层次结构。 简介 简要说明 主要功能 注意事项 适用场景 javax.lang.model.element 用于对 Java 编程语言的元素进行建模的接口。 javax.lang.model.type 用于对 Java 编程语言类型进行建模的接口。 javax.lang.model.util 协助...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Tue, 24 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 用于对 Java 编程语言进行建模的包的类和层次结构。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2><code>javax.lang.model.element</code></h2>
<p>用于对 Java 编程语言的元素进行建模的接口。</p>
<h2><code>javax.lang.model.type</code></h2>
<p>用于对 Java 编程语言类型进行建模的接口。</p>
<h2><code>javax.lang.model.util</code></h2>
<p>协助处理 program elements 和 类型。</p>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - API - 「javax.management」</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjavax.management%E3%80%8D.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjavax.management%E3%80%8D.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - API - 「javax.management」</source>
      <description>文章摘要： 提供了一套标准的框架和接口，用于构建和管理分布式管理应用程序。 简介 简要说明 是 Java Management Extensions (JMX) API 的一部分。 提供了一套标准的框架和接口，用于构建和管理分布式管理应用程序。 JMX 允许开发者通过 MBeans（Managed Beans）来管理和监控 Java 应用程序。 主要功...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Tue, 24 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 提供了一套标准的框架和接口，用于构建和管理分布式管理应用程序。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>是 Java Management Extensions (JMX) API 的一部分。</li>
<li>提供了一套标准的框架和接口，用于构建和管理分布式管理应用程序。</li>
<li>JMX 允许开发者通过 MBeans（Managed Beans）来管理和监控 Java 应用程序。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>MBean 注册</strong>：允许将 MBeans 注册到 MBeanServer 中，以便它们可以被管理。</li>
<li><strong>MBeanServer</strong>：提供了一个中央服务器，用于注册和管理 MBeans。</li>
<li><strong>远程管理</strong>：支持通过 RMI（远程方法调用）进行远程管理操作。</li>
<li><strong>监控和通知</strong>：允许 MBeans 发送通知给监听器，用于监控应用程序的状态。</li>
<li><strong>属性和操作</strong>：定义了 MBeans 的属性和操作，允许外部管理应用程序来获取或设置属性，调用操作。</li>
<li><strong>动态 MBeans</strong>：支持动态创建 MBeans，无需预定义接口。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>安全性</strong>：在启用远程管理时，应确保通信安全，避免未授权的访问。</li>
<li><strong>性能影响</strong>：JMX 功能可能会对应用程序的性能产生影响，尤其是在高负载或大规模部署时。</li>
<li><strong>兼容性</strong>：在升级或修改 MBeans 时，应确保与现有管理工具的兼容性。</li>
<li><strong>资源管理</strong>：使用 JMX 进行资源管理时，应合理分配资源，避免资源泄露。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>应用程序监控</strong>：适用于需要监控应用程序运行状态、性能指标的场景。</li>
<li><strong>系统管理</strong>：适用于需要远程管理 Java 应用程序或系统资源的场景。</li>
<li><strong>服务管理</strong>：适用于构建和监控服务，如 Web 服务器、数据库服务器等。</li>
<li><strong>分布式系统</strong>：适用于分布式系统中各个组件的管理和监控。</li>
</ul>
<h2><code>javax.management.loading</code></h2>
<p>提供实现高级动态加载的类。</p>
<h2><code>javax.management.modelmbean</code></h2>
<p>提供 ModelMBean 类的定义。</p>
<h2><code>javax.management.monitor</code></h2>
<p>提供监视器类的定义。</p>
<h2><code>javax.management.openmbean</code></h2>
<p>提供 open 数据类型和 Open MBean 描述符类。</p>
<h2><code>javax.management.relation</code></h2>
<p>提供 Relation Service 的定义。</p>
<h2><code>javax.management.remote</code></h2>
<p>用于远程访问 JMX MBean 服务器的接口。</p>
<h2><code>javax.management.remote.rmi</code></h2>
<p>RMI 连接器是 JMX 远程 API 的连接器，它使用 RMI 将客户端请求传输到远程 MBean 服务器。</p>
<h2><code>javax.management.timer</code></h2>
<p>提供 Timer MBean 的定义。</p>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - API - 「javax.naming」</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjavax.naming%E3%80%8D.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjavax.naming%E3%80%8D.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - API - 「javax.naming」</source>
      <description>文章摘要： 提供了一套标准的 API，用于在 Java 应用程序中访问不同类型的命名和目录服务。 简介 简要说明 是 Java 命名和目录接口（Java Naming and Directory Interface，JNDI）的一部分。 提供了一套标准的 API，用于在 Java 应用程序中访问不同类型的命名和目录服务。 JNDI 允许开发者通过统一的...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Tue, 24 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 提供了一套标准的 API，用于在 Java 应用程序中访问不同类型的命名和目录服务。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>是 Java 命名和目录接口（Java Naming and Directory Interface，JNDI）的一部分。</li>
<li>提供了一套标准的 API，用于在 Java 应用程序中访问不同类型的命名和目录服务。</li>
<li>JNDI 允许开发者通过统一的接口来查找和访问各种资源，如 LDAP、DNS、RMI、CORBA 等。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>命名服务访问</strong>：提供查找、绑定、重命名和解除绑定对象的能力。</li>
<li><strong>目录服务查询</strong>：支持通过属性搜索来查找目录中的对象。</li>
<li><strong>环境配置</strong>：允许设置和获取与命名或目录服务交互的环境属性。</li>
<li><strong>引用解析</strong>：支持对象引用的创建和解析，以便在不同 JVM 间共享对象。</li>
<li><strong>事件监听</strong>：允许应用程序监听命名和目录服务中的事件，如对象添加、删除或修改。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>安全性</strong>：在访问命名和目录服务时，应确保遵循安全最佳实践，避免潜在的安全漏洞。</li>
<li><strong>资源释放</strong>：使用 JNDI 资源后，应确保正确释放资源，如关闭目录上下文。</li>
<li><strong>兼容性</strong>：不同的命名和目录服务可能有不同的特性，使用时需注意 API 的兼容性。</li>
<li><strong>错误处理</strong>：JNDI 操作可能会抛出异常，应适当处理这些异常以保持应用程序的稳定性。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>服务定位</strong>：适用于需要在应用程序中查找和访问服务，如数据库连接、JMS 队列等。</li>
<li><strong>分布式系统</strong>：在分布式系统中，JNDI 可用于跨网络查找和访问远程服务。</li>
<li><strong>企业应用集成</strong>：在企业级应用中，JNDI 可用于集成不同系统和服务。</li>
<li><strong>配置管理</strong>：JNDI 可用于集中管理应用程序配置，减少硬编码。</li>
</ul>
<h2><code>javax.naming.directory</code></h2>
<p>扩展 javax.naming 软件包以提供访问目录服务的功能。</p>
<h2><code>javax.naming.event</code></h2>
<p>在访问命名和目录服务时支持事件通知。</p>
<h2><code>javax.naming.ldap</code></h2>
<p>提供对 LDAPv3 扩展操作和控制的支持。</p>
<h2><code>javax.naming.spi</code></h2>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - API - 「javax.net」</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjavax.net%E3%80%8D.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjavax.net%E3%80%8D.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - API - 「javax.net」</source>
      <description>文章摘要： 提供用于网络通信的类和接口，包含了用于创建和操作安全套接字（Secure Sockets）的类，以及用于密钥和证书管理的接口。 简介 简要说明 提供用于网络通信的类和接口，尤其是安全通信。 包含了用于创建和操作安全套接字（Secure Sockets）的类，以及用于密钥和证书管理的接口。 主要功能 安全套接字工厂：提供 SSLSocketF...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Tue, 24 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 提供用于网络通信的类和接口，包含了用于创建和操作安全套接字（Secure Sockets）的类，以及用于密钥和证书管理的接口。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>提供用于网络通信的类和接口，尤其是安全通信。</li>
<li>包含了用于创建和操作安全套接字（Secure Sockets）的类，以及用于密钥和证书管理的接口。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>安全套接字工厂</strong>：提供 <code>SSLSocketFactory</code> 和 <code>SSLServerSocketFactory</code>，用于创建 SSL/TLS 加密的套接字。</li>
<li><strong>密钥管理器</strong>：<code>KeyManager</code> 接口及其实现类用于管理密钥和证书，以便在 SSL/TLS 握手过程中使用。</li>
<li><strong>信任管理器</strong>：<code>TrustManager</code> 接口及其实现类用于决定是否应该信任对等方的证书。</li>
<li><strong>X509 证书工厂</strong>：<code>X509Certificate</code> 类用于处理 X.509 证书。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>安全性</strong>：在使用 <code>javax.net</code> 进行安全通信时，需要正确配置密钥和信任管理器，以确保通信的安全性。</li>
<li><strong>性能</strong>：SSL/TLS 加密会带来额外的性能开销，因此在使用安全套接字时需要注意性能影响。</li>
<li><strong>证书管理</strong>：管理证书和密钥时，需要确保它们的正确性和安全性，避免泄露敏感信息。</li>
<li><strong>异常处理</strong>：网络操作可能会抛出多种异常，如 <code>IOException</code>、<code>CertificateException</code> 等，需要妥善处理这些异常。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>安全网络通信</strong>：当需要通过互联网进行安全数据传输时，如 HTTPS、FTPS 等。</li>
<li><strong>客户端/服务器应用</strong>：在客户端和服务器之间需要建立加密连接的场景。</li>
<li><strong>Web 应用</strong>：Web 应用程序使用 HTTPS 协议时，后端服务器需要使用 <code>javax.net</code> 来处理 SSL/TLS 连接。</li>
<li><strong>证书验证</strong>：在需要对证书进行验证的场景，如验证远程服务器的身份。</li>
</ul>
<h2><code>javax.net.ssl</code></h2>
<p>提供安全套接字包的类。</p>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - API - 「javax.print」</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjavax.print%E3%80%8D.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjavax.print%E3%80%8D.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - API - 「javax.print」</source>
      <description>文章摘要： 提供了一个打印服务和打印作业管理的 API。 简介 简要说明 提供了一个打印服务和打印作业管理的 API。 允许 Java 应用程序与打印机进行交互，以发送打印作业、控制打印参数、监控打印状态等。 主要功能 打印服务查找：允许应用程序查找可用的打印服务（打印机）。 打印作业创建：支持创建打印作业，设置打印属性（如份数、页序、打印质量等）。 ...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Tue, 24 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 提供了一个打印服务和打印作业管理的 API。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>提供了一个打印服务和打印作业管理的 API。</li>
<li>允许 Java 应用程序与打印机进行交互，以发送打印作业、控制打印参数、监控打印状态等。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>打印服务查找</strong>：允许应用程序查找可用的打印服务（打印机）。</li>
<li><strong>打印作业创建</strong>：支持创建打印作业，设置打印属性（如份数、页序、打印质量等）。</li>
<li><strong>打印流和打印文档</strong>：提供了 <code>PrintStream</code> 和 <code>PrintDocument</code> 类，用于发送数据到打印机。</li>
<li><strong>打印属性</strong>：定义了一系列的打印属性类，如 <code>MediaSize</code>、<code>OrientationRequested</code>、<code>PrintQuality</code> 等，用于配置打印作业。</li>
<li><strong>打印事件监听</strong>：允许应用程序监听打印作业的状态变化，如作业完成、作业被取消等。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>跨平台兼容性</strong>：虽然 <code>javax.print</code> 旨在提供跨平台的打印支持，但不同的操作系统和打印机驱动可能会有不同的表现。</li>
<li><strong>权限管理</strong>：在某些环境下，打印可能需要特定的权限，尤其是在企业或教育机构中。</li>
<li><strong>打印作业管理</strong>：打印作业的管理需要谨慎，以避免资源浪费或打印机队列拥堵。</li>
<li><strong>异常处理</strong>：打印操作可能会抛出异常，如 <code>PrintException</code>，需要合理处理这些异常。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>桌面应用程序</strong>：桌面应用程序常常需要提供打印功能，<code>javax.print</code> 可以用于实现这一需求。</li>
<li><strong>服务器端打印</strong>：服务器端应用程序可以通过 <code>javax.print</code> API 来管理打印作业，例如 Web 应用程序中的打印请求。</li>
<li><strong>企业解决方案</strong>：在企业环境中，<code>javax.print</code> 可用于集中管理打印作业和打印机资源。</li>
<li><strong>跨平台应用</strong>：对于需要在多个操作系统上运行并支持打印的应用程序，<code>javax.print</code> 提供了统一的接口。</li>
</ul>
<h2><code>javax.print.attribute</code></h2>
<p>提供类和接口，用于描述 JavaTM Print Service 属性的类型以及如何将它们收集到属性集中。</p>
<h2><code>javax.print.attribute.standard</code></h2>
<p>包 javax.print.attribute.standard 包含用于特定打印属性的类。</p>
<h2><code>javax.print.event</code></h2>
<p>包 javax.print.event 包含事件类和侦听器接口。</p>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - API - 「javax.rmi」</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjavax.rmi%E3%80%8D.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjavax.rmi%E3%80%8D.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - API - 「javax.rmi」</source>
      <description>文章摘要： 提供了一系列接口和类，用于支持远程方法调用和分布式对象的管理。 简介 简要说明 是 Java RMI (Remote Method Invocation) 的扩展 API。 提供了一系列接口和类，用于支持远程方法调用和分布式对象的管理。 包含了用于创建和管理远程对象的一些高级功能。 主要功能 远程引用层：提供了 RemoteRef 接口和相...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Tue, 24 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 提供了一系列接口和类，用于支持远程方法调用和分布式对象的管理。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>是 Java RMI (Remote Method Invocation) 的扩展 API。</li>
<li>提供了一系列接口和类，用于支持远程方法调用和分布式对象的管理。</li>
<li>包含了用于创建和管理远程对象的一些高级功能。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>远程引用层</strong>：提供了 <code>RemoteRef</code> 接口和相关的实现，用于表示远程对象的引用。</li>
<li><strong>远程服务器</strong>：<code>RemoteObject</code> 类及其子类 <code>UnicastRemoteObject</code> 提供了实现远程服务的基本框架。</li>
<li><strong>激活和导出</strong>：<code>Activatable</code> 类允许远程对象在需要时被激活，并且可以将其导出为可远程访问的对象。</li>
<li><strong>Naming 和目录服务</strong>：<code>Naming</code> 类提供了将远程对象绑定到命名服务（如 RMI 注册表）的方法。</li>
<li><strong>Stub 和 Skeleton</strong>：自动生成 stub 和 skeleton 类，这些类处理远程方法调用的细节，如参数编组、网络通信等。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>安全性</strong>：远程方法调用可能涉及安全风险，如未经授权的访问。应使用适当的权限和认证机制来保护远程服务。</li>
<li><strong>性能问题</strong>：RMI 调用可能会引入额外的网络延迟，因此性能敏感的应用需要仔细设计。</li>
<li><strong>Stub 和 Skeleton 的生成</strong>：在 Java 6 之后，不再需要手动生成 stub 和 skeleton，因为编译器会自动处理。</li>
<li><strong>异常处理</strong>：远程方法调用可能会抛出 <code>RemoteException</code>，需要在代码中进行适当的异常处理。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>分布式系统</strong>：在分布式系统中，<code>javax.rmi</code> 可以用于实现不同 JVM 之间的对象和方法调用。</li>
<li><strong>远程服务</strong>：对于需要提供远程服务接口的应用，如 Web 服务、后台服务或分布式计算任务。</li>
<li><strong>企业应用集成</strong>：在企业级应用中，<code>javax.rmi</code> 可以用于集成不同的系统和服务。</li>
</ul>
<h2><code>javax.rmi.CORBA</code></h2>
<h2><code>javax.rmi.ssl</code></h2>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - API - 「javax.scropt」</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjavax.scropt%E3%80%8D.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjavax.scropt%E3%80%8D.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - API - 「javax.scropt」</source>
      <description>文章摘要： 定义了 Java 脚本引擎的接口和类，允许 Java 应用程序运行用各种脚本语言编写的脚本代码，例如 JavaScript、Groovy、Python 等。 简介 简要说明 定义了 Java 脚本引擎的接口和类。 允许 Java 应用程序运行用各种脚本语言编写的脚本代码，例如 JavaScript、Groovy、Python 等。 主要功能...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Tue, 24 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 定义了 Java 脚本引擎的接口和类，允许 Java 应用程序运行用各种脚本语言编写的脚本代码，例如 JavaScript、Groovy、Python 等。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>定义了 Java 脚本引擎的接口和类。</li>
<li>允许 Java 应用程序运行用各种脚本语言编写的脚本代码，例如 JavaScript、Groovy、Python 等。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>脚本引擎执行</strong>：<code>ScriptEngine</code> 接口是核心，它提供了执行脚本代码的方法。</li>
<li><strong>脚本编译</strong>：<code>Compilable</code> 接口允许脚本被编译成可重用的形式，以提高执行效率。</li>
<li><strong>绑定变量</strong>：通过 <code>Bindings</code> 接口，可以将 Java 对象绑定到脚本变量中，实现 Java 和脚本语言之间的数据交换。</li>
<li><strong>脚本上下文</strong>：<code>ScriptContext</code> 接口定义了脚本的执行上下文，包括输入、输出和错误流。</li>
<li><strong>脚本引擎工厂</strong>：<code>ScriptEngineFactory</code> 接口用于发现和创建 <code>ScriptEngine</code> 实例。</li>
<li><strong>脚本引擎管理</strong>：<code>ScriptEngineManager</code> 类管理脚本引擎的实例化和查找。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>脚本安全性</strong>：执行脚本可能引入安全风险，特别是当脚本来自不可信的源时。应采取适当的安全措施。</li>
<li><strong>性能考虑</strong>：脚本语言通常比 Java 本地代码执行得慢，因此性能敏感的应用应谨慎使用。</li>
<li><strong>错误处理</strong>：脚本执行可能会抛出异常，需要妥善处理这些异常。</li>
<li><strong>脚本语言兼容性</strong>：不同的脚本语言可能有不同的功能和语法，使用时需注意兼容性问题。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>动态脚本执行</strong>：当需要动态执行脚本，例如在运行时根据用户输入生成和执行代码时。</li>
<li><strong>扩展性强的应用</strong>：适用于需要提供扩展点的应用程序，允许用户编写自定义脚本以扩展应用功能。</li>
<li><strong>嵌入式脚本支持</strong>：在 Java 应用中嵌入其他脚本语言，以利用这些语言的特点和生态系统。</li>
<li><strong>Web 应用</strong>：在 Web 应用程序中，可以使用 <code>javax.script</code> 来执行服务器端脚本，如动态生成网页内容。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - API - 「javax.security」</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjavax.security%E3%80%8D.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjavax.security%E3%80%8D.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - API - 「javax.security」</source>
      <description>文章摘要： 提供了一系列用于安全编程的类和接口。 简介 简要说明 提供了一系列用于安全编程的类和接口。 主要涉及到 Java 的安全框架，包括认证、授权、加密和其他安全服务。 主要功能 认证：提供用户认证机制，如 JAAS（Java Authentication and Authorization Service）。 授权：允许开发者实现细粒度的访问控...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Tue, 24 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 提供了一系列用于安全编程的类和接口。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>提供了一系列用于安全编程的类和接口。</li>
<li>主要涉及到 Java 的安全框架，包括认证、授权、加密和其他安全服务。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>认证</strong>：提供用户认证机制，如 JAAS（Java Authentication and Authorization Service）。</li>
<li><strong>授权</strong>：允许开发者实现细粒度的访问控制，定义哪些用户或程序可以访问特定的资源。</li>
<li><strong>密码学</strong>：提供加密和解密的工具，支持多种加密算法。</li>
<li><strong>安全属性</strong>：管理安全相关的属性，如密钥和信任存储。</li>
<li><strong>安全提供者</strong>：定义了安全服务的提供者接口，允许第三方实现安全算法和服务。</li>
<li><strong>安全事件</strong>：提供处理安全相关事件的机制。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>安全性</strong>：在使用 <code>javax.security</code> 包时，必须确保代码的安全性和正确性，因为任何错误都可能导致安全漏洞。</li>
<li><strong>性能影响</strong>：安全操作可能会对性能产生影响，尤其是在进行加密和解密操作时。</li>
<li><strong>兼容性</strong>：不同的 Java 版本和安全提供者可能在实现上有所不同，需要注意兼容性问题。</li>
<li><strong>配置管理</strong>：安全框架的配置相对复杂，需要正确配置才能确保系统的安全性。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>需要认证的应用</strong>：当应用程序需要用户登录和身份验证时。</li>
<li><strong>访问控制</strong>：在需要对用户或角色进行资源访问控制的应用程序中。</li>
<li><strong>数据加密</strong>：当需要保护数据传输或存储时的机密性时。</li>
<li><strong>安全敏感的系统</strong>：在处理敏感信息或执行关键操作的系统，如金融、医疗和政府系统。</li>
<li><strong>分布式系统</strong>：在分布式系统中，需要确保跨网络通信的安全。</li>
</ul>
<h2><code>javax.security.auth</code></h2>
<p>此软件包提供了用于身份验证和授权的框架。</p>
<h2><code>javax.security.auth.callback</code></h2>
<p>此包提供了服务与应用程序交互所需的类，以便检索信息（例如，包括用户名或密码的身份验证数据）或显示信息（例如，错误和警告消息）。</p>
<h2><code>javax.security.auth.kerberos</code></h2>
<p>此包包含与 Kerberos 网络身份验证协议相关的实用程序类。</p>
<h2><code>javax.secutity.auth.login</code></h2>
<p>此软件包提供了一个可插拔的身份验证框架。</p>
<h2><code>javax.secutity.auth.spi</code></h2>
<p>此软件包提供了用于实现可插拔身份验证模块的接口。</p>
<h2><code>javax.secutity.auth.x500</code></h2>
<p>此包包含应用于存储 X500 主体凭证和 X500 私有凭证 <em>主题</em>。</p>
<h2><code>javax.secutity.cert</code></h2>
<p>提供公钥证书的类。</p>
<h2><code>javax.secutity.sasl</code></h2>
<p>包含用于支持 SASL 的类和接口。</p>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - API - 「javax.sound」</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjavax.sound%E3%80%8D.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjavax.sound%E3%80%8D.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - API - 「javax.sound」</source>
      <description>文章摘要： 提供了用于处理音频的功能。 简介 简要说明 提供了用于处理音频的功能。 包含了一系列用于捕获、处理和播放音频数据的 API，支持多种音频格式和合成器。 主要功能 音频捕获：允许应用程序捕获来自麦克风的音频输入。 音频播放：支持播放音频文件或音频流。 MIDI 管理：提供 MIDI（Musical Instrument Digital Int...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Tue, 24 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 提供了用于处理音频的功能。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>提供了用于处理音频的功能。</li>
<li>包含了一系列用于捕获、处理和播放音频数据的 API，支持多种音频格式和合成器。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>音频捕获</strong>：允许应用程序捕获来自麦克风的音频输入。</li>
<li><strong>音频播放</strong>：支持播放音频文件或音频流。</li>
<li><strong>MIDI 管理</strong>：提供 MIDI（Musical Instrument Digital Interface）数据的处理，包括 MIDI 文件的播放和实时 MIDI 设备的控制。</li>
<li><strong>音频合成</strong>：允许程序合成音频，如生成简单的音调或复杂的音乐序列。</li>
<li><strong>音频文件处理</strong>：支持音频文件的读取和写入，支持多种音频格式。</li>
<li><strong>音频系统配置</strong>：提供查询和配置音频系统硬件的能力。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>兼容性</strong>：不同的操作系统和硬件对音频支持的程度不同，<code>javax.sound</code> API 的兼容性和功能可能会有所差异。</li>
<li><strong>性能问题</strong>：音频处理可能会消耗大量系统资源，特别是在处理高保真音频或实时音频流时。</li>
<li><strong>错误处理</strong>：音频处理可能会遇到多种异常情况，如设备不可用、格式不支持等，需要妥善处理这些异常。</li>
<li><strong>线程管理</strong>：音频播放和捕获通常在单独的线程中进行，需要确保线程安全。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>多媒体应用</strong>：开发需要音频播放或捕获功能的多媒体应用程序。</li>
<li><strong>游戏开发</strong>：在游戏中添加背景音乐、音效和语音。</li>
<li><strong>音乐软件</strong>：创建音乐编辑器、合成器或音乐教学软件。</li>
<li><strong>语音应用</strong>：开发需要语音识别或语音合成的应用程序。</li>
<li><strong>实时音频处理</strong>：进行实时音频效果处理或分析。</li>
</ul>
<h2><code>javax.sound.midi</code></h2>
<p>为 MIDI（乐器数字接口）数据的 I/O、排序和合成提供接口和类。</p>
<h2><code>javax.sound.midi.spi</code></h2>
<p>为服务提供商提供接口，以便在提供新的 MIDI 设备、MIDI 文件读取器和写入器或声音库读取器时实现。</p>
<h2><code>javax.sound.sampled</code></h2>
<p>提供用于捕获、处理和播放采样音频数据的接口和类。</p>
<h2><code>javax.sound.sampled.spi</code></h2>
<p>为服务提供商提供抽象类，以便在提供新的音频设备、声音文件读取器和写入器或音频格式转换器时进行子类化。</p>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - API - 「javax.sql」</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjavax.sql%E3%80%8D.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjavax.sql%E3%80%8D.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - API - 「javax.sql」</source>
      <description>文章摘要： 提供了一组用于数据库连接和事务管理的接口和类。 简介 简要说明 提供了一组用于数据库连接和事务管理的接口和类。 这些接口和类主要用于与 Java Database Connectivity (JDBC) API 一起工作，以提供数据源和连接池的管理功能。 主要功能 数据源（DataSource）：定义了获取数据库连接的标准方法，通常用于连接...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Tue, 24 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 提供了一组用于数据库连接和事务管理的接口和类。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>提供了一组用于数据库连接和事务管理的接口和类。</li>
<li>这些接口和类主要用于与 Java Database Connectivity (JDBC) API 一起工作，以提供数据源和连接池的管理功能。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>数据源（DataSource）</strong>：定义了获取数据库连接的标准方法，通常用于连接池管理。</li>
<li><strong>连接池（Connection Pooling）</strong>：允许应用程序重用数据库连接，提高性能并减少资源消耗。</li>
<li><strong>分布式事务（XADataSource）</strong>：支持分布式事务管理，允许跨多个资源管理器的事务。</li>
<li><strong>行集（RowSet）</strong>：提供了一种可滚动、可更新、可序列化的数据集，可以在断开连接的情况下使用。</li>
<li><strong>调用器（CallableStatement）</strong>：支持执行数据库存储过程。</li>
<li><strong>预处理语句（PreparedStatement）</strong>：提供了一种预编译 SQL 语句的方式，以提高性能并防止 SQL 注入攻击。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>驱动兼容性</strong>：使用 <code>javax.sql</code> 接口时，需要确保数据库驱动程序支持这些接口。</li>
<li><strong>资源管理</strong>：数据库连接是有限资源，应确保在使用完毕后正确关闭连接，避免资源泄露。</li>
<li><strong>事务管理</strong>：在使用分布式事务时，需要确保所有参与的资源管理器都支持 XA 协议。</li>
<li><strong>安全性</strong>：在处理数据库操作时，应采取措施防止 SQL 注入等安全风险。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>企业应用</strong>：在企业级应用中，<code>javax.sql</code> 提供的数据源和连接池管理是必不可少的。</li>
<li><strong>Web 应用</strong>：在 Web 应用程序中，<code>javax.sql</code> 接口常用于数据库连接的管理。</li>
<li><strong>分布式系统</strong>：在需要跨多个数据库或资源管理器协调事务的分布式系统中，<code>javax.sql</code> 的分布式事务支持非常有用。</li>
<li><strong>数据迁移和集成</strong>：使用 <code>RowSet</code> 接口可以在不同系统之间迁移和集成数据。</li>
</ul>
<h2><code>javax.sql.rowset</code></h2>
<p>JDBC <code>RowSet</code> 的标准接口和基类 实现。</p>
<h2><code>javax.sql.rowset.serial</code></h2>
<p>提供实用程序类，以允许 SQL 类型和 Java 编程语言中的数据类型之间进行可序列化映射。</p>
<h2><code>javax.sql.rowset.spi</code></h2>
<p>第三方供应商在实现同步提供程序时必须使用的标准类和接口。</p>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - API - 「javax.tools」</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjavax.tools%E3%80%8D.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjavax.tools%E3%80%8D.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - API - 「javax.tools」</source>
      <description>文章摘要： 提供了一个用于程序动态编译和代码生成的API。 简介 简要说明 提供了一个用于程序动态编译和代码生成的API。 允许Java程序在运行时编译Java源代码，或者从Java注解生成代码。 主要功能 Java编译器接口（javax.tools.JavaCompiler）：允许程序在运行时调用Java编译器，编译Java源文件或源代码字符串。 文...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Tue, 24 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 提供了一个用于程序动态编译和代码生成的API。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>提供了一个用于程序动态编译和代码生成的API。</li>
<li>允许Java程序在运行时编译Java源代码，或者从Java注解生成代码。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>Java编译器接口（<code>javax.tools.JavaCompiler</code>）</strong>：允许程序在运行时调用Java编译器，编译Java源文件或源代码字符串。</li>
<li><strong>文件管理（<code>javax.tools.FileManager</code>）</strong>：提供了一种方式来定位源文件、类文件和其他文件，以及标准文件系统的交互。</li>
<li><strong>诊断收集器（<code>javax.tools.DiagnosticCollector</code>）</strong>：用于收集编译过程中产生的诊断信息，例如错误和警告。</li>
<li><strong>标准JavaFileManager（<code>javax.tools.StandardJavaFileManager</code>）</strong>：实现<code>FileManager</code>接口，用于管理标准文件系统中的文件。</li>
<li><strong>Java文件对象（<code>javax.tools.JavaFileObject</code>）</strong>：表示Java源文件、类文件或其它与编译相关的文件。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>性能考虑</strong>：动态编译可能会消耗大量资源，因此在使用时应考虑性能影响。</li>
<li><strong>错误处理</strong>：编译过程中可能会产生错误和警告，需要妥善处理这些诊断信息。</li>
<li><strong>安全性</strong>：动态编译代码可能引入安全风险，特别是在执行不可信的源代码时。</li>
<li><strong>兼容性</strong>：确保使用的<code>javax.tools</code> API与目标Java平台的编译器兼容。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>代码生成</strong>：在运行时根据特定条件生成Java代码，例如基于注解的框架。</li>
<li><strong>动态脚本</strong>：允许用户编写并执行Java代码，而不需要重启应用程序。</li>
<li><strong>构建工具</strong>：集成到构建系统中，用于编译和管理项目源代码。</li>
<li><strong>开发工具</strong>：IDE和开发工具可以使用这个API来提供实时代码分析和编译功能。</li>
<li><strong>测试框架</strong>：测试框架可能会使用<code>javax.tools</code>来编译和运行测试用例。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - API - 「javax.transaction」</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjavax.transaction%E3%80%8D.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjavax.transaction%E3%80%8D.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - API - 「javax.transaction」</source>
      <description>文章摘要： 提供用于实现事务管理的API。 简介 简要说明 提供用于实现事务管理的API。 事务管理确保了一组操作要么全部成功，要么全部失败，以此来维护数据的完整性和一致性。 主要功能 事务管理器接口（javax.transaction.TransactionManager）：用于控制事务边界，开始、挂起、恢复和结束事务。 用户事务接口（javax.t...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Tue, 24 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 提供用于实现事务管理的API。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>提供用于实现事务管理的API。</li>
<li>事务管理确保了一组操作要么全部成功，要么全部失败，以此来维护数据的完整性和一致性。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>事务管理器接口（<code>javax.transaction.TransactionManager</code>）</strong>：用于控制事务边界，开始、挂起、恢复和结束事务。</li>
<li><strong>用户事务接口（<code>javax.transaction.UserTransaction</code>）</strong>：允许应用程序代码直接控制事务边界。</li>
<li><strong>事务同步注册接口（<code>javax.transaction.TransactionSynchronizationRegistry</code>）</strong>：允许资源在事务完成时注册回调。</li>
<li><strong>事务状态接口（<code>javax.transaction.Status</code>）</strong>：定义了事务的状态，如活动、已回滚、已提交等。</li>
<li><strong>回滚接口（<code>javax.transaction.RollbackException</code>）</strong>：当事务必须回滚时抛出。</li>
<li><strong>系统异常（<code>javax.transaction.SystemException</code>）</strong>：表示事务管理器在处理事务时遇到的问题。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>分布式事务</strong>：<code>javax.transaction</code> 主要用于本地事务管理，对于分布式事务，可能需要结合JTA（Java Transaction API）的其他部分，如<code>javax.transaction.xa</code>。</li>
<li><strong>资源管理</strong>：在使用事务管理时，确保所有参与事务的资源（如数据库连接）都正确地实现了事务管理规范。</li>
<li><strong>异常处理</strong>：在事务代码中，需要正确处理<code>RollbackException</code>和<code>SystemException</code>等异常。</li>
<li><strong>线程安全</strong>：<code>UserTransaction</code>实例通常不是线程安全的，确保在多线程环境中正确使用。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>企业应用</strong>：在企业级应用中，经常需要处理复杂的事务逻辑，<code>javax.transaction</code>提供了必要的工具。</li>
<li><strong>数据访问</strong>：当应用程序需要确保数据库操作的原子性时，可以使用这些API来管理事务。</li>
<li><strong>服务层</strong>：在服务层实现业务逻辑时，事务管理是保证操作完整性的关键。</li>
<li><strong>中间件</strong>：中间件和框架可能使用<code>javax.transaction</code>来提供跨多个资源的事务管理能力。</li>
</ul>
<h2><code>javax.transaction.xa</code></h2>
<p>提供定义事务管理器和资源管理器之间协定的 API，它允许事务管理器在 JTA 事务中登记和取消列出资源对象（由资源管理器驱动程序提供）。</p>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - API - 「javax.xml」</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjavax.xml%E3%80%8D.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjavax.xml%E3%80%8D.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - API - 「javax.xml」</source>
      <description>文章摘要： 提供了一系列处理XML（可扩展标记语言）的API。 简介 简要说明 提供了一系列处理XML（可扩展标记语言）的API。 用于解析、转换、验证和绑定XML数据的功能。 主要功能 XML解析：支持DOM（文档对象模型）和SAX（简单API for XML）两种解析方式。 XML转换：javax.xml.transform 提供了将XML转换为其...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Tue, 24 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 提供了一系列处理XML（可扩展标记语言）的API。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>提供了一系列处理XML（可扩展标记语言）的API。</li>
<li>用于解析、转换、验证和绑定XML数据的功能。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>XML解析</strong>：支持DOM（文档对象模型）和SAX（简单API for XML）两种解析方式。</li>
<li><strong>XML转换</strong>：<code>javax.xml.transform</code> 提供了将XML转换为其他格式（如HTML或文本）的功能。</li>
<li><strong>XML验证</strong>：<code>javax.xml.validation</code> 提供了根据XML Schema或DTD（文档类型定义）验证XML文档的功能。</li>
<li><strong>XML绑定</strong>：<code>javax.xml.bind</code> 提供了将Java对象映射到XML的机制，反之亦然。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>性能</strong>：DOM解析通常比SAX解析消耗更多内存，因为它将整个XML文档加载到内存中。根据应用场景选择合适的解析方式。</li>
<li><strong>安全性</strong>：解析外部XML数据时，要小心防范XML实体扩展攻击（如XXE）。</li>
<li><strong>兼容性</strong>：在使用这些API时，注意Java版本之间的差异，尤其是在迁移旧代码时。</li>
<li><strong>异常处理</strong>：XML处理可能会抛出多种异常，如<code>SAXException</code>、<code>ParserConfigurationException</code>和<code>TransformerException</code>，需要适当处理这些异常。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>数据交换</strong>：当需要在不同系统间交换数据时，XML是一种广泛使用的格式，<code>javax.xml</code> API可以帮助处理这些数据。</li>
<li><strong>配置文件</strong>：许多应用程序使用XML作为配置文件格式，<code>javax.xml</code> API可以用来解析和验证这些配置文件。</li>
<li><strong>Web服务</strong>：在开发Web服务时，经常需要处理SOAP消息，这些消息通常是基于XML的。</li>
<li><strong>企业应用集成</strong>：在企业应用集成（EAI）中，<code>javax.xml</code> API可以帮助处理不同系统间复杂的XML数据流。</li>
</ul>
<h2><code>javax.xml.bind</code></h2>
<p>为客户端应用程序提供运行时绑定框架，包括解组、编组和验证功能。</p>
<h2><code>javax.xml.bind.annotation</code></h2>
<p>定义用于将 Java 程序元素自定义为 XML 架构映射的注释。</p>
<h2><code>javax.xml.bind.annotation.adapters</code></h2>
<p>XmlAdapter 及其规范定义的子类，以允许将任意 Java 类与 JAXB 一起使用。</p>
<h2><code>javax.xml.bind.attachment</code></h2>
<p>此包由基于 MIME 的包处理器实现，该处理器支持在基于 MIME 的包格式中解释和创建优化的二进制数据。</p>
<h2><code>javax.xml.bind.helpers</code></h2>
<p><strong>JAXB 提供程序仅供以下用途</strong>：为某些 javax.xml.bind 接口提供部分默认实现。</p>
<h2><code>javax.xml.bind.util</code></h2>
<p>有用的客户端实用程序类。</p>
<h2><code>javax.xml.crypto</code></h2>
<p>XML 加密的常用类。</p>
<h2><code>javax.xml.crypto.dom</code></h2>
<p>javax.xml.crypto 包的特定于 DOM 的类。</p>
<h2><code>javax.xml.crypto.dsig</code></h2>
<p>用于生成和验证 XML 数字签名的类。</p>
<h2><code>javax.xml.crypto.dsig.dom</code></h2>
<p>javax.xml特定于 DOM 的类。</p>
<h2><code>javax.xml.crypto.dsig.keyinfo</code></h2>
<p>用于解析和处理 KeyInfo 元素和结构的类。</p>
<h2><code>javax.xml.crypto.dsig.spec</code></h2>
<p>XML 数字签名的参数类。</p>
<h2><code>javax.xml.datatype</code></h2>
<p>XML/Java Type Mappings. XML/Java 类型映射。</p>
<h2><code>javax.xml.namespace</code></h2>
<p>XML 命名空间处理。</p>
<h2><code>javax.xml.parsers</code></h2>
<p>提供允许处理 XML 文档的类。</p>
<h2><code>javax.xml.soap</code></h2>
<p>提供用于创建和生成 SOAP 消息的 API。</p>
<h2><code>javax.xml.stream</code></h2>
<h2><code>javax.xml.stream.events</code></h2>
<h2><code>javax.xml.stream.util</code></h2>
<h2><code>javax.xml.transform</code></h2>
<p>此包定义用于处理转换指令和执行从源到结果的转换的通用 API。</p>
<h2><code>javax.xml.transform.dom</code></h2>
<p>此包实现特定于 DOM 的转换 API。</p>
<h2><code>javax.xml.transform.sax</code></h2>
<p>此软件包实现特定于 SAX2 的转换 API。</p>
<h2><code>javax.xml.transform.stax</code></h2>
<p>提供特定于 StAX 的转换 API。</p>
<h2><code>javax.xml.transform.stream</code></h2>
<p>此软件包实现特定于流和 URI 的转换 API。</p>
<h2><code>javax.xml.validation</code></h2>
<p>此软件包提供了用于验证 XML 文档的 API。</p>
<h2><code>javax.xml.ws</code></h2>
<p>此软件包包含核心 JAX-WS API。</p>
<h2><code>javax.xml.ws.handler</code></h2>
<p>此包定义消息处理程序的 API。</p>
<h2><code>javax.xml.ws.handler.soap</code></h2>
<p>此包定义 SOAP 消息处理程序的 API。</p>
<h2><code>javax.xml.ws.http</code></h2>
<p>此包定义特定于 HTTP 绑定的 API。</p>
<h2><code>javax.xml.ws.soap</code></h2>
<p>此包定义特定于 SOAP 绑定的 API。</p>
<h2><code>javax.xml.ws.spi</code></h2>
<p>此软件包定义 JAX-WS 的 SPI。</p>
<h2><code>javax.xml.ws.spi.http</code></h2>
<p>提供 HTTP SPI，用于在容器中移植 JAX-WS Web 服务</p>
<h2><code>javax.xml.ws.wsaddressing</code></h2>
<p>此包定义与 WS-Addressing 相关的 API。</p>
<h2><code>javax.xml.xpath</code></h2>
<p>此软件包提供了一个_对象模型中立_的 API，用于评估 XPath 表达式和访问评估环境。</p>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - API - 「org.ietf」</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Corg.ietf%E3%80%8D.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Corg.ietf%E3%80%8D.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - API - 「org.ietf」</source>
      <description>文章摘要： 提供了对一些互联网工程任务组（IETF）发布的标准协议的支持，特别是用于处理电子邮件地址和互联网消息格式的类和接口。 简介 简要说明 提供了对一些互联网工程任务组（IETF）发布的标准协议的支持，特别是用于处理电子邮件地址和互联网消息格式的类和接口。 主要功能 电子邮件地址解析：提供了InternetAddress类，用于解析和格式化电子邮...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Tue, 24 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 提供了对一些互联网工程任务组（IETF）发布的标准协议的支持，特别是用于处理电子邮件地址和互联网消息格式的类和接口。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>提供了对一些互联网工程任务组（IETF）发布的标准协议的支持，特别是用于处理电子邮件地址和互联网消息格式的类和接口。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>电子邮件地址解析</strong>：提供了<code>InternetAddress</code>类，用于解析和格式化电子邮件地址。</li>
<li><strong>邮件消息处理</strong>：提供了<code>NewsArticle</code>和<code>NewsGroupInfo</code>类，用于处理网络新闻（Usenet）文章。</li>
<li><strong>MIME类型处理</strong>：提供了<code>ContentType</code>类，用于解析和生成MIME（多用途互联网邮件扩展）类型字符串。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>废弃和替代</strong>：随着Java的发展，<code>org.ietf</code>包中的某些类可能已被标记为废弃，并且可能在未来的Java版本中被移除。例如，<code>InternetAddress</code>类现在位于<code>javax.mail.internet</code>包中，它是JavaMail API的一部分。</li>
<li><strong>依赖性</strong>：使用<code>org.ietf</code>包可能需要额外的库依赖，例如JavaMail API，这需要开发者确保这些依赖被正确地包含在项目中。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>电子邮件处理</strong>：当需要解析或生成电子邮件地址时，可以使用<code>InternetAddress</code>类。</li>
<li><strong>新闻组消息</strong>：在处理Usenet新闻组消息时，可以使用<code>NewsArticle</code>和<code>NewsGroupInfo</code>类。</li>
<li><strong>MIME类型处理</strong>：在需要处理MIME类型字符串时，可以使用<code>ContentType</code>类。</li>
</ul>
<h2><code>org.ietf.jgss</code></h2>
<p>此软件包提供了一个框架，允许应用程序开发人员使用统一的 API 从各种底层安全机制（如 Kerberos）使用安全服务，如身份验证、数据完整性和数据机密性。</p>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - API - 「org.omg」</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Corg.omg%E3%80%8D.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Corg.omg%E3%80%8D.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - API - 「org.omg」</source>
      <description>文章摘要： 提供对对象管理组织（Object Management Group, OMG）定义的几种标准的支持。 简介 简要说明 提供对对象管理组织（Object Management Group, OMG）定义的几种标准的支持。 尤其是用于分布式对象计算的CORBA（Common Object Request Broker Architecture）...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Tue, 24 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 提供对对象管理组织（Object Management Group, OMG）定义的几种标准的支持。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>提供对对象管理组织（Object Management Group, OMG）定义的几种标准的支持。</li>
<li>尤其是用于分布式对象计算的CORBA（Common Object Request Broker Architecture）。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>CORBA支持</strong>：提供了一系列接口和类，用于实现CORBA分布式计算模型，包括ORB（Object Request Broker）的接口、IDL（Interface Definition Language）映射到Java的类、以及实现ORB服务的类。</li>
<li><strong>ORB核心功能</strong>：包括ORB初始化、对象引用解析、请求发送和接收等。</li>
<li><strong>IDL到Java映射</strong>：定义了如何将IDL定义的接口和服务映射到Java语言中的接口和类。</li>
<li><strong>服务</strong>：提供了一些CORBA服务实现，如命名服务、事件服务、事务服务等。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>兼容性</strong>：由于CORBA技术在某些领域已经被其他技术（如Web服务）所取代，<code>org.omg</code> 包中的某些部分可能在未来的Java版本中不被支持。</li>
<li><strong>复杂性</strong>：CORBA应用程序的编写和部署通常比其他分布式计算技术更为复杂。</li>
<li><strong>性能</strong>：CORBA调用可能会引入额外的性能开销，尤其是在网络延迟较高的环境中。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>遗留系统</strong>：对于需要维护或与旧的CORBA系统进行互操作的遗留系统，<code>org.omg</code> 包提供了必要的工具和API。</li>
<li><strong>分布式系统</strong>：在需要构建分布式对象系统，且其他技术（如RMI、JMS、Web服务）不适用的情况下，可以使用<code>org.omg</code> 包来实现。</li>
<li><strong>特定的行业应用</strong>：某些行业（如电信、金融）可能仍然在使用基于CORBA的技术，因此在这些领域可能会有使用场景。</li>
</ul>
<h2><code>org.omg.CORBA</code></h2>
<p>提供 OMG CORBA API 到 JavaTM 的映射 编程语言，包括 class ORB ，该类的实现使程序员可以将其用作功能齐全的对象请求代理 （ORB）。</p>
<h2><code>org.omg.CORBA_2_3</code></h2>
<p>CORBA_2_3 软件包定义了对 Java Standard Edition 6 中现有 CORBA 接口的添加。这些更改发生在 OMG 定义的 CORBA API 的最新修订版中。新方法已添加到从 CORBA 包中的相应接口派生的接口中。这提供了向后兼容性并避免了中断 JCK 测试。</p>
<h2><code>org.omg.CORBA_2_3.portable</code></h2>
<p>提供用于值类型的输入和输出的方法，并包含对 <code>org/omg/CORBA/portable</code> 软件包的其他更新。</p>
<h2><code>org.omg.CORBA.DynAnyPackage</code></h2>
<p>提供用于 <code>DynAny</code> 接口的异常（<code>InvalidValue</code>、 <code>Invalid</code>、<code>InvalidSeq</code> 和 <code>TypeMismatch） 的 Gan Mis</code>。</p>
<h2><code>org.omg.CORBA.ORBPackage</code></h2>
<p>提供异常 <code>InvalidName</code>，该异常由方法 <code>ORB.resolve_initial_references</code> 以及异常 <code>InconsistentTypeCode</code>，该异常由 ORB 类中的 Dynamic Any 创建方法抛出。</p>
<h2><code>org.omg.CORBA.portable</code></h2>
<p>提供可移植性层，即一组 ORB API，使一个供应商生成的代码能够在另一个供应商的 ORB 上运行。</p>
<h2><code>org.omg.CORBA.TyepCodePackage</code></h2>
<p>提供用户定义的异常 <code>BadKind</code> 和 <code>Bounds</code>，它们由 <code>TypeCode</code> 类中的方法引发。</p>
<h2><code>org.omg.CosNaming</code></h2>
<p>为 Java IDL 提供命名服务。</p>
<h2><code>org.omg.CosNaming.NamingContextExtPackage</code></h2>
<p>此包包含以下类，这些类用于 org.omg.CosNaming.NamingContextExt :</p>
<h2><code>org.omg.CosNaming.NamingContextPackage</code></h2>
<p>此包包含 org.omg.CosNaming 包。</p>
<h2><code>org.omg.Dynamic</code></h2>
<p>此软件包包含在 OMG Portable 中指定的 Dynamic 模块 拦截器规范 / <a href="http://cgi.omg.org/cgi-bin/doc?ptc/2000-08-06" target="_blank" rel="noopener noreferrer">http://cgi.omg.org/cgi-bin/doc?ptc/2000-08-06</a>，第 21.9 节。</p>
<h2><code>org.omg.DynamicAny</code></h2>
<p>提供类和接口，允许在运行时遍历与 <code>any</code> 关联的数据值，并提取数据值的基元成分。</p>
<h2><code>org.omg.DynamicAny.DynAnyFactoryPackage</code></h2>
<p>此包包含来自 DynAnyFactory 接口的 DynamicAny OMG 中指定的模块_通用对象请求代理：体系结构和规范_， <a href="http://cgi.omg.org/cgi-bin/doc?formal/99-10-07" target="_blank" rel="noopener noreferrer">http://cgi.omg.org/cgi-bin/doc?formal/99-10-07</a>， 第 9.2.2 节.</p>
<h2><code>org.omg.DynamicAny.DynAnyPackage</code></h2>
<p>此包包含来自 DynAny OMG 中指定的 DynamicAny 模块_的接口通用对象请求代理：体系结构和规范_， <a href="http://cgi.omg.org/cgi-bin/doc?formal/99-10-07" target="_blank" rel="noopener noreferrer">http://cgi.omg.org/cgi-bin/doc?formal/99-10-07</a>，第 9.2 节。</p>
<h2><code>org.omg.IOP</code></h2>
<p>此包包含在 OMG 文档中指定的 IOP 模块 <em>通用对象请求代理：体系结构和规范</em>， <a href="http://cgi.omg.org/cgi-bin/doc?formal/99-10-07" target="_blank" rel="noopener noreferrer">http://cgi.omg.org/cgi-bin/doc?formal/99-10-07</a>，第 13.6 节。</p>
<h2><code>org.omg.IOP.CodecFactoryPackage</code></h2>
<p>此包包含在 IOP：：CodeFactory 接口中指定的异常（作为 Portable Interceptors 规范的一部分）。</p>
<h2><code>org.omg.IOP.CodecPackage</code></h2>
<p>此包是根据 IOP：：Codec IDL 接口定义生成的。</p>
<h2><code>org.omg.Messaging</code></h2>
<p>此软件包包含在 OMG CORBA 中指定的 Messaging 模块 消息传递规范、 <a href="http://cgi.omg.org/cgi-bin/doc?formal/99-10-07" target="_blank" rel="noopener noreferrer">http://cgi.omg.org/cgi-bin/doc?formal/99-10-07</a>。</p>
<h2><code>org.omg.PortableInterceptor</code></h2>
<p>提供一种机制来注册 ORB 钩子，ORB 服务可以通过该机制拦截 ORB 的正常执行流。</p>
<h2><code>org.omg.PortableInterceptor.ORBInitInfoPackage</code></h2>
<p>此包包含来自 ORBInitInfo OMG 中指定的 PortableInterceptor 模块的本地接口 便携式拦截器规范 / <a href="http://cgi.omg.org/cgi-bin/doc?ptc/2000-08-06" target="_blank" rel="noopener noreferrer">http://cgi.omg.org/cgi-bin/doc?ptc/2000-08-06</a>， 节 21.7.2.</p>
<h2><code>org.omg.PortableServer</code></h2>
<p>提供类和接口，使应用程序的服务器端在多供应商 ORB 之间可移植。</p>
<h2><code>org.omg.PortableServer.CurrentPackage</code></h2>
<p>为方法实现提供对调用该方法的对象标识的访问权限。</p>
<h2><code>org.omg.PortableServer.POAManagerPackage</code></h2>
<p>封装与其关联的 POA 的处理状态。</p>
<h2><code>org.omg.PortableServer.POAPackage</code></h2>
<p>允许程序员构建可在不同 ORB 产品之间移植的对象实现。</p>
<h2><code>org.omg.PortableServer.portable</code></h2>
<p>提供类和接口，使应用程序的服务器端在多供应商 ORB 之间可移植。</p>
<h2><code>org.omg.PortableServer.ServantLocatorPackage</code></h2>
<p>提供用于查找 Servant 的类和接口。</p>
<h2><code>org.omg.SendingContext</code></h2>
<p>支持值类型的封送处理。</p>
<h2><code>org.omg.stub.java.rmi</code></h2>
<p>包含 Remote 类型的 RMI-IIOP 存根，这些类型出现在 java.rmi 包。</p>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - API - 「org.w3c」</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Corg.w3c%E3%80%8D.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Corg.w3c%E3%80%8D.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - API - 「org.w3c」</source>
      <description>文章摘要： 包含了与万维网联盟（World Wide Web Consortium, W3C）标准相关的接口和类。 简介 简要说明 包含了与万维网联盟（World Wide Web Consortium, W3C）标准相关的接口和类。 这些标准主要用于处理Web内容，如DOM（Document Object Model）和XML（eXtensible ...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Tue, 24 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 包含了与万维网联盟（World Wide Web Consortium, W3C）标准相关的接口和类。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>包含了与万维网联盟（World Wide Web Consortium, W3C）标准相关的接口和类。</li>
<li>这些标准主要用于处理Web内容，如DOM（Document Object Model）和XML（eXtensible Markup Language）。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>DOM支持</strong>：提供了一系列接口和类，用于在Java应用程序中处理HTML和XML文档。DOM是一个跨平台和语言独立的接口，它允许程序和脚本动态地访问和更新文档的内容、结构和样式。</li>
<li><strong>XML解析</strong>：支持XML的解析，包括验证和转换XML文档。</li>
<li><strong>事件处理</strong>：提供了事件监听和处理机制，允许应用程序响应DOM树的变化。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>版本兼容性</strong>：<code>org.w3c</code> 包中的DOM API可能会随着W3C标准的更新而发生变化，因此在使用时需要注意与特定版本的Java兼容性。</li>
<li><strong>性能考虑</strong>：DOM操作可能会消耗大量内存和处理时间，特别是在处理大型文档时。</li>
<li><strong>替代方案</strong>：对于XML处理，Java还提供了其他库，如JAXB（Java Architecture for XML Binding）和StAX（Streaming API for XML），这些可能更适合某些场景。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>Web服务开发</strong>：在开发需要解析和生成XML的Web服务时，<code>org.w3c</code> 中的DOM API非常有用。</li>
<li><strong>HTML和XML处理</strong>：当需要以编程方式处理HTML或XML文档时，例如在Web爬虫、内容管理系统或富客户端应用程序中。</li>
<li><strong>跨平台开发</strong>：由于DOM是跨平台的，<code>org.w3c</code> 适用于需要在不同操作系统和环境中运行的应用程序。</li>
</ul>
<h2><code>org.w3c.dom</code></h2>
<p>提供文档对象模型 （DOM） 的接口。</p>
<h2><code>org.w3c.dom.bootstrap</code></h2>
<h2><code>org.w3c.dom.events</code></h2>
<h2><code>org.w3c.dom.ls</code></h2>
<h2><code>org.w3c.dom.views</code></h2>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - API - 「org.xml」</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Corg.xml%E3%80%8D.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Corg.xml%E3%80%8D.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - API - 「org.xml」</source>
      <description>文章摘要： 用于处理XML数据。 简介 简要说明 org.xml.sax 和 org.xml.parsers 是Java平台提供的一组API。 用于处理XML数据。org.xml.sax 提供了SAX（Simple API for XML）解析器的接口和类，而 org.xml.parsers 提供了基于SAX的解析器实现。 主要功能 SAX解析：org...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Tue, 24 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 用于处理XML数据。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li><code>org.xml.sax</code> 和 <code>org.xml.parsers</code> 是Java平台提供的一组API。</li>
<li>用于处理XML数据。<code>org.xml.sax</code> 提供了SAX（Simple API for XML）解析器的接口和类，而 <code>org.xml.parsers</code> 提供了基于SAX的解析器实现。</li>
</ul>
<p>主要功能</p>
<ul>
<li>
<p><strong>SAX解析</strong>：<code>org.xml.sax</code> 提供了基于事件的解析器接口，它允许应用程序以流的方式处理XML文档，而不需要将整个文档加载到内存中。</p>
<ul>
<li><strong>内容处理器（ContentHandler）</strong>：处理XML文档的内容，如开始和结束标签。</li>
<li><strong>错误处理器（ErrorHandler）</strong>：处理解析过程中出现的错误。</li>
<li><strong>DTD解析器（DTDHandler）</strong>：处理文档类型定义（DTD）相关的事件。</li>
</ul>
</li>
<li>
<p><strong>DOM解析</strong>：<code>org.xml.parsers</code> 包提供了DOM解析器的实现，允许应用程序构建XML文档的树形结构并进行操作。</p>
</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>性能</strong>：SAX是基于事件的解析器，它比DOM解析器在处理大型文档时更加高效，因为它不需要将整个文档加载到内存中。</li>
<li><strong>事件驱动</strong>：SAX解析是事件驱动的，这意味着你需要编写代码来处理特定的事件，而不是直接操作文档树。</li>
<li><strong>错误处理</strong>：在使用SAX解析时，应该注意正确地处理解析错误和异常。</li>
<li><strong>兼容性</strong>：在Java 8中，<code>org.xml.parsers</code> 包中的<code>DocumentBuilderFactory</code>和<code>SAXParserFactory</code>类可能不支持XML Schema验证。如果需要XML Schema验证，可以考虑使用<code>javax.xml.parsers</code>包中的类。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>流式XML处理</strong>：当需要处理大型XML文件或流式数据时，SAX是更好的选择，因为它不需要将整个文档加载到内存中。</li>
<li><strong>性能敏感的应用</strong>：对于性能敏感的应用程序，SAX提供了比DOM更高效的解析方法。</li>
<li><strong>简单的XML解析</strong>：对于不需要复杂文档操作的简单XML解析任务，SAX提供了一个简单且易于实现的解决方案。</li>
</ul>
<h2><code>org.xml.sax</code></h2>
<p>此软件包提供核心 SAX API。</p>
<h2><code>org.xml.sax.ext</code></h2>
<p>此软件包包含符合 SAX 驱动程序不一定支持的 SAX2 工具的接口。</p>
<h2><code>org.xml.sax.helpers</code></h2>
<p>此包包含“帮助程序”类，包括对引导基于 SAX 的应用程序的支持。</p>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - RSS订阅聚合</title>
      <link>https://blog.magictable.ha.cn/note/Technology-RSS%E8%AE%A2%E9%98%85%E8%81%9A%E5%90%88.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-RSS%E8%AE%A2%E9%98%85%E8%81%9A%E5%90%88.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - RSS订阅聚合</source>
      <description>文章摘要： RSS订阅聚合是一种网络服务，它允许用户将多个RSS源（Really Simple Syndication，简易信息聚合）集中到一个单一的feed流中，方便用户在一个地方浏览和管理来自不同网站或博客的最新内容。 简介 简要说明 RSS订阅聚合服务通过收集来自用户订阅的各个网站的RSS feed，然后将这些信息汇总并展示给用户。 用户无需逐一...</description>
      <category>学习笔记/技术</category>
      <pubDate>Sun, 22 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> RSS订阅聚合是一种网络服务，它允许用户将多个RSS源（Really Simple Syndication，简易信息聚合）集中到一个单一的feed流中，方便用户在一个地方浏览和管理来自不同网站或博客的最新内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<blockquote>
<ul>
<li>RSS订阅聚合服务通过收集来自用户订阅的各个网站的RSS feed，然后将这些信息汇总并展示给用户。</li>
<li>用户无需逐一访问各个网站，即可在一个界面上阅读最新的文章或更新。</li>
</ul>
</blockquote>
<p>主要功能</p>
<blockquote>
<ul>
<li><strong>源管理</strong>：用户可以添加、删除或管理他们订阅的RSS源。</li>
<li><strong>内容聚合</strong>：自动从所有订阅的源中抓取最新内容，并展示在一个统一的界面中。</li>
<li><strong>分类与标签</strong>：用户可以将订阅源分类，或给内容打上标签以便更好地管理。</li>
<li><strong>全文阅读</strong>：部分服务支持直接在聚合器内阅读全文，无需跳转到原网站。</li>
<li><strong>搜索与过滤</strong>：用户可以通过关键词搜索订阅的内容，或根据特定条件过滤信息。</li>
<li><strong>分享与保存</strong>：用户可以分享感兴趣的内容到社交网络，或保存文章以备后续阅读。</li>
<li><strong>通知提醒</strong>：当有新内容更新时，服务可以发送通知或邮件提醒用户。</li>
</ul>
</blockquote>
<p>注意事项</p>
<blockquote>
<ul>
<li><strong>隐私保护</strong>：使用RSS聚合服务时，需注意个人隐私保护，避免敏感信息泄露。</li>
<li><strong>服务稳定性</strong>：选择信誉良好、服务稳定的聚合服务提供商，确保服务的连续性。</li>
<li><strong>版权问题</strong>：尊重内容的版权，合理使用聚合内容，避免侵犯版权。</li>
<li><strong>数据安全</strong>：确保聚合服务提供商有可靠的数据安全措施，防止数据丢失或被非法使用。</li>
</ul>
</blockquote>
<p>适用场景</p>
<blockquote>
<ul>
<li><strong>信息监控</strong>：媒体从业者、研究人员等需要监控多个信息源的人士。</li>
<li><strong>学习与研究</strong>：学生、学者等需要跟踪特定领域最新动态的用户。</li>
<li><strong>兴趣爱好</strong>：对特定主题感兴趣的普通用户，如科技、财经、体育等。</li>
<li><strong>企业应用</strong>：企业用于市场调研、竞品分析、行业动态监控等。</li>
</ul>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Society（社会）</title>
      <link>https://blog.magictable.ha.cn/rule/Society%EF%BC%88%E7%A4%BE%E4%BC%9A%EF%BC%89.html</link>
      <guid>https://blog.magictable.ha.cn/rule/Society%EF%BC%88%E7%A4%BE%E4%BC%9A%EF%BC%89.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Society（社会）</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 稳定运行社会规则。 前提条件：需要满足政策要求，并规避法律制裁。 主要特点 注意事项 适用场景 基础知识 注释 国家不允许一家独大。 公司与公司、部门与部门之间存在上下级关系，权限也不相同，在进行消息传达方面还有待优化的空间，尽可能除了老板之外的其他管理层人员替换为自动化程序。 地方 小区/社区机构 居民委员会（...</description>
      <category>世界规则/社会</category>
      <pubDate>Sat, 21 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>稳定运行社会规则。</li>
<li>前提条件：需要满足政策要求，并规避法律制裁。</li>
</ul>
<p>主要特点</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>基础知识</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>国家不允许一家独大。</li>
<li>公司与公司、部门与部门之间存在上下级关系，权限也不相同，在进行消息传达方面还有待优化的空间，尽可能除了老板之外的其他管理层人员替换为自动化程序。</li>
</ul>
</div>
<h2>地方</h2>
<p>小区/社区机构</p>
<ul>
<li><strong>居民委员会（居委会）</strong>：这是小区或社区的“小政府”，负责协调居民事务，解决邻里纠纷，组织社区活动，传达政府政策等。</li>
<li><strong>公安派出所（派出所）</strong>：相当于社区的“警察局”，负责辖区内的治安管理、户籍管理、打击犯罪、服务群众等工作。</li>
</ul>
<p>政府机构</p>
<ul>
<li><strong>行政服务中心</strong>：为老百姓提供“一站式”服务的政府机构，个人和公司正规场合所需事情办理的地方。（服务中心，最权威的地方）</li>
<li><strong>公安局</strong>：是政府设立的维护社会治安和公共安全的部门，负责刑事侦查、治安管理、交通管理、消防管理等工作。</li>
<li><strong>其他政府机构</strong>：包括教育、卫生、环保、交通、建设等各个领域的政府部门，它们负责制定和执行相关政策，为民众提供<strong>公共服务</strong>。（一般在行政服务中心附近）</li>
</ul>
<p>商业机构</p>
<ul>
<li><strong>营业厅/线下店</strong>：办理个人日常需求的业务，如农业银行、移动营业厅、小米线下店。私人开设的线下店，商店、打印店、理发店、饭店、书店等。</li>
<li>网络提供商：<a href="/rule/Society-%E8%BF%90%E8%90%A5%E5%95%86-%E7%BD%91%E7%BB%9C%E9%80%9A%E4%BF%A1.html" target="_blank">Society-运营商-网络通信</a></li>
<li>基础云计算服务：<a href="/rule/Society-%E4%BE%9B%E5%BA%94%E9%93%BE-%E5%9F%BA%E7%A1%80%E4%BA%91%E8%AE%A1%E7%AE%97.html" target="_blank">Society-供应链-基础云计算</a></li>
<li>播客：<a href="/rule/Society-%E6%92%AD%E5%AE%A2.html" target="_blank">Society-播客</a></li>
<li>广播：<a href="/rule/Society-FM%E5%B9%BF%E6%92%AD%E7%94%B5%E5%8F%B0.html" target="_blank">Society-FM广播电台</a></li>
</ul>
<h2>礼貌相关</h2>
<ul>
<li><strong>社会习俗</strong>：包括礼仪、节日习俗、饮食习惯等。</li>
<li><strong>社会规范</strong>：如行为规范、交往规范等。</li>
</ul>
<h2>日常流程</h2>
<p>购物流程和渠道</p>
<p>买房流程、租房流程、卖房流程</p>
<p>乘坐交通工具：公交车、出租车、地铁、高铁、飞机</p>
<p>公司相关：入职流程、离职流程</p>
<h2>投诉方案和流程</h2>
<p><strong>方式</strong>：客服、平台、意见箱、市长热线、工信部</p>
<p><strong>内外投诉</strong>：内部投诉、外部投诉</p>
<h2>协议</h2>
<p>对双方的限制</p>
<h2>证书</h2>
<p>个人的技术证明</p>
<h2>公司策略-01</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>请尽可能让自己明白自己的目标和任务。</li>
<li>避免被其他事务干扰。</li>
</ul>
</div>
<ul>
<li><strong>问题</strong>：当面试官问你的优点或才能的时候请不要太过凸显自己的优点。</li>
<li><strong>答案</strong>：因为老板想在你入职后能以一样的价钱，让你多干其他工作。即不要凸显自己身上的羊毛或肉太多。</li>
<li><strong>相关知识</strong>：PUA</li>
</ul>
<h2>公司策略-02</h2>
<h3>题目</h3>
<p>一家公司招应届实习生，对实习生说有岗前培训，签完劳动合同后，将进行培训学习，学习完后，公司将与其他公司合作，并对该实习生进行面试，排该实习生去第三方公司工作，工作表现好，将会被原公司召回，工作表现不好，将不会被召回。</p>
<ul>
<li>原公司招聘应届毕业生到本公司，签署培训协议，在培训公司里面学习，再推送给其他第三方公司，工作表现好的话才会再调回原公司。</li>
</ul>
<p>理解：这似乎是在筛选优秀的且有工作经验的人，并且能赚取国家补贴。</p>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>该方法可以赚取应届生的国家补贴。</p>
</div>
<h3>解析</h3>
<p><strong>招聘阶段：</strong></p>
<ol>
<li><strong>岗位发布</strong>：公司发布实习生招聘信息，明确岗位要求和待遇。</li>
<li><strong>简历筛选</strong>：公司根据简历筛选合适的候选人。</li>
</ol>
<p><strong>岗前培训阶段：</strong></p>
<ol>
<li><strong>签订劳动合同</strong>：与实习生签订劳动合同，明确双方的权利和义务。</li>
<li><strong>岗前培训</strong>：公司为实习生提供岗前培训，旨在提升其专业技能和公司文化理解。</li>
</ol>
<p><strong>合作与面试阶段：</strong></p>
<ol>
<li><strong>合作机会</strong>：公司与其他公司合作，为实习生提供工作机会。</li>
<li><strong>第三方公司面试</strong>：公司将实习生推荐至第三方公司，实习生在第三方公司进行实际工作。</li>
<li><strong>面试流程</strong>：实习生在第三方公司工作期间，将接受第三方公司的面试评估。</li>
</ol>
<p><strong>召回与评估阶段：</strong></p>
<ol>
<li><strong>工作表现评估</strong>：第三方公司根据实习生的表现进行评估。</li>
<li><strong>召回决策</strong>：
<ul>
<li><strong>表现好</strong>：如果实习生工作表现良好，公司将考虑将其召回，成为公司正式员工。</li>
<li><strong>表现不好</strong>：如果实习生工作表现不佳，公司将不会召回该实习生。</li>
</ul>
</li>
</ol>
<p><strong>策略分析：</strong></p>
<ul>
<li><strong>降低招聘风险</strong>：通过第三方公司的工作表现评估，公司可以降低直接招聘应届生带来的风险。</li>
<li><strong>人才筛选</strong>：公司可以利用第三方公司的面试和评估过程，筛选出最合适的人才。</li>
<li><strong>成本控制</strong>：公司可以在不承担直接雇佣成本的情况下，评估实习生的实际工作能力。</li>
<li><strong>灵活用工</strong>：公司可以灵活地根据实习生的工作表现来决定是否将其召回，提高了人力资源的灵活性。</li>
</ul>
<p><strong>潜在问题：</strong></p>
<ul>
<li><strong>实习生忠诚度</strong>：实习生可能对最终是否被召回感到不确定，这可能会影响其在第三方公司的投入和表现。</li>
<li><strong>第三方公司管理</strong>：实习生在第三方公司的工作环境和公司文化可能与原公司有所不同，这可能会影响实习生的适应和表现。</li>
<li><strong>法律风险</strong>：如果实习生在第三方公司发生意外或纠纷，原公司可能需要承担一定的法律责任。</li>
</ul>
<h2>实体店经济运行逻辑</h2>
<ol>
<li>市场与可行性分析</li>
<li>启动资金</li>
<li>场地</li>
<li>供应链</li>
<li>运营与营销</li>
<li>财务管理</li>
<li>法律与税务</li>
<li>风险管理</li>
<li>盈利与发展</li>
</ol>
]]></content:encoded>
    </item>
    <item>
      <title>DataStructure（数据结构）</title>
      <link>https://blog.magictable.ha.cn/software/DataStructure%EF%BC%88%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%EF%BC%89.html</link>
      <guid>https://blog.magictable.ha.cn/software/DataStructure%EF%BC%88%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%EF%BC%89.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">DataStructure（数据结构）</source>
      <description>文章摘要： 数据结构是一种数据组织、管理和存储的格式。是相互之间存在一种或多种特定关系的数据元素的集合。 简介 简要说明 数据结构是一种数据组织、管理和存储的格式。 是相互之间存在一种或多种特定关系的数据元素的集合。 通常情况下，精心选择的数据结构可以带来更高的运行或者存储效率。 数据结构往往同高效的检索算法和索引技术相关。 数据结构研究的是数据的逻辑...</description>
      <category>软件程序/数据结构</category>
      <pubDate>Sat, 21 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 数据结构是一种数据组织、管理和存储的格式。是相互之间存在一种或多种特定关系的数据元素的集合。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>数据结构是一种数据组织、管理和存储的格式。</li>
<li>是相互之间存在一种或多种特定关系的数据元素的集合。</li>
<li>通常情况下，精心选择的数据结构可以带来更高的运行或者存储效率。</li>
<li>数据结构往往同高效的检索算法和索引技术相关。</li>
<li>数据结构研究的是数据的逻辑结构和数据的物理结构以及它们之间的相互关系。</li>
<li>包含三个方面的内容：数据的逻辑结构、数据的存储结构、数据的操作。</li>
<li>只有这三个方面的内容完全相同，才能成为完全相同的数据结构。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>存储数据</strong>：提供一种方式来存储数据元素。</li>
<li><strong>访问数据</strong>：支持对存储的数据进行高效的插入、删除、修改和查询操作。</li>
<li><strong>管理数据</strong>：通过特定的结构来优化数据的存储和访问效率。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>选择合适的结构</strong>：不同的数据结构适用于不同的场景，选择合适的数据结构可以显著提高程序的效率。</li>
<li><strong>时间和空间复杂度</strong>：不同的数据结构在操作的时间复杂度和空间复杂度上有所不同，需要根据具体需求进行权衡。</li>
<li><strong>内存管理</strong>：对于一些数据结构，如动态数组、链表等，需要手动管理内存分配和释放。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>数组</strong>：适用于元素数量固定且需要快速随机访问的场景。</li>
<li><strong>链表</strong>：适用于元素数量动态变化，频繁进行插入和删除操作的场景。</li>
<li><strong>栈和队列</strong>：适用于需要后进先出（LIFO）或先进先出（FIFO）数据访问模式的场景。</li>
<li><strong>树</strong>：适用于需要层次化存储和快速查找、排序的场景，如二叉搜索树、平衡树等。</li>
<li><strong>图</strong>：适用于表示复杂的关系网络，如社交网络、路线规划等。</li>
</ul>
<h2>基础知识</h2>
<h2>线性数据结构</h2>
<ul>
<li>线性数据结构中的数据元素存在一对一的关系。</li>
</ul>
<h3>数组（Array）</h3>
<ul>
<li>静态数组：大小固定，元素类型相同。</li>
<li>动态数组：大小可变，元素类型相同。</li>
</ul>
<h3>链表（Linked List）</h3>
<ul>
<li>单链表：每个元素包含数据和指向下一个元素的指针。</li>
<li>双链表：每个元素包含数据和指向下一个以及前一个元素的指针。</li>
<li>循环链表：最后一个元素的指针指向第一个元素。</li>
</ul>
<h3>栈（Stack）</h3>
<ul>
<li>后进先出（LIFO）的数据结构。</li>
</ul>
<h3>队列（Queue）</h3>
<ul>
<li>先进先出（FIFO）的数据结构。</li>
<li>双端队列（Deque）：两端都可以进行插入和删除操作。</li>
</ul>
<h2>非线性数据结构</h2>
<ul>
<li>非线性数据结构中的数据元素存在多对多的关系。</li>
</ul>
<h3>树（Tree）</h3>
<p>二叉树：每个节点最多有两个子节点。</p>
<ul>
<li>二叉搜索树（BST）：左子树的所有节点小于根节点，右子树的所有节点大于根节点。</li>
<li>平衡二叉树（AVL）：自平衡的二叉搜索树。</li>
<li>红黑树：自平衡的二叉搜索树，通过颜色标记保持平衡。</li>
</ul>
<p>B树、B+树、B*树：用于数据库和文件系统的索引。</p>
<p>堆（Heap）：特殊的完全二叉树，常用于实现优先队列。</p>
<h3>图（Graph）</h3>
<ul>
<li>无向图：边没有方向。</li>
<li>有向图：边有方向。</li>
<li>带权图：边有权重。</li>
<li>稀疏图和稠密图：根据边的数量相对于节点数量的多少来区分。</li>
</ul>
<h2>特殊数据结构</h2>
<h3>哈希表（Hash Table）</h3>
<ul>
<li>通过哈希函数将键映射到表中一个位置来访问记录，速度非常快。</li>
</ul>
<h3>集合（Set）</h3>
<ul>
<li>不包含重复元素的集合。</li>
</ul>
<h3>字典（Dictionary）/映射（Map）</h3>
<ul>
<li>键值对集合，每个键都是唯一的。</li>
</ul>
<h3>优先队列（Priority Queue）</h3>
<ul>
<li>元素按照优先级排列的队列。</li>
</ul>
<h2>其他数据结构</h2>
<h3>字符串（String）</h3>
<ul>
<li>特殊的数组，用于存储字符序列。</li>
</ul>
<h3>位图（Bit Array）</h3>
<ul>
<li>每个元素只占用一个位，用于高效存储布尔值。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>OS（操作系统）</title>
      <link>https://blog.magictable.ha.cn/software/OS%EF%BC%88%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%EF%BC%89.html</link>
      <guid>https://blog.magictable.ha.cn/software/OS%EF%BC%88%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%EF%BC%89.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">OS（操作系统）</source>
      <description>文章摘要： 操作系统（Operating System, OS）是管理计算机硬件与软件资源的系统软件。 简介 简要说明 操作系统（Operating System, OS）是管理计算机硬件与软件资源的系统软件。 它是计算机系统的核心与基石。 操作系统负责提供用户与计算机硬件之间的接口，同时也负责协调和控制计算机系统的所有操作。 主要功能 资源管理：操作...</description>
      <category>软件程序/操作系统</category>
      <pubDate>Sat, 21 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 操作系统（Operating System, OS）是管理计算机硬件与软件资源的系统软件。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>操作系统（Operating System, OS）是管理计算机硬件与软件资源的系统软件。</li>
<li>它是计算机系统的核心与基石。</li>
<li>操作系统负责提供用户与计算机硬件之间的接口，同时也负责协调和控制计算机系统的所有操作。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>资源管理</strong>：操作系统管理计算机的硬件资源，如CPU、内存、磁盘驱动器和其他设备。</li>
<li><strong>进程管理</strong>：操作系统负责进程的创建、调度、同步、通信和终止。</li>
<li><strong>内存管理</strong>：操作系统管理主存和虚拟内存，进行内存分配和回收。</li>
<li><strong>文件系统管理</strong>：操作系统提供文件系统的支持，管理文件的存储、检索和更新。</li>
<li><strong>用户接口</strong>：操作系统提供用户接口，如命令行界面（CLI）和图形用户界面（GUI）。</li>
<li><strong>安全</strong>：操作系统确保计算机系统的安全，防止未授权的访问和数据泄露。</li>
<li><strong>错误检测和处理</strong>：操作系统能够检测到系统错误，并进行处理，保证系统的稳定运行。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>兼容性</strong>：选择操作系统时，需考虑与其他软件和硬件的兼容性。</li>
<li><strong>安全性</strong>：操作系统应定期更新，以修补安全漏洞。</li>
<li><strong>性能</strong>：操作系统的选择应考虑其对系统性能的影响。</li>
<li><strong>用户友好性</strong>：操作系统的用户界面应易于使用，以提高用户体验。</li>
<li><strong>稳定性</strong>：操作系统应具备良好的稳定性，避免频繁的系统崩溃。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>个人电脑</strong>：如Windows、macOS和Linux等，适用于个人用户日常使用。</li>
<li><strong>服务器</strong>：如Linux、Unix和Windows Server，适用于企业级应用和数据服务。</li>
<li><strong>嵌入式系统</strong>：如RTOS（实时操作系统），适用于嵌入式设备，如智能家居、工业控制系统。</li>
<li><strong>移动设备</strong>：如Android和iOS，适用于智能手机和平板电脑。</li>
<li><strong>超级计算机</strong>：如Linux，适用于需要高性能计算的场景。</li>
</ul>
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<p>操作系统需要关注的是计算机的CPU硬件架构，因为不同的CPU架构支持不同的操作系统版本。</p>
<ul>
<li><strong>CPU硬件型号</strong>：查看计算机的CPU型号，了解其支持的指令集和架构类型，如LoongArch、x86_64（amd64）、ARM等。[]</li>
<li><strong>操作系统要求</strong>：根据操作系统的官方文档或系统要求，确认该操作系统支持哪些CPU架构。例如，Windows操作系统分为32位和64位版本，而Linux则有许多针对不同CPU硬件架构的发行版。</li>
</ul>
<p>CPU架构详细总结：<a href="/hardware/Component-%E8%8A%AF%E7%89%87-%E6%8C%87%E4%BB%A4%E9%9B%86%E6%9E%B6%E6%9E%84.html" target="_blank">Component-芯片-指令集架构</a></p>
</div>
<h2>基础知识</h2>
<h3>文件系统</h3>
<p>详细总结：<a href="/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F.html" target="_blank">基础知识-文件系统</a></p>
<h3>文件格式</h3>
<p>详细总结：<a href="/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E6%96%87%E4%BB%B6%E6%A0%BC%E5%BC%8F.html" target="_blank">基础知识-文件格式</a></p>
<h2>产品应用</h2>
<h3>Windows</h3>
<ul>
<li>Windows 是微软公司开发的一个电脑操作系统。</li>
</ul>
<p>详细总结：<a href="/software/OS-Windows.html" target="_blank">OS-Windows</a></p>
<h3>Debian Linux</h3>
<ul>
<li>多用户、多任务、多线程、非实时的操作系统。</li>
<li>GNU/Linux 用户在挑选软件方面有着极大的自由。例如，他们可以选择几十种不同的命令行外壳和多种图形桌面。</li>
<li>GNU/Linux 很少会崩溃、适合在同一时间运行多个程序，而且比大多数操作系统更为安全。</li>
</ul>
<p>详细总结：<a href="/software/OS-DebianLinux.html" target="_blank">OS-DebianLinux</a></p>
<h3>CentOS</h3>
<ul>
<li>CentOS（Community Enterprise Operating System）是一个基于Red Hat Enterprise Linux（RHEL）构建的免费、开源的操作系统。</li>
<li>它旨在与RHEL在功能上兼容，但不包含Red Hat的商业支持。</li>
</ul>
<p>详细总结：<a href="/software/OS-CentOS.html" target="_blank">OS-CentOS</a></p>
<h3>Loongnix</h3>
<ul>
<li>Loongnix操作系统是龙芯开源社区推出的Linux操作系统。</li>
<li>作为龙芯软件生态建设的成果验证和展示环境，集成了内核、工具链、龙芯浏览器、Java虚拟机、音视频库、图形环境、云计算、打印驱动等操作系统基础设施方面的最新研发成果。</li>
<li>可直接应用于日常办公、生产、生活等应用环境，同时可供合作厂商、科研机构及爱好者在龙芯平台上研发其品牌软件或专用系统.</li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>Android</h3>
<ul>
<li>Android是一个由Google开发的开放源代码操作系统。</li>
<li>主要用于移动设备，如智能手机和平板电脑。</li>
<li>Android的开放性允许设备制造商和运营商对系统进行定制，以适应不同的硬件和市场需求。</li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>OpenHarmony</h3>
<ul>
<li>OpenHarmony是由华为发起的一个开源项目。</li>
<li>旨在创建一个适用于多种设备的操作系统。</li>
<li>是一个全场景、多设备类型的分布式操作系统，旨在支持包括智能手机、平板电脑、智能手表、车载系统、智能家居等在内的多种硬件平台。</li>
</ul>
<p>详细总结：<a href="/software/OS-OpenHarmony.html" target="_blank">OpenHarmony</a></p>
<h3>FreeRTOS</h3>
<ul>
<li>FreeRTOS是指小型实时操作系统内核。作为一个轻量级的操作系统，其功能包括：任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等，可基本满足较小系统的需要。</li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>实时操作系统 (RTOS) 是一种体积小巧、确定性强的计算机操作系统。 RTOS 通常用于需要在严格时间限制内对外部事件做出反应的嵌入式系统，如医疗设备和汽车电子控制单元 (ECU)。 通常，此类嵌入式系统中只有一两项功能需要确定性时序，即使嵌入式系统不需要严格的实时反应，使用 RTOS 仍能提供诸多优势。</p>
</div>
<p>详细总结：<a href=""></a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Package（软件包）</title>
      <link>https://blog.magictable.ha.cn/software/Package%EF%BC%88%E8%BD%AF%E4%BB%B6%E5%8C%85%EF%BC%89.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package%EF%BC%88%E8%BD%AF%E4%BB%B6%E5%8C%85%EF%BC%89.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package（软件包）</source>
      <description>文章摘要： 运行在系统中的程序和软件，同时也包括游戏等都属于独立的软件包，并整理软件包相关知识总结。 简介 简要说明 主要功能 注意事项 适用场景 基础知识 注释 一般情况下，软件能通过手动添加或修改配置文件，实现个性化。 办公工具 Terminal，终端模拟器软件。 ，脚本语言程序。 ，文本查看和编辑。 ，文本查看和编辑。 LibreOffice，自...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 21 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 运行在系统中的程序和软件，同时也包括游戏等都属于独立的软件包，并整理软件包相关知识总结。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>基础知识</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>一般情况下，软件能通过手动添加或修改配置文件，实现个性化。</p>
</div>
<h2>办公工具</h2>
<ul>
<li>Terminal，终端模拟器软件。</li>
<li><a href="/software/Package-Bash.html" target="_blank">Package-Bash</a>，脚本语言程序。</li>
<li><a href="/software/Package-Vim.html" target="_blank">Package-Vim</a>，文本查看和编辑。</li>
<li><a href="/software/Package-Nano.html" target="_blank">Package-Nano</a>，文本查看和编辑。</li>
<li>LibreOffice，自由免费的全能办公套件。</li>
<li>VLC，多媒体播放器软件及框架。</li>
<li>Firefox，隐私放在首位的浏览器软件。</li>
<li><a href="/software/Package-Obsidian.html" target="_blank">Package-Obsidian</a>，本地存储的双向连接笔记。</li>
<li><a href="/software/Package-RSS.html" target="_blank">Package-RSS</a>，。</li>
<li>Thunderbird，电子邮件、聊天、通讯录、日历、文件快传、RSS收取点、新闻组。</li>
<li><a href="/software/Package-WPS.html" target="_blank">Package-WPS</a>，文档、表格、PPT编辑软件。</li>
<li>VirtualBox，虚拟化环境软件。</li>
</ul>
<h2>程序开发</h2>
<ul>
<li>Sublime Text，专为代码、标记和文章设计的精致文本编辑器。</li>
<li><a href="/software/Package-VisualStudioCode.html" target="_blank">Package-VisualStudioCode</a>，代码编辑器。</li>
<li><a href="/software/Package-IntellijIDEA.html" target="_blank">Package-IntellijIDEA</a>，集成开发环境。</li>
<li>OpenPLC，基于 Beremiz IDE 的多硬件可编程逻辑控制器套件。</li>
<li><a href="/software/Package-OpenJDK.html" target="_blank">Package-OpenJDK</a>，Java开发，社区开源版本。</li>
<li><a href="/software/Package-OracleJDK.html" target="_blank">Package-OracleJDK</a>，Java开发，官方商业版本。</li>
<li><a href="/software/Package-Docker.html" target="_blank">Package-Docker</a></li>
<li><a href="/software/Package-Kubectl.html" target="_blank">Package-Kubectl</a></li>
<li><a href="/software/Package-LaTeX.html" target="_blank">Package-LaTeX</a></li>
<li><a href="/software/Package-AndroidSDK.html" target="_blank">Package-AndroidSDK</a></li>
<li><a href="/software/Package-NodeJS.html" target="_blank">Package-NodeJS</a></li>
<li><a href="/software/Package-Pip.html" target="_blank">Package-Pip</a></li>
<li><a href="/software/Package-Miniconda.html" target="_blank">Package-Miniconda</a></li>
</ul>
<h2>艺术创作</h2>
<ul>
<li>OBS-Studio，视频录制和直播软件。</li>
<li>Krita，数字绘画软件。</li>
<li>GIMP，图像编辑器软件。</li>
<li><a href="/software/Package-Blender.html" target="_blank">Package-Blender</a>，数字三维建模软件。</li>
<li>FreeCAD，参数化建模软件，适用工业设计，图纸设计，电路图设计。</li>
<li><a href="/software/Package-OpenSCAD.html" target="_blank">Package-OpenSCAD</a>，程序化三维建模软件。</li>
<li>QGIS，基于 Beremiz IDE 的多硬件可编程逻辑控制器套件。</li>
</ul>
<h2>自动化构建</h2>
<ul>
<li><a href="/software/Package-Maven.html" target="_blank">Package-Maven</a></li>
<li><a href="/software/Package-Gradle.html" target="_blank">Package-Gradle</a></li>
</ul>
<h2>远程控制</h2>
<ul>
<li><a href="/software/Package-OpenSSH.html" target="_blank">Package-OpenSSH</a>，终端命令远程连接。</li>
<li>Remmina，远程访问控制软件。</li>
<li><a href="/software/Package-TightVNC.html" target="_blank">Package-TightVNC</a>，图形化远程连接。</li>
</ul>
<h2>安全加密</h2>
<ul>
<li><a href="/software/Package-GnuPG.html" target="_blank">Package-GnuPG</a></li>
</ul>
<h2>网络传输</h2>
<ul>
<li><a href="/software/Package-Curl.html" target="_blank">Package-Curl</a></li>
<li><a href="/software/Package-Wget.html" target="_blank">Package-Wget</a></li>
</ul>
<h2>软件包管理</h2>
<ul>
<li><a href="/software/Package-Apt.html" target="_blank">Package-Apt</a>，Debian Linux操作系统的包管理工具。</li>
<li><a href="/software/Package-Dpkg.html" target="_blank">Package-Dpkg</a>，Debian Linux操作系统的包管理工具。</li>
</ul>
<h2>版本控制</h2>
<ul>
<li><a href="/software/Package-Git.html" target="_blank">Package-Git</a></li>
<li><a href="/software/Package-Subversion.html" target="_blank">Package-Subversion</a></li>
</ul>
<h2>服务程序</h2>
<ul>
<li><a href="/software/Package-Nginx.html" target="_blank">Package-Nginx</a></li>
<li><a href="/software/Package-Tomcat.html" target="_blank">Package-Tomcat</a></li>
<li><a href="/software/Package-Nacos.html" target="_blank">Package-Nacos</a></li>
<li><a href="/software/Package-RocketMQ.html" target="_blank">Package-RocketMQ</a></li>
</ul>
<h2>数据库</h2>
<ul>
<li><a href="https://database.51cto.com/art/202103/654746.html" target="_blank" rel="noopener noreferrer">最新数据库流行趋势排名及应用场景</a></li>
</ul>
<h3>关系型数据库</h3>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>关系型数据库，采用了关系模型来组织数据的数据库，其以行和列的形式存储数据。</li>
<li>常用的关系型数据库有Oracle、MySQL、Microsoft SQL Server、PostgreSQL、Db2等。</li>
</ul>
</div>
<ul>
<li><a href="/software/Package-MySQL.html" target="_blank">Package-MySQL</a></li>
<li><a href="/software/Package-PostgreSQL.html" target="_blank">Package-PostgreSQL</a></li>
</ul>
<h3>Key-Value数据库</h3>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>非关系型数据库模型(NoSQL)，其数据按照键值对Key-Value的形式进行组织、索引和存储。</li>
<li>key-value数据库的主要特点是具有极高的并发读写性能，所以非常适合分布式高并发场景下使用。</li>
<li>常见的key-value数据库有Redis、Memcached等，</li>
</ul>
</div>
<ul>
<li><a href="/software/Package-Redis.html" target="_blank">Package-Redis</a></li>
</ul>
<h3>文档型数据库</h3>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>文档型数据库是NoSQL中非常重要的一个分支，它主要用来存储、索引并管理面向文档的数据或者类似的半结构化数据。</li>
<li>大家可能比较熟悉的MongoDB就是典型的文档型数据库。</li>
</ul>
</div>
<ul>
<li><a href="/software/Package-MongoDB.html" target="_blank">Package-MongoDB</a></li>
</ul>
<h3>时序数据库</h3>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>时序数据库全称为时间序列数据库。时间序列数据库主要用于指处理带时间标签(按照时间的顺序变化，即时间序列化)的数据，带时间标签的数据也称为时间序列数据。</li>
<li>使用场景：时间序列数据主要由诸如电力行业、化工行业等各类型设备采集产生的数据，这些工业数据的典型特点是：产生频率快、严重依赖于采集时间、测点多、信息量大、需要实时更新和查询，时序数据库的典型代表是influxdb。</li>
</ul>
</div>
<ul>
<li><a href="/software/Package-InfluxDB.html" target="_blank">Package-InfluxDB</a></li>
</ul>
<h3>图形数据库</h3>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>图形数据库是NoSQL数据库的一种类型，它应用图形理论存储实体之间的关系信息。</li>
<li>图形数据库是一种非关系型数据库，它应用图形理论存储实体之间的关系信息。</li>
<li>常见的图形数据库有Neo4j、ArangoDB，其应用于多对多关系数据库场景如社交关系网络。</li>
</ul>
</div>
<ul>
<li>Neo4j</li>
</ul>
<h3>检索型数据库</h3>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>检索型数据库的典型代表Elasticseach。</li>
<li>其应用场景搜索服务、日志分析，如文档基于ES 做全文检索、电商海量商品搜索。</li>
<li>典型搜索场景 Elasticseach具有高可用性、高扩展性、查询速度快、搜索功能强大等特点。</li>
</ul>
</div>
<ul>
<li>Elasticsearch</li>
</ul>
<h3>列式数据库</h3>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
</div>
<ul>
<li>Cassamdra</li>
<li>HBase</li>
</ul>
<h2>驱动程序</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>驱动程序全称设备驱动程序，是添加到操作系统中的特殊程序，其中包含有关硬件设备的信息。此信息能够使计算机与相应的设备进行通信。</p>
<p>驱动程序是硬件厂商根据操作系统编写的配置文件，可以说没有驱动程序，计算机中的硬件就无法工作。</p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Library - Maven - Jackson</title>
      <link>https://blog.magictable.ha.cn/software/Library-Maven-Jackson.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Maven-Jackson.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Maven - Jackson</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 Jackson是一个用于处理JSON数据的开源Java库，由FasterXML公司开发。 提供了丰富的功能，包括将Java对象转换为JSON字符串（序列化）以及将JSON字符串转换为Java对象（反序列化）。 Jackson已经成为Java领域处理JSON数据的事实标准库之一。 主要功能 序列化：将Java对象转...</description>
      <category>软件程序/代码类库</category>
      <pubDate>Fri, 20 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<blockquote>
<ul>
<li>Jackson是一个用于处理JSON数据的开源Java库，由FasterXML公司开发。</li>
<li>提供了丰富的功能，包括将Java对象转换为JSON字符串（序列化）以及将JSON字符串转换为Java对象（反序列化）。</li>
<li>Jackson已经成为Java领域处理JSON数据的事实标准库之一。</li>
</ul>
</blockquote>
<p>主要功能</p>
<blockquote>
<ul>
<li><strong>序列化</strong>：将Java对象转换为JSON字符串。这在许多场景中非常有用，例如在将数据发送到Web客户端时，或者在将数据存储到文件或数据库时。</li>
<li><strong>反序列化</strong>：将JSON字符串转换回Java对象。这在从Web客户端接收数据或从文件或数据库读取数据时非常有用。</li>
<li><strong>支持复杂数据结构</strong>：Jackson能够处理嵌套对象、数组、集合等复杂数据结构。</li>
<li><strong>注解支持</strong>：Jackson提供了一系列注解来配置序列化和反序列化过程，如<code>@JsonProperty</code>、<code>@JsonIgnore</code>等。</li>
<li><strong>模块扩展</strong>：Jackson支持通过模块扩展其功能，例如Java 8时间库、Joda-Time和Kotlin等。</li>
</ul>
</blockquote>
<p>注意事项</p>
<blockquote>
<ul>
<li><strong>确保数据结构匹配</strong>：必须确保JSON数据和Java对象之间的数据结构匹配，否则会抛出映射异常。</li>
<li><strong>处理空值和默认值</strong>：在序列化过程中应注意空值和默认值的处理，以避免生成不必要的JSON字段。</li>
<li><strong>安全性</strong>：处理不信任的JSON数据时要格外小心，因为存在潜在的安全问题，如JSON注入攻击。</li>
</ul>
</blockquote>
<p>适用场景</p>
<blockquote>
<ul>
<li><strong>Web开发</strong>：在Web开发中，Jackson常用于将后端Java对象转换为JSON格式，以便前端JavaScript可以轻松地解析和使用这些数据。</li>
<li><strong>数据存储</strong>：Jackson也可以用于将Java对象序列化为JSON字符串，然后将其存储到文件或数据库中。</li>
<li><strong>API开发</strong>：在开发RESTful API时，Jackson可以帮助开发者将Java对象转换为JSON响应，以及将JSON请求解析为Java对象。</li>
</ul>
</blockquote>
<h2>Maven坐标</h2>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- 处理JSON数据 --&gt;</span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>com.fasterxml.jackson.core<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>jackson-core<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>2.18.2<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- 请替换为实际的版本号 --&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- 处理JSON数据 --&gt;</span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.apache.httpcomponents.client5<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>httpclient5<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>版本号<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- 请替换为实际的版本号 --&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Language - LaTeX - 命令关键字</title>
      <link>https://blog.magictable.ha.cn/software/Language-LaTeX-%E5%91%BD%E4%BB%A4%E5%85%B3%E9%94%AE%E5%AD%97.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-LaTeX-%E5%91%BD%E4%BB%A4%E5%85%B3%E9%94%AE%E5%AD%97.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - LaTeX - 命令关键字</source>
      <description>文章摘要： 摘要内容。 文档类和包 \documentclass{}: 指定文档类（如 article, book, report）。 \usepackage{}: 导入包（如 amsmath, graphicx, biblatex）。 文档结构 \title{}: 设置文档标题。 \author{}: 设置作者名。 \date{}: 设置日期。 \m...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Tue, 17 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>文档类和包</h2>
<ul>
<li><code>\documentclass{}</code>: 指定文档类（如 <code>article</code>, <code>book</code>, <code>report</code>）。</li>
<li><code>\usepackage{}</code>: 导入包（如 <code>amsmath</code>, <code>graphicx</code>, <code>biblatex</code>）。</li>
</ul>
<h2>文档结构</h2>
<ul>
<li><code>\title{}</code>: 设置文档标题。</li>
<li><code>\author{}</code>: 设置作者名。</li>
<li><code>\date{}</code>: 设置日期。</li>
<li><code>\maketitle</code>: 生成标题。</li>
<li><code>\section{}</code>: 创建章节。</li>
<li><code>\subsection{}</code>: 创建子章节。</li>
<li><code>\subsubsection{}</code>: 创建子子章节。</li>
<li><code>\paragraph{}</code>: 创建段落。</li>
<li><code>\subparagraph{}</code>: 创建子段落。</li>
</ul>
<h2>文本格式化</h2>
<ul>
<li><code>\textbf{}</code>: 粗体。</li>
<li><code>\textit{}</code>: 斜体。</li>
<li><code>\texttt{}</code>: 打字机字体。</li>
<li><code>\emph{}</code>: 强调（通常是斜体）。</li>
<li><code>\underline{}</code>: 下划线。</li>
<li><code>\uppercase{}</code>: 全部大写。</li>
<li><code>\lowercase{}</code>: 全部小写。</li>
</ul>
<h2>列表</h2>
<ul>
<li><code>\begin{enumerate}</code>: 开始枚举列表。</li>
<li><code>\item</code>: 列表项。</li>
<li><code>\end{enumerate}</code>: 结束枚举列表。</li>
<li><code>\begin{itemize}</code>: 开始项目符号列表。</li>
<li><code>\end{itemize}</code>: 结束项目符号列表。</li>
</ul>
<h2>对齐和布局</h2>
<ul>
<li><code>\centering</code>: 居中对齐。</li>
<li><code>\raggedleft</code>: 左对齐。</li>
<li><code>\raggedright</code>: 右对齐。</li>
<li><code>\begin{center}</code>: 居中环境。</li>
<li><code>\end{center}</code>: 结束居中环境。</li>
</ul>
<h2>分页</h2>
<ul>
<li><code>\newpage</code>: 强制分页。</li>
<li><code>\pagebreak</code>: 建议分页。</li>
</ul>
<h2>引用和交叉引用</h2>
<ul>
<li><code>\label{}</code>: 设置标签。</li>
<li><code>\ref{}</code>: 引用标签（通常是章节或图表编号）。</li>
<li><code>\cite{}</code>: 引用参考文献。</li>
</ul>
<h2>数学公式</h2>
<ul>
<li><code>\alpha</code>: α</li>
<li><code>\beta</code>: β</li>
<li><code>\gamma</code>: γ</li>
<li><code>\delta</code>: δ</li>
<li><code>\sum</code>: ∑</li>
<li><code>\int</code>: ∫</li>
<li><code>\prod</code>: ∏</li>
<li><code>\infty</code>: ∞</li>
<li><code>\pm</code>: ±</li>
<li><code>\times</code>: ×</li>
<li><code>\div</code>: ÷</li>
<li><code>\neq</code>: ≠</li>
<li><code>\approx</code>: ≈</li>
<li><code>\equiv</code>: ≡</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Language - LaTeX - 热门推荐 - 模板</title>
      <link>https://blog.magictable.ha.cn/software/Language-LaTeX-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E6%A8%A1%E6%9D%BF.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-LaTeX-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E6%A8%A1%E6%9D%BF.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - LaTeX - 热门推荐 - 模板</source>
      <description>文章摘要： LaTeX模板推荐。 学术文章 学术文章（Academic Article） 也称为论文（paper），主要用于与同一领域的其他研究人员分享学术研究成果。它们通常采用两列布局，并包含大量技术语言、图表、表格和参考资料。此格式适用于具有广泛分段并显示研究结果的任何高技术含量的内容。 学术期刊 学术期刊（Academic Journals） 许...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Tue, 17 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> LaTeX模板推荐。</p>
<!-- more -->
<h2>学术文章</h2>
<ul>
<li>学术文章（Academic Article）</li>
<li>也称为论文（paper），主要用于与同一领域的其他研究人员分享学术研究成果。它们通常采用两列布局，并包含大量技术语言、图表、表格和参考资料。此格式适用于具有广泛分段并显示研究结果的任何高技术含量的内容。</li>
</ul>
<h2>学术期刊</h2>
<ul>
<li>学术期刊（Academic Journals）</li>
<li>许多学术期刊提供 LaTeX 模板供作者提交文章（也称为出版物或论文）以供审阅。这些模板通常模拟期刊发表的文章的布局，并允许作者在此最终布局中预览他们的书面作品。由于版权限制，此类别中提供的模板不能由 LaTeX Templates 编辑，并且与各自期刊提供的模板完全相同。</li>
</ul>
<h2>作业</h2>
<ul>
<li>作业（Assignments）</li>
<li>作业，也称为家庭作业，通常交给中学生或大学生，以加强他们对某一学科的了解并帮助学习。它们通常以问答形式构建，由学生连续完成。</li>
</ul>
<h2>书</h2>
<ul>
<li>书（Books）</li>
<li>书籍是用于多种用途的长文档，例如小说、非小说类作品、教科书和食谱。大量内容通常使用广泛的分段、目录/图表/表格、索引和交叉引用进行组织。自定义页面类型（如版权页面和部分页面）用于描述和分隔内容，书目用于引用文档正文中使用的参考文献。这种文档元素的多样性使书籍成为排版最复杂的文档类型之一。幸运的是，LaTeX 可以轻松处理具有复杂引用和大量图形和表格的非常大的文档，因此您可以专注于编写而不是格式化。</li>
</ul>
<h2>名片</h2>
<ul>
<li>名片（Business Cards）</li>
<li>名片在正式设置中用于向收件人提供您的业务和联系信息。它们在介绍和社交会议中特别有用，并在第一次见到新朋友后起到记忆辅助作用。名片通常包含您的姓名、公司名称和职位，以及您的联系方式。</li>
</ul>
<h2>业务报告</h2>
<ul>
<li>业务报告（Business Reports）</li>
<li>公司使用业务报告向董事会成员、投资者、客户和内部部门提供大量信息。这些文件通常是高度结构化的，并以表格和数字的形式包含定量信息。业务报告的一个关键特征是干净、现代的外观和清晰的信息呈现。</li>
</ul>
<h2>日历</h2>
<ul>
<li>日历（Calendars）</li>
<li>日历提供了一种结构化的时间组织格式。日历模板可用于为多人组织活动、规划特定时间段（例如会议）或简单地打印和手动填写。</li>
</ul>
<h3>会议/活动时间表</h3>
<ul>
<li>会议/活动时间表（Conference/Event Timetable）</li>
<li>此日历模板对于创建会议/活动日历非常有用。可以为每个日期指定一个标题（例如您在当天的位置），后跟当天的计划。日历可以跨越任意数量的周数，并且可以更改开始日期。</li>
<li>外部获取链接：<a href="http://www.latextemplates.com/template/conference-event-timetable" target="_blank" rel="noopener noreferrer">http://www.latextemplates.com/template/conference-event-timetable</a></li>
</ul>
<p>效果展示</p>
<h3>月历</h3>
<ul>
<li>月历（Monthly Calendar）</li>
<li>此日历模板可用于在一张 A4 纸上创建日历月。这可以留空，只写日期数字，也可以为单独的日期编写文本。可以在模板中轻松更改开始日期和日期。</li>
<li>外部获取链接：<a href="http://www.latextemplates.com/template/monthly-calendar" target="_blank" rel="noopener noreferrer">http://www.latextemplates.com/template/monthly-calendar</a></li>
</ul>
<p>效果展示</p>
<h3>每周时刻表</h3>
<ul>
<li>每周时刻表（Weekly Timetable）</li>
<li>此日历模板可用于创建定期事件的每周日历。在每天中，活动的时间与活动标题分开，以便于安排。此布局适合计划每周讲座的大学生。</li>
<li>外部获取链接：<a href="http://www.latextemplates.com/template/weekly-timetable" target="_blank" rel="noopener noreferrer">http://www.latextemplates.com/template/weekly-timetable</a></li>
</ul>
<p>效果展示</p>
<h2>会议海报</h2>
<ul>
<li>会议海报（Conference Posters）</li>
<li>研究人员使用会议海报在学术会议上展示研究成果。它们打印在大纸（通常为 A0）上，并使用大字体来快速吸引注意力。通常，存在许多部分以尽可能简洁地总结实验的背景、实验设计、结果和意义。因此，最好将文本保持在最低限度，并以表格、图形和方程式的形式直观地显示结果。LaTeX 使创建海报就像编写普通文档一样简单，并且可以自定义以创建漂亮的海报布局。</li>
</ul>
<h2>求职信</h2>
<ul>
<li>求职信（Cover Letters）</li>
<li>求职信通常附在简历或简历上，以提供您自己的个人介绍，并解释您根据以前的经验和兴趣认为自己适合该职位的原因。求职信通常不超过一页，并以正式的语气书写。</li>
</ul>
<h2>简历和履历</h2>
<ul>
<li>简历和履历（CVs and Resumes）</li>
<li>简历（CV）和简历是用于将您的工作经历、教育、技能和成就传达给潜在雇主或进入研究生院等课程的文件。在美国，简历和简历是有区别的，前者是您整个职业生涯的长篇总结，而后者是针对所申请工作的简化版本。此类别中的大多数模板都可用作简历或简历，只需根据需要包含或多或少的信息即可。</li>
</ul>
<h3>中等长度专业简历</h3>
<ul>
<li>中等长度专业简历（Medium Length Professional CV）</li>
<li>此模板具有明确分隔的部分和内部结构化的 CV/简历内容。该模板的一个主要特点是工作经验的要点描述。</li>
<li>外部获取链接：<a href="http://www.latextemplates.com/template/medium-length-professional-cv" target="_blank" rel="noopener noreferrer">http://www.latextemplates.com/template/medium-length-professional-cv</a></li>
</ul>
<p>效果展示</p>
<h3>时尚简历</h3>
<ul>
<li>时尚简历（Stylish CV）</li>
<li>此模板具有时尚的页眉和页脚，其中包括您的姓名和联系信息。工作经验和教育背景被装在定制的灰色盒子里，连同大页眉和页脚，可以立即将读者的目光吸引到简历中最重要的信息上。该模板只有一页适合应届毕业生，但可以扩展到几页以获得更长的简历。</li>
<li>外部获取链接：<a href="http://www.latextemplates.com/template/stylish-cv" target="_blank" rel="noopener noreferrer">http://www.latextemplates.com/template/stylish-cv</a></li>
</ul>
<p>效果展示</p>
<h3>Freeman简历</h3>
<ul>
<li>Freeman简历（Freeman CV/Resume）</li>
<li>这个灵活的模板将您的技能和成就类别安排在两个突出的列中。它具有优雅的排版和柔和的色彩使用，一目了然地突出了最重要的元素。</li>
<li>外部获取链接：<a href="http://www.latextemplates.com/template/freeman-cv" target="_blank" rel="noopener noreferrer">http://www.latextemplates.com/template/freeman-cv</a></li>
</ul>
<p>效果展示</p>
<h3>很棒的简历和求职信</h3>
<ul>
<li>很棒的简历和求职信（Awesome Resume/CV and Cover Letter）</li>
<li>这个华丽的简历/简历模板带有匹配的求职信模板，以帮助简化申请下一份工作的过程。这两个模板都有一个干净的页眉，列出了您的基本联系信息和专业领域，以及一个微妙的匹配页脚。简历/CV 模板中的清晰部分可确保您的成就易于导航，并通过主要标题、次要标题和子标题进行广泛描述。每个成就或事件的地点和日期都会清楚地突出显示。求职信模板也按主要标题进行分段，但如果只需要简单的段落，则这些标题不是强制性的。</li>
<li>外部获取链接：<a href="http://www.latextemplates.com/template/awesome-resume-cv" target="_blank" rel="noopener noreferrer">http://www.latextemplates.com/template/awesome-resume-cv</a></li>
</ul>
<p>效果展示</p>
<h3>紧凑的学术简历</h3>
<ul>
<li>紧凑的学术简历（Compact Academic CV）</li>
<li>此简历/简历模板旨在简洁地展示您的职业信息，特别适用于展示学术生涯。学者们往往有许多约会、荣誉和出版物，此模板将其压缩为单行，以最大限度地提高可读性并最小化长度。设计简约，有大量的空白，模板的一个核心特点是简历中所有条目的可选年份标签。条目可以很容易地修改为多行或进一步划定为子部分。</li>
<li>外部获取链接：<a href="http://www.latextemplates.com/template/compact-academic-cv" target="_blank" rel="noopener noreferrer">http://www.latextemplates.com/template/compact-academic-cv</a></li>
</ul>
<p>效果展示</p>
<h3>开发者简历</h3>
<ul>
<li>开发者简历（Developer CV）</li>
<li>此简历/简历模板专为软件开发人员量身定制，以干净简单的方式展示他们的技能和经验。模板的顶部包含各种平台上的个人资料和联系信息空间，并使用熟悉的 FontAwesome 图标。各种技术和平台中的技能一目了然地显示在技能条形图和不同大小的气泡中。在不同公司的经验以有序列表列出，并包括每个职位使用的技术示例。最后，一组自由格式的并排部分允许用户添加他们想要包含的任何其他信息。</li>
<li>外部获取链接：<a href="http://www.latextemplates.com/template/developer-cv" target="_blank" rel="noopener noreferrer">http://www.latextemplates.com/template/developer-cv</a></li>
</ul>
<p>效果展示</p>
<h3>20秒简历</h3>
<ul>
<li>20秒简历（Twenty Seconds Resume/CV）</li>
<li>这个简单的简历/简历模板有一个大侧边栏，其中整齐地展示了有关您的关键信息，以便快速阅读。可以使用从新手到专家的进度条快速突出显示您的主要技能，这对于编程语言和其他需要时间掌握的技能特别有用。然后，模板正文由大型彩色部分标题（灰色和蓝色交替）分隔。在这些内容中，您可以进一步按小节划分内容或简单地编写段落。可以使用以下两种环境之一构建成就或时间轴列表：带有描述的长列表或短的单行列表。</li>
<li>外部获取链接：<a href="http://www.latextemplates.com/template/twenty-seconds-resumecv" target="_blank" rel="noopener noreferrer">http://www.latextemplates.com/template/twenty-seconds-resumecv</a></li>
</ul>
<p>效果展示</p>
<h3>ModernCV简历和求职信</h3>
<ul>
<li>ModernCV简历和求职信（ModernCV CV and Cover Letter）</li>
<li>此模板使用 'ModernCV' 类创建多页简历和求职信。简历结构清晰，侧边栏上有大节标题和重要日期。联系信息以灰色块清晰显示。本课程具有四个文档主题，这些主题可以完全改变文档的布局，要预览每个主题，请参阅下面的 PDF 预览。更改主题就像更改一个单词一样简单。</li>
<li>外部获取链接：<a href="http://www.latextemplates.com/template/moderncv-cv-and-cover-letter" target="_blank" rel="noopener noreferrer">http://www.latextemplates.com/template/moderncv-cv-and-cover-letter</a></li>
</ul>
<p>效果展示</p>
<h3>Wenneker简历</h3>
<ul>
<li>Wenneker简历（Wenneker Resume/CV）</li>
<li>这个简单明了的简历/简历模板采用两列布局，您最重要的信息显示在左栏中，供潜在雇主立即概览。这个模板适合求职者，他们正在寻找一份干净、简单、优雅、轻松的简历。</li>
<li>外部获取链接：<a href="http://www.latextemplates.com/template/wenneker-resume-cv" target="_blank" rel="noopener noreferrer">http://www.latextemplates.com/template/wenneker-resume-cv</a></li>
</ul>
<p>效果展示</p>
<h3>威尔逊简历</h3>
<ul>
<li>威尔逊简历（Wilson Resume/CV）</li>
<li>此简历/简历模板具有宽敞的布局和保守的风格，旨在清晰简单地提出您的工作经验和信息。这种布局最适合较长的简历，因为职位描述可能非常广泛，并且可以用项目符号或文本段落进行组织。包含个人资料可以让您简洁地陈述您的职业目标和成就，而技能部分可让您列出大量的技术专业知识。您的联系信息和推荐人的联系信息显示在可自定义的块中，允许您根据需要展开它们。</li>
<li>外部获取链接：<a href="http://www.latextemplates.com/template/wilson-resume-cv" target="_blank" rel="noopener noreferrer">http://www.latextemplates.com/template/wilson-resume-cv</a></li>
</ul>
<p>效果展示</p>
<h3>Cies简历</h3>
<ul>
<li>Cies简历（Cies Resume/CV）</li>
<li>此简历/简历模板具有紧凑、信息丰富的布局，适合职业生涯中期的专业人士。该设计的一个定义特征是在模板的开头有一个相对较大的两列文本块，包括兴趣、成就、历史等的摘要。这是一个与潜在雇主交流信息的有用场所，否则只需阅读成就和职称列表可能会忽略这些信息。内容主要由雇主安排，雇主能够列出同一公司内的多个职位。</li>
<li>外部获取链接：<a href="http://www.latextemplates.com/template/cies-cv" target="_blank" rel="noopener noreferrer">http://www.latextemplates.com/template/cies-cv</a></li>
</ul>
<p>效果展示</p>
<h3>Deedy简历</h3>
<ul>
<li>Deedy简历（Deedy Resume/CV）</li>
<li>此简历/简历模板具有一个大标题，清楚地显示了您的姓名和联系信息。然后，Resume/CV 内容采用两列布局，将大量信息集中在一个小空间内。这使您可以根据学术和职业生活的哪些方面对您申请的职位的重要性来选择关注它们。主要部分及其子部分严重偏离，以吸引招聘经理的注意力。</li>
<li>外部获取链接：<a href="http://www.latextemplates.com/template/deedy-resume-cv" target="_blank" rel="noopener noreferrer">http://www.latextemplates.com/template/deedy-resume-cv</a></li>
</ul>
<p>效果展示</p>
<h3>等离子体简历</h3>
<ul>
<li>等离子体简历（Plasmati CV）</li>
<li>此简历/简历模板非常适合工作经验相对较少的学生或早期职业毕业生。布局简洁，最适合每个部分的几个条目。模板最后一页包含成绩表提供了衡量学术成功的标准，而不是工作经验，使该模板成为研究生院申请或学院/大学前几份工作的理想选择。该模板也可以适用于具有更多工作经验的个人，但请注意不要将其填写超过两页。</li>
<li>外部获取链接：<a href="http://www.latextemplates.com/template/plasmati-cv" target="_blank" rel="noopener noreferrer">http://www.latextemplates.com/template/plasmati-cv</a></li>
</ul>
<p>效果展示</p>
<h3>经典论文风格的简历</h3>
<ul>
<li>经典论文风格的简历（Classicthesis-Styled CV）</li>
<li>此模板将 Classicthesis 风格与 currvita 文档布局相结合，以创建精美的简历/简历。页边距移至文档的左侧，现在包含雇主名称、学位或描述，便于潜在雇主快速参考。主要标题被清楚地分隔为块，其中每个条目都带有日期、标题和描述的样式。该模板非常紧凑，并设法将课程的参考资料和成绩压缩成小块文本。</li>
<li>外部获取链接：<a href="http://www.latextemplates.com/template/classicthesis-styled-cv" target="_blank" rel="noopener noreferrer">http://www.latextemplates.com/template/classicthesis-styled-cv</a></li>
</ul>
<p>效果展示</p>
<h3>长篇专业简历</h3>
<ul>
<li>长篇专业简历（Long Professional CV）</li>
<li>此简历模板结构清晰，每个部分的类别名称以粗体居中。每个作业的任务描述都以项目符号表示。此模板有利于较长的 CV，因为每个部分可以放置的信息量没有美学限制。适合处于职业生涯中后期的专业人士。</li>
<li>外部获取链接：<a href="http://www.latextemplates.com/template/long-professional-cv" target="_blank" rel="noopener noreferrer">http://www.latextemplates.com/template/long-professional-cv</a></li>
</ul>
<p>效果展示</p>
<h3>中等长度的毕业生简历</h3>
<ul>
<li>中等长度的毕业生简历（Medium Length Graduate CV）</li>
<li>此简历模板在文档左侧有章节标题，右侧有章节内容。项目符号用于分隔每个作业中的不同任务。这种文档布局使此模板更适合最多两页的短篇或中篇简历。最适合经验有限、正在寻找第一份工作的应届毕业生。</li>
<li>外部获取链接：<a href="http://www.latextemplates.com/template/medium-length-graduate-cv" target="_blank" rel="noopener noreferrer">http://www.latextemplates.com/template/medium-length-graduate-cv</a></li>
</ul>
<p>效果展示</p>
<h2>发票</h2>
<ul>
<li>发票（Invoices）</li>
<li>发票是要求支付商品或服务费用的商业文件。发票通常包含所购买或执行的每项服务的明细清单，以及相应的数量和价格。此外，还提供了公司信息、付款说明和收款人信息，以定义相关方。</li>
</ul>
<h2>通讯</h2>
<ul>
<li>通讯（Newsletters）</li>
<li>时事通讯是一种期刊出版物，通常专门针对其订阅者感兴趣的特定领域。时事通讯通常包含最新的新闻和信息，并且格式比杂志和报纸短。俱乐部、组织、社团、协会、企业和其他团体通常会发布时事通讯，以更新其成员的组织动态并提供特殊的兴趣故事。时事通讯有时也称为小册子、小册子、期刊、公告和小册子。</li>
</ul>
<h2>介绍</h2>
<ul>
<li>介绍（Presentations）</li>
<li>演示文稿，也称为研讨会、讲座或讲座，是向听众提供的，目的是与一群人分享信息。这可能是在学术会议、商务会议甚至项目进度更新中。由于 LaTeX 生成 PDF，您只需在 PDF 查看器中以全屏模式打开演示文稿 PDF 即可进行演示。</li>
</ul>
<h2>标志</h2>
<ul>
<li>标志（Signs）</li>
<li>标志用于快速提醒人们重要信息。它们通常具有较大的文本大小，旨在显示在许多人可以看到的公共场所。一般来说，标志越重要，它的字体和颜色就越大胆，就会吸引更多的注意力。</li>
</ul>
<h3>箭头标志</h3>
<ul>
<li>箭头标志（Arrow Sign）</li>
<li>此标志模板通过大实心箭头和大粗体文本将查看者引导至感兴趣的位置。箭头内的时尚边框用于进一步突出显示文本。箭头可以指向左侧或右侧，箭头、背景和文本/轮廓的颜色可以独立设置。这使您可以根据情况定制标志，例如，停车标志通常为浅蓝色和白色文字，而户外标志则为棕色背景。文本大小可以很容易地更改，并且应该足够大以立即突出，但要保留一些填充以获得呼吸空间。可以轻松地在一个文档中生成多个标志，每个标志都有一个命令，该命令指定所有可能的标志选项。</li>
<li>外部获取链接：<a href="http://www.latextemplates.com/template/arrow-sign" target="_blank" rel="noopener noreferrer">http://www.latextemplates.com/template/arrow-sign</a></li>
</ul>
<p>效果展示</p>
<h3>信息标志</h3>
<ul>
<li>信息标志（Information Sign）</li>
<li>此标志最适合向查看者显示信息性消息。它通过在顶部使用一个友好的绿色框来引起注意，但与危险标志的方式不同。标志的主要信息以句子大小写的衬线字体设置，这进一步给标志带来了随意的感觉。最后，标志底部的附加文本可以作为进一步描述、说明或说明谁负责标志的地方。</li>
<li>外部获取链接：<a href="http://www.latextemplates.com/template/information-sign" target="_blank" rel="noopener noreferrer">http://www.latextemplates.com/template/information-sign</a></li>
</ul>
<p>效果展示</p>
<h3>描述标志</h3>
<ul>
<li>描述标志（Description Sign）</li>
<li>此标志主要旨在向观众显示有关不便、通知、事件或类似内容的大量信息或说明。它由 4 个不同的元素组成，有助于实现这一点。顶部的主标题大而醒目，用于总结关键事实，例如建筑物关闭。接下来是副标题，用作通知或号召性用语，例如设施已移至另一栋建筑物。然后是几段描述文本，解释情况或为观众应该做什么提供指导。最后，底部的附加文本可用于道歉或说明就标志内容联系谁。</li>
<li>外部获取链接：<a href="http://www.latextemplates.com/template/description-sign" target="_blank" rel="noopener noreferrer">http://www.latextemplates.com/template/description-sign</a></li>
</ul>
<p>效果展示</p>
<h3>警报标志</h3>
<ul>
<li>警报标志（Alert Sign）</li>
<li>此标志模板旨在提醒查看者注意重要的威胁或通知。它的顶部有一个大的红色标题，立即引起了人们的注意。因此，该标志最适合警告、危险或警告标志。标志的主要信息全部大写，采用粗体大字，便于一目了然地快速沟通。最后，标志底部的信息文本为警报或行动号召的描述提供了一个可选位置。</li>
<li>外部获取链接：<a href="http://www.latextemplates.com/template/alert-sign" target="_blank" rel="noopener noreferrer">http://www.latextemplates.com/template/alert-sign</a></li>
</ul>
<p>效果展示</p>
<h2>论文</h2>
<ul>
<li>论文（Theses）</li>
<li>学术论文，也称为学位论文，是研究生为交流他们的研究并获得学位而创作的实质性作品。论文通常包括对研究领域当前研究状况的回顾，然后是要调查的中心假设。然后，论文的大部分内容将集中在所进行的研究的方法和结果上，然后讨论结果如何对该领域进行总体贡献。论文很长，结构高度结构化，包含许多高级文档元素。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Language - LaTeX - 特殊符号</title>
      <link>https://blog.magictable.ha.cn/software/Language-LaTeX-%E7%89%B9%E6%AE%8A%E7%AC%A6%E5%8F%B7.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-LaTeX-%E7%89%B9%E6%AE%8A%E7%AC%A6%E5%8F%B7.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - LaTeX - 特殊符号</source>
      <description>文章摘要： 摘要内容。 相关信息 LaTeX中的特殊符号具有特殊含义，因此不会被直接当作普通文本打印出来。 $: 进入和退出数学模式。 %：注释符号。 &amp;：表格或数学公式中的位置对齐符号。 $：数学公式标记符，被框在两个$符号之间的内容会被翻译为数学公式。 ~：保留强制空格。 ^ 和 _：上下标标记。 { 和 }：表示其中的内容作为一个整体对待。 #：...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Tue, 17 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>LaTeX中的特殊符号具有特殊含义，因此不会被直接当作普通文本打印出来。</p>
</div>
<ul>
<li><code>$</code>: 进入和退出数学模式。</li>
<li><code>%</code>：注释符号。</li>
<li><code>&amp;</code>：表格或数学公式中的位置对齐符号。</li>
<li><code>$</code>：数学公式标记符，被框在两个<code>$</code>符号之间的内容会被翻译为数学公式。</li>
<li><code>~</code>：保留强制空格。</li>
<li><code>^</code> 和 <code>_</code>：上下标标记。</li>
<li><code>{</code> 和 <code>}</code>：表示其中的内容作为一个整体对待。</li>
<li><code>#</code>：编写宏包时使用。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Language - LaTeX</title>
      <link>https://blog.magictable.ha.cn/software/Language-LaTeX.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-LaTeX.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - LaTeX</source>
      <description>文章摘要： LaTeX 使用一种标记语言，用户通过编写文本文件（通常以 .tex 为扩展名）来描述文档的结构和内容。科学家、工程师、软件开发人员、数学家和其他专业人士通常使用它来制作冗长的技术文档。 相关信息 外部相关文章 latextemplates官网：http://www.latextemplates.com/ 内部相关文章 简介 简要说明 La...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Tue, 17 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> LaTeX 使用一种标记语言，用户通过编写文本文件（通常以 .tex 为扩展名）来描述文档的结构和内容。科学家、工程师、软件开发人员、数学家和其他专业人士通常使用它来制作冗长的技术文档。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li>latextemplates官网：<a href="http://www.latextemplates.com/" target="_blank" rel="noopener noreferrer">http://www.latextemplates.com/</a></li>
</ul>
<p>内部相关文章</p>
<ul>
<li></li>
</ul>
</div>
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>LaTeX，发音为 <em>lay-tech</em>，是一个用于创建高质量文档的系统。科学家、工程师、软件开发人员、数学家和其他专业人士通常使用它来制作冗长的技术文档。</li>
<li>典型的“所见即所得”文字处理器（如 Microsoft Word）不同，LaTeX 使用纯文本标记语言（类似于 HTML 和 CSS），该语言使用最佳排版规则编译成 PDF 文档。</li>
<li>这将生成具有专业外观的文档，这些文档与文字处理器的输出属于不同的类。LaTeX 中的众多自定义选项允许创建多种文档类型，并精确控制布局和格式。LaTeX 非常适合创建不需要 LaTeX 高级知识即可使用和操作的模板，允许新手 LaTeX 用户创建精美的文档并边走边学 LaTeX。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>文本格式化</strong>：提供粗体、斜体、下划线等文本格式化功能。</li>
<li><strong>章节管理</strong>：方便地创建章节、子章节等文档结构。</li>
<li><strong>数学公式排版</strong>：支持复杂的数学公式排版，是 LaTeX 的一大特色。</li>
<li><strong>交叉引用</strong>：可以轻松地引用文档中的图表、章节和参考文献。</li>
<li><strong>自动编号</strong>：章节、图表、公式等可以自动编号。</li>
<li><strong>列表环境</strong>：支持有序列表、无序列表和定义列表。</li>
<li><strong>表格制作</strong>：提供创建复杂表格的功能。</li>
<li><strong>图形处理</strong>：可以插入和处理图形文件。</li>
<li><strong>参考文献管理</strong>：通过 BibTeX 等工具管理参考文献。</li>
<li><strong>宏包扩展</strong>：通过使用各种宏包（packages），可以扩展 LaTeX 的功能。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>学习曲线</strong>：LaTeX 有一定的学习难度，特别是对于复杂的文档排版。</li>
<li><strong>编译过程</strong>：LaTeX 需要编译过程来生成最终的文档，可能需要多次编译以达到预期效果。</li>
<li><strong>错误调试</strong>：编译错误需要耐心调试，有时错误信息可能不太直观。</li>
<li><strong>文档结构</strong>：良好的文档结构对于 LaTeX 排版非常重要，应该合理规划文档的布局。</li>
<li><strong>版本兼容性</strong>：不同的 LaTeX 发行版和宏包可能有兼容性问题，需要注意版本更新。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>学术论文</strong>：LaTeX 在学术界非常流行，特别是在数学、物理学、计算机科学等领域。</li>
<li><strong>图书出版</strong>：适用于撰写和排版书籍，尤其是科技书籍。</li>
<li><strong>报告撰写</strong>：适合撰写技术报告、学期报告等。</li>
<li><strong>简历制作</strong>：有些专业的简历模板使用 LaTeX 编写，可以制作格式规范、专业的简历。</li>
<li><strong>幻灯片制作</strong>：通过 Beamer 宏包，LaTeX 可以用来制作专业且美观的幻灯片。</li>
<li><strong>数学笔记</strong>：由于其强大的数学公式排版能力，LaTeX 非常适合编写数学笔记和讲义。</li>
<li><strong>文档标准化</strong>：当需要统一文档格式和风格时，LaTeX 是一个很好的选择。</li>
</ul>
<h2>如何运作</h2>
<ul>
<li>使用文字处理器时，输入文本后，软件会立即显示文档的外观。当您需要更改格式时，通常只需使用菜单来修改页边距和标题样式等内容，或者高亮显示文本并单击图标来更改字体、大小、对齐方式等。</li>
<li>使用 LaTeX，文档在纯文本编辑器（就像记事本或 TextEdit 一样简单）中编写，并提供给 LaTeX 编译器，该编译器将 LaTeX 命令与您的文本一起解释以生成 PDF 输出。这意味着重要的文档设置（如字体、边距和标题样式）在文档顶部的部分中定义，并且任何本地格式（例如粗体文本）都是通过使用文本内命令完成的。</li>
</ul>
<p>下面是一个 CV/简历的 LaTeX 模板开始的示例。您会注意到编辑器中没有关于文档外观的选项，而是使用命令指定。红色文本是注释的，它不会成为最终 PDF 的一部分，但用于解释命令的作用以及如何使用模板。典型的 LaTeX 文档将包含纯文档文本、注释和指定各种文档元素的命令的混合：</p>
<blockquote>
<p><img src="https://www.latextemplates.com/images/freeman-cv_code.png" alt=""></p>
</blockquote>
<p>当我们编译上面的模板时，我们最终会得到以下 PDF：</p>
<blockquote>
<p><img src="https://www.latextemplates.com/images/freeman-cv.jpg" alt=""></p>
</blockquote>
<h2>命令关键字和特殊符号</h2>
<ul>
<li>文章中出现“<code>\</code>”特殊符号，表示这是一个命令或者特殊符号。</li>
</ul>
<p>Latex命令详细总结：<a href="/software/Language-LaTeX-%E5%91%BD%E4%BB%A4%E5%85%B3%E9%94%AE%E5%AD%97.html" target="_blank">Language-LaTeX-命令关键字</a></p>
<p>特殊符号详细总结：<a href="/software/Language-LaTeX-%E7%89%B9%E6%AE%8A%E7%AC%A6%E5%8F%B7.html" target="_blank">Language-LaTeX-特殊符号</a></p>
<p>转义字符详细总结：<a href="/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E9%80%9A%E7%94%A8%E8%BD%AC%E4%B9%89%E5%AD%97%E7%AC%A6.html" target="_blank">基础知识-通用转义字符</a></p>
<h2>模板推荐</h2>
<p>详细总结：<a href="/software/Language-LaTeX-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E6%A8%A1%E6%9D%BF.html" target="_blank">Language-LaTeX-热门推荐-模板</a></p>
]]></content:encoded>
      <enclosure url="https://www.latextemplates.com/images/freeman-cv_code.png" type="image/png"/>
    </item>
    <item>
      <title>Package - LaTeX</title>
      <link>https://blog.magictable.ha.cn/software/Package-LaTeX.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-LaTeX.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - LaTeX</source>
      <description>文章摘要： LaTeX（通常发音为 “Lay-tech” 或 “Lah-tech”）是一个基于TeX的排版系统，广泛用于生成科学和数学文档。 相关信息 外部相关文章 latextemplates官网：http://www.latextemplates.com/ 内部相关文章 简介 简要说明 LaTeX（通常发音为 “Lay-tech” 或 “Lah-t...</description>
      <category>软件程序/软件包</category>
      <pubDate>Tue, 17 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> LaTeX（通常发音为 “Lay-tech” 或 “Lah-tech”）是一个基于TeX的排版系统，广泛用于生成科学和数学文档。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li>latextemplates官网：<a href="http://www.latextemplates.com/" target="_blank" rel="noopener noreferrer">http://www.latextemplates.com/</a></li>
</ul>
<p>内部相关文章</p>
<ul>
<li></li>
</ul>
</div>
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>LaTeX（通常发音为 “Lay-tech” 或 “Lah-tech”）是一个基于TeX的排版系统，广泛用于生成科学和数学文档，因为它能够很好地处理公式和复杂的排版任务。</li>
<li>作者可以专注于写作而不用担心格式。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>文档排版</strong>：提供丰富的文档类和模板，用于排版书籍、文章、报告、幻灯片等。</li>
<li><strong>公式编辑</strong>：支持复杂的数学公式编辑，是处理科学和工程文档的理想选择。</li>
<li><strong>交叉引用</strong>：可以轻松地引用文档中的章节、表格、图表和参考文献。</li>
<li><strong>自动化列表</strong>：自动处理编号和格式化列表，如目录、参考文献列表等。</li>
<li><strong>自定义命令和环境</strong>：允许用户定义新的命令和环境，以简化重复性任务。</li>
<li><strong>版面控制</strong>：精确控制文本的布局和格式，包括分栏、浮动体（如图表）的定位等。</li>
<li><strong>多语言支持</strong>：支持多种语言和字符编码，适合国际化的文档制作。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>学习曲线</strong>：LaTeX有一定的学习难度，特别是对于复杂的文档结构或自定义格式。</li>
<li><strong>编辑与预览</strong>：LaTeX编辑器通常需要编译过程来生成最终文档，因此编写和预览之间存在延迟。</li>
<li><strong>兼容性问题</strong>：不同的LaTeX发行版和编辑器可能会有兼容性问题，需要注意版本和包的更新。</li>
<li><strong>错误调试</strong>：LaTeX在编译过程中可能会出现错误，需要用户具有一定的调试能力。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>学术论文和书籍</strong>：学术界的作者经常使用LaTeX来排版论文和书籍，因为它能够生成符合期刊和出版社要求的格式。</li>
<li><strong>数学和科学文档</strong>：由于其强大的公式编辑能力，LaTeX特别适用于数学、物理、工程和其他科学领域的文档。</li>
<li><strong>简历和简历</strong>：LaTeX可以创建专业的简历，提供统一的格式和布局。</li>
<li><strong>幻灯片制作</strong>：使用Beamer等宏包，LaTeX能够制作专业且美观的演示文稿。</li>
<li><strong>复杂文档排版</strong>：对于需要复杂排版和自动化处理的文档，如手册和报告，LaTeX是一个很好的选择。</li>
</ul>
<h2>安装与卸载</h2>
<p>详细总结：<a href=""></a></p>
<h2>终端命令</h2>
<p>详细总结：<a href=""></a></p>
<h2>配置文件</h2>
<p>详细总结：<a href=""></a></p>
<h2>热门推荐</h2>
<p>详细总结：<a href=""></a></p>
<h2>问题总结</h2>
<p>详细总结：<a href=""></a></p>
<h2>LaTeX语法</h2>
<p>详细总结：<a href="/software/Language-LaTeX.html" target="_blank">Language-LaTeX</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Package - RSS</title>
      <link>https://blog.magictable.ha.cn/software/Package-RSS.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-RSS.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - RSS</source>
      <description>文章摘要： RSS（Really Simple Syndication）工具是一种用于订阅和聚合网络内容的工具，允许用户在一个地方接收多个网站的内容更新。 相关信息 外部相关文章 RSSHub，RSSHub 是一个开源、简单易用、易于扩展的 RSS 生成器，可以给任何奇奇怪怪的内容生成 RSS 订阅源。 内部相关文章 简介 简要说明 RSS工具通过订阅...</description>
      <category>软件程序/软件包</category>
      <pubDate>Tue, 17 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> RSS（Really Simple Syndication）工具是一种用于订阅和聚合网络内容的工具，允许用户在一个地方接收多个网站的内容更新。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li><a href="https://rsshub.netlify.app/zh/" target="_blank" rel="noopener noreferrer">RSSHub</a>，RSSHub 是一个开源、简单易用、易于扩展的 RSS 生成器，可以给任何奇奇怪怪的内容生成 RSS 订阅源。</li>
</ul>
<p>内部相关文章</p>
<ul>
<li></li>
</ul>
</div>
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>RSS工具通过订阅网站的RSS feed，可以自动获取这些网站的最新内容。</li>
<li>用户无需逐个访问网站就能浏览到最新的文章、帖子或更新。</li>
<li>RSS工具通常包括RSS阅读器、聚合器或新闻阅读器。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>内容聚合</strong>：将多个来源的内容集中在一个界面中，方便用户阅读。</li>
<li><strong>自动更新</strong>：一旦订阅的网站发布新内容，RSS工具会自动抓取并显示更新。</li>
<li><strong>分类管理</strong>：用户可以将订阅的内容按照类别或标签进行管理。</li>
<li><strong>阅读偏好设置</strong>：用户可以自定义阅读界面，如字体大小、主题颜色等。</li>
<li><strong>离线阅读</strong>：一些RSS工具支持离线阅读，用户可以在没有网络连接的情况下阅读已下载的内容。</li>
<li><strong>搜索和过滤</strong>：用户可以通过关键词搜索订阅内容，或根据特定条件过滤文章。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>选择合适的RSS工具</strong>：不同的RSS工具功能和使用体验有所不同，应根据自己的需求选择。</li>
<li><strong>订阅源管理</strong>：定期清理不再关注的订阅源，以保持信息流的精简和相关性。</li>
<li><strong>隐私和安全</strong>：确保使用的RSS工具提供数据加密和安全保护，以防个人信息泄露。</li>
<li><strong>更新频率</strong>：设置合适的更新频率，以避免信息过载。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>信息收集</strong>：对于需要跟踪多个领域或行业信息的研究人员、记者等，RSS工具能高效地收集信息。</li>
<li><strong>个人学习</strong>：学习者可以通过RSS订阅相关的教育资源和博客，以便及时获取新知识。</li>
<li><strong>内容营销</strong>：内容创作者可以使用RSS工具监控行业动态，获取创作灵感。</li>
<li><strong>日常阅读</strong>：对于喜欢阅读博客、新闻或杂志的用户，RSS工具可以提供一个集中的阅读环境。</li>
<li><strong>企业监控</strong>：企业可以使用RSS工具监控竞争对手的动态、行业新闻和市场趋势。</li>
</ul>
<h2>安装与卸载</h2>
<p>详细总结：<a href=""></a></p>
<h2>终端命令</h2>
<p>详细总结：<a href=""></a></p>
<h2>配置文件</h2>
<p>详细总结：<a href=""></a></p>
<h2>热门推荐</h2>
<p>详细总结：<a href=""></a></p>
<h2>问题总结</h2>
<p>详细总结：<a href=""></a></p>
<h2>订阅URL推荐</h2>
<h2>格式说明</h2>
<h3>BiliBili</h3>
<p>基础格式：<code>https://www.moerats.com/bilibili/rss/</code></p>
]]></content:encoded>
    </item>
    <item>
      <title>Device - 数据存储 - 机械硬盘 - 磁盘分区</title>
      <link>https://blog.magictable.ha.cn/hardware/Device-%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8-%E6%9C%BA%E6%A2%B0%E7%A3%81%E7%9B%98-%E7%A3%81%E7%9B%98%E5%88%86%E5%8C%BA.html</link>
      <guid>https://blog.magictable.ha.cn/hardware/Device-%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8-%E6%9C%BA%E6%A2%B0%E7%A3%81%E7%9B%98-%E7%A3%81%E7%9B%98%E5%88%86%E5%8C%BA.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Device - 数据存储 - 机械硬盘 - 磁盘分区</source>
      <description>文章摘要： 磁盘分区知识总结。 机械硬盘 硬盘经过分割后成为各个分区，分区依照功能性的不同又可分为主分区( Primary )、拓展分区(Extended)及逻辑分区( Logical ) 三种。 在linux系统中至少必须有两个挂载点(磁盘分区)，分别是 / 及 swap ，其余是否要将其他的挂载点独立分割出来则视你的规划需求而定。 因为Linux的...</description>
      <category>硬件设备/设备</category>
      <pubDate>Sun, 15 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 磁盘分区知识总结。</p>
<!-- more -->
<h2>机械硬盘</h2>
<ul>
<li>
<p>硬盘经过分割后成为各个分区，分区依照功能性的不同又可分为主分区( Primary )、拓展分区(Extended)及逻辑分区( Logical ) 三种。</p>
</li>
<li>
<p>在linux系统中至少必须有两个挂载点(磁盘分区)，分别是 / 及 swap ，其余是否要将其他的挂载点独立分割出来则视你的规划需求而定。</p>
</li>
<li>
<p>因为Linux的文件系统是一种树状的结构，一个软件会把包含的众多文件，放置在不同的目录当中，所以不同的使用目的，每个目录扩张的速度会不一样。</p>
</li>
<li>
<p>例如，当计算机当作服务器使用时，由于变动的文件一般是位于/var当中，所以/var应规划足够的空间；</p>
</li>
<li>
<p>当计算机当作日常桌用应用时，/home会增加使用量，所以/home要放大空间；</p>
</li>
<li>
<p>若计算机中会安装大量的软件，那你可能需要增加/usr的空间。</p>
</li>
<li>
<p>当然，不把这些空间独立分割出去，一起使用/的空间，会有最好的空间使用效率，但这样容易造成系统不稳定，或其它的问题的情形发生。前面提到Linux文件系统的根目录，是一定要挂载的。没有特定指定分区挂载的目录，都会与根目录放在同一个分区中。</p>
</li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li><a href="https://blog.csdn.net/explore_world/article/details/79081587" target="_blank" rel="noopener noreferrer">网页中对linux分区方案讲解</a></li>
<li><a href="https://blog.csdn.net/weixin_36307549/article/details/116729958" target="_blank" rel="noopener noreferrer">linux 推荐分区,Linux分区的推荐方案和方法_骆小普的博客-CSDN博客</a></li>
</ul>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Device - 数据存储</title>
      <link>https://blog.magictable.ha.cn/hardware/Device-%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8.html</link>
      <guid>https://blog.magictable.ha.cn/hardware/Device-%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Device - 数据存储</source>
      <category>硬件设备/设备</category>
      <pubDate>Sun, 15 Dec 2024 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Device - 机器人</title>
      <link>https://blog.magictable.ha.cn/hardware/Device-%E6%9C%BA%E5%99%A8%E4%BA%BA.html</link>
      <guid>https://blog.magictable.ha.cn/hardware/Device-%E6%9C%BA%E5%99%A8%E4%BA%BA.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Device - 机器人</source>
      <description>文章摘要： 机器人硬件相关知识总结和内部文章汇总。 简介 简要说明 机器人是一种模拟人类或动物行为的机械装置，它们可以自主或受人控制地执行特定任务。 主要功能 自动执行任务：机器人可以自动完成重复性或危险的任务，提高生产效率。 代替人力：在恶劣或对人体有害的环境中，机器人可以代替人工操作。 数据采集与分析：机器人可以收集环境数据，并通过内置算法进行分析...</description>
      <category>硬件设备/设备</category>
      <pubDate>Sun, 15 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 机器人硬件相关知识总结和内部文章汇总。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>机器人是一种模拟人类或动物行为的机械装置，它们可以自主或受人控制地执行特定任务。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>自动执行任务</strong>：机器人可以自动完成重复性或危险的任务，提高生产效率。</li>
<li><strong>代替人力</strong>：在恶劣或对人体有害的环境中，机器人可以代替人工操作。</li>
<li><strong>数据采集与分析</strong>：机器人可以收集环境数据，并通过内置算法进行分析。</li>
<li><strong>交互沟通</strong>：部分机器人具备与人或其他机器人交互的能力，可以进行简单的沟通。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>安全保障</strong>：确保机器人在运行过程中不会对人体造成伤害。</li>
<li><strong>维护保养</strong>：定期对机器人进行维护和保养，以保证其正常运行。</li>
<li><strong>法律法规</strong>：遵循相关法律法规，确保机器人的使用不违反国家规定。</li>
<li><strong>伦理道德</strong>：在使用机器人时，要考虑其可能带来的伦理道德问题。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>教育培训</strong>：用于教学和技能培训，提高学习效果。</li>
<li><strong>家庭服务</strong>：如扫地机器人、烹饪机器人等，减轻家庭劳动负担。</li>
<li><strong>医疗护理</strong>：辅助医生进行手术或照顾病人。</li>
<li><strong>工业制造</strong>：用于自动化生产线，提高生产效率和质量。</li>
<li><strong>空间探索</strong>：在太空环境中执行探测、建设等任务。</li>
<li><strong>军事领域</strong>：用于侦察、排雷、作战等任务。</li>
</ul>
<h2>分类</h2>
<h3>按功能分类</h3>
<ol>
<li><strong>工业机器人</strong>：主要用于工厂生产线上的自动化生产，如装配、焊接、搬运、喷涂、加工等。</li>
<li><strong>服务机器人</strong>：主要用于提供服务，根据服务对象的不同，服务机器人还可以分为个人/家用服务机器人和公共服务机器人。个人/家用服务机器人如扫地机器人、擦窗机器人等，公共服务机器人如餐厅服务机器人、酒店服务机器人、医院导诊机器人等。</li>
<li><strong>医疗机器人</strong>：专门用于医疗领域的机器人，如手术机器人、康复机器人、护理机器人、药物管理机器人、患者监测机器人等。</li>
<li><strong>军事机器人</strong>：用于军事领域的机器人，如侦察机器人、排爆机器人、战斗机器人、空间机器人、水下机器人等。</li>
<li><strong>特种机器人</strong>：指那些设计用于执行特定任务，并在特殊环境或条件下工作的机器人，它们通常具有针对性强、技术复杂度高、适应环境独特等特点，广泛应用于非制造业和特殊应用场景中，如搜救机器人、水下作业机器人、极限作业机器人等。</li>
<li><strong>农业机器人</strong>：主要用于农业生产，如播种机器人、喷洒农药机器人等。</li>
</ol>
<h3>按结构分类</h3>
<ol>
<li><strong>串联机器人</strong>：结构类似于人的手臂，由一系列的关节和杠杆组成，可以实现各种复杂的动作。</li>
<li><strong>并联机器人</strong>：结构类似于人的腿，由一系列的杆件和驱动器组成，可以实现高速和高精度的运动。</li>
<li><strong>轮式机器人</strong>：采用轮子作为移动方式，如双轮、三轮、全方位驱动机器人等。</li>
<li><strong>足腿式机器人</strong>：采用足腿作为移动方式，如双足、三足、四足机器人等。</li>
<li><strong>履带式机器人</strong>：采用履带作为移动方式，适用于复杂地形。</li>
<li><strong>蠕动式机器人</strong>：利用自身蠕动装置实现移动，如上下蠕动机器人、左右蠕动机器人等。</li>
<li><strong>飞行式机器人</strong>：利用飞行装置在空中飞行移动，如直升飞行机器人、滑行飞行机器人等。</li>
<li><strong>浮游式机器人</strong>：利用推进装置在水面上实现移动，如螺旋桨浮游机器人、喷水浮游机器人等。</li>
<li><strong>潜游式机器人</strong>：利用下潜、潜游装置实现下潜游动，如拖曳潜游机器人、自主潜游机器人等。</li>
</ol>
<h3>按智能程度分类</h3>
<ol>
<li><strong>非智能机器人</strong>（一般机器人）：智能程度较低，只能按照人们给它规定的程序工作，不管外界条件有何变化，自己都不能对程序做相应的调整。这类机器人通常用于受控环境下的任务，如汽车生产线上的机器人。</li>
<li><strong>智能机器人</strong>：智能程度较高，可以自主感知、决策和执行任务。智能机器人具有更强的移动能力、机敏性、灵活性和适应性，并具备智能学习及和人类互动的能力。这类机器人多用于军事、场地、医疗等行业。</li>
</ol>
<p>进一步细分，智能机器人还可以包括以下几种类型：</p>
<ul>
<li><strong>传感型机器人</strong>：具有采集各种传感信息（包括视觉、听觉、触觉等）的能力，其受控于外部计算机。</li>
<li><strong>交互型机器人</strong>：可以通过计算机系统与操作员或程序员进行人机对话，实现对机器人的控制与操作。虽然具有了部分处理和决策功能，能够独立地实现一些诸如轨迹规划、简单的避障等功能，但是还要受到外部控制。</li>
<li><strong>自主型机器人</strong>：本体自带各种必要的传感器、控制器，在运行过程中无外界人为信息输入和控制的条件下，可以独立完成一定的任务。</li>
</ul>
<h3>按运动控制方式分类</h3>
<ol>
<li><strong>顺序控制型</strong>（点位控制型）：机器人只需要按照规定的次序和移动速度运动到指定点进行定位，而不需要控制移动过程中的运动轨迹。这类机器人可以用于物品搬运等任务。</li>
<li><strong>轨迹控制型</strong>：机器人需要同时控制移动轨迹、移动速度和运动终点。这类机器人可用于焊接、喷漆等连续移动作业。</li>
<li><strong>远程控制型</strong>：机器人可实现无线遥控，如军事机器人、空间机器人等。</li>
<li><strong>智能控制型</strong>：机器人能够自主进行导航、决策和执行任务，如自主移动机器人、智能服务机器人等。</li>
</ol>
<h3>其他分类方式</h3>
<ol>
<li><strong>使用空间分类</strong>：根据机器人的使用空间，可分为地面/地下机器人、水面/水下机器人、空中机器人等。</li>
<li><strong>编程和控制方式分类</strong>：根据机器人的编程和控制方式，可分为编程型机器人、主从机器人和协作机器人。</li>
<li><strong>感知分类</strong>：根据机器人的感知能力，可以分为具有视觉、听觉、触觉、味觉、嗅觉等感知能力的机器人。</li>
<li><strong>尺寸分类</strong>：根据机器人的尺寸大小，可以分为微型机器人、小型机器人、中型机器人和大型机器人等。</li>
</ol>
<h2>核心零部件</h2>
<ul>
<li>减速器、控制器、伺服电机、传感器、激光雷达、深度相机、AI芯片</li>
</ul>
<h2>软件系统</h2>
<ul>
<li>SLAM、操作系统、人工智能、云服务、应用开发（工具/插件）</li>
</ul>
<h2>供应商和厂商</h2>
<p>上游</p>
<ul>
<li>零部件供应商：绿的谐波、和而泰、禾赛科技、奥比中光</li>
<li>技术服务商：思岚科技、商汤科技、科大讯飞</li>
<li>云计算服务商：百度、华为、阿里巴巴、腾讯</li>
</ul>
<p>中游</p>
<ul>
<li>个人/家庭服务机器人厂商：科沃斯、石头科技</li>
<li>公共服务机器人厂商：擎朗智能、普渡科技、猎户星空</li>
<li>特种服务机器人厂商：景业智能、亿嘉和</li>
</ul>
<h2>政策</h2>
<ul>
<li>《“十四五”机器人产业发展规划》</li>
<li>《“机器人+”应用行动实施方案》</li>
<li>《人形机器人创新发展指导意见》</li>
<li>《2025年人形机器人产业发展蓝皮书—人形机器人量产及商业化关键挑战》</li>
</ul>
<h2>公司产品</h2>
<h3>ASIMO</h3>
<ul>
<li>日本本田技研工业株式会社研制的仿人机器人。</li>
<li>2013年 - 2022年3月31日</li>
</ul>
<blockquote>
<p><img src="https://bkimg.cdn.bcebos.com/pic/8759287ab6a2c7c92e73b318?x-bce-process=image/format,f_auto/watermark,image_d2F0ZXIvYmFpa2UyNzI,g_7,xp_5,yp_5,P_20/resize,m_lfit,limit_1,h_1080" alt=""></p>
</blockquote>
<h3>Atlas</h3>
<ul>
<li>2017年</li>
<li>Atlas机器人（英语：Atlas(robot)）是一个双足人形机器人，由美国波士顿动力公司为主开发，和由美国国防部国防高等研究计划署（DARPA）的资助和监督。</li>
<li>这个身高6-英尺（1.8-米） 的机器人是专为各种搜索及拯救任务而设计，并在2013年7月11日向公众亮相。</li>
</ul>
<p>液压版</p>
<blockquote>
<p><img src="https://pic.rmb.bdstatic.com/bjh/240418/dump/6a1bb18a8c444e0d93f44200249bbd4c.gif" alt=""></p>
</blockquote>
<p>电动版</p>
<blockquote>
<p><img src="https://pic.rmb.bdstatic.com/bjh/240418/dump/d0b354e41cd203819b4a28ad58ff4eb6.gif" alt=""></p>
</blockquote>
<h3>Optimus</h3>
<ul>
<li>2022年10月1日</li>
<li>擎天柱（Optimus），是特斯拉开发的一款人形机器人，特斯拉将在2025年开始“限量生产”擎天柱机器人</li>
</ul>
<blockquote>
<p><img src="https://pics2.baidu.com/feed/e824b899a9014c089b0eec354439e8067bf4f43f.jpeg@f_auto?token=1e3e8781225657fe8ba10c204b83d92c" alt=""></p>
</blockquote>
<h3>Figure 02</h3>
<ul>
<li>Figure 02是初创公司Figure AI发布的旗下新一代人形机器人。</li>
<li>当地时间2024年8月6日，第二代人形机器人Figure 02发布，距离向工业用户销售量产人形机器人的目标又近了一步。</li>
</ul>
<blockquote>
<p><img src="https://pic.rmb.bdstatic.com/bjh/240806/dump/125378bed95f9016eb9512b48e2d2e75.gif" alt=""></p>
</blockquote>
<h3>Ameca</h3>
<p>相关文章：https://weibo.com/ttarticle/p/show?id=2309404744693597470941</p>
<blockquote>
<p><img src="https://pics7.baidu.com/feed/5366d0160924ab18098e7a70c6c546c07a890bae.jpeg@f_auto?token=29fb18c6b21ec4dacc4e407e11a86fb9" alt=""></p>
</blockquote>
<h3>Clone Alpha</h3>
<ul>
<li>clone公司12月5日发布最新人形机器人clone alpha。</li>
</ul>
<blockquote>
<p><img src="https://pics3.baidu.com/feed/d009b3de9c82d158056d02b5d0a838d7bd3e427c.jpeg@f_auto?token=bf4e0c962f1f1504622a9e0a6c76902f" alt=""></p>
</blockquote>
<h3>众擎SE01</h3>
<ul>
<li>深圳众擎机器人推出的一款全尺寸通用人形机器人。</li>
</ul>
<blockquote>
<p><img src="https://bkimg.cdn.bcebos.com/pic/cc11728b4710b912c8fc9cc693a4eb039245d68884c8?x-bce-process=image/format,f_auto/watermark,image_d2F0ZXIvYmFpa2UyNzI,g_7,xp_5,yp_5,P_20/resize,m_lfit,limit_1,h_1080" alt=""></p>
</blockquote>
<h3>EX仿生人形机器人</h3>
<blockquote>
<p><img src="https://q2.itc.cn/q_70/images03/20240826/5ce16716c245428291285e9a42df76c2.png" alt=""></p>
</blockquote>
<h3>灵犀X2</h3>
<blockquote>
<p><img src="https://pics4.baidu.com/feed/d52a2834349b033bab6de22fa066b3dcd739bd92.png@f_auto?token=13b4e109c8018fa8f98c42f0e07d7768" alt=""></p>
</blockquote>
]]></content:encoded>
      <enclosure url="https://bkimg.cdn.bcebos.com/pic/8759287ab6a2c7c92e73b318?x-bce-process=image/format,f_auto/watermark,image_d2F0ZXIvYmFpa2UyNzI,g_7,xp_5,yp_5,P_20/resize,m_lfit,limit_1,h_1080" type="image/"/>
    </item>
    <item>
      <title>Device（产品设备）</title>
      <link>https://blog.magictable.ha.cn/hardware/Device%EF%BC%88%E4%BA%A7%E5%93%81%E8%AE%BE%E5%A4%87%EF%BC%89.html</link>
      <guid>https://blog.magictable.ha.cn/hardware/Device%EF%BC%88%E4%BA%A7%E5%93%81%E8%AE%BE%E5%A4%87%EF%BC%89.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Device（产品设备）</source>
      <description>文章摘要： 计算设备硬件相关知识总结和内部文章汇总。 简介 简要说明 主要功能 注意事项 适用场景 基础知识 产品应用 中央处理器（CPU） 详细总结： 网络设备 详细总结： 数据传输线 详细总结： 数据存储 详细总结： 移动通信基站 详细总结： 无线电设备 详细总结： 可编程逻辑控制器 详细总结： 机器人 详细总结： 开发板 OrangePi香橙派 ...</description>
      <category>硬件设备/设备</category>
      <pubDate>Sun, 15 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 计算设备硬件相关知识总结和内部文章汇总。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>基础知识</h2>
<h2>产品应用</h2>
<h3>中央处理器（CPU）</h3>
<p>详细总结：<a href="/hardware/Device-%E4%B8%AD%E5%A4%AE%E5%A4%84%E7%90%86%E5%99%A8.html" target="_blank">Device-中央处理器</a></p>
<h3>网络设备</h3>
<p>详细总结：<a href="/hardware/Device-%E7%BD%91%E7%BB%9C%E8%AE%BE%E5%A4%87.html" target="_blank">Device-网络设备</a></p>
<h3>数据传输线</h3>
<p>详细总结：<a href="/hardware/Device-%E6%95%B0%E6%8D%AE%E4%BC%A0%E8%BE%93%E7%BA%BF.html" target="_blank">Device-数据传输线</a></p>
<h3>数据存储</h3>
<p>详细总结：<a href="/hardware/Device-%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8.html" target="_blank">Device-数据存储</a></p>
<h3>移动通信基站</h3>
<p>详细总结：<a href="/hardware/Device-%E7%A7%BB%E5%8A%A8%E9%80%9A%E4%BF%A1%E5%9F%BA%E7%AB%99.html" target="_blank">Device-移动通信基站</a></p>
<h3>无线电设备</h3>
<p>详细总结：<a href="/hardware/Device-%E6%97%A0%E7%BA%BF%E7%94%B5%E8%AE%BE%E5%A4%87.html" target="_blank">Device-无线电设备</a></p>
<h3>可编程逻辑控制器</h3>
<p>详细总结：<a href="/hardware/Device-%E5%8F%AF%E7%BC%96%E7%A8%8B%E9%80%BB%E8%BE%91%E6%8E%A7%E5%88%B6%E5%99%A8.html" target="_blank">Device-可编程逻辑控制器</a></p>
<h3>机器人</h3>
<p>详细总结：<a href="/hardware/Device-%E6%9C%BA%E5%99%A8%E4%BA%BA.html" target="_blank">Device-机器人</a></p>
<h3>开发板</h3>
<ul>
<li>OrangePi香橙派</li>
</ul>
<h3>能源</h3>
<p>发电：发电厂</p>
<p>输电：国家电网、国电南瑞、正泰电器、特变电工、许继电气</p>
<p>储电：电池</p>
<h3>通信</h3>
<p>无线电通信、卫星通信、WIFI通信、蓝牙通信、星闪通信</p>
<p>4G/5G基站等</p>
<h3>工业模组</h3>
]]></content:encoded>
    </item>
    <item>
      <title>Language - HTML - 公共属性</title>
      <link>https://blog.magictable.ha.cn/software/Language-HTML-%E5%85%AC%E5%85%B1%E5%B1%9E%E6%80%A7.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-HTML-%E5%85%AC%E5%85%B1%E5%B1%9E%E6%80%A7.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - HTML - 公共属性</source>
      <description>文章摘要： HTML标签的公共属性。 class属性 对 HTML 进行分类（设置类），使我们能够为元素的类定义 CSS 样式。 为相同的类设置相同的样式，或者为不同的类设置不同的样式。 一个元素能指定多个类。 在&amp;lt;head&amp;gt;&amp;lt;/head&amp;gt;标签中的&amp;lt;style&amp;gt;&amp;lt;/style&amp;gt;标签中写一个名为abc类，如下所示： 案例 id属性 定义元素唯一的id。 ...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Sun, 15 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> HTML标签的公共属性。</p>
<!-- more -->
<h3>class属性</h3>
<ul>
<li>对 HTML 进行分类（设置类），使我们能够为元素的类定义 CSS 样式。</li>
<li>为相同的类设置相同的样式，或者为不同的类设置不同的样式。</li>
<li>一个元素能指定多个类。</li>
</ul>
<p>在<code>&lt;head&gt;&lt;/head&gt;</code>标签中的<code>&lt;style&gt;&lt;/style&gt;</code>标签中写一个名为<code>abc</code>类，如下所示：</p>
<p>案例</p>
<div class="language-html line-numbers-mode" data-highlighter="prismjs" data-ext="html"><pre><code class="language-html"><span class="line"><span class="token doctype"><span class="token punctuation">&lt;!</span><span class="token doctype-tag">DOCTYPE</span> <span class="token name">html</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>html</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>head</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>style</span><span class="token punctuation">&gt;</span></span><span class="token style"><span class="token language-css"></span>
<span class="line">            <span class="token comment">/* abc的`{ }`中是编写的样式 */</span></span>
<span class="line">            <span class="token selector">.abc</span> <span class="token punctuation">{</span></span>
<span class="line">                <span class="token property">background-color</span><span class="token punctuation">:</span>black<span class="token punctuation">;</span></span>
<span class="line">                <span class="token property">color</span><span class="token punctuation">:</span>white<span class="token punctuation">;</span></span>
<span class="line">                <span class="token property">margin</span><span class="token punctuation">:</span>20px<span class="token punctuation">;</span></span>
<span class="line">                <span class="token property">padding</span><span class="token punctuation">:</span>20px<span class="token punctuation">;</span></span>
<span class="line">            <span class="token punctuation">}</span> </span>
<span class="line">        </span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>style</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>head</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>body</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">        <span class="token comment">&lt;!-- 有设置abc类，这将使用上面abc的样式 --&gt;</span></span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>abc<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="line">        </span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span> </span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>body</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>html</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>id属性</h3>
<ul>
<li>定义元素唯一的id。</li>
<li><code>id</code> 属性指定 HTML 元素的唯一 ID。 <code>id</code> 属性的值在 HTML 文档中必须是唯一的。</li>
<li><code>id</code> 属性用于指向样式表中的特定样式声明。</li>
<li>JavaScript 也可使用它来访问和操作拥有特定 ID 的元素。</li>
</ul>
<p>语法规则</p>
<ul>
<li>写一个井号 <code>#</code>，后跟一个 id 名称。然后，在花括号<code>{}</code> 中定义 CSS 属性。</li>
</ul>
<div class="language-html line-numbers-mode" data-highlighter="prismjs" data-ext="html"><pre><code class="language-html"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>html</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>head</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>style</span><span class="token punctuation">&gt;</span></span><span class="token style"><span class="token language-css"></span>
<span class="line">            <span class="token comment">/* id属性定义的样式代码 */</span></span>
<span class="line">            <span class="token selector">#abc</span> <span class="token punctuation">{</span></span>
<span class="line">            样式块</span>
<span class="line">            <span class="token punctuation">}</span></span>
<span class="line">        </span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>style</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>head</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>html</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>style属性</h3>
<ul>
<li>规定元素的行为样式。</li>
<li>该方法被称为行内（内嵌）样式。</li>
</ul>
<p>CSS样式详细总结：<a href="/software/Language-CSS-%E6%A0%B7%E5%BC%8F.html" target="_blank">Language-CSS-样式</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Nano</title>
      <link>https://blog.magictable.ha.cn/software/Package-Nano.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Nano.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Nano</source>
      <description>文章摘要： Nano是一个基于文本的命令行文本编辑器，它是GNU nano的简称，是自由软件，用于在类Unix系统中编辑文件。 简介 简要说明 Nano是一个基于文本的命令行文本编辑器。 是GNU nano的简称，是自由软件，用于在类Unix系统中编辑文件。 替代传统的Unix文本编辑器如ed和vi，提供一个更简单、直观的用户界面。 主要功能 基本编辑...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sun, 15 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Nano是一个基于文本的命令行文本编辑器，它是GNU nano的简称，是自由软件，用于在类Unix系统中编辑文件。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>Nano是一个基于文本的命令行文本编辑器。</li>
<li>是GNU nano的简称，是自由软件，用于在类Unix系统中编辑文件。</li>
<li>替代传统的Unix文本编辑器如ed和vi，提供一个更简单、直观的用户界面。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>基本编辑</strong>：提供文本插入、删除、复制、粘贴和查找替换等基本编辑功能。</li>
<li><strong>语法高亮</strong>：支持多种编程语言的语法高亮显示，便于代码编写和阅读。</li>
<li><strong>多缓冲区编辑</strong>：可以同时打开多个文件进行编辑。</li>
<li><strong>鼠标支持</strong>：在支持鼠标的终端中，可以使用鼠标进行复制、粘贴等操作。</li>
<li><strong>行号显示</strong>：可以显示行号，便于定位和引用。</li>
<li><strong>自动缩进</strong>：支持代码自动缩进，提高代码可读性。</li>
<li><strong>交互式帮助</strong>：在Nano中按下<code>Ctrl+G</code>可以访问交互式帮助，列出所有快捷键和命令。</li>
<li><strong>可配置性</strong>：用户可以通过<code>.nanorc</code>文件自定义Nano的行为和外观。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>快捷键学习</strong>：Nano使用快捷键进行操作，用户需要记住这些快捷键才能高效使用。</li>
<li><strong>功能限制</strong>：与一些更高级的文本编辑器相比，Nano的功能相对有限，不适合复杂的文本处理任务。</li>
<li><strong>性能问题</strong>：在处理非常大的文件时，Nano的性能可能不如一些专门为处理大文件设计的编辑器。</li>
<li><strong>安全模式</strong>：在某些配置下，Nano可能以安全模式运行，限制某些功能以防止潜在的恶意代码执行。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>命令行环境</strong>：在命令行界面下，Nano是一个简单易用的文本编辑器。</li>
<li><strong>远程编辑</strong>：在通过SSH等远程连接到服务器时，Nano是一个常用的文本编辑工具。</li>
<li><strong>轻量级需求</strong>：当系统资源有限或不需要复杂编辑功能时，Nano是一个不错的选择。</li>
<li><strong>初学者友好</strong>：对于刚接触命令行文本编辑器的用户来说，Nano的直观界面和交互式帮助使其易于上手。</li>
<li><strong>脚本编写</strong>：适合快速编写或修改简单的脚本文件。</li>
</ul>
<h2>安装与卸载</h2>
<p>详细总结：<a href=""></a></p>
<h2>终端命令</h2>
<p>详细总结：<a href=""></a></p>
<h2>配置文件</h2>
<p>详细总结：<a href=""></a></p>
<h2>热门推荐</h2>
<p>详细总结：<a href=""></a></p>
<h2>问题总结</h2>
<p>详细总结：<a href=""></a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Subversion</title>
      <link>https://blog.magictable.ha.cn/software/Package-Subversion.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Subversion.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Subversion</source>
      <description>文章摘要： Subversion（简称SVN）作为一种经典的集中式版本控制工具，在软件开发、文档管理、网站内容管理等领域具有广泛的应用。 简介 简要说明 Subversion（简称SVN）是一种开放源代码的集中式版本控制系统。 通过客户端-服务器架构实现了对文件、目录等资源的版本化管理。 能够帮助用户记住每次的修改，查看所有的修改记录，并能够恢复到任何...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sun, 15 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Subversion（简称SVN）作为一种经典的集中式版本控制工具，在软件开发、文档管理、网站内容管理等领域具有广泛的应用。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>Subversion（简称SVN）是一种开放源代码的集中式版本控制系统。</li>
<li>通过客户端-服务器架构实现了对文件、目录等资源的版本化管理。</li>
<li>能够帮助用户记住每次的修改，查看所有的修改记录，并能够恢复到任何历史版本。</li>
<li>支持权限管理，可以按照目录进行权限划分，确保代码的安全性。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>版本控制</strong>：SVN能够记录每一次的修改操作，包括添加、删除、修改文件等，并提供历史版本回溯功能。</li>
<li><strong>权限管理</strong>：支持细粒度的权限控制，可以按组、按个人进行针对某个子目录的权限控制。</li>
<li><strong>分支管理</strong>：虽然相比Git来说分支管理相对复杂，但SVN也支持分支的创建和管理，以便于进行并行开发和测试。</li>
<li><strong>合并与冲突解决</strong>：支持代码的合并操作，并在合并过程中提供冲突解决机制。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>网络依赖</strong>：由于SVN采用集中式管理，因此大多数操作需要网络连接。在网络不稳定或中断的情况下，可能会影响SVN的正常使用。</li>
<li><strong>性能问题</strong>：在处理大量文件和大规模项目时，SVN的性能可能会受到影响。特别是在执行某些操作（如分支和合并）时，可能会比较耗时。</li>
<li><strong>学习成本</strong>：虽然SVN相对于Git来说操作较为简单，但对于初学者来说仍然需要一定的时间来熟悉和掌握。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>企业内部项目</strong>：SVN适合企业内部由项目经理统一协调的多个并行项目的开发。由于SVN具有严格的权限管理功能，因此可以确保代码的安全性，防止未经授权的访问和修改。</li>
<li><strong>文档管理</strong>：对于需要频繁修改和更新的文档，SVN同样能够提供有效的版本控制支持。这有助于团队成员协同工作，确保文档的一致性和可追溯性。</li>
<li><strong>网站内容管理</strong>：在网站建设和维护过程中，SVN可以管理网站的各种资源文件，如HTML、CSS、JavaScript等。通过SVN的版本控制功能，可以方便地追踪和回滚网站内容的更改。</li>
</ul>
<h2>安装与卸载</h2>
<ul>
<li>下载地址：<a href="https://subversion.apache.org/download.cgi" target="_blank" rel="noopener noreferrer">官网下载链接</a></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>终端命令</h2>
<p>详细总结：<a href=""></a></p>
<h2>配置文件</h2>
<p>详细总结：<a href=""></a></p>
<h2>热门推荐</h2>
<p>详细总结：<a href=""></a></p>
<h2>问题总结</h2>
<p>详细总结：<a href=""></a></p>
<h2>SVN仓库</h2>
<ul>
<li>创建远程SVN仓库后，才能使用SVN客户端操作。</li>
<li>推荐：svnbucket.com，SVN桶。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>OS - Debian Linux - 热门推荐 - 系统维护规划</title>
      <link>https://blog.magictable.ha.cn/software/OS-DebianLinux-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E7%B3%BB%E7%BB%9F%E7%BB%B4%E6%8A%A4%E8%A7%84%E5%88%92.html</link>
      <guid>https://blog.magictable.ha.cn/software/OS-DebianLinux-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E7%B3%BB%E7%BB%9F%E7%BB%B4%E6%8A%A4%E8%A7%84%E5%88%92.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">OS - Debian Linux - 热门推荐 - 系统维护规划</source>
      <description>文章摘要： 系统维护任务事项规划。 关注apt包管理器的 “镜像源列表” 和 “镜像源仓库提供的GPG密钥” 是否过期。 若发现密钥过期，请重新到官网获取密钥并保存到本地。 详细操作请查看该内部相关文章： 系统更新 原因：保持系统安全性和稳定性，及时获取官方提供的漏洞修复补丁。 计划：每周执行一次系统更新。 注意：避免更新正在被其他特殊项目或软件包依赖...</description>
      <category>软件程序/操作系统</category>
      <pubDate>Sat, 14 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 系统维护任务事项规划。</p>
<!-- more -->
<ol>
<li>关注apt包管理器的 “镜像源列表” 和 “镜像源仓库提供的GPG密钥” 是否过期。</li>
</ol>
<ul>
<li>若发现密钥过期，请重新到官网获取密钥并保存到本地。</li>
<li>详细操作请查看该内部相关文章：<a href="/software/Package-Apt-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E8%BD%AF%E4%BB%B6%E4%BB%93%E5%BA%93%E7%9A%84GPG%E5%AF%86%E9%92%A5%E8%BF%87%E6%97%B6%E8%AD%A6%E5%91%8A.html" target="_blank">Package-Apt-问题总结-软件仓库的GPG密钥过时警告</a></li>
</ul>
<p>系统更新</p>
<ul>
<li>原因：保持系统安全性和稳定性，及时获取官方提供的漏洞修复补丁。</li>
<li>计划：每周执行一次系统更新。</li>
<li>注意：避免更新正在被其他特殊项目或软件包依赖的软件，因为可能导致版本冲突。</li>
</ul>
<p>软件包管理</p>
<ul>
<li>原因：使用Debian自带的APT包管理器删除多于的软件包，关注apt配置文件中记录的镜像源URI地址和对应的GPG密钥是否过期。</li>
<li>计划：</li>
<li>注意：</li>
</ul>
<p>系统监控</p>
<ul>
<li>原因：实时了解系统运行状态，确保系统稳定运行。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Docker - Apt - 问题总结 - 添加第三方软件仓库和导入GPG密钥</title>
      <link>https://blog.magictable.ha.cn/software/Package-Apt-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E6%B7%BB%E5%8A%A0%E7%AC%AC%E4%B8%89%E6%96%B9%E8%BD%AF%E4%BB%B6%E4%BB%93%E5%BA%93%E5%92%8C%E5%AF%BC%E5%85%A5GPG%E5%AF%86%E9%92%A5.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Apt-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E6%B7%BB%E5%8A%A0%E7%AC%AC%E4%B8%89%E6%96%B9%E8%BD%AF%E4%BB%B6%E4%BB%93%E5%BA%93%E5%92%8C%E5%AF%BC%E5%85%A5GPG%E5%AF%86%E9%92%A5.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Docker - Apt - 问题总结 - 添加第三方软件仓库和导入GPG密钥</source>
      <description>文章摘要： 手动添加其他第三方或官方的仓库URI地址进行下载软件包。 警告 避免使用 apt-key 命令工具，因为该命令已废弃，会全局信任密钥，存在安全风险。 添加仓库源（存储库到apt镜像源列表） 在 /etc/apt/sources.list.d/ 目录下创建一个后缀为 .list 的独立文件。 文件内容和格式如下： 添加GPG密钥 每个仓库的G...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 14 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 手动添加其他第三方或官方的仓库URI地址进行下载软件包。</p>
<!-- more -->
<div class="hint-container warning">
<p class="hint-container-title">警告</p>
<p>避免使用 <code>apt-key</code> 命令工具，因为该命令已废弃，会全局信任密钥，存在安全风险。</p>
</div>
<ol>
<li>添加仓库源（存储库到apt镜像源列表）</li>
</ol>
<ul>
<li>在 <code>/etc/apt/sources.list.d/</code> 目录下创建一个后缀为 <code>.list</code> 的独立文件。</li>
<li>文件内容和格式如下：</li>
</ul>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">deb [signed-by=/etc/apt/trusted.gpg.d/qgis.gpg] https://debian.qgis.org/debian bookworm main</span>
<span class="line"></span>
<span class="line"># `[signed-by]` 指定该仓库对应的密钥文件，避免全局信任。</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ol start="2">
<li>添加GPG密钥</li>
</ol>
<ul>
<li>每个仓库的GPG密钥文件应单独保存在 <code>/etc/apt/trusted.gpg.d/</code> 目录下，文件后缀是 <code>.gpg</code>。</li>
</ul>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 若仓库源提供的是ASCII格式的密钥（ `.asc` 文件），则需要使用gpg命令转换为二进制格式（`.gpg` 文件）。</span></span>
<span class="line"><span class="token comment"># 因为 APT 默认使用二进制格式密钥，直接使用 ASCII 格式可能导致兼容性问题。</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 将 ASCII格式的密钥(.asc) 转换为 二进制格式(.gpg) 格式的密钥 </span></span>
<span class="line">gpg <span class="token parameter variable">--dearmor</span> <span class="token parameter variable">--output</span> <span class="token operator">&lt;</span>ASCII格式的密钥<span class="token punctuation">(</span>.asc<span class="token punctuation">)</span><span class="token operator">&gt;</span> <span class="token operator">&lt;</span>二进制格式<span class="token punctuation">(</span>.gpg<span class="token punctuation">)</span><span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul>
<li>将 <code>.gpg</code> 文件下载下来后或转换完成后，存放到指定目录即可。</li>
</ul>
<ol start="3">
<li>更新存储库索引（APT存储库缓存列表）</li>
</ol>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">sudo</span> <span class="token function">apt</span> update</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Docker - Apt - 问题总结 - 软件仓库的GPG密钥过时警告</title>
      <link>https://blog.magictable.ha.cn/software/Package-Apt-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E8%BD%AF%E4%BB%B6%E4%BB%93%E5%BA%93%E7%9A%84GPG%E5%AF%86%E9%92%A5%E8%BF%87%E6%97%B6%E8%AD%A6%E5%91%8A.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Apt-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E8%BD%AF%E4%BB%B6%E4%BB%93%E5%BA%93%E7%9A%84GPG%E5%AF%86%E9%92%A5%E8%BF%87%E6%97%B6%E8%AD%A6%E5%91%8A.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Docker - Apt - 问题总结 - 软件仓库的GPG密钥过时警告</source>
      <description>文章摘要： 仓库的 GPG 密钥过时警告解决方案。 重要 在 Debian 和 Ubuntu 系统中，apt 的密钥管理确实经历了一些变化。（传统的 apt-key 命令用于管理存储在 /etc/apt/trusted.gpg 中的 GPG 密钥，但现在这种方法已被标记为不推荐使用。） 新的做法是使用 apt 本身来管理密钥，这通常涉及到使用 .gpg...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 14 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 仓库的 GPG 密钥过时警告解决方案。</p>
<!-- more -->
<div class="hint-container important">
<p class="hint-container-title">重要</p>
<ul>
<li>在 Debian 和 Ubuntu 系统中，apt 的密钥管理确实经历了一些变化。（传统的 <code>apt-key</code> 命令用于管理存储在 <code>/etc/apt/trusted.gpg</code> 中的 GPG 密钥，但现在这种方法已被标记为不推荐使用。）</li>
<li>新的做法是使用 <code>apt</code> 本身来管理密钥，这通常涉及到使用 <code>.gpg</code> 文件来存储密钥，并将这些文件放置在 <code>/etc/apt/trusted.gpg.d/</code> 目录中。</li>
<li>也可以使用 GPG 命令进行操作。</li>
</ul>
</div>
<ol>
<li>查看哪些仓库的GPG密钥过时</li>
</ol>
<ul>
<li></li>
</ul>
<ol start="2">
<li>删除过时的GPG密钥文件</li>
</ol>
<ul>
<li></li>
</ul>
<ol start="3">
<li>下载新的GPG密钥文件</li>
</ol>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">wget</span> <span class="token parameter variable">-qO</span> - https://example.com/repository/key.asc <span class="token operator">|</span> gpg <span class="token parameter variable">--dearmor</span> <span class="token operator">&gt;</span> /usr/share/keyrings/repository-keyring.gpg</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><ul>
<li>使用 <code>gpg --dearmor</code> 将密钥转换为 ASCII armored 格式，这样更容易处理。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Bash</title>
      <link>https://blog.magictable.ha.cn/software/Package-Bash.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Bash.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Bash</source>
      <description>文章摘要： Bash（Bourne-Again SHell）是一种命令行解释器。 相关信息 外部相关文章 内部相关文章 Bash Shell脚本语言总结： 简介 简要说明 Bash（Bourne-Again SHell）是一种命令行解释器。 它是大多数 Linux 发行版和 macOS 系统上的默认 Shell。 Bash 提供了一个界面，用户可以通过...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 14 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Bash（Bourne-Again SHell）是一种命令行解释器。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li></li>
</ul>
<p>内部相关文章</p>
<ul>
<li>Bash Shell脚本语言总结：<a href="/software/Language-BashShell.html" target="_blank">Language-BashShell</a></li>
</ul>
</div>
<h2>简介</h2>
<p>简要说明</p>
<blockquote>
<ul>
<li>Bash（Bourne-Again SHell）是一种命令行解释器。</li>
<li>它是大多数 Linux 发行版和 macOS 系统上的默认 Shell。</li>
<li>Bash 提供了一个界面，用户可以通过它输入命令来操作和管理操作系统。</li>
</ul>
</blockquote>
<p>主要功能</p>
<blockquote>
<ul>
<li><strong>命令执行</strong>：运行各种系统命令和用户自定义的脚本。</li>
<li><strong>作业控制</strong>：管理前台和后台运行的进程。</li>
<li><strong>脚本编程</strong>：支持编写脚本来自动化重复性任务。</li>
<li><strong>变量和参数处理</strong>：允许使用变量存储数据，并处理命令行参数。</li>
<li><strong>命令历史记录</strong>：记录并允许用户调用之前输入的命令。</li>
<li><strong>别名和函数</strong>：为常用命令或命令序列创建简短的别名，定义可重复使用的函数。</li>
<li><strong>管道和重定向</strong>：连接命令，以及将命令的输出重定向到文件或其他命令。</li>
<li><strong>条件测试</strong>：提供测试条件真伪的能力，用于流程控制。</li>
<li><strong>循环和分支</strong>：支持循环（如 for、while）和条件分支（如 if、case）等控制结构。</li>
</ul>
</blockquote>
<p>注意事项</p>
<blockquote>
<ul>
<li><strong>权限问题</strong>：执行某些命令可能需要管理员权限（使用 <code>sudo</code>）。</li>
<li><strong>安全性</strong>：直接运行不受信任的脚本可能存在安全风险。</li>
<li><strong>语法准确性</strong>：Bash 脚本对语法要求严格，小的错误可能导致脚本无法正常运行。</li>
<li><strong>性能问题</strong>：对于复杂或计算密集型任务，Bash 可能不是最高效的选择。</li>
</ul>
</blockquote>
<p>适用场景</p>
<blockquote>
<ul>
<li><strong>系统管理</strong>：自动化系统维护任务，如备份、更新和监控。</li>
<li><strong>数据处理</strong>：简单的文本处理和数据转换任务。</li>
<li><strong>软件开发</strong>：构建自动化工具，进行代码编译和测试。</li>
<li><strong>日常任务</strong>：快速执行文件操作、管理服务等。</li>
<li><strong>脚本编写</strong>：编写简单的脚本来串联多个命令，实现复杂操作的自动化。</li>
</ul>
</blockquote>
<h2>安装与卸载</h2>
<p>详细总结：<a href=""></a></p>
<h2>终端命令</h2>
<p>详细总结：<a href="/software/Package-Bash-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4.html" target="_blank">Package-Bash-终端命令</a></p>
<h2>配置文件</h2>
<p>详细总结：<a href=""></a></p>
<h2>热门推荐</h2>
<p>详细总结：<a href=""></a></p>
<h2>问题总结</h2>
<p>详细总结：<a href=""></a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Curl</title>
      <link>https://blog.magictable.ha.cn/software/Package-Curl.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Curl.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Curl</source>
      <description>文章摘要： 通过命令行终端下载网络上的文件，还可以发送各种HTTP请求（GET, POST, PUT, DELETE等）。 简介 简要说明 curl是一个用于在命令行或脚本中向/从服务器传输数据的工具，支持多种协议，包括 HTTP、HTTPS、FTP、FTPS、SCP、SFTP 等。 主要功能 发送各种 HTTP 请求（GET, POST, PUT, ...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 14 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 通过命令行终端下载网络上的文件，还可以发送各种HTTP请求（GET, POST, PUT, DELETE等）。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>curl是一个用于在命令行或脚本中向/从服务器传输数据的工具，支持多种协议，包括 HTTP、HTTPS、FTP、FTPS、SCP、SFTP 等。</li>
</ul>
<p>主要功能</p>
<ul>
<li>发送各种 HTTP 请求（GET, POST, PUT, DELETE 等）。</li>
<li>下载或上传文件。</li>
<li>支持用户代理、cookies、认证（包括基本、摘要、NTLM、协商等）。</li>
<li>支持HTTP/2、HTTPS、代理、SSL证书验证。</li>
<li>可以直接在命令行中发送表单数据。</li>
<li>支持输出请求的详细信息，如响应头、响应时间等。</li>
<li>支持将输出重定向到文件或标准输出。</li>
</ul>
<p>注意事项</p>
<ul>
<li>使用 <code>curl</code> 时，敏感信息（如密码）可能会在命令行中暴露，应当小心处理。</li>
<li>对于一些高级功能，<code>curl</code> 的命令行参数可能比较复杂，需要仔细阅读文档。</li>
<li>在脚本中使用 <code>curl</code> 时，应当处理好错误和异常情况，例如网络错误或非预期的HTTP状态码。</li>
</ul>
<p>适用场景</p>
<ul>
<li>API 测试和调试。</li>
<li>快速检查服务器响应或网络问题。</li>
<li>下载或上传文件到支持的相关协议的服务器。</li>
<li>在脚本中自动化网络相关的任务。</li>
<li>在命令行中进行数据传输，特别是在需要发送特定HTTP请求头或表单数据时。</li>
</ul>
<h2>安装与卸载</h2>
<p>详细总结：<a href=""></a></p>
<h2>终端命令</h2>
<p>详细总结：<a href="/software/Package-Curl-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-curl.html" target="_blank">Package-Curl-终端命令-curl</a></p>
<h2>配置文件</h2>
<p>详细总结：<a href=""></a></p>
<h2>热门推荐</h2>
<p>详细总结：<a href=""></a></p>
<h2>问题总结</h2>
<p>详细总结：<a href=""></a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Package - GnuPG - 终端命令 - gpg</title>
      <link>https://blog.magictable.ha.cn/software/Package-GnuPG-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-gpg.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-GnuPG-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-gpg.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - GnuPG - 终端命令 - gpg</source>
      <description>文章摘要： 用于管理加密和签名的软件包，命令总结。 密钥管理 生成密钥对 查询 导入 导出 修改 更新 加密和解密 签名和验证 密钥格式转换 其他</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 14 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 用于管理加密和签名的软件包，命令总结。</p>
<!-- more -->
<h2>密钥管理</h2>
<h3>生成密钥对</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line">gpg <span class="token parameter variable">--genkey</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>查询</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 查询所有公钥</span></span>
<span class="line">gpg --list-keys</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 查询所有私钥</span></span>
<span class="line">gpg --list-keys</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>导入</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 导入一个公钥或私钥</span></span>
<span class="line">gpg <span class="token parameter variable">--import</span> <span class="token operator">&lt;</span>文件名<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h3>导出</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 导出公钥</span></span>
<span class="line">gpg <span class="token parameter variable">--export</span> <span class="token operator">&lt;</span>公钥ID<span class="token operator">&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 导出私钥（请谨慎操作）</span></span>
<span class="line">gpg --export-secret-keys <span class="token operator">&lt;</span>私钥ID<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>修改</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 编辑一个密钥，例如添加或删除UID</span></span>
<span class="line">gpg --edit-key <span class="token punctuation">[</span>keyid<span class="token punctuation">]</span></span>
<span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>更新</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 更新信任数据库</span></span>
<span class="line">gpg --update-trustdb</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h2>加密和解密</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 加密文件</span></span>
<span class="line">gpg <span class="token parameter variable">--encrypt</span> <span class="token parameter variable">--recipient</span> <span class="token punctuation">[</span>keyid<span class="token punctuation">]</span> <span class="token parameter variable">-o</span> <span class="token punctuation">[</span>output file<span class="token punctuation">]</span> <span class="token punctuation">[</span>input file<span class="token punctuation">]</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 解密文件</span></span>
<span class="line">gpg <span class="token parameter variable">--decrypt</span> <span class="token operator">&lt;</span>文件名<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>签名和验证</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 创建一个文件的签名</span></span>
<span class="line">gpg <span class="token parameter variable">--sign</span> <span class="token punctuation">[</span>file<span class="token punctuation">]</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 创建一个明文签名文件</span></span>
<span class="line">gpg <span class="token parameter variable">--clearsign</span> <span class="token punctuation">[</span>file<span class="token punctuation">]</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 创建一个分离的签名文件</span></span>
<span class="line">gpg --detach-sign <span class="token punctuation">[</span>file<span class="token punctuation">]</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 验证一个文件的签名</span></span>
<span class="line">gpg <span class="token parameter variable">--verify</span> <span class="token punctuation">[</span>signature file<span class="token punctuation">]</span> <span class="token punctuation">[</span>file<span class="token punctuation">]</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>密钥格式转换</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 将 ASCII格式的密钥(.asc) 转换为 二进制格式(.gpg) 格式的密钥</span></span>
<span class="line">gpg <span class="token parameter variable">--dearmor</span> <span class="token parameter variable">--output</span> <span class="token operator">&lt;</span>ASCII格式的密钥<span class="token punctuation">(</span>.asc<span class="token punctuation">)</span><span class="token operator">&gt;</span> <span class="token operator">&lt;</span>二进制格式<span class="token punctuation">(</span>.gpg<span class="token punctuation">)</span><span class="token operator">&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 将 二进制格式(.gpg) 转换为 ASCII格式的密钥(.asc) 格式的密钥</span></span>
<span class="line">gpg <span class="token parameter variable">--armor</span> <span class="token parameter variable">--output</span> <span class="token operator">&lt;</span>二进制格式<span class="token punctuation">(</span>.gpg<span class="token punctuation">)</span><span class="token operator">&gt;</span> <span class="token operator">&lt;</span>ASCII格式的密钥<span class="token punctuation">(</span>.asc<span class="token punctuation">)</span><span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>其他</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 显示一个密钥的指纹</span></span>
<span class="line">gpg <span class="token parameter variable">--fingerprint</span> <span class="token punctuation">[</span>keyid<span class="token punctuation">]</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 从文件描述符n读取密码短语</span></span>
<span class="line">gpg --passphrase-fd <span class="token punctuation">[</span>n<span class="token punctuation">]</span></span>
<span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - GnuPG</title>
      <link>https://blog.magictable.ha.cn/software/Package-GnuPG.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-GnuPG.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - GnuPG</source>
      <description>文章摘要： GnuPG（GNU Privacy Guard）是一个开源的加密软件。 简介 简要说明 GnuPG（GNU Privacy Guard）是一个开源的加密软件， 实现了OpenPGP标准，用于数据加密、数字签名、创建和管理密钥。 GnuPG广泛用于确保电子邮件通信、文件存储和传输的安全性。 主要功能 加密：保护数据，防止未授权的访问。 解密：...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 14 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> GnuPG（GNU Privacy Guard）是一个开源的加密软件。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>GnuPG（GNU Privacy Guard）是一个开源的加密软件，</li>
<li>实现了OpenPGP标准，用于数据加密、数字签名、创建和管理密钥。</li>
<li>GnuPG广泛用于确保电子邮件通信、文件存储和传输的安全性。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>加密</strong>：保护数据，防止未授权的访问。</li>
<li><strong>解密</strong>：使用私钥解密由公钥加密的数据。</li>
<li><strong>数字签名</strong>：创建数字签名来验证消息的完整性和来源。</li>
<li><strong>签名验证</strong>：验证数字签名的有效性。</li>
<li><strong>密钥管理</strong>：生成、导入、导出、删除和管理密钥对（公钥和私钥）。</li>
<li><strong>密钥服务器交互</strong>：上传公钥到密钥服务器，或从密钥服务器下载其他用户的公钥。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>私钥安全</strong>：私钥必须妥善保管，避免泄露，因为它可以用来解密信息和验证签名。</li>
<li><strong>密钥信任</strong>：在使用公钥之前，需要验证其真实性和信任度，通常通过密钥签名来完成。</li>
<li><strong>密码保护</strong>：私钥应使用强密码保护，以防未授权使用。</li>
<li><strong>备份</strong>：应该备份密钥对，以防丢失。</li>
<li><strong>更新和补丁</strong>：定期更新 GPG 以确保安全性和最新功能。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>电子邮件加密</strong>：保护电子邮件内容的隐私。</li>
<li><strong>文件加密</strong>：加密敏感文件，确保只有授权用户可以访问。</li>
<li><strong>软件分发</strong>：软件开发者使用 GPG 签名软件包，用户验证签名以确保软件未被篡改。</li>
<li><strong>代码提交</strong>：开发者使用 GPG 签名 Git 提交，增加代码库的安全性。</li>
<li><strong>身份验证</strong>：在某些系统中，GPG 可用于身份验证，例如 SSH 登录。</li>
<li><strong>数据传输</strong>：在通过网络传输敏感数据时进行加密保护。</li>
</ul>
<h2>安装与卸载</h2>
<p>详细总结：<a href=""></a></p>
<h2>终端命令</h2>
<ul>
<li>gpg：<a href="/software/Package-GnuPG-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-gpg.html" target="_blank">Package-GnuPG-终端命令-gpg</a>，基于OpenPGP标准的一个实现，用于加密、解密、签名、验证以及管理密钥。</li>
</ul>
<h2>配置文件</h2>
<p>详细总结：<a href=""></a></p>
<h2>热门推荐</h2>
<p>详细总结：<a href=""></a></p>
<h2>问题总结</h2>
<p>详细总结：<a href=""></a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Diary - 工作流 - 软件开发 - 协作开发中多系统多环境隔离</title>
      <link>https://blog.magictable.ha.cn/note/Diary-%E5%B7%A5%E4%BD%9C%E6%B5%81-%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91-%E5%8D%8F%E4%BD%9C%E5%BC%80%E5%8F%91%E4%B8%AD%E5%A4%9A%E7%B3%BB%E7%BB%9F%E5%A4%9A%E7%8E%AF%E5%A2%83%E9%9A%94%E7%A6%BB.html</link>
      <guid>https://blog.magictable.ha.cn/note/Diary-%E5%B7%A5%E4%BD%9C%E6%B5%81-%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91-%E5%8D%8F%E4%BD%9C%E5%BC%80%E5%8F%91%E4%B8%AD%E5%A4%9A%E7%B3%BB%E7%BB%9F%E5%A4%9A%E7%8E%AF%E5%A2%83%E9%9A%94%E7%A6%BB.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Diary - 工作流 - 软件开发 - 协作开发中多系统多环境隔离</source>
      <description>文章摘要： 摘要内容。 实现项目环境隔离和多版本前置底层软件管理 软件下载 “预构建二进制文件”，实现下载多个不同版本的底层依赖软件。 软件不添加到环境变量，而是在IDEA或VScode中手动配置软件可执行文件到项目的环境变量中。 重点：底层软件不添加到系统环境变量中，而是手动配置软件可执行文件到IDEA、VScode中的项目环境变量配置文件中。</description>
      <category>学习笔记/日记</category>
      <pubDate>Fri, 13 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>实现项目环境隔离和多版本前置底层软件管理</h2>
<blockquote>
<ul>
<li>软件下载 “预构建二进制文件”，实现下载多个不同版本的底层依赖软件。</li>
<li>软件不添加到环境变量，而是在IDEA或VScode中手动配置软件可执行文件到项目的环境变量中。</li>
<li>重点：底层软件不添加到系统环境变量中，而是手动配置软件可执行文件到IDEA、VScode中的项目环境变量配置文件中。</li>
</ul>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Intellij IDEA - 设置</title>
      <link>https://blog.magictable.ha.cn/software/Package-IntellijIDEA-%E8%AE%BE%E7%BD%AE.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-IntellijIDEA-%E8%AE%BE%E7%BD%AE.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Intellij IDEA - 设置</source>
      <description>文章摘要： Intellij IDEA 软件设置总结。 注释 IDEA中的设置分为：全局设置（后续新项目都受影响）、项目设置（当前项目受影响） 在已经创建好的项目中，再次修改设置，此时修改的是 “项目设置”。 将项目关闭，切换到未打开项目的页面，点击修改设置，此时修改的是 “全局设置”。</description>
      <category>软件程序/软件包</category>
      <pubDate>Fri, 13 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Intellij IDEA 软件设置总结。</p>
<!-- more -->
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>IDEA中的设置分为：全局设置（后续新项目都受影响）、项目设置（当前项目受影响）</p>
<ul>
<li>在已经创建好的项目中，再次修改设置，此时修改的是 “项目设置”。</li>
<li>将项目关闭，切换到未打开项目的页面，点击修改设置，此时修改的是 “全局设置”。</li>
</ul>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Visual Studio Code - 设置</title>
      <link>https://blog.magictable.ha.cn/software/Package-VisualStudioCode-%E8%AE%BE%E7%BD%AE.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-VisualStudioCode-%E8%AE%BE%E7%BD%AE.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Visual Studio Code - 设置</source>
      <description>文章摘要： Visual Studio Code设置文件总结。 相关信息 外部相关文章 内部相关文章 JSON文件详细总结： settings.json文件 settings.json文件是VScode当前项目软件设置文件。 存放在项目目录下的.vscode/目录下。 配置环境变量 注释 ${env:PATH}是VS Code设置中用于引用当前环境变量...</description>
      <category>软件程序/软件包</category>
      <pubDate>Fri, 13 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Visual Studio Code设置文件总结。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li></li>
</ul>
<p>内部相关文章</p>
<ul>
<li>JSON文件详细总结：<a href="/software/Language-JSON.html" target="_blank">Language-JSON</a></li>
</ul>
</div>
<h2><code>settings.json</code>文件</h2>
<ul>
<li><code>settings.json</code>文件是VScode当前项目软件设置文件。</li>
<li>存放在项目目录下的<code>.vscode/</code>目录下。</li>
</ul>
<h3>配置环境变量</h3>
<div class="language-json line-numbers-mode" data-highlighter="prismjs" data-ext="json"><pre><code class="language-json"><span class="line"><span class="token punctuation">{</span></span>
<span class="line">    <span class="token property">"terminal.integrated.defaultProfile.linux"</span><span class="token operator">:</span> <span class="token string">"bash"</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token property">"terminal.integrated.env.linux"</span><span class="token operator">:</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token property">"PATH"</span><span class="token operator">:</span> <span class="token string">"/home/magictable/Tool/node-v22.12.0-linux-x64/bin:${env:PATH}"</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li><code>${env:PATH}</code>是VS Code设置中用于引用当前环境变量<code>PATH</code>的占位符。</li>
<li>也就是将其放在后面，则表示新环境变量将添加在前面。</li>
<li>若将<code>${env:PATH}</code>放在将要添加的环境变量前面，将导致会先读取原先环境变量中的配置信息，可能无法读取到该新环境变量。</li>
</ul>
</div>
<h2><code>launch.json</code>文件</h2>
<ul>
<li><code>launch.json</code>文件是VSCode当前项目调试设置的文件。</li>
<li>存放在项目目录下的<code>.vscode/</code>目录下。</li>
</ul>
<h2>个人推荐设置方案</h2>
<p>详细总结：<a href="/software/Package-VisualStudioCode-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E8%AE%BE%E7%BD%AE.html" target="_blank">Package-VisualStudioCode-热门推荐-设置</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Package - OpenSSH - 安装与卸载</title>
      <link>https://blog.magictable.ha.cn/software/Package-OpenSSH-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OpenSSH-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - OpenSSH - 安装与卸载</source>
      <description>文章摘要： 摘要内容。 软件获取 官方下载地址：https://www.openssh.com/ 安装 - apt包管理器 卸载 - apt包管理器 安装 - 预编译 卸载 - 预编译 安装 - 源代码 卸载 - 源代码</description>
      <category>软件程序/软件包</category>
      <pubDate>Thu, 12 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>软件获取</h2>
<ul>
<li>官方下载地址：<a href="https://www.openssh.com/" target="_blank" rel="noopener noreferrer">https://www.openssh.com/</a></li>
</ul>
<h2>安装 - apt包管理器</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>卸载 - apt包管理器</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>安装 - 预编译</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>卸载 - 预编译</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>安装 - 源代码</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>卸载 - 源代码</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - OpenSSH - 终端命令 - scp</title>
      <link>https://blog.magictable.ha.cn/software/Package-OpenSSH-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-scp.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OpenSSH-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-scp.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - OpenSSH - 终端命令 - scp</source>
      <description>文章摘要： 远程文件传输。 格式 scp -r &amp;lt;本地文件&amp;gt; &amp;lt;目标主机用户名&amp;gt;@&amp;lt;IP地址&amp;gt;:&amp;lt;文件目录&amp;gt; 选项 参数 -p：指定端口号，默认22 案例</description>
      <category>软件程序/软件包</category>
      <pubDate>Thu, 12 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 远程文件传输。</p>
<!-- more -->
<p>格式</p>
<ul>
<li><code>scp -r &lt;本地文件&gt; &lt;目标主机用户名&gt;@&lt;IP地址&gt;:&lt;文件目录&gt;</code></li>
</ul>
<p>选项</p>
<ul>
<li></li>
</ul>
<p>参数</p>
<ul>
<li><code>-p</code>：指定端口号，默认22</li>
</ul>
<p>案例</p>
<ul>
<li></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Package - OpenSSH - 终端命令 - ssh</title>
      <link>https://blog.magictable.ha.cn/software/Package-OpenSSH-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-ssh.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OpenSSH-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-ssh.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - OpenSSH - 终端命令 - ssh</source>
      <description>文章摘要： 远程连接计算机。 远程链接 格式 ssh &amp;lt;目标计算机用户名&amp;gt;@&amp;lt;IP地址&amp;gt; 选项 -V：查询SSH客户端版本信息。 -p：指定端口。默认22。 -6：使用IPv6，进行链接。 参数 案例</description>
      <category>软件程序/软件包</category>
      <pubDate>Thu, 12 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 远程连接计算机。</p>
<!-- more -->
<h2>远程链接</h2>
<p>格式</p>
<ul>
<li><code>ssh &lt;目标计算机用户名&gt;@&lt;IP地址&gt;</code></li>
</ul>
<p>选项</p>
<ul>
<li><code>-V</code>：查询SSH客户端版本信息。</li>
<li><code>-p</code>：指定端口。默认22。</li>
<li><code>-6</code>：使用IPv6，进行链接。</li>
</ul>
<p>参数</p>
<ul>
<li></li>
</ul>
<p>案例</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 连接到远程服务器</span></span>
<span class="line"><span class="token function">ssh</span> root@225.225.255.225</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 指定端口连接到远程服务器</span></span>
<span class="line"><span class="token function">ssh</span> <span class="token parameter variable">-p</span> <span class="token number">3306</span> root@225.225.255.225</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 通过 SSH 执行单条命令（不进入交互模式）</span></span>
<span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - OpenSSH</title>
      <link>https://blog.magictable.ha.cn/software/Package-OpenSSH.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-OpenSSH.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - OpenSSH</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 通过SSH网络通信协议来实现远程连接的工具。 允许用户通过加密的连接安全地访问远程计算机或服务器。 通常包括客户端软件，用于发起连接，以及服务器端软件，用于接受和处理来自客户端的连接请求。 主要功能 安全认证：支持多种认证方式，如密码认证、公钥认证等，确保远程连接的安全性。 命令行访问：提供命令行界面，允许用户直...</description>
      <category>软件程序/软件包</category>
      <pubDate>Thu, 12 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>通过SSH网络通信协议来实现远程连接的工具。</li>
<li>允许用户通过加密的连接安全地访问远程计算机或服务器。</li>
<li>通常包括客户端软件，用于发起连接，以及服务器端软件，用于接受和处理来自客户端的连接请求。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>安全认证</strong>：支持多种认证方式，如密码认证、公钥认证等，确保远程连接的安全性。</li>
<li><strong>命令行访问</strong>：提供命令行界面，允许用户直接在远程服务器上执行命令。</li>
<li><strong>图形界面</strong>：某些SSH工具提供图形用户界面（GUI），简化了远程服务器的管理操作。</li>
<li><strong>文件传输</strong>：支持SFTP、SCP等文件传输协议，实现安全的文件上传和下载。</li>
<li><strong>会话管理</strong>：允许用户保存和管理多个远程会话，方便快速切换。</li>
<li><strong>端口转发</strong>：支持端口转发功能，可以在加密的SSH连接中转发其他TCP/IP端口。</li>
<li><strong>X11转发</strong>：允许在远程服务器上运行的图形应用程序的显示转发到本地机器。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>安全性</strong>：确保使用最新版本的SSH工具，以避免安全漏洞。</li>
<li><strong>密钥保护</strong>：保护私钥不被未授权访问，可以使用密码短语或专门的密钥管理工具。</li>
<li><strong>权限限制</strong>：在服务器端配置适当的权限，限制哪些用户可以远程登录。</li>
<li><strong>网络配置</strong>：确保网络配置允许SSH连接，包括防火墙和路由器的设置。</li>
<li><strong>日志审计</strong>：定期检查SSH登录日志，监控任何异常的访问行为。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>远程服务器管理</strong>：系统管理员使用SSH工具进行远程服务器的日常管理和维护。</li>
<li><strong>开发与测试</strong>：开发者通过SSH工具访问远程开发环境或测试服务器。</li>
<li><strong>数据传输</strong>：在需要安全传输敏感数据的情况下，使用SSH工具进行文件传输。</li>
<li><strong>内网穿透</strong>：当需要从外部网络访问内部网络资源时，SSH工具可以提供安全的连接途径。</li>
<li><strong>加密隧道</strong>：设置SSH隧道进行数据加密传输，或者用于安全地访问内网服务。</li>
<li><strong>自动化和脚本</strong>：通过SSH在远程服务器上执行命令，常用于自动化任务和脚本。</li>
</ul>
<h2>安装与卸载</h2>
<p>详细总结：<a href="/software/Package-OpenSSH-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html" target="_blank">Package-OpenSSH-安装与卸载</a></p>
<h2>终端命令</h2>
<p>详细总结：<a href="/software/Package-OpenSSH-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4.html" target="_blank">Package-OpenSSH-终端命令</a></p>
<h2>配置文件</h2>
<ul>
<li>文件位置：<code>/etc/ssh/sshd_config</code></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>热门推荐</h2>
<p>详细总结：<a href=""></a></p>
<h2>问题总结</h2>
<p>详细总结：<a href=""></a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Vim - 快捷键</title>
      <link>https://blog.magictable.ha.cn/software/Package-Vim-%E5%BF%AB%E6%8D%B7%E9%94%AE.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Vim-%E5%BF%AB%E6%8D%B7%E9%94%AE.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Vim - 快捷键</source>
      <description>文章摘要： 操作总结。 普通模式（Normal） 光标移动 j：向下移动。 k：向上移动。 h：向左移动。 l：向右移动。 w：代表“word”，跳转到下一处单词的开头。 b：代表“back”，跳转到上一处单词的开头。 e：代表“end”，跳转到下一处单词的结尾。 ge：跳转到上一处单词的结尾。 g + g：跳转到第一行。 &amp;lt;行号&amp;gt; + g + g：跳...</description>
      <category>软件程序/软件包</category>
      <pubDate>Thu, 12 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 操作总结。</p>
<!-- more -->
<h2>普通模式（Normal）</h2>
<h3>光标移动</h3>
<ul>
<li>
<p><code>j</code>：向下移动。</p>
</li>
<li>
<p><code>k</code>：向上移动。</p>
</li>
<li>
<p><code>h</code>：向左移动。</p>
</li>
<li>
<p><code>l</code>：向右移动。</p>
</li>
<li>
<p><code>w</code>：代表“word”，跳转到下一处单词的开头。</p>
</li>
<li>
<p><code>b</code>：代表“back”，跳转到上一处单词的开头。</p>
</li>
<li>
<p><code>e</code>：代表“end”，跳转到下一处单词的结尾。</p>
</li>
<li>
<p><code>ge</code>：跳转到上一处单词的结尾。</p>
</li>
<li>
<p><code>g + g</code>：跳转到第一行。</p>
</li>
<li>
<p><code>&lt;行号&gt; + g + g</code>：跳转到指定行。</p>
</li>
<li>
<p><code>D</code>：跳转到最后一行。</p>
</li>
<li>
<p><code>Ctrl+u</code>/<code>Ctrl+b</code>/<code>PageUp</code>：往上翻半页。</p>
</li>
<li>
<p><code>Ctrl+d</code>/<code>Ctrl+f</code>/<code>PageDown</code>：向下翻半页。</p>
</li>
<li>
<p><code>*</code>：查找并跳转到下一个与光标下的单词一致的单词。</p>
</li>
<li>
<p><code>n</code>：快速重复查找，向下查找。</p>
</li>
<li>
<p><code>N</code>：快速重复查找，向上查找。</p>
</li>
<li>
<p><code>m+&lt;按键&gt;</code>：把当前位置标记为&lt;按键&gt;，例如<code>mm</code>，当输入 “反引号+按钮”就会跳回到标记位置。</p>
</li>
<li>
<p><code>两个反引号</code>：上一次跳转前的位置。</p>
</li>
<li>
<p><code>反引号+.</code>：上一次修改的位置。</p>
</li>
<li>
<p><code>反引号+^</code>：上一次插入的位置。</p>
</li>
</ul>
<h2>可视模式（Visual）</h2>
<p>进入<code>可视模式</code>后可以用<code>普通模式</code>的移动命令选择文本。</p>
<p>按<code>Esc</code>键返回<code>普通模式</code>。</p>
<h3>选择多选</h3>
<ul>
<li><code>v</code>：按字符多选文本。</li>
<li><code>V</code>：按整行选择文本。</li>
</ul>
<h3>复制粘贴</h3>
<ul>
<li><code>y</code>：复制。</li>
<li><code>yy</code>：复制整行。</li>
<li><code>x</code>：剪切。</li>
<li><code>p</code>：粘贴。</li>
</ul>
<h3>删除文本</h3>
<ul>
<li><code>x</code>：删除光标下的字符</li>
<li><code>dd</code>：删除整行</li>
<li><code>dw</code>：删除光标到单词末尾的字符</li>
<li><code>d$</code>：删除光标到行尾的字符</li>
<li><code>d0</code>：删除光标到行首的字符</li>
</ul>
<h3>撤销重做</h3>
<ul>
<li><code>.</code>：重复上一次操作。</li>
<li><code>u</code>：撤销上一次操作。</li>
<li><code>Ctrl + r</code>：重做上一次操作。</li>
</ul>
<h2>插入模式（Insert）</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>按<code>Esc</code>键返回<code>普通模式</code>。</p>
</div>
<ul>
<li>
<p><code>i</code>：光标之前输入。</p>
</li>
<li>
<p><code>I</code>：在本行开头输入。</p>
</li>
<li>
<p><code>a</code>：光标之后输入。</p>
</li>
<li>
<p><code>A</code>：在本行末尾输入。</p>
</li>
<li>
<p><code>o</code>：下方插入新的一行。</p>
</li>
<li>
<p><code>O</code>：上方插入新的一行。</p>
</li>
<li>
<p><code>s</code>：删除当前光标的字符。</p>
</li>
<li>
<p><code>S</code>：删除当前行。</p>
</li>
</ul>
<h2>命令模式（Command）</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>在<code>普通模式</code>输入<code>:</code>进入<code>命令模式</code>。</p>
<p>按<code>Esc</code>键返回<code>普通模式</code>。</p>
</div>
<h3>保存和退出</h3>
<ul>
<li><code>:w</code>：保存当前文件。</li>
<li><code>:q</code>：退出。</li>
<li><code>:q!</code>：放弃当前更改，并退出。</li>
<li><code>:wq</code>：保存当前更改，并退出。</li>
<li><code>:h &lt;命令&gt;</code>/<code>:help</code>：显示关于命令的帮助。</li>
</ul>
<h3>搜索和替换</h3>
<ul>
<li><code>/text</code>：向下搜索 <code>text</code></li>
<li><code>?text</code>：向上搜索 <code>text</code></li>
<li><code>:%s/old/new/g</code>：全文替换 <code>old</code> 为 <code>new</code></li>
<li><code>:s/old/new/g</code>：替换当前行中的 <code>old</code> 为 <code>new</code></li>
</ul>
<h2>高级使用</h2>
<h3>批量操作</h3>
<h3>文本对象操作</h3>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>为文本赋予结构化的含义，允许以一个语义对象作为操作单元。</p>
</div>
<h3>寄存器</h3>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>用于存放内容，可以理解为剪贴板。</p>
</div>
<h3>宏</h3>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>录制一系列键盘操作，允许重放这些操作。</p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Vim - 终端命令 - vim</title>
      <link>https://blog.magictable.ha.cn/software/Package-Vim-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-vim.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Vim-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-vim.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Vim - 终端命令 - vim</source>
      <description>文章摘要： 摘要内容。 打开文件</description>
      <category>软件程序/软件包</category>
      <pubDate>Thu, 12 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>打开文件</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 打开需要编辑的文件</span></span>
<span class="line"><span class="token function">vim</span> 【文件名】</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 以只读模式打开文件</span></span>
<span class="line"><span class="token function">vim</span> <span class="token parameter variable">-R</span> 【文件名】</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Vim</title>
      <link>https://blog.magictable.ha.cn/software/Package-Vim.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Vim.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Vim</source>
      <description>文章摘要： Vim 是一个功能强大的文本编辑器，用于高效地创建和修改文本文件。 简介 简要说明 Vim 是一个高度可配置的文本编辑器，用于在命令行界面下编辑文件。 Vim 是 Vi 编辑器的改进版本，最初由 Bram Moolenaar 在 1991 年发布。 Vim 以其高效的文本编辑能力、强大的插件系统和可定制性而闻名。 主要功能 多模式编辑：Vi...</description>
      <category>软件程序/软件包</category>
      <pubDate>Thu, 12 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Vim 是一个功能强大的文本编辑器，用于高效地创建和修改文本文件。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>Vim 是一个高度可配置的文本编辑器，用于在命令行界面下编辑文件。</li>
<li>Vim 是 Vi 编辑器的改进版本，最初由 Bram Moolenaar 在 1991 年发布。</li>
<li>Vim 以其高效的文本编辑能力、强大的插件系统和可定制性而闻名。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>多模式编辑</strong>：Vim 有多种模式，包括普通模式、插入模式、命令模式、可视模式等，每种模式都针对不同的编辑任务。</li>
<li><strong>文本对象选择</strong>：可以通过文本对象快速选择文本块，如单词、句子、段落等。</li>
<li><strong>宏录制和播放</strong>：可以录制一系列操作，然后重复执行这些操作。</li>
<li><strong>搜索和替换</strong>：支持正则表达式的搜索和全局或选区的文本替换。</li>
<li><strong>多文件编辑</strong>：可以在一个会话中打开多个文件，并在它们之间切换。</li>
<li><strong>语法高亮</strong>：支持多种编程语言的语法高亮显示。</li>
<li><strong>插件系统</strong>：拥有庞大的插件生态系统，可以扩展 Vim 的功能。</li>
<li><strong>可定制性</strong>：可以通过配置文件 <code>.vimrc</code> 来自定义快捷键、设置、插件等。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>学习曲线</strong>：Vim 的学习曲线相对陡峭，需要时间和实践来熟练掌握。</li>
<li><strong>模式切换</strong>：频繁在模式之间切换可能会导致初学者感到困惑。</li>
<li><strong>配置管理</strong>：随着插件和自定义设置的增多，<code>.vimrc</code> 文件可能会变得复杂，需要良好的管理。</li>
<li><strong>性能</strong>：在使用大量插件时，Vim 的启动速度和性能可能会受到影响。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>命令行环境</strong>：在无图形界面的服务器或通过 SSH 进行远程登录时，Vim 是一个理想的文本编辑工具。</li>
<li><strong>编程</strong>：由于其强大的文本处理能力，Vim 是许多程序员的首选编辑器。</li>
<li><strong>快速编辑</strong>：对于需要快速打开和编辑文件的场景，Vim 提供了高效的命令操作。</li>
<li><strong>资源受限的环境</strong>：在内存和处理能力有限的环境中，Vim 的轻量级特性使其成为理想选择。</li>
<li><strong>插件开发</strong>：对于喜欢自定义和开发编辑器插件的用户，Vim 提供了丰富的接口和文档。</li>
</ul>
<h2>安装与卸载</h2>
<p>详细总结：<a href=""></a></p>
<h2>终端命令</h2>
<p>详细总结：<a href="/software/Package-Vim-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-vim.html" target="_blank">Package-Vim-终端命令-vim</a></p>
<h2>配置文件</h2>
<p>用户配置文件位置：<code>~/.vimrc</code></p>
<p>详细总结：<a href=""></a></p>
<h2>热门推荐</h2>
<p>详细总结：<a href=""></a></p>
<h2>问题总结</h2>
<p>详细总结：<a href=""></a></p>
<h2>模式</h2>
<ul>
<li>普通模式（Normal）：默认进入的模式。</li>
<li>插入模式（Insert）：插入模式，正常的文本编辑器输入一样。</li>
<li>替换模式（Replace）：命令模式，在底部输入命令。</li>
<li>可视模式（Visual）：可视模式，对文本进行选择。</li>
</ul>
<h2>快捷键</h2>
<p>详细总结：<a href="/software/Package-Vim-%E5%BF%AB%E6%8D%B7%E9%94%AE.html" target="_blank">Package-Vim-快捷键</a></p>
<h2>插件推荐</h2>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Wget - 终端命令 - wget</title>
      <link>https://blog.magictable.ha.cn/software/Package-Wget-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-wget.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Wget-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-wget.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Wget - 终端命令 - wget</source>
      <description>文章摘要： 用于从网络上传和下载文件。 网络下载工具，支持 HTTP、HTTPS 和 FTP 协议。wget 可以下载文件，并且能够在下载中断后自动重新开始，这使其成为下载大文件或批量下载文件的理想工具。 格式 选项 参数 -q：表示 “quiet”，在下载时不要显示进度条和其他非错误信息。 案例</description>
      <category>软件程序/软件包</category>
      <pubDate>Thu, 12 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 用于从网络上传和下载文件。</p>
<!-- more -->
<ul>
<li>网络下载工具，支持 HTTP、HTTPS 和 FTP 协议。<code>wget</code> 可以下载文件，并且能够在下载中断后自动重新开始，这使其成为下载大文件或批量下载文件的理想工具。</li>
</ul>
<p>格式</p>
<ul>
<li></li>
</ul>
<p>选项</p>
<ul>
<li></li>
</ul>
<p>参数</p>
<ul>
<li><code>-q</code>：表示 “quiet”，在下载时不要显示进度条和其他非错误信息。</li>
</ul>
<p>案例</p>
<ul>
<li></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Wget</title>
      <link>https://blog.magictable.ha.cn/software/Package-Wget.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Wget.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Wget</source>
      <description>文章摘要： Wget是一个在命令行下使用的工具，用于从网络上传和下载文件。 简介 简要说明 Wget是一个在命令行下使用的工具，用于从网络上下载文件。 主要功能 支持多种网络协议：Wget支持HTTP、HTTPS和FTP协议，可以从大多数web服务器和FTP服务器下载文件。 递归下载：Wget可以递归地下载一个网站上的所有文件，自动下载网页上的所有链接...</description>
      <category>软件程序/软件包</category>
      <pubDate>Thu, 12 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Wget是一个在命令行下使用的工具，用于从网络上传和下载文件。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>Wget是一个在命令行下使用的工具，用于从网络上下载文件。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>支持多种网络协议</strong>：Wget支持HTTP、HTTPS和FTP协议，可以从大多数web服务器和FTP服务器下载文件。</li>
<li><strong>递归下载</strong>：Wget可以递归地下载一个网站上的所有文件，自动下载网页上的所有链接，并保存整个网站的结构和内容。</li>
<li><strong>断点续传</strong>：如果下载过程中断，Wget允许恢复下载，而不是从头开始。</li>
<li><strong>后台下载</strong>：Wget可以在后台运行，允许用户关闭终端或进行其他任务，同时下载会继续进行。</li>
<li><strong>非交互式下载</strong>：Wget可以在没有用户交互的情况下工作，适合自动化脚本和计划任务。</li>
<li><strong>限速下载</strong>：Wget允许限制下载速度，避免消耗过多带宽。</li>
<li><strong>支持代理服务器</strong>：Wget可以通过代理服务器下载文件</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>特殊字符处理</strong>：如果URL中包含特殊字符，如"&amp;"，可能需要使用引号将URL括起来，以避免URL被截断引发错误。</li>
<li><strong>安全性</strong>：在使用Wget时，应注意保护敏感信息，尤其是在通过代理服务器下载文件时。</li>
<li><strong>系统兼容性</strong>：Wget可能不在所有操作系统中预装，需要根据不同的操作系统进行安装。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>服务器管理</strong>：系统管理员可以使用Wget下载软件或从远程服务器恢复备份到本地服务器。</li>
<li><strong>自动化脚本</strong>：由于Wget的非交互式特性，它非常适合用于自动化脚本和计划任务。</li>
<li><strong>网络资源下载</strong>：适用于从网络上下载大量文件或进行批量下载，尤其是在网络环境不稳定时，其断点续传功能特别有用。</li>
</ul>
<h2>安装与卸载</h2>
<p>详细总结：<a href=""></a></p>
<h2>终端命令</h2>
<p>详细总结：<a href="/software/Package-Wget-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-wget.html" target="_blank">Package-Wget-终端命令-wget</a></p>
<h2>配置文件</h2>
<ul>
<li>文件位置：<code>/home/&lt;用户名&gt;/.ssh/config</code></li>
</ul>
<h2>热门推荐</h2>
<p>详细总结：<a href=""></a></p>
<h2>问题总结</h2>
<p>详细总结：<a href=""></a></p>
]]></content:encoded>
    </item>
    <item>
      <title>基础知识 - 专业术语</title>
      <link>https://blog.magictable.ha.cn/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E4%B8%93%E4%B8%9A%E6%9C%AF%E8%AF%AD.html</link>
      <guid>https://blog.magictable.ha.cn/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E4%B8%93%E4%B8%9A%E6%9C%AF%E8%AF%AD.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">基础知识 - 专业术语</source>
      <description>软件开发相关 类库 (Library) 定义：类库是一组预先编写好的、可重用的代码，通常包含一组相关的类和接口。 用途：开发者可以在自己的项目中引用类库，以避免重复编写常用功能，如数据结构、算法、文件处理等。 例子：Apache Commons、JUnit、Log4j。 模块 (Module) 定义：模块是软件设计中的一部分，通常是一组相关功能的集合，...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Thu, 12 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
<h2>软件开发相关</h2>
<h3>类库 (Library)</h3>
<ul>
<li><strong>定义</strong>：类库是一组预先编写好的、可重用的代码，通常包含一组相关的类和接口。</li>
<li><strong>用途</strong>：开发者可以在自己的项目中引用类库，以避免重复编写常用功能，如数据结构、算法、文件处理等。</li>
<li><strong>例子</strong>：Apache Commons、JUnit、Log4j。</li>
</ul>
<h3>模块 (Module)</h3>
<ul>
<li><strong>定义</strong>：模块是软件设计中的一部分，通常是一组相关功能的集合，它们可以被独立开发、测试和部署。</li>
<li><strong>用途</strong>：模块化可以提高代码的可维护性和可重用性，允许不同的团队并行工作。</li>
<li><strong>例子</strong>：在 Java 9 及以上版本中，模块是语言一级的概念，如 <code>java.base</code> 模块。</li>
</ul>
<h3>项目 (Project)</h3>
<ul>
<li><strong>定义</strong>：项目是一个完整的软件产品或服务，通常由多个模块、类库和其他资源组成。</li>
<li><strong>用途</strong>：项目是软件开发工作的基本单位，通常有明确的目标、范围和期限。</li>
<li><strong>例子</strong>：一个在线购物平台、一个企业资源规划（ERP）系统。</li>
</ul>
<h3>软件包 (Package)</h3>
<ul>
<li><strong>定义</strong>：软件包是一种组织代码的方式，通常是一组相关的类和接口的集合，它们在文件系统中通常位于同一个目录下。</li>
<li><strong>用途</strong>：软件包用于管理命名空间，避免类名冲突，并允许更高级别的代码组织。</li>
<li><strong>例子</strong>：在 Java 中，<code>java.util</code> 是一个包含实用工具类和接口的包。</li>
</ul>
<h3>软件包仓库 (Package Repository)</h3>
<ul>
<li><strong>定义</strong>：软件包仓库是一个集中存储软件包的地方，这些软件包可以是操作系统软件包、库、框架或应用程序。</li>
<li><strong>用途</strong>：软件包仓库提供了一个中心化的位置，供开发者和用户查找、下载和安装软件包。它通常提供版本控制和依赖解析功能。</li>
<li><strong>例子</strong>：npm Registry (用于 Node.js 包), PyPI (Python 包索引), Maven Central (用于 Java 包)。</li>
</ul>
<h3>镜像站点 (Mirror Site)</h3>
<ul>
<li><strong>定义</strong>：镜像站点是原始软件包仓库的复制，它包含了原始仓库中所有或大部分的数据。</li>
<li><strong>用途</strong>：镜像站点用于减轻原始服务器的负载，提供更快的下载速度，尤其是在地理位置较远的地方。它们也作为备份，以防原始站点不可用。</li>
<li><strong>例子</strong>：清华大学、阿里云等提供的各种软件包仓库的镜像。</li>
</ul>
<h3>软件源 (Software Source)</h3>
<ul>
<li><strong>定义</strong>：软件源通常指的是操作系统用于获取和更新软件包的特定仓库或集合。</li>
<li><strong>用途</strong>：在 Linux 发行版中，软件源定义了可以从哪里下载和安装软件包。用户可以添加或修改软件源以获取不同的软件包或版本。</li>
<li><strong>例子</strong>：Ubuntu 的 <code>sources.list</code> 文件定义了软件源。</li>
</ul>
<h3>存储库 (Repository)</h3>
<ul>
<li><strong>定义</strong>：存储库是一个用于存储和共享代码、文档或其他数据的地方，通常与版本控制系统结合使用。</li>
<li><strong>用途</strong>：存储库是软件开发过程中的核心组成部分，用于代码共享、协作和版本管理。</li>
<li><strong>例子</strong>：Git 存储库 (如 GitHub、GitLab、Bitbucket 上的项目)。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>基础知识 - 文件系统</title>
      <link>https://blog.magictable.ha.cn/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F.html</link>
      <guid>https://blog.magictable.ha.cn/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">基础知识 - 文件系统</source>
      <description>文章摘要： 操作系统的文件系统是用于存储、组织、检索和管理文件及其数据的一种机制。文件系统为用户和应用提供了对存储设备的抽象视图，使得数据可以以文件和目录的形式进行访问和管理。 简介 简要说明 操作系统的文件系统是用于存储、组织、检索和管理文件及其数据的一种机制。 文件系统为用户和应用提供了对存储设备的抽象视图，使得数据可以以文件和目录的形式进行访问和...</description>
      <category>软件程序/操作系统</category>
      <pubDate>Thu, 12 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 操作系统的文件系统是用于存储、组织、检索和管理文件及其数据的一种机制。文件系统为用户和应用提供了对存储设备的抽象视图，使得数据可以以文件和目录的形式进行访问和管理。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<blockquote>
<ul>
<li>操作系统的文件系统是用于存储、组织、检索和管理文件及其数据的一种机制。</li>
<li>文件系统为用户和应用提供了对存储设备的抽象视图，使得数据可以以文件和目录的形式进行访问和管理。</li>
</ul>
</blockquote>
<p>主要功能</p>
<blockquote>
<ul>
<li><strong>存储管理</strong>：管理存储设备上的空间分配，确保文件数据正确写入和读取。</li>
<li><strong>文件管理</strong>：提供文件的创建、删除、重命名、复制和移动等操作。</li>
<li><strong>目录管理</strong>：组织文件和子目录，形成层次结构。</li>
<li><strong>权限和安全性</strong>：控制用户和应用程序对文件的访问权限。</li>
<li><strong>元数据管理</strong>：存储关于文件的信息，如创建时间、最后修改时间、文件大小等。</li>
<li><strong>数据恢复</strong>：在系统故障后恢复文件系统的一致性。</li>
</ul>
</blockquote>
<p>注意事项</p>
<blockquote>
<ul>
<li><strong>兼容性</strong>：选择与操作系统兼容的文件系统。</li>
<li><strong>性能</strong>：根据应用需求选择性能合适的文件系统。</li>
<li><strong>可靠性</strong>：确保文件系统具有错误检测和修复机制。</li>
<li><strong>空间管理</strong>：定期检查文件系统以避免碎片化。</li>
<li><strong>备份</strong>：定期备份重要数据以防丢失。</li>
<li><strong>安全性</strong>：设置合理的权限，防止未授权访问。</li>
</ul>
</blockquote>
<p>适用场景</p>
<blockquote>
<ul>
<li><strong>FAT/FAT32</strong>：适用于简单的存储设备，如U盘、SD卡，不支持大文件和高级权限管理。</li>
<li><strong>NTFS</strong>：适用于Windows个人电脑和服务器，支持大文件、文件加密和权限管理。</li>
<li><strong>EXT4</strong>：适用于Linux系统，提供良好的性能和稳定性，支持大文件和高级权限管理。</li>
<li><strong>APFS</strong>：适用于macOS系统，优化了SSD性能，支持快照和克隆。</li>
<li><strong>ZFS</strong>：适用于需要高可靠性和大量数据管理的场景，如数据中心和企业存储。</li>
</ul>
</blockquote>
<h2>核心概念</h2>
<h3>文件（File）</h3>
<blockquote>
<ul>
<li>数据存储的基本单位。</li>
<li>包含数据和元数据（如创建时间、最后修改时间、权限等）。</li>
</ul>
</blockquote>
<h3>目录（Directory）</h3>
<blockquote>
<ul>
<li>用于组织文件的结构。</li>
<li>可以包含文件和其他目录（子目录）。</li>
</ul>
</blockquote>
<h3>路径（Path）</h3>
<blockquote>
<ul>
<li>描述文件或目录在文件系统中的位置。</li>
</ul>
</blockquote>
<h3>根目录（Root Directory）</h3>
<blockquote>
<ul>
<li>文件系统的顶级目录，所有其他文件和目录都位于其下。</li>
</ul>
</blockquote>
<h3>挂载点（Mount Point）</h3>
<blockquote>
<ul>
<li>文件系统被集成到现有目录结构中的点。</li>
</ul>
</blockquote>
<h2>常见文件系统</h2>
<h3>FAT</h3>
<blockquote>
<ul>
<li>(File Allocation Table)。</li>
<li>FAT12, FAT16, FAT32: 适用于小型存储设备，如U盘和SD卡。FAT32支持的最大单个文件大小为4GB。</li>
</ul>
</blockquote>
<h3>NTFS</h3>
<blockquote>
<ul>
<li>(New Technology File System)</li>
<li>由微软开发，用于Windows操作系统。支持大文件（理论上可达16EB），文件加密，事务日志，磁盘配额等。</li>
</ul>
</blockquote>
<h3>EXT4</h3>
<blockquote>
<ul>
<li>(Extended File System)</li>
<li>EXT2, EXT3, EXT4: 主要用于Linux操作系统。EXT4是目前最常用的版本，支持更大的文件系统和文件大小，以及更好的性能和可靠性。</li>
<li>EXT4支持1EB的分区和16TB文件。</li>
</ul>
</blockquote>
<p>详细总结：<a href="/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F-EXT4.html" target="_blank">基础知识-文件系统-EXT4</a></p>
<h3>APFS</h3>
<blockquote>
<ul>
<li>(Apple File System)。</li>
<li>苹果公司为macOS、iOS、tvOS和watchOS开发的文件系统。优化了SSD性能，支持快照和克隆。</li>
</ul>
</blockquote>
<h3>HFS+</h3>
<blockquote>
<ul>
<li>(Hierarchical File System Plus)。</li>
<li>之前是macOS的默认文件系统，已被APFS取代。支持大文件和Unicode文件名。</li>
</ul>
</blockquote>
<h3>ZFS</h3>
<blockquote>
<ul>
<li>(Zettabyte File System)。</li>
<li>由Sun Microsystems开发，支持高存储容量和数据完整性。特点包括数据校验、快照、克隆和RAID-Z。</li>
</ul>
</blockquote>
<h3>XFS</h3>
<blockquote>
<ul>
<li>由SGI开发，用于Linux和其他类Unix系统。适合处理大量数据，支持大型文件系统和文件。</li>
</ul>
</blockquote>
<h3>Btrfs</h3>
<blockquote>
<ul>
<li>(B-Tree File System)。</li>
<li>也称为Butter FS，是Linux的一个实验性文件系统，旨在替代EXT4。支持写时复制（COW）、快照和校验。</li>
</ul>
</blockquote>
<h3>ReiserFS</h3>
<blockquote>
<ul>
<li>为Linux设计的日志文件系统，特别适合处理大量小文件。</li>
</ul>
</blockquote>
<h3>JFS</h3>
<blockquote>
<ul>
<li>(Journaling File System)。</li>
<li>由IBM开发，用于OS/2和Linux。支持日志记录以提高系统崩溃后的恢复能力。</li>
</ul>
</blockquote>
<h3>VFAT</h3>
<blockquote>
<ul>
<li>(Virtual File Allocation Table)。</li>
<li>FAT的扩展，支持长文件名，常用于Windows系统上的可移动存储设备。</li>
</ul>
</blockquote>
<h3>exFAT</h3>
<blockquote>
<ul>
<li>(Extended File Allocation Table)。</li>
<li>设计用于闪存驱动器，支持更大的文件和存储容量，比NTFS更简单，兼容性更好。</li>
</ul>
</blockquote>
<h3>UFS</h3>
<blockquote>
<ul>
<li>(Unix File System)。</li>
<li>早期Unix系统使用的文件系统，现在已经被其他文件系统如EXT4和ZFS取代。</li>
</ul>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Device - 路由器</title>
      <link>https://blog.magictable.ha.cn/hardware/Device-%E7%BD%91%E7%BB%9C%E8%AE%BE%E5%A4%87-%E8%B7%AF%E7%94%B1%E5%99%A8.html</link>
      <guid>https://blog.magictable.ha.cn/hardware/Device-%E7%BD%91%E7%BB%9C%E8%AE%BE%E5%A4%87-%E8%B7%AF%E7%94%B1%E5%99%A8.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Device - 路由器</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 主要功能 注意事项 适用场景</description>
      <category>硬件设备/设备</category>
      <pubDate>Wed, 11 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Algorithm - 几何</title>
      <link>https://blog.magictable.ha.cn/software/Algorithm-%E5%87%A0%E4%BD%95.html</link>
      <guid>https://blog.magictable.ha.cn/software/Algorithm-%E5%87%A0%E4%BD%95.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Algorithm - 几何</source>
      <description>文章摘要： 几何算法总结。 简介 简要说明 主要功能 注意事项 适用场景 点积和叉积 详细总结： 最近点对问题 详细总结： 线段相交 详细总结： 凸包问题（如Graham扫描、Jarvis步进） 详细总结：</description>
      <category>软件程序/算法设计</category>
      <pubDate>Tue, 10 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 几何算法总结。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>点积和叉积</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>最近点对问题</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>线段相交</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>凸包问题（如Graham扫描、Jarvis步进）</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Algorithm - 加密</title>
      <link>https://blog.magictable.ha.cn/software/Algorithm-%E5%8A%A0%E5%AF%86.html</link>
      <guid>https://blog.magictable.ha.cn/software/Algorithm-%E5%8A%A0%E5%AF%86.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Algorithm - 加密</source>
      <description>文章摘要： 加密算法总结。 简介 简要说明 主要功能 注意事项 适用场景 对称加密（如AES、DES） 详细总结： 非对称加密（如RSA、ECC） 详细总结： 哈希算法（如MD5、SHA系列） 又称散列函数 详细总结：</description>
      <category>软件程序/算法设计</category>
      <pubDate>Tue, 10 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 加密算法总结。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>对称加密（如AES、DES）</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>非对称加密（如RSA、ECC）</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>哈希算法（如MD5、SHA系列）</h2>
<ul>
<li>又称散列函数</li>
</ul>
<p>详细总结：<a href=""></a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Algorithm - 动态规划</title>
      <link>https://blog.magictable.ha.cn/software/Algorithm-%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92.html</link>
      <guid>https://blog.magictable.ha.cn/software/Algorithm-%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Algorithm - 动态规划</source>
      <description>文章摘要： 图算法总结。 简介 简要说明 主要功能 注意事项 适用场景 最长公共子序列（LCS） 详细总结： 最长递增子序列（LIS） 详细总结： 背包问题（0/1背包、完全背包、多重背包） 详细总结： 编辑距离（Levenshtein距离） 详细总结： 矩阵链乘法 详细总结： 分数背包问题 详细总结：</description>
      <category>软件程序/算法设计</category>
      <pubDate>Tue, 10 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 图算法总结。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>最长公共子序列（LCS）</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>最长递增子序列（LIS）</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>背包问题（0/1背包、完全背包、多重背包）</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>编辑距离（Levenshtein距离）</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>矩阵链乘法</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>分数背包问题</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Algorithm - 图</title>
      <link>https://blog.magictable.ha.cn/software/Algorithm-%E5%9B%BE.html</link>
      <guid>https://blog.magictable.ha.cn/software/Algorithm-%E5%9B%BE.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Algorithm - 图</source>
      <description>文章摘要： 图算法总结。 简介 简要说明 主要功能 注意事项 适用场景 最短路径算法 详细总结： 网络流算法 详细总结：</description>
      <category>软件程序/算法设计</category>
      <pubDate>Tue, 10 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 图算法总结。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h3>最短路径算法</h3>
<ul>
<li></li>
</ul>
<p>详细总结：</p>
<h3>网络流算法</h3>
<ul>
<li></li>
</ul>
<p>详细总结：</p>
]]></content:encoded>
    </item>
    <item>
      <title>Algorithm - 字符串处理</title>
      <link>https://blog.magictable.ha.cn/software/Algorithm-%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%A4%84%E7%90%86.html</link>
      <guid>https://blog.magictable.ha.cn/software/Algorithm-%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%A4%84%E7%90%86.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Algorithm - 字符串处理</source>
      <description>文章摘要： 字符串处理算法总结。 简介 简要说明 主要功能 注意事项 适用场景 字符串匹配算法（如KMP、Boyer-Moore、Rabin-Karp） 详细总结： 正则表达式匹配 详细总结： 字符串排序（如后缀数组、后缀树） 详细总结：</description>
      <category>软件程序/算法设计</category>
      <pubDate>Tue, 10 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 字符串处理算法总结。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>字符串匹配算法（如KMP、Boyer-Moore、Rabin-Karp）</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>正则表达式匹配</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>字符串排序（如后缀数组、后缀树）</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Algorithm - 并行与分布式</title>
      <link>https://blog.magictable.ha.cn/software/Algorithm-%E5%B9%B6%E8%A1%8C%E4%B8%8E%E5%88%86%E5%B8%83%E5%BC%8F.html</link>
      <guid>https://blog.magictable.ha.cn/software/Algorithm-%E5%B9%B6%E8%A1%8C%E4%B8%8E%E5%88%86%E5%B8%83%E5%BC%8F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Algorithm - 并行与分布式</source>
      <description>文章摘要： 组合算法总结。 简介 简要说明 主要功能 注意事项 适用场景 排列生成 详细总结： 组合生成 详细总结： 子集生成 详细总结： 网络流问题 详细总结：</description>
      <category>软件程序/算法设计</category>
      <pubDate>Tue, 10 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 组合算法总结。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>排列生成</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>组合生成</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>子集生成</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>网络流问题</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Algorithm - 排序</title>
      <link>https://blog.magictable.ha.cn/software/Algorithm-%E6%8E%92%E5%BA%8F.html</link>
      <guid>https://blog.magictable.ha.cn/software/Algorithm-%E6%8E%92%E5%BA%8F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Algorithm - 排序</source>
      <description>文章摘要： 将一组数据按照特定的顺序排列的算法。 简介 简要说明 将一组数据按照特定的顺序排列。 主要功能 将数据元素按照预定的顺序（如升序或降序）重新排列。 提高数据的查找和访问效率。 为其他算法（如搜索和合并操作）提供预处理步骤。 注意事项 算法的时间复杂度和空间复杂度：选择适合数据规模和性能要求的排序算法。 稳定性：如果需要保持相同元素的相对顺序...</description>
      <category>软件程序/算法设计</category>
      <pubDate>Tue, 10 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 将一组数据按照特定的顺序排列的算法。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>将一组数据按照特定的顺序排列。</li>
</ul>
<p>主要功能</p>
<ul>
<li>将数据元素按照预定的顺序（如升序或降序）重新排列。</li>
<li>提高数据的查找和访问效率。</li>
<li>为其他算法（如搜索和合并操作）提供预处理步骤。</li>
</ul>
<p>注意事项</p>
<ul>
<li>算法的时间复杂度和空间复杂度：选择适合数据规模和性能要求的排序算法。</li>
<li>稳定性：如果需要保持相同元素的相对顺序，应选择稳定排序算法。</li>
<li>外部排序与内部排序：对于无法全部加载到内存中的大数据集，需要使用外部排序。</li>
</ul>
<p>适用场景</p>
<ul>
<li>
<p><strong>内部排序</strong>：数据量较小，可以全部加载到内存中的情况。</p>
<ul>
<li><strong>插入排序</strong>：适用于小规模或部分有序的数据。</li>
<li><strong>快速排序</strong>：适用于大规模数据，平均性能较好。</li>
</ul>
</li>
<li>
<p><strong>外部排序</strong>：数据量较大，无法全部加载到内存中的情况。</p>
<ul>
<li><strong>归并排序</strong>：适用于外部排序，因为其稳定的性质和易于并行化的特点。</li>
</ul>
</li>
</ul>
<h2>冒泡排序</h2>
<ul>
<li>通过重复遍历要排序的数列，一次比较两个元素，如果它们的顺序错误就把它们交换过来。</li>
<li>遍历数列的工作是重复地进行，直到没有再需要交换的元素为止。</li>
</ul>
<p>详细总结：<a href="/software/Algorithm-%E6%8E%92%E5%BA%8F-%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F.html" target="_blank">冒泡排序</a></p>
<h2>选择排序</h2>
<ul>
<li>选择排序（Selection Sort）。</li>
<li>工作原理是首先在未排序序列中找到最小（或最大）元素，存放到排序序列的起始位置，然后，再从剩余未排序元素中继续寻找最小（或最大）元素，然后放到已排序序列的末尾。以此类推，直到所有元素均排序完毕。</li>
</ul>
<p>详细总结：<a href="/software/Algorithm-%E6%8E%92%E5%BA%8F-%E9%80%89%E6%8B%A9%E6%8E%92%E5%BA%8F.html" target="_blank">选择排序</a></p>
<h2>插入排序</h2>
<ul>
<li>通过构建有序序列，对于未排序数据，在已排序序列中从后向前扫描，找到相应位置并插入。</li>
<li>插入排序在实现上，通常采用in-place排序（即只需用到O(1)的额外空间的排序）。</li>
</ul>
<p>详细总结：<a href="/software/Algorithm-%E6%8E%92%E5%BA%8F-%E6%8F%92%E5%85%A5%E6%8E%92%E5%BA%8F.html" target="_blank">插入排序</a></p>
<h2>快速排序</h2>
<ul>
<li>快速排序是一种高效的排序算法，采用分治法的一个典例。</li>
<li>通过选取一个“基准”元素，将数组分为两个子数组，一个包含小于基准的元素，另一个包含大于基准的元素，然后递归地对这两个子数组进行快速排序。</li>
</ul>
<p>详细总结：<a href="/software/Algorithm-%E6%8E%92%E5%BA%8F-%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F.html" target="_blank">快速排序</a></p>
<h2>归并排序</h2>
<ul>
<li>归并排序是一种分治算法。</li>
<li>将数组分成两半，分别对它们进行排序，然后将排序好的两部分合并在一起。这个过程递归地进行，直到每个子部分只有一个位置，然后开始合并。</li>
</ul>
<p>详细总结：<a href="/software/Algorithm-%E6%8E%92%E5%BA%8F-%E5%BD%92%E5%B9%B6%E6%8E%92%E5%BA%8F.html" target="_blank">归并排序</a></p>
<h2>堆排序</h2>
<ul>
<li>堆排序是一种基于比较的排序算法，利用堆这种数据结构进行排序。</li>
<li>堆是一种近似完全二叉树的结构，并同时满足堆积的性质：即子节点的键值或索引总是小于（或者大于）它的父节点。</li>
</ul>
<p>详细总结：<a href="/software/Algorithm-%E6%8E%92%E5%BA%8F-%E5%A0%86%E6%8E%92%E5%BA%8F.html" target="_blank">堆排序</a></p>
<h2>希尔排序</h2>
<ul>
<li>希尔排序是插入排序的一种更高效的改进版本。</li>
<li>通过比较距离较远的数据来工作，其核心理念是使数组中任意间隔为h的元素都是有序的。</li>
<li>希尔排序也称递减增量排序，因为它会优先比较距离较远的元素。</li>
</ul>
<p>详细总结：<a href="/software/Algorithm-%E6%8E%92%E5%BA%8F-%E5%B8%8C%E5%B0%94%E6%8E%92%E5%BA%8F.html" target="_blank">希尔排序</a></p>
<h2>计数排序</h2>
<ul>
<li>计数排序是一种非比较型整数排序算法。</li>
<li>使用一个额外的数组来计算每个元素的出现次数，然后根据计数数组来将元素放到正确的位置。计数排序适用于小范围整数的排序。</li>
</ul>
<p>详细总结：<a href="/software/Algorithm-%E6%8E%92%E5%BA%8F-%E8%AE%A1%E6%95%B0%E6%8E%92%E5%BA%8F.html" target="_blank">计数排序</a></p>
<h2>基数排序</h2>
<ul>
<li>基数排序是一种非比较型整数排序算法。</li>
<li>将整数按位数切割成不同的数字，然后按每个位数进行比较排序。排序过程是通过分配和收集来完成的，其中分配是将数字按照某位的大小放入桶中，收集是将桶中的数字再放回原数组。</li>
</ul>
<p>详细总结：<a href="/software/Algorithm-%E6%8E%92%E5%BA%8F-%E5%9F%BA%E6%95%B0%E6%8E%92%E5%BA%8F.html" target="_blank">基数排序</a></p>
<h2>桶排序</h2>
<ul>
<li>桶排序是一种将待排序数据分到几个有序的桶里，每个桶里的数据再分别排序（有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序），最后将各桶的数据合并成有序数列的排序算法。</li>
</ul>
<p>详细总结：<a href="/software/Algorithm-%E6%8E%92%E5%BA%8F-%E6%A1%B6%E6%8E%92%E5%BA%8F.html" target="_blank">桶排序</a></p>
<h2>二叉树排序</h2>
<ul>
<li>二叉树排序算法通常指的是通过构建一棵二叉搜索树（BST）来进行排序。在这种方法中，数据元素被插入到二叉搜索树中，树的每个节点都遵循左子树小于父节点，右子树大于父节点的规则。</li>
<li>排序过程是通过中序遍历这棵树来完成的，因为中序遍历会按照升序访问所有节点。</li>
</ul>
<p>详细总结：<a href="/software/Algorithm-%E6%8E%92%E5%BA%8F-%E4%BA%8C%E5%8F%89%E6%A0%91%E6%8E%92%E5%BA%8F.html" target="_blank">二叉树排序</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Algorithm - 搜索</title>
      <link>https://blog.magictable.ha.cn/software/Algorithm-%E6%90%9C%E7%B4%A2.html</link>
      <guid>https://blog.magictable.ha.cn/software/Algorithm-%E6%90%9C%E7%B4%A2.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Algorithm - 搜索</source>
      <description>文章摘要： 搜索算法是一种在多个领域中发挥重要作用的算法，主要用于路径规划、行为决策、语句识别和语义分析等。 简介 简要说明 搜索算法是一种在多个领域中发挥重要作用的算法，主要用于路径规划、行为决策、语句识别和语义分析等。 主要功能 深度优先搜索（DFS）：一种无信息搜索，主要用于树搜索。它优先探索深度最深的节点，如果该节点不是终点，则将其子节点纳入边...</description>
      <category>软件程序/算法设计</category>
      <pubDate>Tue, 10 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 搜索算法是一种在多个领域中发挥重要作用的算法，主要用于路径规划、行为决策、语句识别和语义分析等。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>搜索算法是一种在多个领域中发挥重要作用的算法，主要用于路径规划、行为决策、语句识别和语义分析等。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>深度优先搜索（DFS）</strong>：一种无信息搜索，主要用于树搜索。它优先探索深度最深的节点，如果该节点不是终点，则将其子节点纳入边缘空间继续搜索。</li>
<li><strong>宽度优先搜索（BFS）</strong>：一种盲目搜索策略，从初始节点开始，逐层扩展节点。</li>
<li><strong>一致代价搜索（UCS）</strong>：考虑路径的代价，优先扩展代价最低的路径。</li>
<li><strong>启发式搜索</strong>：如贪婪最佳优先搜索（GBFS）和A*搜索，利用启发式信息来指导搜索过程。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>树搜索与图搜索</strong>：树搜索可能导致状态的重复，而图搜索通过维护一个队列来记录经过的节点，从而避免重复。</li>
<li><strong>算法的选择</strong>：根据具体问题选择合适的搜索算法。例如，对于路径规划问题，A*搜索通常是一个较好的选择。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>路径规划</strong>：如寻找从一个城市到另一个城市的最短路径。</li>
<li><strong>问题求解</strong>：将问题转化为搜索问题，通过搜索算法找到解决方案。</li>
<li><strong>人工智能</strong>：在人工智能领域，搜索算法常用于模型推断过程。</li>
</ul>
<h2>深度优先搜索</h2>
<ul>
<li>深度优先搜索（Depth-First Search, DFS）。</li>
<li>在图或树中，从起始节点开始，沿着路径深入直到不能再深入为止，然后回溯并探索其他路径。</li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>广度优先搜索</h2>
<ul>
<li>广度优先搜索（Breadth-First Search, BFS）。</li>
<li>在图或树中，从起始节点开始，逐层遍历节点，先访问最近的节点。</li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>迭代深化深度优先搜索</h2>
<ul>
<li>迭代加深深度优先搜索（Iterative Deepening Depth-First Search, IDDFS）。</li>
<li>结合了深度优先搜索的深度特性和广度优先搜索的宽度特性，通过逐步增加深度限制来进行搜索。</li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>最佳优先搜索</h2>
<ul>
<li>最佳优先搜索（Best-First Search）。</li>
<li>使用启发式函数评估每个节点，优先扩展最有希望的节点。</li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>A搜索</h2>
<ul>
<li>A搜索算法（A Search Algorithm）。</li>
<li>一种启发式搜索算法，结合了路径代价和启发式估计值来寻找最优路径。</li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>蒙特卡洛树搜索</h2>
<ul>
<li>蒙特卡洛树搜索（Monte Carlo Tree Search, MCTS）。</li>
<li>一种用于决策过程的启发式搜索算法，常用于游戏和某些优化问题。</li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>回溯搜索</h2>
<ul>
<li>回溯搜索（Backtracking Search）。</li>
<li>一种试探性的算法，尝试构建解，并在确定该解不可能成功时回溯到上一个状态。</li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>分支限界搜索</h2>
<ul>
<li>分支限界搜索（Branch and Bound）。</li>
<li>一种用于解决优化问题的方法，通过排除不可能产生最优解的分支来减少搜索空间。</li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>双向搜索</h2>
<ul>
<li>双向搜索（Bidirectional Search）。</li>
<li>从问题的初始状态和目标状态同时进行搜索，直到两个搜索相遇。</li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>深度受限搜索</h2>
<ul>
<li>深度受限搜索（Depth-Limited Search, DLS）。</li>
<li>限制搜索的深度，避免深度优先搜索可能遇到的无限递归问题。</li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>回溯搜索</h2>
<ul>
<li>回溯搜索（Backtracking Search）。</li>
<li>一种试探性的算法，尝试构建解，并在确定该解不可能成功时回溯到上一个状态。</li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>贪心最佳优先搜索</h2>
<ul>
<li>贪心最佳优先搜索（Greedy Best-First Search, GBFS）。</li>
<li>在每个步骤中选择当前看起来最有希望的节点进行扩展。</li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>一致代价搜索</h2>
<ul>
<li>一致代价搜索（Uniform Cost Search, UCS）。</li>
<li>在图形搜索中，扩展当前路径代价最小的节点。</li>
</ul>
<p>详细总结：<a href=""></a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Algorithm - 数值</title>
      <link>https://blog.magictable.ha.cn/software/Algorithm-%E6%95%B0%E5%80%BC.html</link>
      <guid>https://blog.magictable.ha.cn/software/Algorithm-%E6%95%B0%E5%80%BC.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Algorithm - 数值</source>
      <description>文章摘要： 数值算法总结。 简介 简要说明 主要功能 注意事项 适用场景 线性方程组求解（如高斯消元法） 详细总结： 数值积分（如辛普森法则） 详细总结： 数值微分 详细总结： 根查找（如牛顿法、二分法） 详细总结：</description>
      <category>软件程序/算法设计</category>
      <pubDate>Tue, 10 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 数值算法总结。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>线性方程组求解（如高斯消元法）</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>数值积分（如辛普森法则）</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>数值微分</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>根查找（如牛顿法、二分法）</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Algorithm - 机器学习</title>
      <link>https://blog.magictable.ha.cn/software/Algorithm-%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0.html</link>
      <guid>https://blog.magictable.ha.cn/software/Algorithm-%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Algorithm - 机器学习</source>
      <description>文章摘要： 机器学习算法总结。 简介 简要说明 主要功能 注意事项 适用场景 监督学习-回归算法 注释 线性回归（Linear Regression） 详细总结： 岭回归（Ridge Regression） 详细总结： LASSO回归（Lasso Regression） 详细总结： 弹性网络回归（Elastic Net Regression） 详细总结...</description>
      <category>软件程序/算法设计</category>
      <pubDate>Tue, 10 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 机器学习算法总结。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>监督学习-回归算法</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li></li>
</ul>
</div>
<h3>线性回归（Linear Regression）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>岭回归（Ridge Regression）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>LASSO回归（Lasso Regression）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>弹性网络回归（Elastic Net Regression）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>逐步回归（Stepwise Regression）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>多项式回归（Polynomial Regression）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>支持向量回归（Support Vector Regression, SVR）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>决策树回归（Decision Tree Regression）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>随机森林回归（Random Forest Regression）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>梯度提升回归树（Gradient Boosting Regression Trees, e.g., XGBoost, LightGBM）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>AdaBoost回归（AdaBoost Regression）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>概率回归（Bayesian Regression）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>监督学习-分类算法</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li></li>
</ul>
</div>
<h3>逻辑回归（Logistic Regression）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>线性判别分析（Linear Discriminant Analysis, LDA）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>支持向量机（Support Vector Machine, SVM）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>决策树分类（Decision Tree Classification）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>随机森林分类（Random Forest Classification）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>梯度提升分类树（Gradient Boosting Classification Trees）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>AdaBoost分类（AdaBoost Classification）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>k-最近邻（k-Nearest Neighbors, k-NN）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>朴素贝叶斯（Naive Bayes）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>感知机（Perceptron）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>多层感知机（Multilayer Perceptron, MLP）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>无监督学习-聚类算法</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li></li>
</ul>
</div>
<h3>K-均值（K-Means）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>层次聚类（Hierarchical Clustering）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>密度聚类（DBSCAN）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>聚类高斯混合模型（Gaussian Mixture Models, GMM）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>无监督学习-降维算法</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li></li>
</ul>
</div>
<h3>主成分分析（Principal Component Analysis, PCA）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>线性判别分析（Linear Discriminant Analysis, LDA）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>t-SNE（t-Distributed Stochastic Neighbor Embedding）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>自编码器（Autoencoders, used for dimensionality reduction）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>无监督学习-关联规则学习</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li></li>
</ul>
</div>
<h3>Apriori算法</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>Eclat算法</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>FP-growth算法</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>半监督学习</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li></li>
</ul>
</div>
<h3>自编码器（Autoencoders）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>标签传播（Label Propagation）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>协同训练（Co-Training）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>强化学习</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li></li>
</ul>
</div>
<h3>Q学习（Q-Learning）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>深度Q网络（Deep Q-Network, DQN）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>策略梯度方法（Policy Gradient Methods）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>演员-评论家方法（Actor-Critic Methods）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>异同策略优化（Proximal Policy Optimization, PPO）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>深度确定性策略梯度（Deep Deterministic Policy Gradient, DDPG）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>集成学习</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li></li>
</ul>
</div>
<h3>随机森林（Random Forest）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>梯度提升机（Gradient Boosting Machines, GBM）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>AdaBoost</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>XGBoost</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>LightGBM</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>CatBoost</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>装袋（Bagging）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>投票分类器（Voting Classifier）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>Stacking</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>深度学习</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li></li>
</ul>
</div>
<h3>卷积神经网络（Convolutional Neural Networks, CNNs）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>循环神经网络（Recurrent Neural Networks, RNNs）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>长短期记忆网络（Long Short-Term Memory, LSTM）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>门控循环单元（Gated Recurrent Unit, GRU）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>Transformer</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>自编码器（Autoencoders）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>生成对抗网络（Generative Adversarial Networks, GANs）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>变分自编码器（Variational Autoencoders, VAEs）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Algorithm - 查找</title>
      <link>https://blog.magictable.ha.cn/software/Algorithm-%E6%9F%A5%E6%89%BE.html</link>
      <guid>https://blog.magictable.ha.cn/software/Algorithm-%E6%9F%A5%E6%89%BE.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Algorithm - 查找</source>
      <description>文章摘要： 查找算法是一类用于在数据结构中寻找特定元素的算法。 简介 简要说明 查找算法是一类用于在数据结构中寻找特定元素的算法。 主要功能 在数据集中定位特定的元素。 确定数据集中是否包含某个元素。 在有序数据集中找到元素的位置或索引。 注意事项 选择合适的查找算法需要考虑数据集的大小、数据是否有序、查找操作的频率等因素。 对于小规模数据集，简单的线...</description>
      <category>软件程序/算法设计</category>
      <pubDate>Tue, 10 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 查找算法是一类用于在数据结构中寻找特定元素的算法。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>查找算法是一类用于在数据结构中寻找特定元素的算法。</li>
</ul>
<p>主要功能</p>
<ul>
<li>在数据集中定位特定的元素。</li>
<li>确定数据集中是否包含某个元素。</li>
<li>在有序数据集中找到元素的位置或索引。</li>
</ul>
<p>注意事项</p>
<ul>
<li>选择合适的查找算法需要考虑数据集的大小、数据是否有序、查找操作的频率等因素。</li>
<li>对于小规模数据集，简单的线性查找可能就足够了。</li>
<li>对于大规模数据集，可能需要使用更高效的算法，如二分查找、哈希查找等。</li>
<li>查找算法的性能通常用查找时间（如平均查找时间、最坏情况查找时间）来衡量。</li>
</ul>
<p>适用场景</p>
<ul>
<li>广泛应用于数据库查询、搜索引擎、数据分析和各种软件系统中。</li>
</ul>
<h2>基本查找</h2>
<h3>线性查找（顺序查找）</h3>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>在列表中逐个检查每个元素，直到找到目标值或到达列表末尾。</li>
</ul>
</div>
<p>详细总结：<a href="/software/Algorithm-%E6%9F%A5%E6%89%BE-%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html" target="_blank">二分搜索</a></p>
<h3>二分查找（折半查找）</h3>
<ul>
<li>在有序数组中通过不断将搜索区间减半来查找特定值。</li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>插值查找</h3>
<ul>
<li>类似于二分查找，但使用插值公式来预测目标值的位置。</li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>斐波那契查找</h3>
<ul>
<li>类似于二分查找，但使用斐波那契数列来分割数组。</li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>高级查找</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li></li>
</ul>
</div>
<h3>跳表查找</h3>
<ul>
<li>通过维护多个层级的索引来提高链表的查找效率。</li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>索引查找</h3>
<ul>
<li>在数据集上建立索引，通过索引来加速查找过程。</li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>倒排索引查找</h3>
<ul>
<li>在文档搜索中通过关键词查找包含该关键词的文档。</li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>位图查找</h3>
<ul>
<li>使用位数组来表示集合，用于快速查找元素是否存在于集合中。</li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>树形查找</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li></li>
</ul>
</div>
<h3>二叉搜索树查找</h3>
<ul>
<li>在二叉搜索树中查找元素。</li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>AVL树查找</h3>
<ul>
<li>在自平衡的二叉搜索树（AVL树）中查找元素。</li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>红黑树查找</h3>
<ul>
<li>在自平衡的二叉搜索树（红黑树）中查找元素。</li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>B树查找</h3>
<ul>
<li>在多路平衡查找树中进行查找。</li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>B+树查找</h3>
<ul>
<li>在B树的变种中进行查找，常用于数据库和文件系统。</li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>Trie树查找</h3>
<ul>
<li>用于高效地查找字符串的前缀或整个字符串。</li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>伸展树查找</h3>
<ul>
<li>在动态变化的二叉搜索树中进行查找。</li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>Splay树查找</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>哈希表查找</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li></li>
</ul>
</div>
<h3>线性探查哈希</h3>
<ul>
<li>当哈希表中的位置已经被占用时，线性地查找下一个空闲位置。</li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>二次探查哈希</h3>
<ul>
<li>使用二次函数来探查下一个位置。</li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>双重哈希</h3>
<ul>
<li>使用两个哈希函数来减少哈希冲突。</li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>Cuckoo哈希</h3>
<ul>
<li>一种提供几乎恒定时间复杂度的哈希表查找方法。</li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>特殊用途查找</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li></li>
</ul>
</div>
<h3>布隆过滤器</h3>
<ul>
<li>用于快速判断元素是否存在，有一定的误判率。</li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>线段树查找</h3>
<ul>
<li>用于区间查询。</li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>树状数组</h3>
<ul>
<li>用于高效处理数组的前缀和。</li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>KD树查找</h3>
<ul>
<li>用于k维空间查询。</li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>其他查找</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li></li>
</ul>
</div>
<h3>跳跃表查找</h3>
<ul>
<li>提高链表查找效率。</li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>R树查找</h3>
<ul>
<li>用于空间数据索引。</li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>KMP算法</h3>
<ul>
<li>用于字符串匹配。</li>
</ul>
<p>详细总结：<a href=""></a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Algorithm - 组合</title>
      <link>https://blog.magictable.ha.cn/software/Algorithm-%E7%BB%84%E5%90%88.html</link>
      <guid>https://blog.magictable.ha.cn/software/Algorithm-%E7%BB%84%E5%90%88.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Algorithm - 组合</source>
      <description>文章摘要： 组合算法总结。 简介 简要说明 主要功能 注意事项 适用场景 排列生成 详细总结： 组合生成 详细总结： 子集生成 详细总结： 网络流问题 详细总结：</description>
      <category>软件程序/算法设计</category>
      <pubDate>Tue, 10 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 组合算法总结。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>排列生成</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>组合生成</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>子集生成</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>网络流问题</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Algorithm - 计算智能</title>
      <link>https://blog.magictable.ha.cn/software/Algorithm-%E8%AE%A1%E7%AE%97%E6%99%BA%E8%83%BD.html</link>
      <guid>https://blog.magictable.ha.cn/software/Algorithm-%E8%AE%A1%E7%AE%97%E6%99%BA%E8%83%BD.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Algorithm - 计算智能</source>
      <description>文章摘要： 计算智能算法总结。 简介 简要说明 主要功能 注意事项 适用场景 遗传算法 详细总结： 粒子群优化（PSO） 详细总结： 蚁群算法 详细总结： 神经网络算法 详细总结：</description>
      <category>软件程序/算法设计</category>
      <pubDate>Tue, 10 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 计算智能算法总结。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>遗传算法</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>粒子群优化（PSO）</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>蚁群算法</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>神经网络算法</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Algorithm - 进化</title>
      <link>https://blog.magictable.ha.cn/software/Algorithm-%E8%BF%9B%E5%8C%96.html</link>
      <guid>https://blog.magictable.ha.cn/software/Algorithm-%E8%BF%9B%E5%8C%96.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Algorithm - 进化</source>
      <description>文章摘要： 进化算法总结。 简介 简要说明 主要功能 注意事项 适用场景 遗传算法（GA） 详细总结： 差异进化（DE） 详细总结： 进化策略（ES） 详细总结：</description>
      <category>软件程序/算法设计</category>
      <pubDate>Tue, 10 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 进化算法总结。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>遗传算法（GA）</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>差异进化（DE）</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>进化策略（ES）</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Algorithm - 随机化</title>
      <link>https://blog.magictable.ha.cn/software/Algorithm-%E9%9A%8F%E6%9C%BA%E5%8C%96.html</link>
      <guid>https://blog.magictable.ha.cn/software/Algorithm-%E9%9A%8F%E6%9C%BA%E5%8C%96.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Algorithm - 随机化</source>
      <description>文章摘要： 组合算法总结。 简介 简要说明 主要功能 注意事项 适用场景 排列生成 详细总结： 组合生成 详细总结： 子集生成 详细总结： 网络流问题 详细总结：</description>
      <category>软件程序/算法设计</category>
      <pubDate>Tue, 10 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 组合算法总结。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>排列生成</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>组合生成</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>子集生成</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>网络流问题</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 通信 - 协议 - HTTP - 响应状态代码</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E5%8D%8F%E8%AE%AE-HTTP-%E5%93%8D%E5%BA%94%E7%8A%B6%E6%80%81%E4%BB%A3%E7%A0%81.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E5%8D%8F%E8%AE%AE-HTTP-%E5%93%8D%E5%BA%94%E7%8A%B6%E6%80%81%E4%BB%A3%E7%A0%81.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 通信 - 协议 - HTTP - 响应状态代码</source>
      <description>文章摘要： 响应状态代码整理。 1xx：信息性状态码 100 Continue：客户端应当继续发送请求。 101 Switching Protocols：服务器正在根据客户端的请求切换协议。 2xx：成功状态码 200 OK：请求已成功处理。 201 Created：请求已成功处理，并且创建了新的资源。 202 Accepted：请求已接受，但尚未处理...</description>
      <category>学习笔记/技术</category>
      <pubDate>Mon, 09 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 响应状态代码整理。</p>
<!-- more -->
<p>1xx：信息性状态码</p>
<ul>
<li><strong>100 Continue</strong>：客户端应当继续发送请求。</li>
<li><strong>101 Switching Protocols</strong>：服务器正在根据客户端的请求切换协议。</li>
</ul>
<p>2xx：成功状态码</p>
<ul>
<li><strong>200 OK</strong>：请求已成功处理。</li>
<li><strong>201 Created</strong>：请求已成功处理，并且创建了新的资源。</li>
<li><strong>202 Accepted</strong>：请求已接受，但尚未处理完毕。</li>
<li><strong>204 No Content</strong>：请求已成功处理，但没有返回任何内容。</li>
<li><strong>205 Reset Content</strong>：告诉用户代理重置发送该请求的文档视图。</li>
</ul>
<p>3xx：重定向状态码</p>
<ul>
<li><strong>300 Multiple Choices</strong>：请求的资源有多个位置，客户端可以选择一个。</li>
<li><strong>301 Moved Permanently</strong>：请求的资源已永久移动到新位置。</li>
<li><strong>302 Found</strong>：请求的资源临时移动到了另一个位置。</li>
<li><strong>303 See Other</strong>：告诉客户端在新位置访问另一个资源。</li>
<li><strong>304 Not Modified</strong>：资源未修改，可以使用缓存版本。</li>
<li><strong>307 Temporary Redirect</strong>：请求的资源临时移动到了另一个位置。</li>
</ul>
<p>4xx：客户端错误状态码</p>
<ul>
<li><strong>400 Bad Request</strong>：请求格式错误，服务器无法理解。</li>
<li><strong>401 Unauthorized</strong>：请求需要用户认证。</li>
<li><strong>403 Forbidden</strong>：服务器理解请求，但拒绝执行。</li>
<li><strong>404 Not Found</strong>：请求的资源不存在。</li>
<li><strong>405 Method Not Allowed</strong>：请求行中指定的方法不允许用于请求相应的资源。</li>
<li><strong>408 Request Timeout</strong>：服务器等待客户端发送的请求时间过长，超时。</li>
</ul>
<p>5xx：服务器错误状态码</p>
<ul>
<li><strong>500 Internal Server Error</strong>：服务器内部错误，无法完成请求。</li>
<li><strong>501 Not Implemented</strong>：服务器不支持请求的功能。</li>
<li><strong>502 Bad Gateway</strong>：作为网关或代理的服务器从上游服务器收到了无效的响应。</li>
<li><strong>503 Service Unavailable</strong>：服务器当前无法处理请求，通常是暂时性的。</li>
<li><strong>504 Gateway Timeout</strong>：作为网关或代理的服务器没有及时从上游服务器收到请求。</li>
<li><strong>505 HTTP Version Not Supported</strong>：服务器不支持请求的HTTP协议版本。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 通信 - 查询手册 - NDS域名解析</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-NDS%E5%9F%9F%E5%90%8D%E8%A7%A3%E6%9E%90.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-NDS%E5%9F%9F%E5%90%8D%E8%A7%A3%E6%9E%90.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 通信 - 查询手册 - NDS域名解析</source>
      <description>文章摘要： 提示 DNS解析是互联网上不可或缺的服务之一。 使得网络资源的访问变得更加便捷和高效。 简介 简要说明 域名解析服务（DNS）是互联网的一项基础服务。 将易于记忆的域名转换成计算机能够直接访问的IP地址。 允许用户通过输入简单的域名来访问互联网上的资源，而不需要记住复杂的数字序列。 主要功能 域名到IP地址的转换：DNS服务器将用户输入的域...</description>
      <category>学习笔记/技术</category>
      <pubDate>Mon, 09 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong></p>
<!-- more -->
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<p>DNS解析是互联网上不可或缺的服务之一。</p>
<p>使得网络资源的访问变得更加便捷和高效。</p>
</div>
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>域名解析服务（DNS）是互联网的一项基础服务。</li>
<li>将易于记忆的域名转换成计算机能够直接访问的IP地址。</li>
<li>允许用户通过输入简单的域名来访问互联网上的资源，而不需要记住复杂的数字序列。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>域名到IP地址的转换</strong>：DNS服务器将用户输入的域名解析为对应的IP地址。</li>
<li><strong>负载均衡</strong>：通过智能解析，DNS可以将请求分配到不同的服务器，实现负载均衡。</li>
<li><strong>故障转移</strong>：当某个服务器不可用时，DNS可以将请求重定向到其他健康的服务器。</li>
<li><strong>缓存查询结果</strong>：DNS服务器会缓存查询结果，以减少解析时间并减轻根服务器的负担。</li>
<li><strong>安全性</strong>：DNS可以提供诸如DNSSEC等安全扩展，以防止DNS欺骗和缓存投毒等攻击。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>安全性</strong>：确保DNS服务器安全，防止DNS劫持和缓存投毒。</li>
<li><strong>可靠性</strong>：选择可靠的DNS服务提供商，确保解析服务稳定可用。</li>
<li><strong>性能</strong>：DNS解析速度影响用户体验，应选择响应快速的DNS服务器。</li>
<li><strong>更新</strong>：及时更新DNS记录，以反映服务器的最新状态。</li>
<li><strong>冗余</strong>：设置多个DNS服务器以实现冗余，提高服务的可靠性。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>网站访问</strong>：用户通过域名访问网站时，DNS解析将域名转换为网站的IP地址。</li>
<li><strong>邮件服务</strong>：电子邮件发送时，DNS解析用于查找邮件服务器的IP地址。</li>
<li><strong>分布式系统</strong>：在分布式系统中，DNS用于定位不同的服务实例。</li>
<li><strong>移动应用</strong>：移动应用通常通过域名访问后端服务，DNS解析在此过程中扮演重要角色。</li>
<li><strong>内部网络</strong>：在企业内部网络中，DNS用于解析内部服务器的域名。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Dpkg</title>
      <link>https://blog.magictable.ha.cn/software/Package-Dpkg.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Dpkg.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Dpkg</source>
      <description>文章摘要： Debian Linux 操作系统的软件包管理工具。 简介 简要说明 主要功能 用于安装本地的.deb预编译软件包。 注意事项 无法解决依赖问题，即不能自动下载该软件包的依赖包。 适用场景 安装与卸载 详细总结： 终端命令 详细总结： 配置文件 详细总结： 热门推荐 详细总结： 问题总结 详细总结：</description>
      <category>软件程序/软件包</category>
      <pubDate>Mon, 09 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Debian Linux 操作系统的软件包管理工具。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li>用于安装本地的<code>.deb</code>预编译软件包。</li>
</ul>
<p>注意事项</p>
<ul>
<li>无法解决依赖问题，即不能自动下载该软件包的依赖包。</li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>安装与卸载</h2>
<p>详细总结：<a href=""></a></p>
<h2>终端命令</h2>
<p>详细总结：<a href="/software/Package-Dpkg-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-dpkg.html" target="_blank">Package-Dpkg-终端命令-dpkg</a></p>
<h2>配置文件</h2>
<p>详细总结：<a href=""></a></p>
<h2>热门推荐</h2>
<p>详细总结：<a href=""></a></p>
<h2>问题总结</h2>
<p>详细总结：<a href=""></a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 通信 - 协议</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E5%8D%8F%E8%AE%AE.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E5%8D%8F%E8%AE%AE.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 通信 - 协议</source>
      <description>文章摘要： 摘要内容。 概览 应用层 HTTP详细总结： 传输层 TCP详细总结： UDP详细总结： 网络层 IPv4详细总结： IPv6详细总结： 物理层 待整理 ActivityPub 非实时通讯的网络平台，内容创作和分享。 详细总结： Matrix 实时通讯的网络平台，实时通讯和视频通话。 详细总结：</description>
      <category>学习笔记/技术</category>
      <pubDate>Sun, 08 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>概览</h2>
<p>|            OSI网络参考模型            | TCP/IP网络模型 |                                                                                                                                                                                                        各层对应                                                                                                                                                                                                        | 面向操作            |
| :</p>
]]></content:encoded>
    </item>
    <item>
      <title>OS - Debian Linux - 快捷键</title>
      <link>https://blog.magictable.ha.cn/software/OS-DebianLinux-%E5%BF%AB%E6%8D%B7%E9%94%AE.html</link>
      <guid>https://blog.magictable.ha.cn/software/OS-DebianLinux-%E5%BF%AB%E6%8D%B7%E9%94%AE.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">OS - Debian Linux - 快捷键</source>
      <description>文章摘要： Debian Linux操作系统常用快捷键。</description>
      <category>软件程序/操作系统</category>
      <pubDate>Sun, 08 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Debian Linux操作系统常用快捷键。</p>
<!-- more -->
]]></content:encoded>
    </item>
    <item>
      <title>Package - Apt - 安装与卸载</title>
      <link>https://blog.magictable.ha.cn/software/Package-Apt-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Apt-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Apt - 安装与卸载</source>
      <description>文章摘要： 摘要内容。 软件获取 官方下载地址： 安装 - apt包管理器 卸载 - apt包管理器 安装 - 预编译 卸载 - 预编译 安装 - 源代码 卸载 - 源代码</description>
      <category>软件程序/软件包</category>
      <pubDate>Sun, 08 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>软件获取</h2>
<ul>
<li>官方下载地址：<a href=""></a></li>
</ul>
<h2>安装 - apt包管理器</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>卸载 - apt包管理器</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>安装 - 预编译</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>卸载 - 预编译</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>安装 - 源代码</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>卸载 - 源代码</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Kubectl - Kubernetes(k8s)基础知识</title>
      <link>https://blog.magictable.ha.cn/software/Package-Kubectl-Kubernetes(k8s)%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Kubectl-Kubernetes(k8s)%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Kubectl - Kubernetes(k8s)基础知识</source>
      <description>文章摘要： Kubernetes通常简称为K8s，是一个开源的容器编排平台，用于自动化计算机容器化应用程序的部署、扩展和管理。 流程图 简介 简要说明 允许你在集群中调度和运行容器，集群可以由物理机或虚拟机组成。 Kubernetes隐藏了底层硬件层的复杂性，使得部署和管理容器化的应用程序变得更加简单。 主要功能 自动装箱：基于容器的资源需求，自动决定...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sun, 08 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Kubernetes通常简称为K8s，是一个开源的容器编排平台，用于自动化计算机容器化应用程序的部署、扩展和管理。</p>
<!-- more -->
<blockquote>
<p></p>
</blockquote>
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>允许你在集群中调度和运行容器，集群可以由物理机或虚拟机组成。</li>
<li>Kubernetes隐藏了底层硬件层的复杂性，使得部署和管理容器化的应用程序变得更加简单。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>自动装箱</strong>：基于容器的资源需求，自动决定在哪个节点上运行。</li>
<li><strong>自我修复</strong>：如果容器失败，Kubernetes会重启它；如果节点失败，则将容器重新调度到其他节点。</li>
<li><strong>水平扩展</strong>：通过简单的命令或基于自动化的CPU等使用情况，可以很容易地增加或减少应用程序的副本数量。</li>
<li><strong>服务发现和负载均衡</strong>：Kubernetes可以使用DNS名或自己的IP地址自动发现容器，如果容器的流量过大，可以负载均衡流量，确保部署稳定。</li>
<li><strong>自动部署和回滚</strong>：可以描述应用程序的预期状态，Kubernetes可以改变实际状态至预期状态，如果有什么不对，可以回滚到之前的版本。</li>
<li><strong>密钥与配置管理</strong>：无需改动镜像配置，就可以更新应用程序配置和密钥。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>学习曲线</strong>：Kubernetes相对复杂，有陡峭的学习曲线。</li>
<li><strong>资源需求</strong>：运行Kubernetes集群需要相对较多的计算资源。</li>
<li><strong>安全性</strong>：需要确保集群的安全，防止未授权访问。</li>
<li><strong>版本兼容性</strong>：在升级Kubernetes版本时，需要确保所有组件都与新版本兼容。</li>
<li><strong>监控和日志</strong>：需要设置适当的监控和日志记录机制来确保集群的稳定运行。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>微服务架构</strong>：适用于需要快速、频繁部署的微服务架构。</li>
<li><strong>自动化和弹性</strong>：适用于需要高度自动化和弹性伸缩的应用程序。</li>
<li><strong>资源优化</strong>：适用于希望最大化资源利用率和降低成本的环境。</li>
<li><strong>多云和混合云</strong>：适用于需要在多个云环境或混合云环境中部署应用程序的场景。</li>
<li><strong>持续集成/持续部署（CI/CD）</strong>：适用于实现CI/CD流程，以支持敏捷开发和持续交付。</li>
</ul>
<h2>命令行工具</h2>
<p>命令行工具详细总结：<a href="/software/Package-Kubectl.html" target="_blank">Package-Kubectl</a></p>
<h2>核心概念</h2>
<h3>Pod</h3>
<ul>
<li>Pod是Kubernetes的最小工作单元。</li>
<li>每个Pod包含一个或多个容器。</li>
<li>Pod中的容器会作为一个整体被Master调度到一个Node上运行。</li>
<li>Pod有自己独立的IP。</li>
<li>Pod可以被创建、销毁。</li>
<li>当扩容和缩容时，Pod的数量会发生变化。</li>
<li>当Pod故障时，会创建新的Pod。</li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>将联系紧密的容器封装在一个Pod单元内，以Pod整体进行调度、扩展和实现生命周期管理。</li>
<li>Pod内所有容器使用相同的网络和共享存储。容器之间直接通过本地网络直接通讯，提高沟通效率。</li>
</ul>
</div>
<h3>控制器（Controller）</h3>
<ul>
<li>负载均衡是在Pod之上的抽象，通过<code>控制器</code>实现一系列基于Pod的高级特性。</li>
<li>我们通常使用<code>控制器</code>来做应用真正的管理，而Pod是组成负载最小的单元。</li>
</ul>
<p>ReplicationController</p>
<ul>
<li>用来确保容器应用的副本数始终保持在用户定义的副本数。</li>
<li>如果有容器异常退出，会自动创建新的Pod来替代。</li>
<li>如果有异常多出来的容器也会自动回收。</li>
</ul>
<p>ReplicaSet</p>
<ul>
<li>与ReplicationController没有本质的不同，但支持集合式的selector。</li>
</ul>
<p>建议使用Deployment来自动管理ReplicaSet，这样就无需担心跟其他机制的不兼容问题。</p>
<p>Horizontal Pod Autoscaling 仅限于ReplicaSet和Deployment，对Pod进行水平扩容和缩容。</p>
<p>StatefulSet解决有状态服务的问题</p>
<ul>
<li>稳定的持久化存储，即Pod重新调度后还是能访问到相同的持久化数据，基于PVC实现。</li>
<li>稳定的网络标志，即Pod重新调度后其PodName和HostName不变，基于Headless Service来实现。</li>
<li>有序部署，有序扩展，即Pod是有序的，在部署或者扩展的时候要依据定义的顺序一次进行，基于init containers来实现。</li>
<li>有序回收，有序删除。</li>
</ul>
<p>DaemonSet</p>
<ul>
<li>确保全部（或者一些）Node上运行一个Pod的副本。</li>
<li>当有Node加入集群时，也会为他们新增一个Pod。</li>
<li>当有Node从集群移除时，这些Pod也会被回收。</li>
<li>删除DaemonSet将会删除它创建的所有Pod。</li>
</ul>
<p>Job</p>
<ul>
<li>负责批处理任务，即仅执行一次的任务。</li>
<li>保证批处理认为的一个或多个Pod成功结束。</li>
</ul>
<p>Cron Job管理基于时间的Job</p>
<ul>
<li>在给定时间点只运行一次。</li>
<li>周期性地在给定时间点运行。</li>
</ul>
<h3>服务（Service）</h3>
<ul>
<li><code>服务</code>是一种抽象概念，定义了Pod逻辑集合以及访问它们的策略。</li>
<li><code>服务</code>定义了外界访问一组特定Pod的方式。</li>
<li><code>服务</code>有自己的IP和端口，</li>
<li><code>服务</code>为Pod提供了负载均衡。</li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>在Kubernetes中，Pod副本发生迁移或伸缩的时候会发生变化，IP也会发生变化。</li>
<li><code>服务</code>会监听Pod的IP变化，并统一对外提供IP。</li>
</ul>
</div>
<h3>容量（Volume）</h3>
<ul>
<li>用来管理Kubernetes存储。</li>
<li>声明在Pod中的容器可以访问的文件目录。</li>
<li>可以被挂载在Pod中一个或多个容器的指定路径下。</li>
<li>支持多种后端存储（本地存储、分布式存储、云存储）。</li>
</ul>
<h3>标签（Label）</h3>
<ul>
<li>通过<code>标签</code>来实现资源分类管理。</li>
</ul>
<h3>命名空间（Namespace）</h3>
<ul>
<li><code>命名空间</code>是对一组资源和对象的抽象整合。</li>
<li>在同一个集群内容可创建不同的<code>命名空间</code>，不同<code>命名空间</code>中的数据彼此隔离，实现共享同一个集群服务并且互不干扰。</li>
</ul>
<p>集群默认存在以下<code>命名空间</code>：</p>
<ul>
<li><code>default</code>：所有未指定<code>命名空间</code>的对象都会被分配在名为<code>default</code>的<code>命名空间</code>。</li>
<li><code>kube-public</code>：在<code>命名空间</code>下的资源可以被所有人访问（包含未认证用户），用来部署公共插件、容器模板等。</li>
<li><code>kube-system</code>：所有由 Kubernetes 系统创建的资源都处于这个<code>命名空间</code>。</li>
<li><code>kube-nade-lease</code>：每个节点在该<code>命名空间</code>中都有一个关联的<code>标签</code>对象，该对象由节点定期更新，被用来记录Note节点的心跳信号。</li>
</ul>
<h2>架构</h2>
<ul>
<li>一个基础的Kubernetes集群（Cluster）通常包含一个Master节点和多个Note节点。</li>
<li>每个阶段都是一台物理机，也可以是一台虚拟机。</li>
</ul>
<p>Master节点</p>
<ul>
<li>提供集群控制，对集群做出全局性决策。</li>
<li><strong>Kube-apiserver</strong>：前端控制层，Kubernetes API，水平扩展架构，通过部署更多实例来承载业务。</li>
<li><strong>etcd</strong>：后端存储，存储集群数据，提供数据备份。</li>
<li><strong>Kube-controller-manager</strong>：控制器，负责策略控制，针对不同的工作负载执行不同的策略。</li>
<li><strong>Kube-scheduler</strong>：任务调度，监控没有分配节点的新创建的Pod，选择一个节点供Pod运行。</li>
</ul>
<p>Node节点</p>
<ul>
<li>运行容器应用，由Master管理，负责健康并汇总容器状态，同时根据Master的要求管理容器的生命周期。</li>
<li><strong>Kubelet</strong>：在集群内每个节点中运行的一个代理，用于保证Pod的与性能，接受Master的指令，负责管理容器（Pod）。</li>
<li><strong>Kube-proxy</strong>：负责做负载均衡工作，管理Service的访问入口。</li>
<li><strong>Add-ons</strong>：插件，用于扩展Kubernetes的功能。</li>
<li><strong>Container runtime</strong>：通常使用Docker来运行容器。</li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>通常在Master节点上不运行用户容器。为了提高高可用可以创建多个Master节点。</li>
</ul>
</div>
<p>架构图</p>
<h2>开放接口</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>Kubernetes作为云原生应用的基础调度平台，相当于云原生的操作系统。</li>
<li>为了便于系统的扩展，Kubernetes中开放来以下接口，可以分别对接不同的后端，实现自己的业务逻辑。</li>
</ul>
</div>
<p>CRI（Container Runtime Interface）</p>
<ul>
<li>容器运行时接口。</li>
<li>提供计算能力，定义来容器和镜像的服务接口。</li>
<li>常见的CRI后端有Docker、rkt、kata-containers等。</li>
</ul>
<p>CNI（Container Network Interface）</p>
<ul>
<li>容器网络接口。</li>
<li>提供网络能力，由一组用于配置Linux容器的网络接口的规范和库组成。</li>
<li>仅关注容器创建是的网络分配和当容器被删除是释放网络资源。</li>
</ul>
<p>CSI（Container Storage Interface）</p>
<ul>
<li>容器存储接口。</li>
<li>提供存储能力，Kubernetes可以将任意存储系统暴露给自己的容器工作负载。</li>
</ul>
<h2>工作负载对象</h2>
<h3>分类</h3>
<p><strong>无状态</strong></p>
<p>管理的Pod集合是相互等价的，需要的时候可以被替换。</p>
<ul>
<li>Deployment（部署）</li>
<li>ReplicaSet（副本设置）</li>
</ul>
<p><strong>有状态</strong></p>
<p>为每个Pod维护一个唯一的ID,能够保证Pod的顺序性和唯一性，每个Pod是不可替代的。可以使用持久存储来保存服务产生的状态。</p>
<ul>
<li>StatefulSet（状态设置）</li>
</ul>
<p><strong>守护进程</strong></p>
<p>保证每个节点上运行着守护进程。</p>
<ul>
<li>DaemonSet（守护程序设置）</li>
</ul>
<p><strong>批处理</strong>：</p>
<p>一次性的任务。</p>
<ul>
<li>Job（任务）</li>
<li>CronJob（定时任务）</li>
</ul>
<h3>Deployment</h3>
<p>简要说明</p>
<ul>
<li>不具有唯一标识的多个Pod的集合。</li>
</ul>
<p>主要功能</p>
<ul>
<li>确保集群中期望数量的Pod运行。</li>
<li>提供多种升级策略以及意见回滚能力。</li>
<li>提供暂停/恢复的能力。</li>
</ul>
<p>适用场景</p>
<ul>
<li>Web Server等无状态应用。</li>
</ul>
<h3>ReplicaSet</h3>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li>Pod有稳定的网格标识符，Pod重新调度后Pod名称和Host名称不变。</li>
<li>每个Pod有单独存储，保证Pod重新调度后还是能访问到相同的数据。</li>
</ul>
<p>适用场景</p>
<ul>
<li>在某些分布式的场景，要求每个Pod都有自己单独的状态时。</li>
</ul>
<h2>服务发现</h2>
<h2>Pod生命周期</h2>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Kubectl - 安装与卸载</title>
      <link>https://blog.magictable.ha.cn/software/Package-Kubectl-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Kubectl-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Kubectl - 安装与卸载</source>
      <description>文章摘要： 摘要内容。 软件获取 官方下载地址： 安装 - apt包管理器 卸载 - apt包管理器 安装 - 预编译 卸载 - 预编译 安装 - 源代码 卸载 - 源代码</description>
      <category>软件程序/软件包</category>
      <pubDate>Sun, 08 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>软件获取</h2>
<ul>
<li>官方下载地址：<a href=""></a></li>
</ul>
<h2>安装 - apt包管理器</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>卸载 - apt包管理器</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>安装 - 预编译</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>卸载 - 预编译</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>安装 - 源代码</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>卸载 - 源代码</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Kubectl - 对象配置 - YAML文件</title>
      <link>https://blog.magictable.ha.cn/software/Package-Kubectl-%E5%AF%B9%E8%B1%A1%E9%85%8D%E7%BD%AE-YAML%E6%96%87%E4%BB%B6.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Kubectl-%E5%AF%B9%E8%B1%A1%E9%85%8D%E7%BD%AE-YAML%E6%96%87%E4%BB%B6.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Kubectl - 对象配置 - YAML文件</source>
      <description>文章摘要： 摘要内容。 相关信息 外部相关文章 内部相关文章 YAML文件相关总结： 创建Kubernetes对象时，必须提供对象的规定和约束，用来描述该对象的期望状态，以及对象的一些基本信息。 属性 apiVersion：创建该对象所使用的kubernetes API的版本。 kind：创建的对象的类别。 Metadata：描述对象的唯一性标识。 S...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sun, 08 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li></li>
</ul>
<p>内部相关文章</p>
<ul>
<li>YAML文件相关总结：<a href="/software/Language-YAML.html" target="_blank">Language-YAML</a></li>
</ul>
</div>
<p>创建Kubernetes对象时，必须提供对象的规定和约束，用来描述该对象的期望状态，以及对象的一些基本信息。</p>
<h2>属性</h2>
<ul>
<li><code>apiVersion</code>：创建该对象所使用的kubernetes API的版本。</li>
<li><code>kind</code>：创建的对象的类别。</li>
<li><code>Metadata</code>：描述对象的唯一性标识。</li>
<li><code>Spec</code>：该对象的期望状态。</li>
</ul>
<p>案例</p>
<div class="language-yaml line-numbers-mode" data-highlighter="prismjs" data-ext="yml"><pre><code class="language-yaml"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>Kubernetes应用编排与管理</h2>
<h3>Deployment管理</h3>
<p>创建一个例如<code>nginx.yaml</code>的yaml文件，并编写相关属性。</p>
<div class="language-yaml line-numbers-mode" data-highlighter="prismjs" data-ext="yml"><pre><code class="language-yaml"><span class="line"><span class="token key atrule">apiVersion</span><span class="token punctuation">:</span> apps/v1</span>
<span class="line"><span class="token key atrule">kind</span><span class="token punctuation">:</span> Deployment</span>
<span class="line"><span class="token key atrule">metadata</span><span class="token punctuation">:</span></span>
<span class="line">	<span class="token key atrule">name</span><span class="token punctuation">:</span> nginx</span>
<span class="line">	<span class="token key atrule">labels</span><span class="token punctuation">:</span></span>
<span class="line">		<span class="token key atrule">app</span><span class="token punctuation">:</span> nginx</span>
<span class="line"><span class="token key atrule">spec</span><span class="token punctuation">:</span></span>
<span class="line">	<span class="token key atrule">replicas</span><span class="token punctuation">:</span> <span class="token number">3</span></span>
<span class="line">	<span class="token key atrule">selector</span><span class="token punctuation">:</span></span>
<span class="line">		<span class="token key atrule">matchLabels</span><span class="token punctuation">:</span></span>
<span class="line">			<span class="token key atrule">app</span><span class="token punctuation">:</span> nginx</span>
<span class="line">	<span class="token key atrule">template</span><span class="token punctuation">:</span></span>
<span class="line">		<span class="token key atrule">metadata</span><span class="token punctuation">:</span></span>
<span class="line">			<span class="token key atrule">labels</span><span class="token punctuation">:</span></span>
<span class="line">				<span class="token key atrule">app</span><span class="token punctuation">:</span> nginx</span>
<span class="line">		<span class="token key atrule">spec</span><span class="token punctuation">:</span></span>
<span class="line">			<span class="token key atrule">containers</span><span class="token punctuation">:</span></span>
<span class="line">			<span class="token punctuation">-</span> <span class="token key atrule">name</span><span class="token punctuation">:</span> nginx</span>
<span class="line">			  <span class="token key atrule">image</span><span class="token punctuation">:</span> nginx<span class="token punctuation">:</span>1.7.9</span>
<span class="line">			  <span class="token key atrule">ports</span><span class="token punctuation">:</span></span>
<span class="line">			  <span class="token punctuation">-</span> <span class="token key atrule">containerPort</span><span class="token punctuation">:</span> <span class="token number">80</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>从yaml文件创建deployment对象</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line">kubectl apply <span class="token parameter variable">-f</span> nginx.yaml</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Kubectl - 命令</title>
      <link>https://blog.magictable.ha.cn/software/Package-Kubectl-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Kubectl-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Kubectl - 命令</source>
      <description>文章摘要： 摘要内容。 语法规则 kubectl [&amp;lt;命令&amp;gt;] [&amp;lt;对象类型&amp;gt;] [&amp;lt;对象名称&amp;gt;] [&amp;lt;可选参数&amp;gt;] 命令 create：创建。 get：查看。 describe：详情描述。 delete：删除。 对象类型 deployment： pod： service： 可选参数 Kubernetes应用编排与管理 Deployment管理 创建 ...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sun, 08 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>语法规则</h2>
<p><code>kubectl [&lt;命令&gt;] [&lt;对象类型&gt;] [&lt;对象名称&gt;] [&lt;可选参数&gt;]</code></p>
<p>命令</p>
<ul>
<li><code>create</code>：创建。</li>
<li><code>get</code>：查看。</li>
<li><code>describe</code>：详情描述。</li>
<li><code>delete</code>：删除。</li>
</ul>
<p>对象类型</p>
<ul>
<li><code>deployment</code>：</li>
<li><code>pod</code>：</li>
<li><code>service</code>：</li>
</ul>
<p>可选参数</p>
<ul>
<li></li>
</ul>
<h2>Kubernetes应用编排与管理</h2>
<h3>Deployment管理</h3>
<p>创建</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line">kubectl create deployment mydep <span class="token parameter variable">--image</span><span class="token operator">=</span>nginx <span class="token parameter variable">--replicas</span><span class="token operator">=</span><span class="token number">3</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p>查看</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line">kubectl get deployment</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>显示的数据说明</p>
<ul>
<li>NAME：名称</li>
<li>READY：</li>
<li>UP-TO-DATE：</li>
<li>AVAILABLE：</li>
<li>AGE：</li>
</ul>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Kubectl</title>
      <link>https://blog.magictable.ha.cn/software/Package-Kubectl.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Kubectl.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Kubectl</source>
      <description>文章摘要： Kubectl 是 Kubernetes 的命令行工具，通过kubectl来对集群进行管理，并在集群上进行容器化应用的安装部署。 相关信息 外部相关文章 内部相关文章 Kubernetes 基础知识： 简介 简要说明 Kubectl 是 Kubernetes 的命令行工具，通过kubectl来对集群进行管理，并在集群上进行容器化应用的安装部...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sun, 08 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Kubectl 是 Kubernetes 的命令行工具，通过kubectl来对集群进行管理，并在集群上进行容器化应用的安装部署。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li></li>
</ul>
<p>内部相关文章</p>
<ul>
<li>Kubernetes 基础知识：<a href="/software/Package-Kubectl-Kubernetes(k8s)%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86.html" target="_blank">Package-Kubectl-Kubernetes(k8s)基础知识</a></li>
</ul>
</div>
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>Kubectl 是 Kubernetes 的命令行工具，通过kubectl来对集群进行管理，并在集群上进行容器化应用的安装部署。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>资源创建</strong>：使用 YAML 或 JSON 文件创建 Kubernetes 对象，如 Pods、Services、Deployments 等。</li>
<li><strong>资源查看</strong>：列出、描述和查看集群中的资源状态。</li>
<li><strong>资源更新</strong>：应用对现有资源的更改，如更新容器镜像版本、修改资源配置等。</li>
<li><strong>资源删除</strong>：删除不再需要的 Kubernetes 对象。</li>
<li><strong>日志查看</strong>：查看 Pod 容器的日志输出。</li>
<li><strong>执行命令</strong>：在 Pod 的容器中执行命令。</li>
<li><strong>端口转发</strong>：将本地端口转发到 Pod 的端口，以便本地访问服务。</li>
<li><strong>弹性伸缩</strong>：调整 Deployment 或 ReplicaSet 的副本数量。</li>
<li><strong>集群管理</strong>：管理集群节点，如标记节点、隔离节点等。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>版本兼容性</strong>：确保 <code>kubectl</code> 的版本与 Kubernetes 集群的版本兼容。</li>
<li><strong>配置文件</strong>：<code>kubectl</code> 使用配置文件（通常是 <code>~/.kube/config</code>）来连接到 Kubernetes 集群，确保配置文件正确设置。</li>
<li><strong>权限管理</strong>：执行操作时，确保你有足够的权限，特别是在多租户环境中。</li>
<li><strong>命令语法</strong>：<code>kubectl</code> 命令的语法需要准确无误，否则可能导致错误或意外的操作。</li>
<li><strong>输出格式</strong>：<code>kubectl</code> 支持多种输出格式，如 YAML、JSON、表格等，根据需要选择合适的输出格式。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>日常操作</strong>：适用于 Kubernetes 集群的日常管理和操作，如部署应用程序、查看资源状态等。</li>
<li><strong>自动化脚本</strong>：适用于编写自动化脚本，以实现 Kubernetes 集群的自动化管理。</li>
<li><strong>故障排查</strong>：在需要诊断问题时，使用 <code>kubectl</code> 查看日志、资源状态和执行调试命令。</li>
<li><strong>开发环境</strong>：开发人员可以使用 <code>kubectl</code> 在本地或开发环境中测试和调试应用程序。</li>
<li><strong>生产环境</strong>：在生产环境中，<code>kubectl</code> 用于管理资源、监控集群状态和执行必要的维护操作。</li>
</ul>
<h2>安装与卸载</h2>
<p>详细总结：<a href="/software/Package-Kubectl-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html" target="_blank">Package-Kubectl-安装与卸载</a></p>
<h2>终端命令</h2>
<p>详细总结：<a href="/software/Package-Kubectl-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4.html" target="_blank">Package-Kubectl-终端命令</a></p>
<h2>配置文件</h2>
<p>详细总结：<a href=""></a></p>
<h2>热门推荐</h2>
<p>详细总结：<a href=""></a></p>
<h2>问题总结</h2>
<p>详细总结：<a href=""></a></p>
<h2>对象管理方式</h2>
<ul>
<li><strong>指令式</strong>：通过内置的命令实现对象的相关操作。</li>
<li><strong>声明式</strong>：使用<code>kubectl apply</code>命令创建指定目录中配置文件所定义的对象。配置文件采用 YAML 文件格式进行描述。</li>
</ul>
<h2>声明式配置文件</h2>
<p>详细总结：<a href="/software/Package-Kubectl-%E5%AF%B9%E8%B1%A1%E9%85%8D%E7%BD%AE-YAML%E6%96%87%E4%BB%B6.html" target="_blank">Package-Kubectl-对象配置-YAML文件</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Maven - 配置文件</title>
      <link>https://blog.magictable.ha.cn/software/Package-Maven-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Maven-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Maven - 配置文件</source>
      <description>文章摘要： 摘要内容。</description>
      <category>软件程序/软件包</category>
      <pubDate>Sun, 08 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
]]></content:encoded>
    </item>
    <item>
      <title>Package - Nginx - 配置文件</title>
      <link>https://blog.magictable.ha.cn/software/Package-Nginx-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Nginx-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Nginx - 配置文件</source>
      <description>文章摘要： 摘要内容。 目录结构 配置文件结构 虚拟机server通过listen和server_name进行区分，若有多个server配置，则listen和server_name不能重复。 listen：监听可以配置成IP或端口或IP+端口 listen 127.0.0.1:8080; listen 127.0.0.1;（端口不写，默认80） lis...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sun, 08 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>目录结构</h2>
<div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text"><pre><code class="language-text"><span class="line">/nginx</span>
<span class="line">|-- /client_body_temp</span>
<span class="line">|-- /conf            // 配置文件</span>
<span class="line">|-- /fastcgi_temp</span>
<span class="line">|-- /html            // 前端网页，静态资源</span>
<span class="line">|-- /logs            // 日志文件</span>
<span class="line">|-- /proxy_temp</span>
<span class="line">|-- /sbin            // 可执行程序</span>
<span class="line">|-- /scgi_temp</span>
<span class="line">|-- /uwsgi_temp</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>配置文件结构</h2>
<div class="language-conf line-numbers-mode" data-highlighter="prismjs" data-ext="conf"><pre><code class="language-conf"><span class="line"># 上下文</span>
<span class="line">http {</span>
<span class="line">    # 虚拟主机</span>
<span class="line">    server {</span>
<span class="line">        # 资源文件</span>
<span class="line">        location {</span>
<span class="line">            listen 80;</span>
<span class="line">            server_name localhost;</span>
<span class="line">        }</span>
<span class="line">        location {}</span>
<span class="line">        ...</span>
<span class="line">    }</span>
<span class="line">    server {}</span>
<span class="line">    ...</span>
<span class="line"></span>
<span class="line">}</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>虚拟机server通过listen和server_name进行区分，若有多个server配置，则<code>listen</code>和<code>server_name</code>不能重复。</p>
<p><code>listen</code>：监听可以配置成<code>IP</code>或<code>端口</code>或<code>IP+端口</code></p>
<ul>
<li><code>listen 127.0.0.1:8080;</code></li>
<li><code>listen 127.0.0.1;</code>（端口不写，默认80）</li>
<li><code>listen 8080;</code></li>
<li><code>listen *:8080;</code></li>
<li><code>listen localhost:8080;</code></li>
</ul>
<p><code>server</code>：<code>server_name</code>主要用于区分。</p>
<ul>
<li></li>
</ul>
<h2>默认配置文件</h2>
<div class="language-conf line-numbers-mode" data-highlighter="prismjs" data-ext="conf"><pre><code class="language-conf"><span class="line"></span>
<span class="line">#user  nobody;</span>
<span class="line">worker_processes  1; # 网站数量</span>
<span class="line"></span>
<span class="line">#error_log  logs/error.log;</span>
<span class="line">#error_log  logs/error.log  notice;</span>
<span class="line">#error_log  logs/error.log  info;</span>
<span class="line"></span>
<span class="line">#pid        logs/nginx.pid;</span>
<span class="line"></span>
<span class="line"></span>
<span class="line"># 重要配置</span>
<span class="line">events {</span>
<span class="line">    worker_connections  1024; # 每个网站同时能有多少连接</span>
<span class="line">}</span>
<span class="line"></span>
<span class="line"></span>
<span class="line"># HTTP配置</span>
<span class="line">http {</span>
<span class="line">    include       mime.types;</span>
<span class="line">    default_type  application/octet-stream;</span>
<span class="line"></span>
<span class="line">    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '</span>
<span class="line">    #                  '$status $body_bytes_sent "$http_referer" '</span>
<span class="line">    #                  '"$http_user_agent" "$http_x_forwarded_for"';</span>
<span class="line"></span>
<span class="line">    #access_log  logs/access.log  main;</span>
<span class="line"></span>
<span class="line">    sendfile        on;</span>
<span class="line">    #tcp_nopush     on;</span>
<span class="line"></span>
<span class="line">    #keepalive_timeout  0;</span>
<span class="line">    keepalive_timeout  65;</span>
<span class="line"></span>
<span class="line">    #gzip  on;</span>
<span class="line"></span>
<span class="line">	# 虚拟主机</span>
<span class="line">    server {</span>
<span class="line">        listen       80; # 端口号</span>
<span class="line">        server_name  localhost; # 主机名/域名</span>
<span class="line"></span>
<span class="line">        #charset koi8-r;</span>
<span class="line"></span>
<span class="line">        #access_log  logs/host.access.log  main;</span>
<span class="line"></span>
<span class="line">		# URI路径</span>
<span class="line">        location / {</span>
<span class="line">            root   html;</span>
<span class="line">            index  index.html index.htm;</span>
<span class="line">        }</span>
<span class="line"></span>
<span class="line">        #error_page  404              /404.html;</span>
<span class="line"></span>
<span class="line">        # redirect server error pages to the static page /50x.html</span>
<span class="line">        #</span>
<span class="line">        error_page   500 502 503 504  /50x.html;</span>
<span class="line">        location = /50x.html {</span>
<span class="line">            root   html;</span>
<span class="line">        }</span>
<span class="line"></span>
<span class="line">        # proxy the PHP scripts to Apache listening on 127.0.0.1:80</span>
<span class="line">        #</span>
<span class="line">        #location ~ \.php$ {</span>
<span class="line">        #    proxy_pass   http://127.0.0.1;</span>
<span class="line">        #}</span>
<span class="line"></span>
<span class="line">        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000</span>
<span class="line">        #</span>
<span class="line">        #location ~ \.php$ {</span>
<span class="line">        #    root           html;</span>
<span class="line">        #    fastcgi_pass   127.0.0.1:9000;</span>
<span class="line">        #    fastcgi_index  index.php;</span>
<span class="line">        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;</span>
<span class="line">        #    include        fastcgi_params;</span>
<span class="line">        #}</span>
<span class="line"></span>
<span class="line">        # deny access to .htaccess files, if Apache's document root</span>
<span class="line">        # concurs with nginx's one</span>
<span class="line">        #</span>
<span class="line">        #location ~ /\.ht {</span>
<span class="line">        #    deny  all;</span>
<span class="line">        #}</span>
<span class="line">    }</span>
<span class="line"></span>
<span class="line"></span>
<span class="line">    # another virtual host using mix of IP-, name-, and port-based configuration</span>
<span class="line">    #</span>
<span class="line">    #server {</span>
<span class="line">    #    listen       8000;</span>
<span class="line">    #    listen       somename:8080;</span>
<span class="line">    #    server_name  somename  alias  another.alias;</span>
<span class="line"></span>
<span class="line">    #    location / {</span>
<span class="line">    #        root   html;</span>
<span class="line">    #        index  index.html index.htm;</span>
<span class="line">    #    }</span>
<span class="line">    #}</span>
<span class="line"></span>
<span class="line"></span>
<span class="line">    # HTTPS server</span>
<span class="line">    #</span>
<span class="line">    #server {</span>
<span class="line">    #    listen       443 ssl;</span>
<span class="line">    #    server_name  localhost;</span>
<span class="line"></span>
<span class="line">    #    ssl_certificate      cert.pem;</span>
<span class="line">    #    ssl_certificate_key  cert.key;</span>
<span class="line"></span>
<span class="line">    #    ssl_session_cache    shared:SSL:1m;</span>
<span class="line">    #    ssl_session_timeout  5m;</span>
<span class="line"></span>
<span class="line">    #    ssl_ciphers  HIGH:!aNULL:!MD5;</span>
<span class="line">    #    ssl_prefer_server_ciphers  on;</span>
<span class="line"></span>
<span class="line">    #    location / {</span>
<span class="line">    #        root   html;</span>
<span class="line">    #        index  index.html index.htm;</span>
<span class="line">    #    }</span>
<span class="line">    #}</span>
<span class="line"></span>
<span class="line">}</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>配置 - Web静态网页</h2>
<ul>
<li>配置静态的后台管理系统。</li>
</ul>
<div class="language-conf line-numbers-mode" data-highlighter="prismjs" data-ext="conf"><pre><code class="language-conf"><span class="line"># 虚拟主机</span>
<span class="line">server {</span>
<span class="line">    listen 8080;              # 端口号</span>
<span class="line">    server_name localhost;    # 主机名称</span>
<span class="line">    # 资源文件配置</span>
<span class="line">    location / {</span>
<span class="line">        root /home/blog       # 配置根目录</span>
<span class="line">        index index.html index2.html;   # 首页配置，可配置多个首页</span>
<span class="line">    }</span>
<span class="line">}</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Tomcat - 配置文件</title>
      <link>https://blog.magictable.ha.cn/software/Package-Tomcat-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Tomcat-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Tomcat - 配置文件</source>
      <description>文章摘要： 摘要内容。</description>
      <category>软件程序/软件包</category>
      <pubDate>Sun, 08 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
]]></content:encoded>
    </item>
    <item>
      <title>OS - CentOS - 终端命令</title>
      <link>https://blog.magictable.ha.cn/software/OS-CentOS-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4.html</link>
      <guid>https://blog.magictable.ha.cn/software/OS-CentOS-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">OS - CentOS - 终端命令</source>
      <description>文章摘要： 摘要内容。</description>
      <category>软件程序/操作系统</category>
      <pubDate>Sat, 07 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 查询网络信息</span></span>
<span class="line"><span class="token function">ip</span> addr</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Miniconda - 安装与卸载</title>
      <link>https://blog.magictable.ha.cn/software/Package-Miniconda-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Miniconda-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Miniconda - 安装与卸载</source>
      <description>文章摘要： 摘要内容。 软件获取 官方下载地址： 安装 - apt包管理器 卸载 - apt包管理器 安装 - 预编译 卸载 - 预编译 安装 - 源代码 卸载 - 源代码</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 07 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>软件获取</h2>
<ul>
<li>官方下载地址：<a href=""></a></li>
</ul>
<h2>安装 - apt包管理器</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>卸载 - apt包管理器</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>安装 - 预编译</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>卸载 - 预编译</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>安装 - 源代码</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>卸载 - 源代码</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>OS - Debian Linux - 终端命令</title>
      <link>https://blog.magictable.ha.cn/software/OS-DebianLinux-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4.html</link>
      <guid>https://blog.magictable.ha.cn/software/OS-DebianLinux-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">OS - Debian Linux - 终端命令</source>
      <description>文章摘要： 摘要内容。 注释 所有命令都是通过将软件包安装到计算机上后才能使用的。 有些是系统默认自带的，若遇到无法识别的命令时，请分析是否是没有安装软件包或者环境变量问题。 命令行解释器 基本操作：，基本系统操作命令。 bash：，命令行解释器。 软件包管理 apt：，Debian Linux包管理工具。 dpkg：，Debian Linux包管理工...</description>
      <category>软件程序/操作系统</category>
      <pubDate>Fri, 06 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>所有命令都是通过将软件包安装到计算机上后才能使用的。</li>
<li>有些是系统默认自带的，若遇到无法识别的命令时，请分析是否是没有安装软件包或者环境变量问题。</li>
</ul>
</div>
<h2>命令行解释器</h2>
<ul>
<li>基本操作：<a href="/software/OS-DebianLinux-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C.html" target="_blank">OS-DebianLinux-终端命令-基本操作</a>，基本系统操作命令。</li>
<li>bash：<a href="/software/Package-Bash-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4.html" target="_blank">Package-Bash-终端命令</a>，命令行解释器。</li>
</ul>
<h2>软件包管理</h2>
<ul>
<li>apt：<a href="/software/Package-Apt-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-apt.html" target="_blank">Package-Apt-终端命令-apt</a>，Debian Linux包管理工具。</li>
<li>dpkg：<a href="/software/Package-Dpkg-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-dpkg.html" target="_blank">Package-Dpkg-终端命令-dpkg</a>，Debian Linux包管理工具。</li>
</ul>
<h2>编译和构建</h2>
<ul>
<li>gcc：<a href=""></a>，支持多种编程语言的编译器套件，包括C、C++等。</li>
<li>make：<a href=""></a>，控制软件编译过程的工具，用于自动化构建过程。</li>
</ul>
<h2>系统设置</h2>
<p>alias、apmd、aumix、bind、chkconfig、chroot、clock、crontab、declare、depmod、dircolors、dmesg、enable、eval、export、fbset、grpconv、grpunconv、hwclock、insmod、kbdconfig、lilo、liloconfig、lsmod、minfo、mkkickstart、modinfo、modprobe、mouseconfig、ntsysv、passwd、pwconv、pwunconv、rdate、resize、rmmod、rpm、set、setconsole、setenv、setup、sndconfig、SVGAText Mode、timeconfig、ulimit、unalias、unset</p>
<ul>
<li></li>
</ul>
<h2>系统管理</h2>
<p>adduser、chfn、chsh、date、exit、finger、free、fwhois、gitps、groupdel、groupmod、halt、id、kill、last、lastb、login、logname、logout、logrotate、newgrp、nice、procinfo、ps、pstree、reboot、renice、rlogin、rsh、rwho、screen、shutdown、sliplogin、su、sudo、suspend、swatch、tload、top、uname、useradd、userconf、userdel、usermod、vlock、w、who、whoami、whois</p>
<ul>
<li></li>
</ul>
<h2>设备管理</h2>
<p>dumpkeys、loadkeys、MAKEDEV、rdev、setleds</p>
<ul>
<li></li>
</ul>
<h2>磁盘管理</h2>
<p>cd、df、dirs、du、edquota、eject、lndir、ls、mcd、mdeltree、mdu、mkdir、mlabel、mmd、mmount、mrd、mzip、pwd、quota、quotacheck、quotaoff、quotaon、repquota、rmdir、rmt、stat、tree、umount</p>
<ul>
<li></li>
</ul>
<h2>磁盘维护</h2>
<p>badblocks、cfdisk、dd、e2fsck、ext2ed、fdisk、fsck.ext2、fsck、fsck.minix、fsconf、hdparm、losetup、mbadblocks、mformat、mkbootdisk、mkdosfs、mke2fs、mkfs.ext2、mkfs、mkfs.minix、mkfs.msdos、mkinitrd、mkisofs、mkswap、mpartition、sfdisk、swapoff、swapon、symlinks、sync</p>
<ul>
<li></li>
</ul>
<h2>文件传输</h2>
<p>bye、ftp、ftpcount、ftpshut、ftpwho、ncftp、tftp、uucico、uucp、uupick、uuto</p>
<ul>
<li>scp：<a href="/software/Package-OpenSSH-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-scp.html" target="_blank">Package-OpenSSH-终端命令-scp</a>，远程文件传输。</li>
<li>wget：<a href="/software/Package-Wget-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-wget.html" target="_blank">Package-Wget-终端命令-wget</a>，下载网络上的文件。</li>
<li>curl：<a href="/software/Package-Curl-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-curl.html" target="_blank">Package-Curl-终端命令-curl</a>，下载网络上的文件，发送各种HTTP请求。</li>
</ul>
<h2>文件管理</h2>
<p>diff、diffstat、file、find、git、gitview、ln、locate、lsattr、mattrib、mc、mcopy、mdel、mdir、mktemp、mmove、mread、mren、mshowfat、mtools、mtoolstest、mv、od、paste、patch、rcp、rhmask、rm、slocate、split、tee、tmpwatch、touch、umask、whereis、which、cat、chattr、chgrp、chmod、chown、cksum、cmp、cp、cut、indent</p>
<ul>
<li></li>
</ul>
<h2>文本处理</h2>
<p>awk、col、colrm、comm、csplit、ed、egrep、ex、fgrep、fmt、fold、grep、ispell、jed、joe、join、look、mtype、pico、rgrep、sed、sort、spell、tr、uniq、vi、wc</p>
<ul>
<li>vim：<a href="/software/Package-Vim.html" target="_blank">Package-Vim</a>，终端文本编辑工具。</li>
</ul>
<h2>备份压缩</h2>
<p>ar、bunzip2、bzip2、bzip2recover、compress、cpio、dump、gunzip、gzexe、gzip、lha、restore、tar、unarj、unzip、zip、zipinfo</p>
<ul>
<li></li>
</ul>
<h2>网络</h2>
<p>dip、getty、mingetty、ppp-off、smbd(samba daemon)、telnet、uulog、uustat、uux、cu、dnsconf、efax、httpd、ip、ifconfig、mesg、minicom、nc、netconf、netconfig、netstat、ping、ping6、pppstats、samba、setserial、shapecfg(shaper configuration)、smbd(samba daemon)、statserial(status ofserial port)、talk、tcpdump、testparm(test parameter)、traceroute、tty(teletypewriter)、uuname、wall(write all)、write、ytalk、arpwatch、apachectl、smbclient(samba client)、pppsetup</p>
<p>网络监控与测试</p>
<ul>
<li>wireshark：()[]，网络协议分析器，用于捕获和分析网络数据包。</li>
<li>nmap：()[]，网络扫描工具，用于发现网络上的设备和服务。</li>
<li>ping：()[]，用于测试网络连通性的工具。</li>
</ul>
<h2>远程操作</h2>
<ul>
<li>ssh：<a href="/software/Package-OpenSSH-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-ssh.html" target="_blank">Package-OpenSSH-终端命令-ssh</a>，远程连接计算机。</li>
</ul>
<h2>电子邮件与新闻组</h2>
<p>archive、ctlinnd、elm、getlist、inncheck、mail、mailconf、mailq、messages、metamail、mutt、nntpget、pine、slrn、X WINDOWS SYSTEM、reconfig、startx(start X Window)、Xconfigurator、XF86Setup、xlsatoms、xlsclients、xlsfonts</p>
<ul>
<li></li>
</ul>
<h2>其他命令</h2>
<ul>
<li></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>OS - Debian Linux - 问题总结 - 用户登录方式</title>
      <link>https://blog.magictable.ha.cn/software/OS-DebianLinux-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E7%94%A8%E6%88%B7%E7%99%BB%E5%BD%95%E6%96%B9%E5%BC%8F.html</link>
      <guid>https://blog.magictable.ha.cn/software/OS-DebianLinux-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E7%94%A8%E6%88%B7%E7%99%BB%E5%BD%95%E6%96%B9%E5%BC%8F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">OS - Debian Linux - 问题总结 - 用户登录方式</source>
      <description>文章摘要： 摘要内容。 命令行登入 init进程调用getty程序（意为get teletype），让用户输入用户名和密码。 输入完成后在调用login程序，核对密码（Debian会在多运行一个身份核对程序/etc/pam.d/login）。 若密码正确，则从/etc/passwd文件中读取该用户指定的shell，然后启动该shell。 读取/etc/...</description>
      <category>软件程序/操作系统</category>
      <pubDate>Fri, 06 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>命令行登入</h2>
<ul>
<li><code>init</code>进程调用getty程序（意为get teletype），让用户输入用户名和密码。</li>
<li>输入完成后在调用login程序，核对密码（Debian会在多运行一个身份核对程序<code>/etc/pam.d/login</code>）。</li>
<li>若密码正确，则从<code>/etc/passwd</code>文件中读取该用户指定的shell，然后启动该shell。</li>
<li>读取<code>/etc/profile</code>，这是对所有用户都有效的全局配置文件。</li>
<li>再依次读取<code>/etc/profile/.bash_profile</code>、<code>/etc/profile/.bash_login</code>、<code>/etc/profile/.profile</code>文件，这是针对当前用户的配置文件。</li>
</ul>
<h2>SSH登录</h2>
<ul>
<li>这是系统调用sshd程序（Debian还会运行<code>/etc/pam.d/ssh</code>），取代getty和login。</li>
<li>启动shell</li>
<li>读取<code>/etc/profile</code>，这是对所有用户都有效的全局配置文件。</li>
<li>再依次读取<code>/etc/profile/.bash_profile</code>、<code>/etc/profile/.bash_login</code>、<code>/etc/profile/.profile</code>文件，这是针对当前用户的配置文件。</li>
</ul>
<h2>图形用户界面</h2>
<ul>
<li><code>init</code>进程调用显示管理器，Gnome图形界面对应的显示管理器为gdm（GNOME Display Manager）。</li>
<li>用户输入用户名和密码。</li>
<li>若密码正确，则读取<code>/etc/gdm3/Xsession</code>，启动用户的会话。</li>
<li>加载<code>/etc/profile</code>和<code>/etc/.profile</code>，即<code>/etc/profile/.profile</code></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>OS - Debian Linux - 问题总结 - 系统启动过程</title>
      <link>https://blog.magictable.ha.cn/software/OS-DebianLinux-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E7%B3%BB%E7%BB%9F%E5%90%AF%E5%8A%A8%E8%BF%87%E7%A8%8B.html</link>
      <guid>https://blog.magictable.ha.cn/software/OS-DebianLinux-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E7%B3%BB%E7%BB%9F%E5%90%AF%E5%8A%A8%E8%BF%87%E7%A8%8B.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">OS - Debian Linux - 问题总结 - 系统启动过程</source>
      <description>文章摘要： 摘要内容。 加载内核 操作系统接管硬件之后，首先读取/boot目录下的内核文件。 启动初始化进程 内核文件加载之后，就开始运行第一个程序/sbin/init，用于初始化系统环境。 由于init是第一个运行的程序，因此init的进程编号（PID）就是1，其他所有进程都是init的衍生，都是init的子进程。 确定运行级别 init进程的任务是...</description>
      <category>软件程序/操作系统</category>
      <pubDate>Fri, 06 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<p>加载内核</p>
<ul>
<li>操作系统接管硬件之后，首先读取<code>/boot</code>目录下的内核文件。</li>
</ul>
<p>启动初始化进程</p>
<ul>
<li>内核文件加载之后，就开始运行第一个程序<code>/sbin/init</code>，用于初始化系统环境。</li>
<li>由于<code>init</code>是第一个运行的程序，因此<code>init</code>的进程编号（PID）就是1，其他所有进程都是<code>init</code>的衍生，都是<code>init</code>的子进程。</li>
</ul>
<p>确定运行级别</p>
<ul>
<li><code>init</code>进程的任务是去运行这些开机启动的程序，但是需要根据不同场合启动不同的程序。</li>
<li>启动时根据“运行级别”，来确定要运行哪些程序。</li>
<li><code>init</code>进程首先读取<code>/etc/inittab</code>文件，该文件是运行级别的配置文件。</li>
</ul>
<p>加载开机启动程序</p>
<ul>
<li>7种预设的“运行级别”各自有一个目录，存放需要开机启动的程序，其<code>/etc/rcN.d</code>目录中列出的程序都设为链接文件，指向<code>/etc.init.d</code>目录，真正的启动脚本都统一放在这个目录中。</li>
<li><code>init</code>进程将逐一加载开机启动程序，即运行目录中的启动脚本。</li>
<li>好处是若要手动关闭或重启某个进程，则直接到<code>/etc/init.d/</code>目录下寻找启动脚本即可</li>
</ul>
<p>用户登入</p>
<ul>
<li>开机启动程序加载完毕之后，等待用户登录。</li>
</ul>
<p>进入login shell</p>
<ul>
<li>所谓shell，就是命令行界面，用户可以直接于操作系统对话。</li>
<li>用户登入是打开的shell，就被称为“login shell”。</li>
</ul>
<p>打开non-login shell</p>
<ul>
<li>即用户进入操作系统之后，手动开启的另一个shell，该shell不会再次读取配置文件。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Apt - 终端命令 - apt</title>
      <link>https://blog.magictable.ha.cn/software/Package-Apt-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-apt.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Apt-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-apt.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Apt - 终端命令 - apt</source>
      <description>文章摘要： 摘要内容。 提示 命令都必须在终端仿真器/控制台中以 root 身份运行。 帮助 安装 卸载 更新 注释 apt从软件源安装软件，需要在本地维护一个软件源的存储库，这样就能在存储库中搜索软件包。 但是软件源中的软件包信息是频繁更新的。 如果你向使用更新版本的软件，就需要先更新本地的存储库，再进行软件安装。 查询 搜索 删除缓存 注释 APT...</description>
      <category>软件程序/软件包</category>
      <pubDate>Fri, 06 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<p>命令都必须在终端仿真器/控制台中以 root 身份运行。</p>
</div>
<h2>帮助</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">apt</span> <span class="token parameter variable">--help</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>安装</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">apt</span> <span class="token function">install</span> <span class="token operator">&lt;</span>软件包名<span class="token operator">&gt;</span></span>
<span class="line"><span class="token function">apt</span> <span class="token function">install</span> <span class="token operator">&lt;</span>软件包名<span class="token operator">&gt;</span>.deb</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 重新安装软件包</span></span>
<span class="line"><span class="token function">apt</span> reinstall <span class="token operator">&lt;</span>软件包名<span class="token operator">&gt;</span></span>
<span class="line"><span class="token function">apt</span> reinstall <span class="token operator">&lt;</span>软件包名<span class="token operator">&gt;</span>.deb</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 重新安装软件包和依赖</span></span>
<span class="line"><span class="token function">apt</span> reinstall <span class="token operator">&lt;</span>软件包名<span class="token operator">&gt;</span> <span class="token variable"><span class="token variable">$(</span><span class="token function">apt-cache</span> depends <span class="token parameter variable">--recurse</span> <span class="token parameter variable">--installed</span> <span class="token operator">&lt;</span>软件包名<span class="token operator">&gt;</span> <span class="token operator">||</span> <span class="token function">grep</span> <span class="token string">'[ ]'</span><span class="token variable">)</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>卸载</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 删除软件包但是保留配置文件</span></span>
<span class="line"><span class="token function">apt</span> remove <span class="token operator">&lt;</span>软件包名<span class="token operator">&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 删除软件包及其所有配置和数据文件（完全删除）</span></span>
<span class="line"><span class="token function">apt</span> purge <span class="token operator">&lt;</span>软件包名<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>更新</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>apt从软件源安装软件，需要在本地维护一个软件源的存储库，这样就能在存储库中搜索软件包。</li>
<li>但是软件源中的软件包信息是频繁更新的。</li>
<li>如果你向使用更新版本的软件，就需要先更新本地的存储库，再进行软件安装。</li>
</ul>
</div>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 更新本地软件包信息列表缓存，即更新本地存储库</span></span>
<span class="line"><span class="token function">apt</span> update</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 通过 安装/更新 软件来更新系统</span></span>
<span class="line"><span class="token function">apt</span> upgrade</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 通过 卸载/安装/更新 来更新系统</span></span>
<span class="line"><span class="token function">apt</span> full-upgrade</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>查询</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 列出软件包</span></span>
<span class="line"><span class="token function">apt</span> list</span>
<span class="line"><span class="token function">apt</span> list <span class="token operator">|</span> <span class="token function">grep</span> <span class="token operator">&lt;</span>软件包名<span class="token operator">&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 列出本地可更新的软件包</span></span>
<span class="line"><span class="token function">apt</span> list <span class="token parameter variable">--upgradable</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 查询软件包的详细信息</span></span>
<span class="line"><span class="token function">apt</span> show <span class="token operator">&lt;</span>软件包名<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>搜索</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 搜索软件包描述</span></span>
<span class="line"><span class="token function">apt</span> search <span class="token operator">&lt;</span>关键字<span class="token operator">&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 我们可能希望将输出重定向到 less （可滚动查看器）命令工具，实现分页显示。</span></span>
<span class="line"><span class="token comment"># `--all-versions`：代表所有可用版本</span></span>
<span class="line"><span class="token comment"># `grep`：文本搜索工具，进行筛选</span></span>
<span class="line"><span class="token function">apt</span> search <span class="token operator">&lt;</span>string<span class="token operator">&gt;</span> <span class="token operator">|</span> <span class="token function">less</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>删除缓存</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>APT 在 上 <code>/var/lib/apt/cache/</code> 维护已下载/已安装 .deb 软件包的本地缓存。</li>
<li>清除本地仓库中所有无法下载且基本上无用的额外包。</li>
</ul>
</div>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 删除已安装的缓存包文件以回收一些磁盘空间</span></span>
<span class="line"><span class="token function">apt</span> clean</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 只保留最新版本的本地缓存</span></span>
<span class="line"><span class="token function">apt</span> autoclean</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>清理多余软件包和配置文件</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">apt</span> <span class="token parameter variable">--purge</span> autoremove</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>解决依赖关系</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 有未能满足的依赖关系</span></span>
<span class="line"><span class="token comment"># 请尝试不指明软件包的名字来运行命令来自动解决依赖问题。</span></span>
<span class="line"><span class="token function">apt</span> --fix-broken <span class="token function">install</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Apt - 配置文件</title>
      <link>https://blog.magictable.ha.cn/software/Package-Apt-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Apt-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Apt - 配置文件</source>
      <description>文章摘要： 摘要内容。 仓库（存储库/镜像源） /etc/apt/sources.list：默认仓库配置文件。 /etc/apt/sources.list.d/*.list：第三方仓库的独立配置文件。 镜像源列表文件中包含的镜像源可以是官方的，也可以是第三方的。 官方仓库是由操作系统维护者提供的，通常保证了软件包的安全性和稳定性。 第三方仓库通常由软件...</description>
      <category>软件程序/软件包</category>
      <pubDate>Fri, 06 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>仓库（存储库/镜像源）</h2>
<ul>
<li><code>/etc/apt/sources.list</code>：默认仓库配置文件。</li>
<li><code>/etc/apt/sources.list.d/*.list</code>：第三方仓库的独立配置文件。</li>
</ul>
<p>镜像源列表文件中包含的镜像源可以是官方的，也可以是第三方的。</p>
<ul>
<li>官方仓库是由操作系统维护者提供的，通常保证了软件包的安全性和稳定性。</li>
<li>第三方仓库通常由软件的官方维护者或第三方提供。</li>
</ul>
<h3>修改</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 华为镜像源</span></span>
<span class="line"><span class="token function">sed</span> <span class="token parameter variable">-i</span> <span class="token string">'s/deb.debian.org/mirrors.huaweicloud.com/g'</span> /etc/apt/sources.list</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h3>添加</h3>
<ol>
<li>
<p>打开一个新的终端窗口。</p>
</li>
<li>
<p>使用文本编辑器添加新的存储库到源列表。通常Debian的存储库源列表文件位于 <code>/etc/</code>目录下。</p>
</li>
</ol>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">sudo</span> <span class="token function">vim</span> /etc/apt/sources.list</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><ol start="3">
<li>在打开的文件中，添加新的存储库行。</li>
</ol>
<div class="language-vim line-numbers-mode" data-highlighter="prismjs" data-ext="vim"><pre><code class="language-vim"><span class="line">deb http<span class="token punctuation">:</span><span class="token operator">/</span><span class="token operator">/</span>repository<span class="token operator">.</span>url<span class="token operator">/</span>debian<span class="token operator">/</span> distribution main contrib non<span class="token operator">-</span>free</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>替换 <code>repository.url</code> 为实际的存储库URL，<code>distribution</code> 为你的发行版代号（如 <code>buster</code>、<code>bullseye</code>、<code>bookworm</code> 等）</li>
</ul>
</div>
<ol start="4">
<li>
<p>保存并关闭文件。</p>
</li>
<li>
<p>更新你的包列表以包括新的存储库。</p>
</li>
</ol>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">sudo</span> <span class="token function">apt</span> update</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>删除</h3>
<ol>
<li>
<p>打开一个新的终端窗口。</p>
</li>
<li>
<p>使用文本编辑器添加新的存储库到源列表。通常Debian的存储库源列表文件位于 <code>/etc/</code>目录下。</p>
</li>
</ol>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">sudo</span> <span class="token function">vim</span> /etc/apt/sources.list</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><ol start="3">
<li>
<p>找到你想删除的存储库行，并删除它。</p>
</li>
<li>
<p>保存并关闭文件。</p>
</li>
<li>
<p>更新你的包列表以包括新的存储库。</p>
</li>
</ol>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">sudo</span> <span class="token function">apt</span> update</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>禁用</h3>
<ul>
<li>如果你想暂时禁用一个存储库而不是删除它，你可以通过在存储库行前面加上 <code>#</code> 来注释掉它：</li>
</ul>
<div class="language-vim line-numbers-mode" data-highlighter="prismjs" data-ext="vim"><pre><code class="language-vim"><span class="line"># deb http<span class="token punctuation">:</span><span class="token operator">/</span><span class="token operator">/</span>repository<span class="token operator">.</span>url<span class="token operator">/</span>debian<span class="token operator">/</span> distribution main contrib non<span class="token operator">-</span>free</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p>更新你的包列表以包括新的存储库。</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">sudo</span> <span class="token function">apt</span> update</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Apt</title>
      <link>https://blog.magictable.ha.cn/software/Package-Apt.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Apt.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Apt</source>
      <description>文章摘要： Debian Linux 操作系统的软件包管理工具。 简介 简要说明 Debian Linux 包管理工具。 apt（Advanced Package Tool）是基于 dpkg 之上的一个更高级的包管理工具，它提供了命令行工具 apt, apt-get, 和 apt-cache，用于处理软件包的安装、更新和查询。 文档：https://w...</description>
      <category>软件程序/软件包</category>
      <pubDate>Fri, 06 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Debian Linux 操作系统的软件包管理工具。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>Debian Linux 包管理工具。</li>
<li>apt（Advanced Package Tool）是基于 dpkg 之上的一个更高级的包管理工具，它提供了命令行工具 apt, apt-get, 和 apt-cache，用于处理软件包的安装、更新和查询。</li>
<li>文档：<a href="https://wiki.debian.org/zh_CN/Apt" target="_blank" rel="noopener noreferrer">https://wiki.debian.org/zh_CN/Apt</a></li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>依赖管理</strong>：自动处理软件包之间的依赖关系，这使得安装和更新软件包更加容易。</li>
<li><strong>用户友好</strong>：apt 的命令更易于记忆和使用，对初学者更友好。</li>
<li><strong>高级功能</strong>：apt 提供了更多的功能，如包搜索、列出可用的更新、下载源代码包等。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>功能限制</strong>：虽然 apt 提供了很多功能，但某些低级别的操作仍然需要 dpkg。</li>
<li><strong>性能问题</strong>：在处理大量软件包时，apt 的性能可能会比直接使用 dpkg 慢。</li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>Debian 建立一致的自由软件的预编译二进制包并从档案库中分发它们。</li>
<li>许多远程镜像站提供了<code>HTTP</code>和<code>FTP</code>的方式来访问“Debian档案库”。</li>
<li>Debian 的软件包管理系统是<code>高级软件包工具（APT）</code>。</li>
<li>Debian软件包管理系统可以让用户从档案库安装统一设置的<strong>二进制软件包</strong>到系统中，并进行管理，自动解决依赖问题。</li>
<li>每个软件包都带有自己的配置脚本。</li>
</ul>
</div>
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<ul>
<li>请多多查看一些常用的软件包和其依赖关系。</li>
</ul>
</div>
<h2>安装与卸载</h2>
<p>详细总结：<a href="/software/Package-Apt-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html" target="_blank">Package-Apt-安装与卸载</a></p>
<h2>终端命令</h2>
<p>详细总结 apt命令：<a href="/software/Package-Apt-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-apt.html" target="_blank">Package-Apt-终端命令-apt</a></p>
<h2>配置文件</h2>
<p>详细总结：<a href="/software/Package-Apt-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6.html" target="_blank">Package-Apt-配置文件</a></p>
<h2>热门推荐</h2>
<p>详细总结：<a href="/software/Package-Apt-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90.html" target="_blank">Package-Apt-热门推荐</a></p>
<h2>问题总结</h2>
<p>详细总结：<a href="/software/Package-Apt-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93.html" target="_blank">Package-Apt-问题总结</a></p>
<h2>仓库（存储库/镜像源）</h2>
<ul>
<li>apt从仓库安装软件，需要在本地维护一个软件包列表的仓库，这样就能在仓库中搜索软件包。但是软件源中的软件包信息是频繁更新的。如果你向使用更新版本的软件，就需要先更新本地的仓库，再进行软件安装。</li>
<li>仓库用于告诉 <code>apt</code>（高级包管理工具）从哪里下载软件包。</li>
<li>仓库通常由软件的官方维护者或第三方提供。</li>
<li><code>/etc/apt/sources.list</code>文件和<code>/etc/apt/sources.list.d/</code>目录下的文件定义了软件包的来源。</li>
</ul>
<p>仓库类型</p>
<ul>
<li>源列表中的每一行通常以 <code>deb</code> 或 <code>deb-src</code> 开头，分别代表二进制包仓库和源代码仓库。</li>
</ul>
<p>仓库地址</p>
<ul>
<li>仓库的URL，指定了软件包存储的位置。</li>
</ul>
<p>发行版代号</p>
<ul>
<li>指定仓库适用的发行版代号（例如，Debian 12 的代号是 <code>bookworm</code>）。</li>
</ul>
<p>组件</p>
<ul>
<li>指定仓库中的组件，通常是 <code>main</code>、<code>restricted</code>、<code>universe</code> 和 <code>multiverse</code> 中的一个或多个，这些组件代表了软件包的不同分类。</li>
<li><code>main</code>：这个组件包含了Debian项目维护的自由软件。</li>
<li><code>contrib</code>：这个组件包含了依赖于<code>main</code>组件中的软件包，它们可能需要非自由软件包来正常运行。</li>
<li><code>non-free</code>：这个组件包含了不符合DFSG的软件包，可能是由于版权、专利或其他法律问题而不自由的。</li>
<li><code>non-free-firmware</code>：这个组件专门用于包含固件包，这些固件包通常用于硬件设备的驱动程序，但它们不是自由的。</li>
</ul>
<p>案例</p>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware</span>
<span class="line">deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>通过apt安装的软件包，可以在以下目录中找到软件包信息：</p>
<ul>
<li><code>/var/lib/apt/lists/*</code></li>
<li><code>/var/lib/dpkg/available</code>：存储库中可用包的列表。</li>
<li><code>/var/lib/dpkg/status</code>：已安装包和可用包的状态。此文件包含有关软件包是否标记为删除、是否已安装等信息。标记为 reinst-required 的软件包已损坏，需要重新安装。</li>
</ul>
</div>
<h2>GPG密钥</h2>
<ul>
<li>APT 使用 GPG（GNU Privacy Guard）密钥用于验证软件包的完整性和来源。</li>
<li>确保下载的软件包是由可信任的发布者签名的。</li>
<li>确保软件包在分发过程中未被篡改。</li>
<li>GPG密钥相关的命令操作：<a href="/software/Package-GnuPG-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-gpg.html" target="_blank">Package-GnuPG-终端命令-gpg</a></li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>每个仓库的GPG密钥文件应单独保存在 <code>/etc/apt/trusted.gpg.d/</code> 目录下，文件后缀是 <code>.gpg</code>。</p>
</div>
<div class="hint-container warning">
<p class="hint-container-title">警告</p>
<p>请记得用实际的URL和密钥文件替换示例中的占位符。</p>
<p>注意事项</p>
<ul>
<li>在添加第三方存储库时，要确保来源的可信度。</li>
<li>保持密钥和存储库列表的更新，以确保系统的安全性。</li>
<li>在进行密钥或存储库的更改后，运行<code>sudo apt update</code>来应用这些更改。</li>
</ul>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Bash - 终端命令</title>
      <link>https://blog.magictable.ha.cn/software/Package-Bash-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Bash-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Bash - 终端命令</source>
      <description>文章摘要： 摘要内容。 相关信息 外部相关文章 https://dasher.wustl.edu/chem478/software/unix-tools/bash.html 内部相关文章 Debian Linux 配置文件： 提示 这里的命令是分散的、独立的，每个命令都对应一个功能。 都属于bash软件包提供的终端命令。 命令 注释 普通命令所在目录：...</description>
      <category>软件程序/软件包</category>
      <pubDate>Fri, 06 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li><a href="https://dasher.wustl.edu/chem478/software/unix-tools/bash.html" target="_blank" rel="noopener noreferrer">https://dasher.wustl.edu/chem478/software/unix-tools/bash.html</a></li>
</ul>
<p>内部相关文章</p>
<ul>
<li>Debian Linux 配置文件：<a href="/software/OS-DebianLinux-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6.html" target="_blank">OS-DebianLinux-配置文件</a></li>
</ul>
</div>
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<ul>
<li>这里的命令是分散的、独立的，每个命令都对应一个功能。</li>
<li>都属于bash软件包提供的终端命令。</li>
</ul>
</div>
<h2>命令</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>普通命令所在目录：<code>usr/bin/&lt;命令名称&gt;</code></li>
<li>管理员命令所在目录：``</li>
</ul>
</div>
<h3>查询命令</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">which</span> <span class="token punctuation">[</span><span class="token operator">&lt;</span>命令名称<span class="token operator">&gt;</span><span class="token punctuation">]</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p>案例</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>路径</h2>
<h3>查询当前所在路径</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token builtin class-name">pwd</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p>案例</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 显示当前所在路径</span></span>
<span class="line"><span class="token builtin class-name">pwd</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h3>跳转（切换）到指定路径</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token builtin class-name">cd</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p>案例</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 切换到根目录</span></span>
<span class="line"><span class="token builtin class-name">cd</span> /</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 切换到根目录下的bin目录</span></span>
<span class="line"><span class="token builtin class-name">cd</span> /bin</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 切换到上一级目录 或者使用命令：cd ..</span></span>
<span class="line"><span class="token builtin class-name">cd</span> <span class="token punctuation">..</span>/</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 切换到home目录</span></span>
<span class="line"><span class="token builtin class-name">cd</span> ~</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 切换到上次访问的目录</span></span>
<span class="line"><span class="token builtin class-name">cd</span> -</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 切换到本目录下的名为xx的文件目录，如果目录不存在报错</span></span>
<span class="line"><span class="token builtin class-name">cd</span> xx<span class="token punctuation">(</span>文件夹名<span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 可以输入完整的路径，直接切换到目标目录，输入过程中可以使用tab键快速补全</span></span>
<span class="line"><span class="token builtin class-name">cd</span> /xxx/xx/x</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>目录</h2>
<h3>显示目录内容</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">ls</span> <span class="token punctuation">[</span><span class="token operator">&lt;</span>选项<span class="token operator">&gt;</span><span class="token punctuation">]</span> <span class="token punctuation">[</span><span class="token operator">&lt;</span>目录路径<span class="token operator">&gt;</span><span class="token punctuation">]</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># `-a` `-all`：显示所有文件，包括隐藏文件,即以`.`开头的文件。</span></span>
<span class="line"><span class="token comment"># `-l` `-long`：详细信息显示。</span></span>
<span class="line"><span class="token comment"># `-h`：人性化显示信息。</span></span>
<span class="line"><span class="token comment"># `-d`：查看目录属性。</span></span>
<span class="line"><span class="token comment"># `-i`：查看文件的ID号。</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>案例</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 查看当前目录下的所有目录和文件（不包含隐藏文件）</span></span>
<span class="line"><span class="token function">ls</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 查看当前目录下的所有目录和文件（包括隐藏文件）</span></span>
<span class="line"><span class="token function">ls</span> <span class="token parameter variable">-a</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 查看指定目录下的所有目录和文件</span></span>
<span class="line"><span class="token function">ls</span> 【指定目录路径，如：/home】</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 列表查看当前目录下的所有目录和文件（列表查看显示更多东西</span></span>
<span class="line"><span class="token function">ls</span> <span class="token parameter variable">-alh</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>创建目录</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">mkdir</span> <span class="token punctuation">[</span><span class="token operator">&lt;</span>选项<span class="token operator">&gt;</span><span class="token punctuation">]</span> <span class="token punctuation">[</span><span class="token operator">&lt;</span>目录路径<span class="token operator">&gt;</span><span class="token punctuation">]</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># `-p`：开启递归创建，若没有目录则自动创建目录。</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>案例</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 在当前目录下创建目录</span></span>
<span class="line"><span class="token function">mkdir</span> 【创建的目录名】</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 在指定目录下创建目录</span></span>
<span class="line"><span class="token function">mkdir</span> 【目录+创建的目录名】</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>删除空目录</h3>
<ul>
<li>仅支持删除空目录。</li>
</ul>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">rmdir</span> <span class="token punctuation">[</span><span class="token operator">&lt;</span>选项<span class="token operator">&gt;</span><span class="token punctuation">]</span> <span class="token operator">&lt;</span>目录路径<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p>案例</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 仅支持删除空目录</span></span>
<span class="line"><span class="token function">rmdir</span> ./text/</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h3>拷贝（复制）目录</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">cp</span> <span class="token punctuation">[</span>选项<span class="token punctuation">]</span> <span class="token operator">&lt;</span>原文件或目录<span class="token operator">&gt;</span> <span class="token operator">&lt;</span>目标文件或目录<span class="token operator">&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># `-f`：冲突时强制覆盖目标。</span></span>
<span class="line"><span class="token comment"># `-n`：冲突时不覆盖目标。</span></span>
<span class="line"><span class="token comment"># `-u`：冲突时覆盖修改时间较旧的目标。</span></span>
<span class="line"><span class="token comment"># `-i`：冲突时询问是否覆盖。</span></span>
<span class="line"><span class="token comment"># `-r`：递归复制（用于复制目录）。</span></span>
<span class="line"><span class="token comment"># `-s`：创建软连接目录。</span></span>
<span class="line"><span class="token comment"># `-p`：保留文件属性。</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>案例</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 将/usr/tmp目录下的tool目录复制到 /opt目录下面</span></span>
<span class="line"><span class="token function">cp</span> /usr/tmp/tool /opt</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 递归复制目录中所有文件和文件夹</span></span>
<span class="line"><span class="token function">cp</span> <span class="token parameter variable">-r</span> /usr/tmp/tool /opt</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>剪切（移动）目录</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">mv</span> <span class="token punctuation">[</span>选项<span class="token punctuation">]</span> <span class="token operator">&lt;</span>原文件或目录<span class="token operator">&gt;</span> <span class="token operator">&lt;</span>目标文件或目录<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p>案例</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 修改目录名，同样适用于文件操作</span></span>
<span class="line"><span class="token function">mv</span> 【当前目录名】 【新目录名】</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 将/usr/tmp目录下的tool目录剪切到 /opt目录下面</span></span>
<span class="line"><span class="token function">mv</span> /usr/tmp/tool /opt</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 递归剪切移动目录中所有文件和文件夹</span></span>
<span class="line"><span class="token function">mv</span> <span class="token parameter variable">-r</span> /usr/tmp/tool /opt</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>文件</h2>
<h3>创建软链接（快捷方式）</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">ln</span> <span class="token punctuation">[</span>选项<span class="token punctuation">]</span> <span class="token operator">&lt;</span>原文件<span class="token operator">&gt;</span> <span class="token operator">&lt;</span>目标文件<span class="token operator">&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># `-s`：创建软连接。</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>案例</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">ln</span> <span class="token parameter variable">-s</span> /usr/local/mysql/bin/mysqld /usr/bin/mysqld</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>创建新文件</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">touch</span> <span class="token punctuation">[</span>选项<span class="token punctuation">]</span> <span class="token punctuation">[</span>参数<span class="token punctuation">]</span> <span class="token operator">&lt;</span>文件名<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p>案例</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 在当前目录下创建名为test.txt文件，若文件已存在，则将文件时间属性修改为当前系统时间。</span></span>
<span class="line"><span class="token function">touch</span> test.txt</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h3>删除文件</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">rm</span> <span class="token punctuation">[</span>选项<span class="token punctuation">]</span> <span class="token operator">&lt;</span>文件或目录<span class="token operator">&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># `-r`：删除目录。</span></span>
<span class="line"><span class="token comment"># `-f`：强制执行。</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>案例</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 删除当前目录下的文件（询问）</span></span>
<span class="line"><span class="token function">rm</span> 【文件名】</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 删除当前目录下的文件（不询问）</span></span>
<span class="line"><span class="token function">rm</span> <span class="token parameter variable">-f</span> 【文件名】</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 递归删除当前目录下的目录（询问）</span></span>
<span class="line"><span class="token function">rm</span> <span class="token parameter variable">-r</span> 【文件夹名】</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 递归删除当前目录下的目录（不询问）</span></span>
<span class="line"><span class="token function">rm</span> <span class="token parameter variable">-rf</span> 【文件夹名】</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 递归删除当前目录下的所有目录和文件（不询问）</span></span>
<span class="line"><span class="token function">rm</span> <span class="token parameter variable">-rf</span> *</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 递归删除根目录下的所有目录和文件（不询问）</span></span>
<span class="line"><span class="token function">rm</span> <span class="token parameter variable">-rf</span> /*</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>文件内容</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>推荐直接学习使用 “<a href="/software/Package-Vim.html" target="_blank">Vim</a>软件包” 提供的文本编辑终端命令。</li>
</ul>
</div>
<h3>显示文件内容</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">cat</span> <span class="token punctuation">[</span>选项<span class="token punctuation">]</span> <span class="token operator">&lt;</span>文件名<span class="token operator">&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># `-n`：显示行号。</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>案例</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>显示文件内容（反向列出）</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">tac</span> <span class="token punctuation">[</span>选项<span class="token punctuation">]</span> <span class="token operator">&lt;</span>文件名<span class="token operator">&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># `-n`：显示行号。</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>案例</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>分页显示文件内容</h3>
<ul>
<li>简要说明：</li>
<li>英文全称：more</li>
<li>所在路径：/usr/bin/more</li>
<li>执行权限：所有用户</li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>空格/f，翻页</li>
<li>回车（Enter），换下一行</li>
<li>Q/q，退出</li>
</ul>
</div>
<p>格式</p>
<ul>
<li><code>more [选项] [参数] &lt;文件名&gt;</code></li>
</ul>
<p>选项</p>
<ul>
<li></li>
</ul>
<p>参数</p>
<ul>
<li></li>
</ul>
<p>案例</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 显示百分比，回车查看下一行，空格查看下一页，"q"退出查看</span></span>
<span class="line"><span class="token function">more</span> 【文件名】</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h3>分页显示文件内容（可向上翻页）</h3>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>空格（\f）：翻页</li>
<li>回车（Enter）：换下一行</li>
<li>上箭头（PgUp）：换上一行</li>
<li>Q/q，退出</li>
<li>输入斜杠后，输入需要查询的内容进行高亮显示，n键遍历下一个符合的内容</li>
</ul>
</div>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">less</span> <span class="token punctuation">[</span>选项<span class="token punctuation">]</span> <span class="token punctuation">[</span>参数<span class="token punctuation">]</span> <span class="token operator">&lt;</span>文件名<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p>案例</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># PgUp向上翻页，PgDn向下翻页，"q"退出查看</span></span>
<span class="line"><span class="token function">less</span> 【文件名】</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h3>显示文件内容前面几行</h3>
<ul>
<li>简要说明：</li>
<li>英文全称：head</li>
<li>所在路径：/usr/bin/head</li>
<li>执行权限：所有用户</li>
</ul>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">head</span> <span class="token punctuation">[</span><span class="token operator">&lt;</span>选项<span class="token operator">&gt;</span><span class="token punctuation">]</span> <span class="token operator">&lt;</span>文件名<span class="token operator">&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># `-n &lt;行数&gt;`：指定行数。</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>案例</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 显示文件前100行的内容到终端</span></span>
<span class="line"><span class="token function">head</span> <span class="token parameter variable">-n</span> <span class="token number">100</span> <span class="token operator">&lt;</span>文件名<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h3>显示文件内容后面几行</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">tail</span> <span class="token punctuation">[</span><span class="token operator">&lt;</span>选项<span class="token operator">&gt;</span><span class="token punctuation">]</span> <span class="token operator">&lt;</span>文件名<span class="token operator">&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># `-n &lt;行数&gt;`：指定行数。</span></span>
<span class="line"><span class="token comment"># `-f`：动态更新显示文件末尾内容。</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>案例</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 查看文件的后100行/</span></span>
<span class="line"><span class="token function">tail</span> <span class="token parameter variable">-n</span> <span class="token number">100</span> 【文件名】 </span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h3>文件内容搜索</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">grep</span> <span class="token punctuation">[</span>选项<span class="token punctuation">]</span> <span class="token operator">&lt;</span>文本内容<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p>案例</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>sed</h3>
<ul>
<li>简要说明：流编辑器，用于处理文本</li>
<li>英文全称：</li>
<li>所在路径：</li>
<li>执行权限：所有用户</li>
</ul>
<p>格式</p>
<ul>
<li><code>grep [选项] [参数]</code></li>
</ul>
<p>选项</p>
<ul>
<li></li>
</ul>
<p>参数</p>
<ul>
<li></li>
</ul>
<p>案例</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>awk</h3>
<ul>
<li>简要说明：文本和数据处理工具</li>
<li>英文全称：</li>
<li>所在路径：</li>
<li>执行权限：所有用户</li>
</ul>
<p>格式</p>
<ul>
<li><code>grep [选项] [参数]</code></li>
</ul>
<p>选项</p>
<ul>
<li></li>
</ul>
<p>参数</p>
<ul>
<li></li>
</ul>
<p>案例</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>cut</h3>
<ul>
<li>简要说明：从文本中提取文本列</li>
<li>英文全称：</li>
<li>所在路径：</li>
<li>执行权限：所有用户</li>
</ul>
<p>格式</p>
<ul>
<li><code>grep [选项] [参数]</code></li>
</ul>
<p>选项</p>
<ul>
<li></li>
</ul>
<p>参数</p>
<ul>
<li></li>
</ul>
<p>案例</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>sort</h3>
<ul>
<li>简要说明：对文本文件内容排序</li>
<li>英文全称：</li>
<li>所在路径：</li>
<li>执行权限：所有用户</li>
</ul>
<p>格式</p>
<ul>
<li><code>grep [选项] [参数]</code></li>
</ul>
<p>选项</p>
<ul>
<li></li>
</ul>
<p>参数</p>
<ul>
<li></li>
</ul>
<p>案例</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>uniq</h3>
<ul>
<li>简要说明：去除文本文件中的重复行</li>
<li>英文全称：</li>
<li>所在路径：</li>
<li>执行权限：所有用户</li>
</ul>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>文件搜索</h2>
<h3>按照不同的标准来查找文件</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">find</span> <span class="token punctuation">[</span>选项<span class="token punctuation">]</span> <span class="token punctuation">[</span>匹配条件<span class="token punctuation">]</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># `-name`：根据文件名搜索。</span></span>
<span class="line"><span class="token comment"># `-size`：根据文件大小搜索。</span></span>
<span class="line"><span class="token comment"># `-group`：根据所属组搜索。</span></span>
<span class="line"><span class="token comment"># `-type`：根据文件类型搜索（f文件，d目录，l软连接文件）。</span></span>
<span class="line"><span class="token comment"># `-inum`：根据i节点搜索。</span></span>
<span class="line"><span class="token comment"># `-amin`：根据访问时间搜索。</span></span>
<span class="line"><span class="token comment"># `-cmin`：根据文件属性搜索。</span></span>
<span class="line"><span class="token comment"># `-mmin`：根据修改时间搜索。</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 链接选项</span></span>
<span class="line"><span class="token comment"># `-a`：（and）两个条件同时满足时进行显示。</span></span>
<span class="line"><span class="token comment"># `-o`：（or）两个条件满足任意一个时进行显示。</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>案例</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 查找/bin目录下的所有以a开头的文件或者目录</span></span>
<span class="line"><span class="token function">find</span> /bin <span class="token parameter variable">-name</span> <span class="token string">'a*'</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h3>在文件资料库中查找文件</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">locate</span> <span class="token punctuation">[</span>文件名<span class="token punctuation">]</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p>案例</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>字符串匹配</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">grep</span> <span class="token parameter variable">-iv</span> <span class="token punctuation">[</span><span class="token operator">&lt;</span>指定字符串<span class="token operator">&gt;</span><span class="token punctuation">]</span> <span class="token punctuation">[</span><span class="token operator">&lt;</span>文件<span class="token operator">&gt;</span><span class="token punctuation">]</span></span>
<span class="line"><span class="token comment"># `-i`：不区分大小写。</span></span>
<span class="line"><span class="token comment"># `-v`：排除指定字符串。</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>案例</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>文件和目录的权限</h2>
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<p>终端显示规则</p>
<ul>
<li>'-'：代表文件。</li>
<li>'d'：代表文件夹。</li>
<li>'r'：代表可读。</li>
<li>'w'：代表可写。</li>
<li>'x'：代表执行权限。</li>
</ul>
<p>权限相关说明</p>
<ul>
<li>所属组：<code>u</code>表示所有者、<code>g</code>表示所属组、<code>o</code>表示其他人、<code>a</code>表示全部人</li>
<li>权限控制：<code>+</code>表示增加权限、<code>-</code>表示减少权限、<code>=</code>表示修改成该权限</li>
<li>权限：<code>r</code>表示读权限、<code>w</code>表示写权限、<code>x</code>表示执行权限</li>
<li>权限数字表示：r=4，w=2，x=1</li>
</ul>
</div>
<h3>修改权限</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">chmod</span> <span class="token punctuation">[</span>选项<span class="token punctuation">]</span> <span class="token punctuation">[</span>参数<span class="token punctuation">]</span> <span class="token operator">&lt;</span><span class="token punctuation">{</span>ugoa<span class="token punctuation">}</span><span class="token punctuation">{</span>+-<span class="token operator">=</span><span class="token punctuation">}</span><span class="token punctuation">{</span>rwx<span class="token punctuation">}</span><span class="token operator">&gt;</span> <span class="token operator">&lt;</span>文件或目录<span class="token operator">&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># `-R`：递归修改。</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>案例</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 为当前用户授权执行权限</span></span>
<span class="line"><span class="token function">chmod</span> +x text.txt</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 8421法，1+2+4=7，“7”说明授予所有权限</span></span>
<span class="line"><span class="token function">chmod</span> <span class="token number">777</span> text.txt</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>修改所有者</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">chown</span> <span class="token punctuation">[</span>选项<span class="token punctuation">]</span> <span class="token punctuation">[</span>参数<span class="token punctuation">]</span> <span class="token operator">&lt;</span><span class="token punctuation">{</span>ugoa<span class="token punctuation">}</span><span class="token punctuation">{</span>+-<span class="token operator">=</span><span class="token punctuation">}</span><span class="token punctuation">{</span>rwx<span class="token punctuation">}</span><span class="token operator">&gt;</span> <span class="token operator">&lt;</span>文件或目录<span class="token operator">&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># `-R`：递归修改。</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>案例</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>修改所属组</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">chgrp</span> <span class="token punctuation">[</span>选项<span class="token punctuation">]</span> <span class="token punctuation">[</span>参数<span class="token punctuation">]</span> <span class="token operator">&lt;</span>用户组<span class="token operator">&gt;</span> <span class="token operator">&lt;</span>文件或目录<span class="token operator">&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># `-R`：递归修改。</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>案例</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>设置缺省权限</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token builtin class-name">umask</span> <span class="token punctuation">[</span>选项<span class="token punctuation">]</span> <span class="token punctuation">[</span>参数<span class="token punctuation">]</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># `-S`：以rwx形式显示新建文件缺省权限。</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>案例</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>用户</h2>
<h3>临时获取管理员权限</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 执行切换命令后，会提示输入密码，不会有输入提示。</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token punctuation">[</span><span class="token operator">&lt;</span>选项<span class="token operator">&gt;</span><span class="token punctuation">]</span> <span class="token punctuation">[</span><span class="token operator">&lt;</span>其他命令<span class="token operator">&gt;</span><span class="token punctuation">]</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># `-l`：列出当前的权限</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>案例</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p>案例</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 以管理员身份运行命令</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">apt</span> update</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 列出目前的权限</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token parameter variable">-l</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 以test用户身份编辑`/home/test`目录中的abcd.txt文件</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token parameter variable">-u</span> <span class="token builtin class-name">test</span> <span class="token function">vi</span> ~/abcd.txt</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>切换用户</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 执行切换命令后，会提示输入密码，不会有输入提示。</span></span>
<span class="line"><span class="token function">su</span> <span class="token punctuation">[</span><span class="token operator">&lt;</span>选项<span class="token operator">&gt;</span><span class="token punctuation">]</span> <span class="token punctuation">[</span><span class="token operator">&lt;</span>用户名<span class="token operator">&gt;</span><span class="token punctuation">]</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><p>案例</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 切换为用户"host01",输入后回车需要输入该用户的密码</span></span>
<span class="line"><span class="token function">su</span> host01 </span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 退出当前用户</span></span>
<span class="line"><span class="token builtin class-name">exit</span> </span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h3>创建用户</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 需要管理员权限。</span></span>
<span class="line"><span class="token function">useradd</span> <span class="token punctuation">[</span><span class="token operator">&lt;</span>选项<span class="token operator">&gt;</span><span class="token punctuation">]</span> <span class="token punctuation">[</span><span class="token operator">&lt;</span>用户名<span class="token operator">&gt;</span><span class="token punctuation">]</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># `-m`：创建用户主目录（配合`-k [&lt;路径&gt;]`指定创建模板）。</span></span>
<span class="line"><span class="token comment"># `-d [&lt;目录&gt;]`：用户主目录路径。</span></span>
<span class="line"><span class="token comment"># `-e [YYYY-MM-DD]`：用户到期时间。</span></span>
<span class="line"><span class="token comment"># `-g [GID/groupname]`：用户登录组。</span></span>
<span class="line"><span class="token comment"># `-G [GIDs/groupnames]`：用户所在的附加组。</span></span>
<span class="line"><span class="token comment"># `-p [&lt;密码&gt;]`：用户默认密码。</span></span>
<span class="line"><span class="token comment"># `-s [shell]`：用户登录的shell。</span></span>
<span class="line"><span class="token comment"># `-c [&lt;备注&gt;]`：用户备注/别名。</span></span>
<span class="line"><span class="token comment"># `-D`:查看默认设置（单独使用）。</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>案例</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>删除用户</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">userdel</span> <span class="token punctuation">[</span><span class="token operator">&lt;</span>选项<span class="token operator">&gt;</span><span class="token punctuation">]</span> <span class="token operator">&lt;</span>用户名<span class="token operator">&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># `-r`：删除用户主目录。</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>案例</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>修改用户-密码</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">passwd</span> <span class="token punctuation">[</span><span class="token operator">&lt;</span>选项<span class="token operator">&gt;</span><span class="token punctuation">]</span> <span class="token punctuation">[</span><span class="token operator">&lt;</span>用户名<span class="token operator">&gt;</span><span class="token punctuation">]</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># `-l`：锁定密码。</span></span>
<span class="line"><span class="token comment"># `-u`：解锁密码。</span></span>
<span class="line"><span class="token comment"># `-d`：删除密码。</span></span>
<span class="line"><span class="token comment"># `-f`：下次登录时强制修改密码。</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>案例</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 修改自己的密码</span></span>
<span class="line"><span class="token function">passwd</span> </span>
<span class="line"></span>
<span class="line"><span class="token comment"># （需要管理员权限）修改其他用户的密码</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">passwd</span> username</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>修改用户-属性</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">usermod</span> <span class="token punctuation">[</span><span class="token operator">&lt;</span>选项<span class="token operator">&gt;</span><span class="token punctuation">]</span> <span class="token operator">&lt;</span>用户名<span class="token operator">&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># `-aG [GIDs/groupnames]`：让用户进入新的用户组。</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>案例</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>用户组</h2>
<h3>添加新用户组</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">groupadd</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p>案例</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>删除用户组</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">groupdel</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p>案例</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Curl - 终端命令 - curl</title>
      <link>https://blog.magictable.ha.cn/software/Package-Curl-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-curl.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Curl-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-curl.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Curl - 终端命令 - curl</source>
      <description>文章摘要： 摘要内容。 格式 curl [选项] [参数] 选项 -f --fail：在发生错误时（如服务器无法访问）静默失败，不显示错误信息。 -s --silent：静默模式，不显示进度条或错误信息。 -S：当发生错误时，仍然显示错误信息，与 -s 结合使用可以仅在有错误时显示错误。 -L：跟随重定向，如果服务器返回重定向响应（如 301/302）...</description>
      <category>软件程序/软件包</category>
      <pubDate>Fri, 06 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<p>格式</p>
<ul>
<li><code>curl [选项] [参数]</code></li>
</ul>
<p>选项</p>
<ul>
<li><code>-f</code> <code>--fail</code>：在发生错误时（如服务器无法访问）静默失败，不显示错误信息。</li>
<li><code>-s</code> <code>--silent</code>：静默模式，不显示进度条或错误信息。</li>
<li><code>-S</code>：当发生错误时，仍然显示错误信息，与 <code>-s</code> 结合使用可以仅在有错误时显示错误。</li>
<li><code>-L</code>：跟随重定向，如果服务器返回重定向响应（如 301/302），自动跟踪到新的URL。</li>
<li><code>-o</code>：指定保存到本地的目录位置。</li>
</ul>
<p>参数</p>
<ul>
<li>将要下载的GPG密钥文件的URL。</li>
</ul>
<p>案例</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 下载GPG密钥文件到本地</span></span>
<span class="line"><span class="token function">curl</span> https://example.com/key.asc <span class="token parameter variable">-o</span> /etc/apt/trusted.gpg.d/key.asc</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Dpkg - 终端命令 - dpkg</title>
      <link>https://blog.magictable.ha.cn/software/Package-Dpkg-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-dpkg.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Dpkg-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-dpkg.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Dpkg - 终端命令 - dpkg</source>
      <description>文章摘要： Debian Linux 操作系统的软件包管理工具的命令行操作。 安装 卸载 查看信息 重新配置 注释 安装包时，有时会要求您通过向导对其进行配置（大多数包不需要配置）。 要再次显示包配置，请执行以下操作。 查找文件所属的软件包</description>
      <category>软件程序/软件包</category>
      <pubDate>Fri, 06 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Debian Linux 操作系统的软件包管理工具的命令行操作。</p>
<!-- more -->
<h2>安装</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line">dpkg <span class="token parameter variable">-i</span> <span class="token operator">&lt;</span>软件包<span class="token operator">&gt;</span>.deb</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>卸载</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line">dpkg <span class="token parameter variable">-P</span> <span class="token operator">&lt;</span>软件包<span class="token operator">&gt;</span>.deb</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>查看信息</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 查看软件包对应的文件信息</span></span>
<span class="line">dpkg <span class="token parameter variable">-L</span> <span class="token operator">&lt;</span>软件包名<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h2>重新配置</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>安装包时，有时会要求您通过向导对其进行配置（大多数包不需要配置）。</li>
<li>要再次显示包配置，请执行以下操作。</li>
</ul>
</div>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line">dpkg-reconfigure <span class="token operator">&lt;</span>软件包名<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>查找文件所属的软件包</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 要找出特定文件属于哪个 debian 软件包</span></span>
<span class="line">dpkg <span class="token parameter variable">-S</span> /path/to/file</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 其中 /path/to/file 是文件的完整路径。要查找名为 myprogram 的二进制文件/程序的完整路径，请使用 which myprogram</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Gradle - 安装与卸载</title>
      <link>https://blog.magictable.ha.cn/software/Package-Gradle-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Gradle-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Gradle - 安装与卸载</source>
      <description>文章摘要： 摘要内容。 软件获取 官方下载地址： 安装 - apt包管理器 卸载 - apt包管理器 安装 - 预编译 卸载 - 预编译 安装 - 源代码 卸载 - 源代码</description>
      <category>软件程序/软件包</category>
      <pubDate>Fri, 06 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>软件获取</h2>
<ul>
<li>官方下载地址：<a href=""></a></li>
</ul>
<h2>安装 - apt包管理器</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>卸载 - apt包管理器</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>安装 - 预编译</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>卸载 - 预编译</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>安装 - 源代码</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>卸载 - 源代码</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Language - UML - 语法格式</title>
      <link>https://blog.magictable.ha.cn/software/Language-UML-%E8%AF%AD%E6%B3%95%E6%A0%BC%E5%BC%8F.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-UML-%E8%AF%AD%E6%B3%95%E6%A0%BC%E5%BC%8F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - UML - 语法格式</source>
      <description>文章摘要： 摘要内容。 可见性 +：表示public -：表示private #：表示protected 完整表示格式 属性：&amp;lt;可见性&amp;gt; &amp;lt;名称&amp;gt; : &amp;lt;类型&amp;gt; [= &amp;lt;值&amp;gt;] 方法：&amp;lt;可见性&amp;gt; &amp;lt;名称&amp;gt;(&amp;lt;参数列表&amp;gt;) [: &amp;lt;返回类型&amp;gt;] 类与类之间关系的表示方法 关联关系 表示方法：使用一条实线连接两个类。 描述：表示两个类之间存在某种逻辑上的联...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Wed, 04 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>可见性</h2>
<ul>
<li><code>+</code>：表示<code>public</code></li>
<li><code>-</code>：表示<code>private</code></li>
<li><code>#</code>：表示<code>protected</code></li>
</ul>
<p>完整表示格式</p>
<ul>
<li>属性：<code>&lt;可见性&gt; &lt;名称&gt; : &lt;类型&gt; [= &lt;值&gt;]</code></li>
<li>方法：<code>&lt;可见性&gt; &lt;名称&gt;(&lt;参数列表&gt;) [: &lt;返回类型&gt;]</code></li>
</ul>
<h2>类与类之间关系的表示方法</h2>
<h3>关联关系</h3>
<ul>
<li><strong>表示方法</strong>：使用一条实线连接两个类。</li>
<li><strong>描述</strong>：表示两个类之间存在某种逻辑上的联系。关联可以是有方向的，也可以是双向的。</li>
<li><strong>示例</strong>：学生类和课程类之间的关联。</li>
</ul>
<h3>聚合关系</h3>
<ul>
<li><strong>表示方法</strong>：使用一条带有空心菱形的实线，菱形指向整体类。</li>
<li><strong>描述</strong>：表示整体与部分的关系，但部分可以独立于整体存在。</li>
<li><strong>示例</strong>：学校类与班级类之间的聚合关系。</li>
</ul>
<h3>组合关系</h3>
<ul>
<li><strong>表示方法</strong>：使用一条带有实心菱形的实线，菱形指向整体类。</li>
<li><strong>描述</strong>：是一种更紧密的聚合关系，部分不能独立于整体存在，整体负责部分的创建和销毁。</li>
<li><strong>示例</strong>：公司和部门之间的关系，部门不能脱离公司独立存在。</li>
</ul>
<h3>依赖关系</h3>
<ul>
<li><strong>表示方法</strong>：使用一条带有箭头的虚线，箭头指向依赖的类。</li>
<li><strong>描述</strong>：表示一个类使用另一个类的方法或资源，但不通过属性或关联来实现。</li>
<li><strong>示例</strong>：一个类使用另一个类的方法作为工具。</li>
</ul>
<h3>继承关系</h3>
<ul>
<li><strong>表示方法</strong>：使用一条带有空心箭头的实线，箭头指向基类（父类）。</li>
<li><strong>描述</strong>：表示子类继承父类的属性和方法。</li>
<li><strong>示例</strong>：动物类和哺乳动物类之间的继承关系。</li>
</ul>
<h3>实现关系</h3>
<ul>
<li><strong>表示方法</strong>：使用一条带有空心箭头的虚线，箭头指向接口。</li>
<li><strong>描述</strong>：表示类实现了一个接口，并提供了接口中声明的所有方法的实现。</li>
<li><strong>示例</strong>：一个类实现了一个接口。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Library - Maven - SpringFramework 6 - Bean的生命周期</title>
      <link>https://blog.magictable.ha.cn/software/Library-Maven-SpringFramework6-Bean%E7%9A%84%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Maven-SpringFramework6-Bean%E7%9A%84%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Maven - SpringFramework 6 - Bean的生命周期</source>
      <description>文章摘要： 摘要内容。 实例化（Instantiation）: Spring容器通过反射或者工厂方法创建Bean的实例。 属性赋值（Populate Properties）: 为Bean的属性设置值和对其他Bean的引用。 初始化（Initialization）: 如果Bean实现了BeanNameAware, BeanFactoryAware, Ap...</description>
      <category>软件程序/代码类库</category>
      <pubDate>Wed, 04 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<blockquote>
<ul>
<li><strong>实例化（Instantiation）</strong>: Spring容器通过反射或者工厂方法创建Bean的实例。</li>
<li><strong>属性赋值（Populate Properties）</strong>: 为Bean的属性设置值和对其他Bean的引用。</li>
<li><strong>初始化（Initialization）</strong>: 如果Bean实现了BeanNameAware, BeanFactoryAware, ApplicationContextAware等接口，会调用对应的方法。然后，如果BeanPostProcessor被注册，相应的postProcessBeforeInitialization()方法会被调用。最后，如果Bean实现了InitializingBean接口，其afterPropertiesSet()方法会被调用；或者，如果Bean使用init-method属性声明了初始化方法，这个方法也会被调用。</li>
<li><strong>使用（In use by application）</strong>: Bean现在可以被应用程序使用了。</li>
<li><strong>销毁（Destruction）</strong>: 当容器关闭时，如果Bean实现了DisposableBean接口，其destroy()方法会被调用；或者，如果Bean使用destroy-method属性声明了销毁方法，这个方法也会被调用。</li>
</ul>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Library - Maven - SpringFramework 6 - spring容器</title>
      <link>https://blog.magictable.ha.cn/software/Library-Maven-SpringFramework6-spring%E5%AE%B9%E5%99%A8.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Maven-SpringFramework6-spring%E5%AE%B9%E5%99%A8.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Maven - SpringFramework 6 - spring容器</source>
      <description>文章摘要： 摘要内容。 spring容器 org.springframework.context.annotation.AnnotationConfigApplicationContext 通过注解的方式配置spring容器 org.springframework.context.support.ClassPathXmlApplicationConte...</description>
      <category>软件程序/代码类库</category>
      <pubDate>Wed, 04 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>spring容器</h2>
<p><code>org.springframework.context.annotation.AnnotationConfigApplicationContext</code></p>
<blockquote>
<ul>
<li>通过注解的方式配置spring容器</li>
</ul>
</blockquote>
<p><code>org.springframework.context.support.ClassPathXmlApplicationContext</code></p>
<blockquote>
<ul>
<li>通过xml文件来配置spring容器</li>
</ul>
</blockquote>
<p>步骤</p>
<blockquote>
<ol>
<li>创建spring容器</li>
<li>配置spring容器</li>
<li>启动spring容器</li>
</ol>
</blockquote>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>context<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span></span><span class="token class-name">AnnotationConfigApplicationContext</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">tech<span class="token punctuation">.</span>magictable<span class="token punctuation">.</span>service<span class="token punctuation">.</span>config<span class="token punctuation">.</span></span><span class="token class-name">SpringConfig</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Application</span> <span class="token punctuation">{</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> ages<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 创建spring容器，Java配置类</span></span>
<span class="line">        <span class="token class-name">AnnotationConfigApplicationContext</span> applicationContext <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">AnnotationConfigApplicationContext</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 将用作配置类的类名注册到spring容器中，即spring容器将到该配置类中读取相关注解</span></span>
<span class="line">        applicationContext<span class="token punctuation">.</span><span class="token function">register</span><span class="token punctuation">(</span><span class="token class-name">SpringConfig</span><span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 启动spring容器</span></span>
<span class="line">        applicationContext<span class="token punctuation">.</span><span class="token function">refresh</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>编写配置类</h2>
<p><code>@ComponentScan(“&lt;包路径&gt;”)</code></p>
<blockquote>
<ul>
<li>扫描包路径。</li>
<li><code>org.springframework.context.annotation.ComponentScan</code></li>
</ul>
</blockquote>
<h2>标识类为Bean对象</h2>
<p>在一个类上一行上编写<code>@Component</code>注解，将由配置文件中的扫描包路径读取并注册到spring容器中。</p>
<h2>获取Bean对象</h2>
<blockquote>
<ul>
<li><code>applicationContext.getBean(&lt;类名&gt;.class)</code>：从spring容器中获取对象。</li>
</ul>
</blockquote>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Library - Maven - SpringFramework 6 - 注解</title>
      <link>https://blog.magictable.ha.cn/software/Library-Maven-SpringFramework6-%E6%B3%A8%E8%A7%A3.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Maven-SpringFramework6-%E6%B3%A8%E8%A7%A3.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Maven - SpringFramework 6 - 注解</source>
      <description>文章摘要： 摘要内容。 标记为Bean对象 - 在class上定义 @Component 标记为普通的类，并注册为Bean。可手动设置注册（添加）到IoC容器中时的名字，例如：@Component(&amp;quot;userDao&amp;quot;) @Controller 标记为“控制层”的类，并注册为Bean。例如：@Controller(&amp;quot;userDao&amp;quot;) @Service ...</description>
      <category>软件程序/代码类库</category>
      <pubDate>Wed, 04 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>标记为Bean对象 - 在class上定义</h2>
<h3><code>@Component</code></h3>
<blockquote>
<ul>
<li>标记为普通的类，并注册为Bean。可手动设置注册（添加）到IoC容器中时的名字，例如：<code>@Component("userDao")</code></li>
</ul>
</blockquote>
<h3><code>@Controller</code></h3>
<blockquote>
<ul>
<li>标记为“控制层”的类，并注册为Bean。例如：<code>@Controller("userDao")</code></li>
</ul>
</blockquote>
<h3><code>@Service</code></h3>
<blockquote>
<ul>
<li>标记为“业务逻辑层”的类，并注册为Bean。例如：<code>@Service("userDao")</code></li>
</ul>
</blockquote>
<h3><code>@Repository</code></h3>
<blockquote>
<ul>
<li>标记为“数据访问层”的类，并注册为Bean。例如：<code>@Repository("userDao")</code></li>
</ul>
</blockquote>
<h3><code>@DependsOn</code></h3>
<blockquote>
<ul>
<li>修改注册顺序，例如：<code>@DependsOn("userDao")</code>，将会在该对象后面加载（即依赖该对象）</li>
</ul>
</blockquote>
<h3><code>@Lazy</code></h3>
<blockquote>
<ul>
<li>懒加载，是否在被调用时才将bean加载到IoC容器中。</li>
</ul>
</blockquote>
<h2>注册对象 - 在Java配置类中使用</h2>
<h3><code>@Configuration</code></h3>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h3><code>@Bean</code></h3>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h3><code>@Inport</code></h3>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>依赖注入</h2>
<h3><code>@Autowired</code></h3>
<blockquote>
<ul>
<li>注入对象类型，告诉通过构造方法实例化时使用哪个构造方法，默认会根据类型去容器中找（byType），如果找到了多个会在根据名字找（byName）。</li>
</ul>
</blockquote>
<h3><code>@Qualifier</code></h3>
<blockquote>
<ul>
<li>手动指定在IoC容器中bean对象的名字，作为传入的数据，例如：<code>@Qualifier("userDao")</code></li>
</ul>
</blockquote>
<h2>请求URL路径映射</h2>
<blockquote>
<ul>
<li>在类和方法上使用。</li>
<li>指定请求的URL路径绑定到该“类”或“方法”上。</li>
</ul>
</blockquote>
<h3><code>@RequestMapping()</code></h3>
<blockquote>
<ul>
<li>请求路径映射，写在Controller的类名上或方法上</li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li><code>value</code>：请求URL映射。</li>
<li><code>method</code>：请求方式。</li>
<li><code>params</code>：设置请求参数，是否“必须传值”和“默认值”。<code>params={"&lt;参数名&gt;=123", !"&lt;参数名&gt;", ...}</code>。</li>
<li><code>headers</code>：设置请求头参数。</li>
<li><code>consumes</code>：请求的内容类型必须为指定值。</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token annotation punctuation">@Controller</span></span>
<span class="line"><span class="token annotation punctuation">@RequestMapping</span><span class="token punctuation">(</span><span class="token string">"/user"</span><span class="token punctuation">)</span>   <span class="token comment">// 指定请求的URL路径绑定到该“类对象”或“方法”上。</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">UserController</span> <span class="token punctuation">{</span></span>
<span class="line"></span>
<span class="line">    <span class="token annotation punctuation">@RequestMapping</span><span class="token punctuation">(</span>value<span class="token operator">=</span><span class="token string">"/login"</span><span class="token punctuation">,</span> method<span class="token operator">=</span><span class="token class-name">RequestMethod</span><span class="token punctuation">.</span><span class="token constant">POST</span><span class="token punctuation">)</span>   <span class="token comment">// 指定请求的URL路径绑定到该“类对象”或“方法”上。</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">login</span><span class="token punctuation">(</span><span class="token class-name">String</span> name<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line"></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line">        <span class="token annotation punctuation">@RequestMapping</span><span class="token punctuation">(</span>value<span class="token operator">=</span><span class="token string">"/logon"</span><span class="token punctuation">,</span> params <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token string">"name=小明"</span><span class="token punctuation">}</span><span class="token punctuation">)</span>   <span class="token comment">// 指定请求的URL路径绑定到该“类对象”或“方法”上。</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">logon</span><span class="token punctuation">(</span><span class="token class-name">String</span> name<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line"></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>请求参数映射</h2>
<blockquote>
<ul>
<li>在方法/函数上使用。</li>
</ul>
</blockquote>
<h3><code>@RequestParam</code></h3>
<blockquote>
<ul>
<li><code>@RequestParam(value, required, defaultValue)</code>：GET请求，接收普通的URL中的数据。</li>
</ul>
</blockquote>
<h3><code>@PathVariable</code></h3>
<blockquote>
<ul>
<li><code>@PathVariable(value, required, defaultValue)</code>：GET请求，接收REST风格的URL中的数据。</li>
</ul>
</blockquote>
<h3><code>@RequestBody</code></h3>
<blockquote>
<ul>
<li><code>@RequestBody</code>：POST请求，body请求体里面的数据，如JSON。</li>
</ul>
</blockquote>
<h3><code>@RequestHeader</code></h3>
<blockquote>
<ul>
<li><code>@RequestHeader(value, required, defaultValue)</code>：获取HTTP协议的请求头中的参数。</li>
</ul>
</blockquote>
<h3><code>@CookieValue</code></h3>
<blockquote>
<ul>
<li><code>@CookieValue(value, required, defaultValue)</code>：获取cookie中的值。</li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li><code>value</code>：手动指定传入的实参名称，默认值是Java形参名称一样。</li>
<li><code>required</code>：是否必须传入值，<code>true</code>必须传值&lt;默认&gt;、<code>false</code>允许为空。</li>
<li><code>defaultValue</code>：默认值，当参数为null时自动设置为默认值。建议使用包装类。</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token annotation punctuation">@Controller</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">AdminController</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 普通的URL</span></span>
<span class="line">    <span class="token comment">// URL：http://127.0.0.1:8080/web/logon?id=123&amp;name=小明</span></span>
<span class="line">    <span class="token comment">// 手动指定请求url绑定到该方法</span></span>
<span class="line">    <span class="token annotation punctuation">@RequestMapping</span><span class="token punctuation">(</span><span class="token string">"/logon"</span><span class="token punctuation">)</span></span>
<span class="line">    <span class="token comment">// GET请求，接收普通的URL中的数据，并手动指定传入的实参名称与java形参名称绑定</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">logon</span><span class="token punctuation">(</span><span class="token annotation punctuation">@RequestParam</span><span class="token punctuation">(</span><span class="token string">"id"</span><span class="token punctuation">)</span> <span class="token class-name">String</span> id<span class="token punctuation">,</span> <span class="token annotation punctuation">@RequestParam</span><span class="token punctuation">(</span><span class="token string">"name"</span><span class="token punctuation">)</span> <span class="token class-name">String</span> name<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// REST风格的URL</span></span>
<span class="line">    <span class="token comment">// URL：http://127.0.0.1:8080/web/logon/123/小明</span></span>
<span class="line">    <span class="token comment">// 手动指定请求url绑定到该方法，通过`{}`占位符绑定</span></span>
<span class="line">    <span class="token annotation punctuation">@RequestMapping</span><span class="token punctuation">(</span><span class="token string">"/login/{id}/{name}"</span><span class="token punctuation">)</span></span>
<span class="line">    <span class="token comment">// GET请求，接收REST风格的URL中的数据，并手动指定传入的实参名称与java形参名称绑定</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">login</span><span class="token punctuation">(</span><span class="token annotation punctuation">@PathVariable</span><span class="token punctuation">(</span><span class="token string">"id"</span><span class="token punctuation">)</span> <span class="token class-name">String</span> id<span class="token punctuation">,</span> <span class="token annotation punctuation">@PathVariable</span><span class="token punctuation">(</span><span class="token string">"name"</span><span class="token punctuation">)</span> <span class="token class-name">String</span> name<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>请求数据</h2>
<blockquote>
<ul>
<li>在成员变量和方法上定义。</li>
</ul>
</blockquote>
<h3><code>@Value</code></h3>
<blockquote>
<ul>
<li>注入基本类型，一般用于读取配置文件、手动传入具体参数。例如：<code>@Value("小明")</code>、<code>@Value("${mysql.password}")</code></li>
</ul>
</blockquote>
<h3><code>@Required</code></h3>
<blockquote>
<ul>
<li>适用于bean属性setter方法显式赋值或自动注入值。</li>
</ul>
</blockquote>
<h2>响应数据</h2>
<blockquote>
<ul>
<li>写在方法上。</li>
</ul>
</blockquote>
<h3><code>@ResponseBody</code></h3>
<p>响应数据</p>
<h2>bean对象的回调函数</h2>
<blockquote>
<ul>
<li>在方法上定义。</li>
</ul>
</blockquote>
<h3><code>@PostConstruct</code></h3>
<blockquote>
<ul>
<li>初始化回调，创建时执行方法。</li>
</ul>
</blockquote>
<h3><code>@PreDestroy</code></h3>
<blockquote>
<ul>
<li>销毁时回调，销毁前执行该方法。</li>
</ul>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Library - Maven - SpringFramework 6 - 配置文件 - XML文件</title>
      <link>https://blog.magictable.ha.cn/software/Library-Maven-SpringFramework6-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6-XML%E6%96%87%E4%BB%B6.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Maven-SpringFramework6-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6-XML%E6%96%87%E4%BB%B6.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Maven - SpringFramework 6 - 配置文件 - XML文件</source>
      <description>文章摘要： 摘要内容。 命名空间 ==待完善== &amp;lt;beans&amp;gt; 功能：定义IoC容器，存放所有bean对象。 在spring的xml中最外层的标签。 格式 &amp;lt;beans&amp;gt;&amp;lt;/beans&amp;gt; 案例 &amp;lt;bean&amp;gt; 功能：定义单个具体的bean对象。 格式 &amp;lt;bean&amp;gt;&amp;lt;/bean&amp;gt; 属性 id：唯一ID，容器可以通过id获取对应的bean对象。 class...</description>
      <category>软件程序/代码类库</category>
      <pubDate>Wed, 04 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h3>命名空间</h3>
<p>==待完善==</p>
<h3><code>&lt;beans&gt;</code></h3>
<blockquote>
<ul>
<li>功能：定义IoC容器，存放所有bean对象。</li>
<li>在spring的xml中最外层的标签。</li>
</ul>
</blockquote>
<p>格式</p>
<blockquote>
<ul>
<li><code>&lt;beans&gt;&lt;/beans&gt;</code></li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token prolog">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span>  </span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>beans</span> <span class="token attr-name">xmlns</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>http://www.springframework.org/schema/beans<span class="token punctuation">"</span></span>  </span>
<span class="line">       <span class="token attr-name"><span class="token namespace">xmlns:</span>xsi</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>http://www.w3.org/2001/XMLSchema-instance<span class="token punctuation">"</span></span>  </span>
<span class="line">       <span class="token attr-name"><span class="token namespace">xsi:</span>schemaLocation</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>  </span>
<span class="line">  </span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>beans</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3><code>&lt;bean&gt;</code></h3>
<blockquote>
<ul>
<li>功能：定义单个具体的bean对象。</li>
</ul>
</blockquote>
<p>格式</p>
<blockquote>
<ul>
<li><code>&lt;bean&gt;&lt;/bean&gt;</code></li>
</ul>
</blockquote>
<p>属性</p>
<blockquote>
<ul>
<li><code>id</code>：唯一ID，容器可以通过id获取对应的bean对象。</li>
<li><code>class</code>：路径，配置bean的全路径类名。</li>
<li><code>name</code>：别名，允许同时添加多个，支持使用逗号<code>,</code>、分号<code>;</code>、空格``进行分割。</li>
<li><code>autowire</code>：自动注入，<code>byType</code>根据类型&lt;默认&gt;、<code>byName</code>根据set方法的名字、<code>constructor</code>根据构造器。</li>
<li><code>depends-on</code>：控制加载顺序，指定若干个bean在自身之前先加载，<code>depends-on="&lt;bean对象名称&gt;"</code>。</li>
<li><code>lazy-init</code>：懒加载，是否在被调用时才将bean加载到IoC容器中。<code>true</code>懒加载、<code>false</code>非懒加载&lt;默认&gt;。</li>
<li><code>scope</code>：bean的作用域，<code>singleton</code>单例&lt;默认&gt;、<code>prototype</code>多例、<code>request</code>、<code>session</code>、<code>application</code>、<code>websocket</code>。</li>
<li>==待完善==，生命周期回调，设置创建或销毁时执行哪个方法。</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>beans</span><span class="token punctuation">&gt;</span></span>  </span>
<span class="line">    <span class="token comment">&lt;!--将dao添加到IoC容器中--&gt;</span>  </span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>bean</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>bookDao<span class="token punctuation">"</span></span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>book bookDaoImap<span class="token punctuation">"</span></span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>com.cykj.dao.impl.BookDaoImpl<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>bean</span><span class="token punctuation">&gt;</span></span>  </span>
<span class="line">    <span class="token comment">&lt;!--将service添加到IcO容器中--&gt;</span>  </span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>bean</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>bookService<span class="token punctuation">"</span></span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>com.cykj.service.impl.BookServiceImpl<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>bean</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">     </span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>beans</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3><code>&lt;property&gt;</code>和<code>&lt;constructor-arg&gt;</code></h3>
<blockquote>
<ul>
<li>功能：依赖注入，配置单个具体的bean对象。</li>
<li>依赖注入的标签可以嵌套使用，来限制作用域范围。</li>
</ul>
</blockquote>
<p>格式</p>
<blockquote>
<ul>
<li><code>&lt;property&gt;&lt;/property&gt;</code>：实例化<strong>无参构造方法</strong>创建对象，并传入数据修改<strong>get/set方法</strong>完成创建bean对象，（提示：需要有无参构造方法才能使用）。</li>
<li><code>&lt;constructor-arg&gt;&lt;/constructor-arg&gt;</code>：通过实例化<strong>有参构造方法</strong>进行创建bean对象。</li>
</ul>
</blockquote>
<p>属性</p>
<blockquote>
<ul>
<li><code>name</code>：参数名。（提示：这里的名字是类提供的<code>Setter和Getter</code>方法，并自动将前面的字母剔除掉了）。</li>
<li><code>value</code>：数据。</li>
<li><code>ref</code>：关联其他bean对象。</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>beans</span><span class="token punctuation">&gt;</span></span>  </span>
<span class="line">    <span class="token comment">&lt;!--关联其他bean对象 - 01方案--&gt;</span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>bean</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>com.cykj.wellness.beans.Wife<span class="token punctuation">"</span></span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>wife<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>bean</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>bean</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>com.cykj.wellness.beans.User<span class="token punctuation">"</span></span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>user<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="line">        <span class="token comment">&lt;!--外部引入--&gt;</span></span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>property</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>wife<span class="token punctuation">"</span></span> <span class="token attr-name">ref</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>wife<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>property</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>bean</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">&lt;!--关联其他bean对象 - 02方案--&gt;</span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>bean</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>com.cykj.wellness.beans.User<span class="token punctuation">"</span></span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>user<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="line">        <span class="token comment">&lt;!--内部引入--&gt;</span></span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>property</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>wife<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="line">            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>bean</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>com.cykj.wellness.beans.Wife<span class="token punctuation">"</span></span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>wife<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="line">            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>bean</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>property</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>bean</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">&lt;!--&lt;constructor-arg&gt;，通过实例化**有参构造方法**进行创建对象--&gt;</span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>bean</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>com.cykj.wellness.beans.User<span class="token punctuation">"</span></span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>user<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="line">        <span class="token comment">&lt;!--写法1--&gt;</span></span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>constructor-arg</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>id<span class="token punctuation">"</span></span> <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>18<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>constructor-arg</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">        <span class="token comment">&lt;!--写法2--&gt;</span></span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>constructor-arg</span> <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>18<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>constructor-arg</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">        <span class="token comment">&lt;!--写法3--&gt;</span></span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>constructor-arg</span> <span class="token attr-name">index</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>0<span class="token punctuation">"</span></span> <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>18<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>constructor-arg</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>bean</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>beans</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>存储数据的标签</h3>
<p>格式</p>
<blockquote>
<p><code>&lt;value&gt;&lt;/value&gt;</code></p>
<ul>
<li>具体的基本类型的数据。</li>
</ul>
<p><code>&lt;list&gt;&lt;/list&gt;</code></p>
<ul>
<li>定义列表数据。</li>
</ul>
<p><code>&lt;map&gt;&lt;/map&gt;</code></p>
<ul>
<li>定义字典数据。</li>
</ul>
<p><code>&lt;entry&gt;&lt;/entry&gt;</code></p>
<ul>
<li>定义字典数据中的数据。</li>
<li><code>&lt;entry key="键" value="值"&gt;&lt;entry&gt;</code>：存储基本数据类型。</li>
<li><code>&lt;entry value-ref="bean对象"&gt;&lt;entry&gt;</code>：存储对象类型。</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token comment">&lt;!--list类型的数据--&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>list</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>value</span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>value</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>list</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line"><span class="token comment">&lt;!--字典类型--&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>map</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>entry</span> <span class="token attr-name">key</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token punctuation">"</span></span> <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>entry</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>map</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3><code>&lt;context:component-scan&gt;</code></h3>
<blockquote>
<ul>
<li>配置IoC容器扫描的包路径</li>
</ul>
</blockquote>
<p>格式</p>
<blockquote>
<ul>
<li><code>&lt;context:component-scan&gt;&lt;/context:component-scan&gt;</code>：配置扫描的包路径</li>
</ul>
</blockquote>
<p>属性</p>
<blockquote>
<ul>
<li><code>base-package</code>：指定扫描的包路径。</li>
<li><code>use-default-filters</code>：设置是否扫描注解，<code>true</code>扫描注解&lt;默认&gt;、<code>false</code>不扫描注解。</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token prolog">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">&lt;!--添加命名空间--&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>beans</span> <span class="token attr-name">xmlns</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>http://www.springframework.org/schema/beans<span class="token punctuation">"</span></span></span>
<span class="line">    <span class="token attr-name"><span class="token namespace">xmlns:</span>xsi</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>http://www.w3.org/2001/XMLSchema-instance<span class="token punctuation">"</span></span></span>
<span class="line">    <span class="token attr-name"><span class="token namespace">xmlns:</span>context</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>http://www.springframework.org/schema/context<span class="token punctuation">"</span></span></span>
<span class="line">    <span class="token attr-name"><span class="token namespace">xsi:</span>schemaLocation</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    </span>
<span class="line">    <span class="token comment">&lt;!--指定包扫描路径，通过查找注解的方式来确定bean对象，并添加到IoC容器中进行管理--&gt;</span></span>
<span class="line">    <span class="token comment">&lt;!--通过指定扫描路径，用于告知spring的扫描位置--&gt;</span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">context:</span>component-scan</span> <span class="token attr-name">base-package</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>&lt;需要扫描的包路径&gt;<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span><span class="token namespace">context:</span>component-scan</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    </span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>beans</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3><code>&lt;context:exclude-filter&gt;</code>和<code>&lt;context:include-filter&gt;</code></h3>
<blockquote>
<ul>
<li>排除扫描，设置需要排除扫描的选项。</li>
</ul>
</blockquote>
<p>格式</p>
<blockquote>
<ul>
<li><code>&lt;context:exclude-filter /&gt;</code>：排除扫描，设置需要排除扫描的选项。</li>
<li><code>&lt;context:include-filter /&gt;</code>：包含扫描，设置需要包含扫描的选项。</li>
</ul>
</blockquote>
<p>属性</p>
<blockquote>
<ul>
<li><code>type</code>：排除/包含的方式，<code>annotation</code>注解&lt;默认&gt;、<code>assignable</code>类名、<code>aspectj</code>切面表达式、<code>regex</code>正则表达式、<code>custom</code>根据接口自定义</li>
<li><code>expression</code>：完整限定名。</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>beans</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">context:</span>component-scan</span> <span class="token attr-name">base-package</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>&lt;需要扫描的包路径&gt;<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">&lt;!--排除扫描，设置需要排除扫描的选项--&gt;</span></span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">context:</span>exclude-filter</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>&lt;排除方式&gt;<span class="token punctuation">"</span></span> <span class="token attr-name">expression</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>&lt;完整限定名/规则&gt;<span class="token punctuation">"</span></span><span class="token punctuation">/&gt;</span></span></span>
<span class="line">        <span class="token comment">&lt;!--包含扫描，设置需要包含扫描的选项--&gt;</span></span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">context:</span>include-filter</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>&lt;包含方式&gt;<span class="token punctuation">"</span></span> <span class="token attr-name">expression</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>&lt;完整限定名/规则&gt;<span class="token punctuation">"</span></span><span class="token punctuation">/&gt;</span></span></span>
<span class="line"></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span><span class="token namespace">context:</span>component-scan</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>beans</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3><code>&lt;imput&gt;</code></h3>
<blockquote>
<ul>
<li>功能：导入其他xml配置文件。</li>
</ul>
</blockquote>
<p>格式</p>
<blockquote>
<ul>
<li><code>&lt;imput&gt;&lt;/imput&gt;</code></li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>imput</span> <span class="token attr-name">resource</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>spring-mvc.xml<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>import</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3><code>&lt;context:property-placeholder&gt;</code></h3>
<blockquote>
<ul>
<li>在xml配置文件中引入外部属性资源文件。</li>
</ul>
</blockquote>
<p>格式</p>
<blockquote>
<ul>
<li><code>&lt;context:property-placeholder&gt;&lt;/context:property-placeholder&gt;</code></li>
</ul>
</blockquote>
<p>属性</p>
<blockquote>
<ul>
<li><code>location</code>：文件位置。</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token prolog">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">&lt;!--添加命名空间--&gt;</span></span>
<span class="line"><span class="token comment">&lt;!--提示 添加内容：xmlns:context="http://www.springframework.org/schema/context"--&gt;</span></span>
<span class="line"><span class="token comment">&lt;!--提示 添加内容：http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd--&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>beans</span> <span class="token attr-name">xmlns</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>http://www.springframework.org/schema/beans<span class="token punctuation">"</span></span></span>
<span class="line">    <span class="token attr-name"><span class="token namespace">xmlns:</span>xsi</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>http://www.w3.org/2001/XMLSchema-instance<span class="token punctuation">"</span></span></span>
<span class="line">    <span class="token attr-name"><span class="token namespace">xmlns:</span>context</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>http://www.springframework.org/schema/context<span class="token punctuation">"</span></span></span>
<span class="line">    <span class="token attr-name"><span class="token namespace">xsi:</span>schemaLocation</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>http://www.springframework.org/schema/beans </span>
<span class="line">        http://www.springframework.org/schema/beans/spring-beans.xsd </span>
<span class="line">        http://www.springframework.org/schema/context </span>
<span class="line">        https://www.springframework.org/schema/context/spring-context.xsd<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">&lt;!--引入外部属性资源文件--&gt;</span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">context:</span>property-placeholder</span> <span class="token attr-name">location</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>db.properties<span class="token punctuation">"</span></span><span class="token punctuation">/&gt;</span></span></span>
<span class="line"></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>beans</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Architecture - CQRS架构</title>
      <link>https://blog.magictable.ha.cn/software/Architecture-CQRS%E6%9E%B6%E6%9E%84.html</link>
      <guid>https://blog.magictable.ha.cn/software/Architecture-CQRS%E6%9E%B6%E6%9E%84.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Architecture - CQRS架构</source>
      <description>文章摘要： CQRS（Command Query Responsibility Segregation）软件架构，将数据的写操作（命令）和读操作（查询）分离。 简介 简要说明 CQRS（Command Query Responsibility Segregation）软件架构。 将数据的写操作（命令）和读操作（查询）分离。 命令端负责处理所有的写操作，...</description>
      <category>软件程序/软件架构</category>
      <pubDate>Mon, 02 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> CQRS（Command Query Responsibility Segregation）软件架构，将数据的写操作（命令）和读操作（查询）分离。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>CQRS（Command Query Responsibility Segregation）软件架构。</li>
<li>将数据的写操作（命令）和读操作（查询）分离。</li>
<li>命令端负责处理所有的写操作，而查询端负责处理所有的读操作。</li>
<li>这种分离允许系统针对不同的操作类型进行优化，提高性能和可伸缩性。</li>
</ul>
<p>主要功能</p>
<p><strong>命令端（写模型）</strong></p>
<ul>
<li>处理创建、更新和删除数据的命令。</li>
<li>通常与域模型紧密耦合，实现复杂的业务逻辑。</li>
</ul>
<p><strong>查询端（读模型）</strong></p>
<ul>
<li>处理数据的查询请求。</li>
<li>可以有独立的数据库或数据存储，专门为查询优化。</li>
</ul>
<p><strong>数据同步</strong></p>
<ul>
<li>确保命令端的数据变更能够及时反映到查询端。</li>
<li>可以通过事件驱动、数据库复制或其他机制实现。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>数据一致性</strong>：需要确保命令端和查询端的数据最终一致，尤其是在高并发环境下。</li>
<li><strong>复杂性</strong>：CQRS增加了系统的复杂性，需要更多的设计和维护工作。</li>
<li><strong>同步延迟</strong>：查询端的数据可能会有延迟，需要考虑如何在系统中处理这种延迟。</li>
<li><strong>技术栈差异</strong>：命令端和查询端可能使用不同的技术栈和数据库，需要管理和维护两个不同的系统。</li>
<li><strong>事件处理</strong>：CQRS通常与事件溯源结合使用，需要妥善处理事件的生产、存储和消费。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>读写操作差异明显的系统</strong>：当系统的读操作和写操作在频率、性能要求或业务逻辑上有显著差异时。</li>
<li><strong>高并发系统</strong>：在需要处理大量并发读操作的系统，通过分离读写操作可以提高性能。</li>
<li><strong>复杂的业务逻辑</strong>：当业务逻辑复杂，且频繁变更时，CQRS可以帮助分离关注点，简化维护。</li>
<li><strong>微服务架构</strong>：在微服务架构中，不同的服务可以根据需要采用CQRS模式，以优化性能和可伸缩性。</li>
<li><strong>需要实时查询优化的系统</strong>：例如，需要为用户界面提供快速响应的复杂查询。</li>
</ul>
<h2>技术架构图</h2>
<blockquote>
<p></p>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Architecture - 事件溯源架构</title>
      <link>https://blog.magictable.ha.cn/software/Architecture-%E4%BA%8B%E4%BB%B6%E6%BA%AF%E6%BA%90%E6%9E%B6%E6%9E%84.html</link>
      <guid>https://blog.magictable.ha.cn/software/Architecture-%E4%BA%8B%E4%BB%B6%E6%BA%AF%E6%BA%90%E6%9E%B6%E6%9E%84.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Architecture - 事件溯源架构</source>
      <description>文章摘要： 事件溯源（Event Sourcing）软件架构，通过记录和存储系统中的所有域事件来构建应用程序的状态。 简介 简要说明 事件溯源（Event Sourcing）软件架构。 将应用程序的状态变化作为一系列事件来记录。 这些事件被永久存储在事件存储（Event Store）中，应用程序的状态可以通过重放这些事件来重建。 每个事件代表了一个域操...</description>
      <category>软件程序/软件架构</category>
      <pubDate>Mon, 02 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 事件溯源（Event Sourcing）软件架构，通过记录和存储系统中的所有域事件来构建应用程序的状态。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>事件溯源（Event Sourcing）软件架构。</li>
<li>将应用程序的状态变化作为一系列事件来记录。</li>
<li>这些事件被永久存储在事件存储（Event Store）中，应用程序的状态可以通过重放这些事件来重建。</li>
<li>每个事件代表了一个域操作，它们按照时间顺序排列，形成了系统的完整历史。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>事件记录</strong>：记录所有对系统状态产生影响的域事件。</li>
<li><strong>状态重建</strong>：通过重放事件来重建系统的当前状态或历史状态。</li>
<li><strong>数据一致性</strong>：确保事件存储中的事件序列是原子性和一致性的，以支持精确的状态重建。</li>
<li><strong>审计和监控</strong>：事件存储可以作为审计日志，用于监控和调试系统行为。</li>
<li><strong>时间旅行</strong>：允许查询系统在任何时间点的状态。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>事件格式</strong>：设计事件格式时要考虑可读性和可序列化性，以便于长期存储和重放。</li>
<li><strong>数据持久性</strong>：确保事件存储的持久性和可靠性，防止数据丢失。</li>
<li><strong>性能考量</strong>：事件溯源可能涉及大量的事件重放，需要优化性能以支持快速的状态重建。</li>
<li><strong>事件回溯</strong>：需要考虑如何处理错误事件和进行事件回溯。</li>
<li><strong>系统复杂性</strong>：事件溯源架构可能会增加系统的复杂性，需要充分的设计和测试。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>需要完整审计跟踪的系统</strong>：如金融系统、法律系统等，需要对所有状态变化进行记录和审计。</li>
<li><strong>复杂业务逻辑的系统</strong>：在业务逻辑复杂且经常变化的系统中，事件溯源可以帮助管理和适应这些变化。</li>
<li><strong>需要高度可伸缩性的系统</strong>：事件溯源支持无状态的服务，便于水平扩展。</li>
<li><strong>微服务架构</strong>：在微服务架构中，事件溯源可以作为服务间通信和数据一致性的机制。</li>
<li><strong>实时分析系统</strong>：可以实时分析事件流，用于决策支持或业务智能。</li>
</ul>
<h2>技术架构图</h2>
<blockquote>
<p></p>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Architecture - 事件驱动架构</title>
      <link>https://blog.magictable.ha.cn/software/Architecture-%E4%BA%8B%E4%BB%B6%E9%A9%B1%E5%8A%A8%E6%9E%B6%E6%9E%84.html</link>
      <guid>https://blog.magictable.ha.cn/software/Architecture-%E4%BA%8B%E4%BB%B6%E9%A9%B1%E5%8A%A8%E6%9E%B6%E6%9E%84.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Architecture - 事件驱动架构</source>
      <description>文章摘要： 事件驱动（Event-Driven，EDA）软件架构，事件通常是状态变化的通知，系统组件通过异步交换事件来相互通信，而不是直接调用彼此。 简介 简要说明 事件驱动（Event-Driven，EDA）软件架构。 促进了生成、检测、消费和处理事件的应用程序和系统之间的解耦。 事件通常是状态变化的通知，系统组件通过异步交换事件来相互通信，而不是直...</description>
      <category>软件程序/软件架构</category>
      <pubDate>Mon, 02 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 事件驱动（Event-Driven，EDA）软件架构，事件通常是状态变化的通知，系统组件通过异步交换事件来相互通信，而不是直接调用彼此。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>事件驱动（Event-Driven，EDA）软件架构。</li>
<li>促进了生成、检测、消费和处理事件的应用程序和系统之间的解耦。</li>
<li>事件通常是状态变化的通知，系统组件通过异步交换事件来相互通信，而不是直接调用彼此。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>事件生成</strong>：系统组件或外部系统生成事件来表示状态变化或业务活动。</li>
<li><strong>事件路由</strong>：事件从生成者传递到感兴趣的消费者，通常通过消息队列或事件总线。</li>
<li><strong>事件处理</strong>：消费者接收到事件后，执行相应的业务逻辑。</li>
<li><strong>事件存储</strong>：事件可以被存储起来，用于审计、追踪或后续的分析。</li>
<li><strong>事件调度</strong>：可以调度事件以在特定时间点执行或重新执行。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>事件一致性</strong>：确保事件的一致性和可靠性，尤其是在分布式系统中。</li>
<li><strong>事件格式</strong>：定义清晰的事件格式和 schema，以便消费者能够正确解析和处理事件。</li>
<li><strong>事件流管理</strong>：管理事件流，确保事件能够正确传递，避免丢失或重复。</li>
<li><strong>系统解耦</strong>：设计时要注意保持系统的解耦，避免事件消费者直接依赖事件生产者。</li>
<li><strong>异常处理</strong>：设计健壮的异常处理机制，以处理事件处理失败的情况。</li>
<li><strong>性能和可伸缩性</strong>：考虑系统的性能和可伸缩性，确保能够处理高并发的事件流。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>实时数据处理</strong>：适用于需要实时处理数据的应用，如实时分析、监控和决策支持系统。</li>
<li><strong>微服务架构</strong>：在微服务架构中，服务之间通过事件进行通信，以实现解耦和自治。</li>
<li><strong>物联网（IoT）</strong>：在 IoT 应用中，设备状态的变化通常通过事件来通知系统。</li>
<li><strong>用户交互系统</strong>：在需要响应用户操作的系统，如电子商务平台，事件可以用来触发订单处理、库存更新等。</li>
<li><strong>复杂业务流程</strong>：适用于需要处理复杂业务流程和状态管理的系统，如金融服务、供应链管理。</li>
</ul>
<h2>技术架构图</h2>
<blockquote>
<p></p>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Architecture - 客户端&amp;服务器架构</title>
      <link>https://blog.magictable.ha.cn/software/Architecture-%E5%AE%A2%E6%88%B7%E7%AB%AF_%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%9E%B6%E6%9E%84.html</link>
      <guid>https://blog.magictable.ha.cn/software/Architecture-%E5%AE%A2%E6%88%B7%E7%AB%AF_%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%9E%B6%E6%9E%84.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Architecture - 客户端&amp;服务器架构</source>
      <description>文章摘要： 客户端&amp;服务器（Client/Server Architecture）软件架构，定义了客户端和服务器之间的交互方式。 简介 简要说明 客户端&amp;服务器（Client/Server Architecture）软件架构。 定义了客户端和服务器之间的交互方式。 客户端：通常是一个请求服务的软件应用程序，它发送请求给服务器并接收响应。 服务器：是一个...</description>
      <category>软件程序/软件架构</category>
      <pubDate>Mon, 02 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 客户端&amp;服务器（Client/Server Architecture）软件架构，定义了客户端和服务器之间的交互方式。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>客户端&amp;服务器（Client/Server Architecture）软件架构。</li>
<li>定义了客户端和服务器之间的交互方式。</li>
<li><strong>客户端</strong>：通常是一个请求服务的软件应用程序，它发送请求给服务器并接收响应。</li>
<li><strong>服务器</strong>：是一个提供服务的系统或应用程序，它监听并响应来自客户端的请求。</li>
</ul>
<p>在这种架构中，服务器通常拥有固定的网络地址和端口，而客户端则可以动态地连接到服务器。</p>
<p>主要功能</p>
<ul>
<li><strong>资源集中管理</strong>：服务器集中管理资源，如数据存储、计算能力等。</li>
<li><strong>服务提供</strong>：服务器提供各种服务，如数据存储、文件服务、邮件服务等。</li>
<li><strong>请求响应</strong>：客户端发送请求，服务器处理请求并返回响应。</li>
<li><strong>可扩展性</strong>：可以通过增加服务器资源来扩展服务能力，以应对更多的客户端请求。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>服务器可靠性</strong>：服务器必须是可靠和可用的，因为它是服务的中心点。</li>
<li><strong>网络延迟</strong>：客户端和服务器之间的网络延迟会影响用户体验。</li>
<li><strong>安全性</strong>：服务器需要实施适当的安全措施来保护数据和防止未授权访问。</li>
<li><strong>负载均衡</strong>：在高负载情况下，需要实现负载均衡来分配请求，避免服务器过载。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>分布式系统</strong>：适用于需要在不同地理位置分布多个客户端的系统。</li>
<li><strong>多用户应用</strong>：如Web服务、电子邮件服务、数据库服务等，适用于多个用户同时访问。</li>
<li><strong>需要中央管理的资源</strong>：当资源需要集中管理和维护时，如企业内部的数据中心。</li>
<li><strong>稳定的网络环境</strong>：在客户端和服务器之间有稳定网络连接的环境下更为适用。</li>
</ul>
<h2>技术架构图</h2>
<blockquote>
<p></p>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Architecture - 对等网络架构</title>
      <link>https://blog.magictable.ha.cn/software/Architecture-%E5%AF%B9%E7%AD%89%E7%BD%91%E7%BB%9C%E6%9E%B6%E6%9E%84.html</link>
      <guid>https://blog.magictable.ha.cn/software/Architecture-%E5%AF%B9%E7%AD%89%E7%BD%91%E7%BB%9C%E6%9E%B6%E6%9E%84.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Architecture - 对等网络架构</source>
      <description>文章摘要： 对等网络（Peer-to-Peer, P2P）软件架构，所有节点的地位平等，没有固定的服务器和客户端角色，每个节点既可以是服务的提供者，也可以是服务的消费者，节点之间直接进行通信和数据交换。 简介 简要说明 对等网络（Peer-to-Peer, P2P）软件架构。 所有节点的地位平等，没有固定的服务器和客户端角色。 每个节点既可以是服务的提...</description>
      <category>软件程序/软件架构</category>
      <pubDate>Mon, 02 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 对等网络（Peer-to-Peer, P2P）软件架构，所有节点的地位平等，没有固定的服务器和客户端角色，每个节点既可以是服务的提供者，也可以是服务的消费者，节点之间直接进行通信和数据交换。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>对等网络（Peer-to-Peer, P2P）软件架构。</li>
<li>所有节点的地位平等，没有固定的服务器和客户端角色。</li>
<li>每个节点既可以是服务的提供者，也可以是服务的消费者，节点之间直接进行通信和数据交换。</li>
<li>网络中的节点既作为客户端又作为服务器，实现去中心化的通信和数据共享。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>资源共享</strong>：节点之间可以直接共享文件、计算资源、存储空间等。</li>
<li><strong>去中心化</strong>：网络中没有中央控制节点，所有节点都是对等的，提高了系统的鲁棒性。</li>
<li><strong>负载均衡</strong>：由于资源分布在所有节点上，因此可以有效地分散网络负载。</li>
<li><strong>自组织</strong>：网络能够自动适应节点的加入和离开，动态调整网络结构。</li>
<li><strong>内容分发</strong>：高效地分发大量数据，特别是在流媒体和文件共享应用中。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>安全性</strong>：对等网络容易受到恶意节点的攻击，需要实现有效的安全机制来保护数据安全。</li>
<li><strong>网络带宽</strong>：对等网络可能会消耗大量网络带宽，需要合理设计网络协议以减少带宽占用。</li>
<li><strong>节点匿名性</strong>：对等网络可能被用于匿名通信，需要考虑法律法规和隐私保护的问题。</li>
<li><strong>资源发现</strong>：在大型对等网络中，有效发现和定位资源是一个挑战。</li>
<li><strong>网络规模</strong>：对等网络的性能和可扩展性可能会随着网络规模的增大而下降。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>文件共享</strong>：如BitTorrent等P2P文件共享网络，适合大文件的高效分发。</li>
<li><strong>流媒体传输</strong>：对等网络可以用于直播和点播流媒体内容的分发，降低服务器负载。</li>
<li><strong>分布式计算</strong>：如SETI@home等科学计算项目，可以利用对等网络聚合空闲的计算资源。</li>
<li><strong>去中心化应用</strong>：如区块链技术，利用对等网络构建去中心化的信任体系。</li>
<li><strong>即时通讯</strong>：对等网络可以用于构建去中心化的即时通讯系统，提高通信的隐私性和抗审查性。</li>
</ul>
<h2>技术框架图</h2>
<blockquote>
<p></p>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Architecture - 微内核架构</title>
      <link>https://blog.magictable.ha.cn/software/Architecture-%E5%BE%AE%E5%86%85%E6%A0%B8%E6%9E%B6%E6%9E%84.html</link>
      <guid>https://blog.magictable.ha.cn/software/Architecture-%E5%BE%AE%E5%86%85%E6%A0%B8%E6%9E%B6%E6%9E%84.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Architecture - 微内核架构</source>
      <description>文章摘要： 微内核（Microkernel）软件架构，也称插件架构，将系统的主要功能划分为一系列独立的、可替换的模块，这些模块通常称为插件。 简介 简要说明 微内核（Microkernel）软件架构，也称插件架构。 将系统的核心功能（如进程管理、内存管理等）最小化，并将其他非核心功能（如文件系统、网络协议等）作为插件来实现。 主要功能 核心服务：微内核...</description>
      <category>软件程序/软件架构</category>
      <pubDate>Mon, 02 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 微内核（Microkernel）软件架构，也称插件架构，将系统的主要功能划分为一系列独立的、可替换的模块，这些模块通常称为插件。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>微内核（Microkernel）软件架构，也称插件架构。</li>
<li>将系统的核心功能（如进程管理、内存管理等）最小化，并将其他非核心功能（如文件系统、网络协议等）作为插件来实现。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>核心服务</strong>：微内核提供最基本的服务，如线程管理、消息传递、内存管理等。</li>
<li><strong>插件管理</strong>：微内核负责加载、卸载和管理插件。</li>
<li><strong>通信机制</strong>：微内核提供插件之间的通信机制，通常是消息传递。</li>
<li><strong>安全性</strong>：微内核可以限制插件的权限，提高系统的安全性。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>插件接口设计</strong>：插件接口需要精心设计，以确保插件之间的兼容性和未来的可扩展性。</li>
<li><strong>性能考虑</strong>：微内核架构可能会因为频繁的插件间通信而引入性能开销。</li>
<li><strong>版本管理</strong>：需要妥善管理插件版本，以避免版本冲突。</li>
<li><strong>错误隔离</strong>：插件的错误应该被隔离，避免影响整个系统的稳定性。</li>
<li><strong>安全性</strong>：插件的安全性需要得到保证，以防止恶意插件破坏系统。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>可定制性要求高的系统</strong>：如操作系统、数据库管理系统等，用户可以根据需要添加或删除功能。</li>
<li><strong>需要高度模块化的系统</strong>：微内核架构天然支持模块化，适合需要频繁更新和扩展功能的系统。</li>
<li><strong>长期维护的系统</strong>：由于插件的可替换性，微内核架构有助于长期维护和升级系统。</li>
<li><strong>嵌入式系统</strong>：嵌入式系统往往需要根据不同的应用场景定制功能，微内核架构非常适合这种需求。</li>
<li><strong>分布式系统</strong>：微内核架构可以用于构建分布式系统，其中不同的服务可以作为插件分布在网络中的不同节点上。</li>
</ul>
<h2>技术架构图</h2>
<blockquote>
<p></p>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Architecture - 无服务架构</title>
      <link>https://blog.magictable.ha.cn/software/Architecture-%E6%97%A0%E6%9C%8D%E5%8A%A1%E6%9E%B6%E6%9E%84.html</link>
      <guid>https://blog.magictable.ha.cn/software/Architecture-%E6%97%A0%E6%9C%8D%E5%8A%A1%E6%9E%B6%E6%9E%84.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Architecture - 无服务架构</source>
      <description>文章摘要： 无服务（Serverless）软件架构，云提供商会自动管理基础设备，让开发者可以专注于编写和部署代码，而不必担心基础架构的运行和维护。 简介 简要说明 无服务（Serverless）软件架构。 云提供商会自动管理基础设备，让开发者可以专注于编写和部署代码，而不必担心基础架构的运行和维护。 无服务架构通常与功能即服务（FaaS）一起使用，其中...</description>
      <category>软件程序/软件架构</category>
      <pubDate>Mon, 02 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 无服务（Serverless）软件架构，云提供商会自动管理基础设备，让开发者可以专注于编写和部署代码，而不必担心基础架构的运行和维护。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>无服务（Serverless）软件架构。</li>
<li>云提供商会自动管理基础设备，让开发者可以专注于编写和部署代码，而不必担心基础架构的运行和维护。</li>
<li>无服务架构通常与功能即服务（FaaS）一起使用，其中代码的执行是由事件触发的。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>自动扩展</strong>：根据需求自动调整资源，无需手动配置。</li>
<li><strong>按需付费</strong>：只为实际执行的代码付费，而不是为预配置的资源付费。</li>
<li><strong>无需管理服务器</strong>：开发者不需要担心服务器的维护、更新和扩展。</li>
<li><strong>快速部署</strong>：可以快速部署新版本的应用或功能，提高迭代速度。</li>
<li><strong>事件驱动</strong>：代码的执行可以由各种事件触发，如HTTP请求、数据库事件、文件上传等。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>供应商锁定</strong>：使用特定云服务商的无服务产品可能会造成供应商锁定，迁移到其他平台可能困难。</li>
<li><strong>性能问题</strong>：冷启动（即服务从无到有的启动时间）可能会影响性能。</li>
<li><strong>监控和调试</strong>：与传统架构相比，监控和调试可能更为复杂。</li>
<li><strong>安全性</strong>：需要确保无服务函数的安全性，避免敏感数据泄露。</li>
<li><strong>限制</strong>：无服务架构可能有一些执行时间、内存使用和并发执行的限制。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>微服务</strong>：适合构建微服务架构，其中每个服务可以独立部署和扩展。</li>
<li><strong>事件驱动的应用</strong>：如物联网（IoT）应用、实时数据处理和分析。</li>
<li><strong>移动后端</strong>：为移动应用提供后端服务，如用户认证、数据同步等。</li>
<li><strong>批处理作业</strong>：处理数据批处理任务，如日志分析、数据转换等。</li>
<li><strong>临时任务</strong>：执行不需要持续运行的任务，如定时任务、一次性计算等。</li>
</ul>
<h2>技术架构图</h2>
<blockquote>
<p></p>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Architecture - 模型&amp;视图&amp;ViewModel架构</title>
      <link>https://blog.magictable.ha.cn/software/Architecture-%E6%A8%A1%E5%9E%8B_%E8%A7%86%E5%9B%BE_ViewModel%E6%9E%B6%E6%9E%84.html</link>
      <guid>https://blog.magictable.ha.cn/software/Architecture-%E6%A8%A1%E5%9E%8B_%E8%A7%86%E5%9B%BE_ViewModel%E6%9E%B6%E6%9E%84.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Architecture - 模型&amp;视图&amp;ViewModel架构</source>
      <description>文章摘要： MVVM（Model-View-ViewModel）软件架构，通过数据绑定和命令绑定将视图逻辑与业务逻辑分离，提高了代码的可测试性和可维护性。 简介 简要说明 MVVM（Model-View-ViewModel）软件架构。 将应用程序分为三个核心部分：模型（Model）、视图（View）和视图模型（ViewModel）。 通过数据绑定和命令...</description>
      <category>软件程序/软件架构</category>
      <pubDate>Mon, 02 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> MVVM（Model-View-ViewModel）软件架构，通过数据绑定和命令绑定将视图逻辑与业务逻辑分离，提高了代码的可测试性和可维护性。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>MVVM（Model-View-ViewModel）软件架构。</li>
<li>将应用程序分为三个核心部分：模型（Model）、视图（View）和视图模型（ViewModel）。</li>
<li>通过数据绑定和命令绑定将视图逻辑与业务逻辑分离，提高了代码的可测试性和可维护性。</li>
</ul>
<p>主要功能</p>
<p><strong>模型（Model）</strong></p>
<ul>
<li>表示应用程序的数据和业务逻辑。</li>
<li>管理数据的持久化和访问。</li>
</ul>
<p><strong>视图（View）</strong></p>
<ul>
<li>定义用户界面和用户交互。</li>
<li>通过数据绑定显示来自 ViewModel 的数据。</li>
<li>触发命令来通知 ViewModel 用户操作。</li>
</ul>
<p><strong>视图模型（ViewModel）</strong></p>
<ul>
<li>作为视图和模型之间的中介。</li>
<li>暴露数据和命令给视图。</li>
<li>处理用户输入和业务逻辑。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>数据绑定</strong>：确保 ViewModel 和 View 之间的数据绑定是双向的，以便自动更新 UI。</li>
<li><strong>命令绑定</strong>：ViewModel 应该提供命令，视图可以通过这些命令触发操作。</li>
<li><strong>可测试性</strong>：ViewModel 应该设计成不依赖于视图，以便可以独立测试。</li>
<li><strong>内存管理</strong>：在 ViewModel 中管理数据上下文和资源，以避免内存泄漏。</li>
<li><strong>界面逻辑分离</strong>：保持视图尽可能简单，所有业务逻辑应该在 ViewModel 中处理。</li>
</ul>
<p>应用场景</p>
<ul>
<li><strong>富客户端应用</strong>：如使用WPF, Silverlight, 或 UWP的桌面应用。</li>
<li><strong>Web应用</strong>：现代JavaScript框架（如Knockout.js, Vue.js）支持MVVM模式。</li>
<li><strong>移动应用</strong>：使用MVVM Light或MVVM Cross的Xamarin.Forms应用。</li>
</ul>
<h2>技术架构图</h2>
<blockquote>
<p></p>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Architecture - 模型&amp;视图&amp;控制器架构</title>
      <link>https://blog.magictable.ha.cn/software/Architecture-%E6%A8%A1%E5%9E%8B_%E8%A7%86%E5%9B%BE_%E6%8E%A7%E5%88%B6%E5%99%A8%E6%9E%B6%E6%9E%84.html</link>
      <guid>https://blog.magictable.ha.cn/software/Architecture-%E6%A8%A1%E5%9E%8B_%E8%A7%86%E5%9B%BE_%E6%8E%A7%E5%88%B6%E5%99%A8%E6%9E%B6%E6%9E%84.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Architecture - 模型&amp;视图&amp;控制器架构</source>
      <description>文章摘要： 模型-视图-控制器（Model-View-Controller，简称MVC）软件架构，允许更干净地管理应用程序的不同方面，提高代码的可维护性和可扩展性。。 简介 简要说明 模型-视图-控制器（Model-View-Controller，简称MVC）软件架构。 用于将应用程序分解为三个相互协作的组件。 允许更干净地管理应用程序的不同方面，提高...</description>
      <category>软件程序/软件架构</category>
      <pubDate>Mon, 02 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 模型-视图-控制器（Model-View-Controller，简称MVC）软件架构，允许更干净地管理应用程序的不同方面，提高代码的可维护性和可扩展性。。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>
<p>模型-视图-控制器（Model-View-Controller，简称MVC）软件架构。</p>
</li>
<li>
<p>用于将应用程序分解为三个相互协作的组件。</p>
</li>
<li>
<p>允许更干净地管理应用程序的不同方面，提高代码的可维护性和可扩展性。</p>
</li>
<li>
<p>将应用程序的逻辑分为三个核心部分：模型（Model）、视图（View）和控制器（Controller）。</p>
</li>
<li>
<p><strong>模型（Model）</strong>：负责管理应用程序的数据、状态和业务逻辑。</p>
</li>
<li>
<p><strong>视图（View）</strong>：负责展示数据（模型）给用户，通常是通过用户界面。</p>
</li>
<li>
<p><strong>控制器（Controller）</strong>：负责接收用户的输入并调用模型和视图来进行相应的更新。</p>
</li>
</ul>
<p>主要功能</p>
<p><strong>模型（Model）</strong></p>
<ul>
<li>管理数据逻辑和业务规则。</li>
<li>对数据进行增删改查操作。</li>
</ul>
<p><strong>视图（View）</strong></p>
<ul>
<li>显示数据给用户。</li>
<li>提供用户交互界面。</li>
</ul>
<p><strong>控制器（Controller）</strong></p>
<ul>
<li>处理用户输入。</li>
<li>调用模型进行数据处理。</li>
<li>选择合适的视图来显示模型数据。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>分离关注点</strong>：确保模型、视图和控制器之间的职责清晰分离，避免相互依赖。</li>
<li><strong>松耦合</strong>：尽量保持组件之间的松耦合，以便于独立开发和测试。</li>
<li><strong>重用性</strong>：设计组件时要考虑重用性，以便在不同的视图和控制器中重用模型。</li>
<li><strong>维护性</strong>：随着应用程序的增长，MVC可以帮助维护代码的结构和组织。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>复杂的应用程序</strong>：适用于具有复杂业务逻辑和用户界面的应用程序。</li>
<li><strong>多视图应用</strong>：当一个数据模型需要多个视图来展示时，MVC特别有用。</li>
<li><strong>Web应用程序</strong>：许多现代Web框架（如Ruby on Rails, Django, ASP.NET MVC）都是基于MVC模式的。</li>
<li><strong>桌面应用程序</strong>：MVC也适用于桌面应用程序，尤其是在用户界面和业务逻辑分离很重要的场合。</li>
</ul>
<h2>技术架构图</h2>
<blockquote>
<p></p>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Architecture - 浏览器&amp;服务器架构</title>
      <link>https://blog.magictable.ha.cn/software/Architecture-%E6%B5%8F%E8%A7%88%E5%99%A8_%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%9E%B6%E6%9E%84.html</link>
      <guid>https://blog.magictable.ha.cn/software/Architecture-%E6%B5%8F%E8%A7%88%E5%99%A8_%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%9E%B6%E6%9E%84.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Architecture - 浏览器&amp;服务器架构</source>
      <description>文章摘要： 浏览器&amp;服务器（Browser-Server）软件架构，通常简称为B/S架构，大部分的业务逻辑和数据处理都在服务器端完成，而浏览器则负责发送请求和显示服务器返回的数据。 简介 简要说明 浏览器&amp;服务器（Browser-Server，B/S）软件架构。 用户通过Web浏览器访问服务器上的应用程序。 大部分的业务逻辑和数据处理都在服务器端完成，...</description>
      <category>软件程序/软件架构</category>
      <pubDate>Mon, 02 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 浏览器&amp;服务器（Browser-Server）软件架构，通常简称为B/S架构，大部分的业务逻辑和数据处理都在服务器端完成，而浏览器则负责发送请求和显示服务器返回的数据。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>浏览器&amp;服务器（Browser-Server，B/S）软件架构。</li>
<li>用户通过Web浏览器访问服务器上的应用程序。</li>
<li>大部分的业务逻辑和数据处理都在服务器端完成，而浏览器则负责发送请求和显示服务器返回的数据。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>用户界面</strong>：浏览器提供用户界面，用户通过浏览器与服务器端的应用程序交互。</li>
<li><strong>数据处理</strong>：服务器端负责处理所有业务逻辑和数据存储。</li>
<li><strong>跨平台兼容性</strong>：由于基于Web标准，B/S架构的应用程序可以在多种设备和操作系统上运行。</li>
<li><strong>集中更新</strong>：应用程序的更新和维护通常在服务器端进行，用户无需手动更新客户端软件。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>用户体验</strong>：需要确保Web界面在不同浏览器和设备上的一致性和可用性。</li>
<li><strong>服务器性能</strong>：服务器端需要处理大量并发请求，因此服务器性能和可扩展性是关键。</li>
<li><strong>安全性</strong>：由于所有数据都通过互联网传输，因此需要采取适当的安全措施，如SSL加密、输入验证等。</li>
<li><strong>网络依赖性</strong>：B/S架构的应用程序高度依赖网络，网络不稳定会影响用户体验。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>企业信息系统</strong>：适用于企业资源规划（ERP）、客户关系管理（CRM）等信息系统。</li>
<li><strong>在线服务</strong>：如电子邮件服务、在线办公、电子商务网站等。</li>
<li><strong>信息发布</strong>：适用于新闻网站、博客、论坛等需要频繁更新和广泛访问的网站。</li>
<li><strong>跨地域协作</strong>：适用于需要在不同地理位置进行数据共享和协作的应用。</li>
</ul>
<h2>技术架构图</h2>
<blockquote>
<p></p>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Architecture - 清洁架构</title>
      <link>https://blog.magictable.ha.cn/software/Architecture-%E6%B8%85%E6%B4%81%E6%9E%B6%E6%9E%84.html</link>
      <guid>https://blog.magictable.ha.cn/software/Architecture-%E6%B8%85%E6%B4%81%E6%9E%B6%E6%9E%84.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Architecture - 清洁架构</source>
      <description>文章摘要： 清洁（Clean Architecture）软件架构，将软件系统的关注点分离成多个层次，每个层次都有其明确的职责。。 简介 简要说明 清洁（Clean Architecture）软件架构。 将软件系统的关注点分离成多个层次，每个层次都有其明确的职责。 层次按照依赖关系从内到外依次为： 实体（Entities）、用例（Use Cases）、接...</description>
      <category>软件程序/软件架构</category>
      <pubDate>Mon, 02 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 清洁（Clean Architecture）软件架构，将软件系统的关注点分离成多个层次，每个层次都有其明确的职责。。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>清洁（Clean Architecture）软件架构。</li>
<li>将软件系统的关注点分离成多个层次，每个层次都有其明确的职责。</li>
</ul>
<p>层次按照依赖关系从内到外依次为：</p>
<ul>
<li>实体（Entities）、用例（Use Cases）、接口适配器（Interface Adapters）、框架和驱动（Frameworks and Drivers）。</li>
</ul>
<p>内层不依赖外层，外层依赖内层，形成一个倒置的依赖关系三角形。</p>
<p>主要功能</p>
<ul>
<li><strong>实体层（Entities）</strong>：包含应用程序的业务逻辑和业务规则，是与应用程序的核心功能直接相关的部分。</li>
<li><strong>用例层（Use Cases）</strong>：包含应用程序的用例，即应用程序的业务逻辑和流程。</li>
<li><strong>接口适配器层（Interface Adapters）</strong>：负责将用例层的输出适配到外部系统，如数据库、UI、外部服务等。</li>
<li><strong>框架和驱动层（Frameworks and Drivers）</strong>：包含所有外部元素，如UI、数据库、框架等。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>依赖原则</strong>：内层不能依赖外层，必须确保依赖关系始终指向架构的核心。</li>
<li><strong>分离关注点</strong>：每个层次应该只关注自己的职责，不应该与其他层次的细节混合。</li>
<li><strong>接口抽象</strong>：使用接口和抽象类来解耦不同层次，使得各层可以独立变化。</li>
<li><strong>测试友好</strong>：清洁架构有助于编写可测试的代码，因为业务逻辑与外部依赖分离。</li>
<li><strong>学习曲线</strong>：清洁架构可能需要开发团队理解和适应新的设计模式，有一定的学习成本。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>大型和复杂的项目</strong>：对于需要长期维护和频繁迭代的大型项目，清洁架构有助于保持代码的可读性和可维护性。</li>
<li><strong>需要高度模块化的系统</strong>：当系统需要高度模块化，以便不同模块可以独立开发和测试时。</li>
<li><strong>多种客户端的应用</strong>：例如，同时支持Web、移动端和桌面端的应用，清洁架构可以帮助统一业务逻辑。</li>
<li><strong>需要快速响应业务变化</strong>：清洁架构使得业务规则的变化不会影响到其他层次的代码，从而可以快速适应业务变化。</li>
<li><strong>微服务架构</strong>：在微服务架构中，每个服务都可以采用清洁架构原则，以确保服务的独立性和可替换性。</li>
</ul>
<h2>技术架构图</h2>
<blockquote>
<p></p>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Architecture - 管道&amp;过滤器架构</title>
      <link>https://blog.magictable.ha.cn/software/Architecture-%E7%AE%A1%E9%81%93_%E8%BF%87%E6%BB%A4%E5%99%A8%E6%9E%B6%E6%9E%84.html</link>
      <guid>https://blog.magictable.ha.cn/software/Architecture-%E7%AE%A1%E9%81%93_%E8%BF%87%E6%BB%A4%E5%99%A8%E6%9E%B6%E6%9E%84.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Architecture - 管道&amp;过滤器架构</source>
      <description>文章摘要： 数据通过一系列处理组件（过滤器）流动，这些组件之间通过通道（管道）连接，每个过滤器负责对数据进行某种形式的处理，然后将数据传递到下一个过滤器。 简介 简要说明 管道&amp;过滤器（Pipe-and-Filter）软件架构。 数据通过一系列处理组件（过滤器）流动，这些组件之间通过通道（管道）连接。 每个过滤器负责对数据进行某种形式的处理，然后将数据...</description>
      <category>软件程序/软件架构</category>
      <pubDate>Mon, 02 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 数据通过一系列处理组件（过滤器）流动，这些组件之间通过通道（管道）连接，每个过滤器负责对数据进行某种形式的处理，然后将数据传递到下一个过滤器。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>管道&amp;过滤器（Pipe-and-Filter）软件架构。</li>
<li>数据通过一系列处理组件（过滤器）流动，这些组件之间通过通道（管道）连接。</li>
<li>每个过滤器负责对数据进行某种形式的处理，然后将数据传递到下一个过滤器。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>数据处理</strong>：对输入数据进行处理，如转换、过滤、聚合等。</li>
<li><strong>数据流</strong>：数据从一个过滤器流向另一个过滤器，形成数据处理链。</li>
<li><strong>模块化</strong>：过滤器是独立的模块，可以独立开发和测试。</li>
<li><strong>可扩展性</strong>：可以很容易地添加新的过滤器到现有的管道中，或者重新排列现有的过滤器以适应不同的数据处理需求。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>过滤器设计</strong>：确保每个过滤器具有单一职责，以便于管理和重用。</li>
<li><strong>数据格式</strong>：过滤器之间的数据交换格式需要统一，以确保数据可以在不同的过滤器之间无缝传递。</li>
<li><strong>性能考虑</strong>：管道中的数据处理可能是顺序的，这可能导致性能瓶颈。需要考虑并行处理或异步操作来优化性能。</li>
<li><strong>错误处理</strong>：在设计过滤器时，需要考虑错误处理机制，确保数据在出现错误时能够正确处理。</li>
<li><strong>管道管理</strong>：管理好管道的配置和状态，以便于监控和维护。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>数据处理应用</strong>：适用于需要大量数据处理和转换的应用，如数据分析、日志处理、图像处理等。</li>
<li><strong>ETL任务</strong>：在提取、转换、加载（ETL）过程中，管道&amp;过滤器架构非常适合实现数据的转换和清洗。</li>
<li><strong>命令行工具</strong>：许多命令行工具和脚本采用管道&amp;过滤器模式，如Unix shell中的命令管道。</li>
<li><strong>分布式系统</strong>：在分布式系统中，管道&amp;过滤器可以用来处理跨多个节点的数据流。</li>
<li><strong>集成遗留系统</strong>：可以用来集成不同的遗留系统，通过过滤器来转换和适配不同系统之间的数据格式。</li>
</ul>
<h2>技术框架图</h2>
<blockquote>
<p></p>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Architecture - 组件化架构</title>
      <link>https://blog.magictable.ha.cn/software/Architecture-%E7%BB%84%E4%BB%B6%E5%8C%96%E6%9E%B6%E6%9E%84.html</link>
      <guid>https://blog.magictable.ha.cn/software/Architecture-%E7%BB%84%E4%BB%B6%E5%8C%96%E6%9E%B6%E6%9E%84.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Architecture - 组件化架构</source>
      <description>文章摘要： 将大型软件系统分解为一系列较小的、功能独立的组件，组件可以单独开发、测试和部署，同时能够通过定义良好的接口与其他组件交互。 简介 简要说明 组件化软件架构。 将大型软件系统分解为一系列较小的、功能独立的组件。 组件可以单独开发、测试和部署，同时能够通过定义良好的接口与其他组件交互。 组件化有助于提高系统的可维护性、可扩展性和可重用性。 主要...</description>
      <category>软件程序/软件架构</category>
      <pubDate>Mon, 02 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 将大型软件系统分解为一系列较小的、功能独立的组件，组件可以单独开发、测试和部署，同时能够通过定义良好的接口与其他组件交互。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>组件化软件架构。</li>
<li>将大型软件系统分解为一系列较小的、功能独立的组件。</li>
<li>组件可以单独开发、测试和部署，同时能够通过定义良好的接口与其他组件交互。</li>
<li>组件化有助于提高系统的可维护性、可扩展性和可重用性。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>模块化</strong>：将系统划分为多个模块或组件，每个组件负责一个特定的功能。</li>
<li><strong>独立性</strong>：组件之间高度独立，减少相互依赖，便于单独开发和测试。</li>
<li><strong>重用性</strong>：组件可以在不同的系统和项目中重复使用。</li>
<li><strong>可替换性</strong>：组件可以被其他具有相同接口的组件替换，而不会影响系统的其他部分。</li>
<li><strong>易维护性</strong>：由于组件的独立性，维护和更新变得更加容易。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>接口定义</strong>：需要明确和稳定地定义组件之间的接口，以便组件可以无缝地交互。</li>
<li><strong>组件边界</strong>：合理划分组件的边界，确保每个组件的职责单一，避免过度复杂的组件。</li>
<li><strong>依赖管理</strong>：管理好组件之间的依赖关系，避免循环依赖和过度依赖。</li>
<li><strong>版本控制</strong>：对组件进行版本控制，确保升级或替换组件时不会破坏现有功能。</li>
<li><strong>文档和规范</strong>：提供充分的文档和开发规范，以便开发人员理解和使用组件。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>大型系统开发</strong>：适用于大型和复杂的系统，可以帮助团队分工合作，提高开发效率。</li>
<li><strong>跨团队协作</strong>：在多个团队共同开发的项目中，组件化可以帮助不同团队之间的协作。</li>
<li><strong>产品线开发</strong>：在产品线或平台开发中，组件化可以促进共用组件的共享和重用。</li>
<li><strong>需要高度可扩展的系统</strong>：对于需要频繁添加新功能或扩展现有功能的系统，组件化架构可以提供灵活性。</li>
<li><strong>长期维护的系统</strong>：对于需要长期维护和更新的系统，组件化有助于降低维护成本和风险。</li>
</ul>
<h2>技术架构图</h2>
<blockquote>
<p></p>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Architecture - 面向服务架构</title>
      <link>https://blog.magictable.ha.cn/software/Architecture-%E9%9D%A2%E5%90%91%E6%9C%8D%E5%8A%A1%E6%9E%B6%E6%9E%84.html</link>
      <guid>https://blog.magictable.ha.cn/software/Architecture-%E9%9D%A2%E5%90%91%E6%9C%8D%E5%8A%A1%E6%9E%B6%E6%9E%84.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Architecture - 面向服务架构</source>
      <description>文章摘要： 面向服务（Service-Oriented，SOA）软件架构，将软件应用作为一系列互相独立、可重用的服务进行构建。 简介 简要说明 面向服务（Service-Oriented，SOA）软件架构。 将软件应用作为一系列互相独立、可重用的服务进行构建。 围绕其他应用提供的应用服务。 提供上层服务。 服务通常通过网络进行通信，协同工作以提供更复杂...</description>
      <category>软件程序/软件架构</category>
      <pubDate>Mon, 02 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 面向服务（Service-Oriented，SOA）软件架构，将软件应用作为一系列互相独立、可重用的服务进行构建。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>面向服务（Service-Oriented，SOA）软件架构。</li>
<li>将软件应用作为一系列互相独立、可重用的服务进行构建。</li>
<li>围绕其他应用提供的应用服务。</li>
<li>提供上层服务。</li>
<li>服务通常通过网络进行通信，协同工作以提供更复杂的功能。</li>
<li>SOA 旨在通过服务之间的松散耦合来提高系统的灵活性、可维护性和可扩展性。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>服务重用</strong>：服务设计为可重用组件，可以在不同的应用程序和业务流程中重复使用。</li>
<li><strong>服务互操作性</strong>：服务能够通过标准化的通信协议和数据格式在不同的技术和平台之间进行交互。</li>
<li><strong>服务松耦合</strong>：服务之间的依赖性最小化，使得单个服务的变更不会影响到其他服务。</li>
<li><strong>服务自治</strong>：服务是独立的实体，拥有自己的业务逻辑和数据，可以独立部署和升级。</li>
<li><strong>服务抽象</strong>：服务的内部实现细节对外部隐藏，仅暴露服务接口。</li>
<li><strong>服务组合</strong>：可以通过组合多个服务来创建新的业务流程或应用程序。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>服务粒度</strong>：确定服务的粒度是关键，服务太大或太小都可能带来问题。</li>
<li><strong>服务标准化</strong>：需要定义和遵守一系列标准，包括通信协议、数据格式和接口设计。</li>
<li><strong>服务治理</strong>：建立有效的服务治理策略，以管理服务的生命周期，包括开发、部署、监控和版本控制。</li>
<li><strong>安全性</strong>：确保服务之间的通信是安全的，包括身份验证、授权和数据加密。</li>
<li><strong>性能和可伸缩性</strong>：设计服务时需要考虑性能和可伸缩性，以支持高并发和大量数据。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>大型企业应用集成</strong>：适用于需要集成多个不同系统的大型企业环境。</li>
<li><strong>分布式系统</strong>：适用于需要跨网络、跨平台和跨组织边界工作的系统。</li>
<li><strong>业务流程管理</strong>：适用于需要灵活调整和优化业务流程的应用。</li>
<li><strong>云计算和微服务</strong>：SOA 的原则和概念是现代云计算和微服务架构的基础。</li>
<li><strong>系统升级和扩展</strong>：适用于需要在不中断整个系统的情况下进行升级和扩展的场景。</li>
</ul>
<h2>技术架构图</h2>
<blockquote>
<p></p>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Architecture - 黑板架构</title>
      <link>https://blog.magictable.ha.cn/software/Architecture-%E9%BB%91%E6%9D%BF%E6%9E%B6%E6%9E%84.html</link>
      <guid>https://blog.magictable.ha.cn/software/Architecture-%E9%BB%91%E6%9D%BF%E6%9E%B6%E6%9E%84.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Architecture - 黑板架构</source>
      <description>文章摘要： 黑板（Blackboard）软件架构是一种以数据为中心。 简介 简要说明 黑板（Blackboard）软件架构。 以数据为中心的软件架构。 包含一个中央数据存储（黑板），多个独立的知识源（知识源）和一个控制组件（控制器）。 知识源生成候选解决方案，并将其推送到黑板上，控制器则根据黑板上的数据来协调知识源之间的交互。 主要功能 数据共享：黑板...</description>
      <category>软件程序/软件架构</category>
      <pubDate>Mon, 02 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 黑板（Blackboard）软件架构是一种以数据为中心。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>黑板（Blackboard）软件架构。</li>
<li>以数据为中心的软件架构。</li>
<li>包含一个中央数据存储（黑板），多个独立的知识源（知识源）和一个控制组件（控制器）。</li>
<li>知识源生成候选解决方案，并将其推送到黑板上，控制器则根据黑板上的数据来协调知识源之间的交互。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>数据共享</strong>：黑板作为中央数据存储，允许不同的知识源共享和访问数据。</li>
<li><strong>问题求解</strong>：通过多个知识源的协作，逐步构建问题的解决方案。</li>
<li><strong>知识源独立性</strong>：每个知识源可以独立开发和更新，不需要与其他知识源紧密耦合。</li>
<li><strong>动态数据管理</strong>：黑板上的数据可以根据求解过程中的需要动态地添加、修改或删除。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>数据一致性</strong>：需要确保黑板上的数据一致性和准确性，避免不同知识源之间的数据冲突。</li>
<li><strong>控制逻辑</strong>：控制组件的设计需要能够处理复杂的求解逻辑和知识源之间的协调。</li>
<li><strong>性能优化</strong>：黑板架构可能涉及大量的数据操作，需要注意性能优化，避免成为系统瓶颈。</li>
<li><strong>可扩展性</strong>：设计时需要考虑架构的可扩展性，以便于未来添加新的知识源或修改现有知识源。</li>
<li><strong>知识源管理</strong>：知识源的管理需要清晰，以便于维护和更新。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>复杂问题求解</strong>：适用于需要多个专家知识领域协作的问题，如医疗诊断、故障诊断、信号处理等。</li>
<li><strong>不确定性和不完整性</strong>：适用于问题域中存在不确定性和不完整信息的场景。</li>
<li><strong>多agent系统</strong>：在多agent系统中，黑板架构可以作为一个共享的数据和知识平台。</li>
<li><strong>专家系统</strong>：在构建专家系统时，黑板架构可以模拟专家的推理过程。</li>
<li><strong>决策支持系统</strong>：为决策提供支持，特别是在需要综合多个领域知识的复杂决策场景中。</li>
</ul>
<h2>技术框架图</h2>
<blockquote>
<p></p>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Architecture（软件架构）</title>
      <link>https://blog.magictable.ha.cn/software/Architecture%EF%BC%88%E8%BD%AF%E4%BB%B6%E6%9E%B6%E6%9E%84%EF%BC%89.html</link>
      <guid>https://blog.magictable.ha.cn/software/Architecture%EF%BC%88%E8%BD%AF%E4%BB%B6%E6%9E%B6%E6%9E%84%EF%BC%89.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Architecture（软件架构）</source>
      <description>文章摘要： 软件架构相关知识总结和内部文章汇总。 简介 简要说明 软件架构是指软件系统的结构，包括其组件、它们之间的关系以及与环境的关系。 软件架构为系统的设计、实现、部署和维护提供了一个蓝图。 注释 一个复杂的项目通常会采用多种架构模式和设计原则，而不是单一的结构。 主要功能 组件划分：将系统分解为多个组件，每个组件负责实现特定的功能。 接口定义：明...</description>
      <category>软件程序/软件架构</category>
      <pubDate>Mon, 02 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 软件架构相关知识总结和内部文章汇总。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>软件架构是指软件系统的结构，包括其组件、它们之间的关系以及与环境的关系。</li>
<li>软件架构为系统的设计、实现、部署和维护提供了一个蓝图。</li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>一个复杂的项目通常会采用多种架构模式和设计原则，而不是单一的结构。</p>
</div>
<p>主要功能</p>
<ul>
<li><strong>组件划分</strong>：将系统分解为多个组件，每个组件负责实现特定的功能。</li>
<li><strong>接口定义</strong>：明确组件之间的交互接口，确保组件间的有效通信。</li>
<li><strong>数据管理</strong>：设计数据存储、访问和传输的方式，保证数据的完整性和安全性。</li>
<li><strong>系统整合</strong>：将不同的组件和子系统整合为一个协同工作的整体。</li>
<li><strong>性能优化</strong>：确保系统在各种负载下都能保持良好的性能。</li>
<li><strong>可伸缩性</strong>：设计能够随着用户数量和数据量增长而扩展的系统。</li>
<li><strong>安全性</strong>：构建系统的安全机制，防止非法访问和数据泄露。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>需求理解</strong>：必须充分理解业务需求，以确保架构设计满足实际需求。</li>
<li><strong>技术选型</strong>：根据项目需求和团队能力，选择合适的技术栈和工具。</li>
<li><strong>灵活性与可维护性</strong>：架构设计应考虑未来的变更，易于维护和升级。</li>
<li><strong>标准化</strong>：遵循行业标准和最佳实践，以提高系统的可靠性和互操作性。</li>
<li><strong>风险评估</strong>：识别潜在的技术和业务风险，并制定相应的应对策略。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>大型软件系统</strong>：需要复杂的组件和子系统协同工作的系统。</li>
<li><strong>企业级应用</strong>：需要处理大量数据和用户请求的应用。</li>
<li><strong>分布式系统</strong>：跨多个服务器和网络环境部署的系统。</li>
<li><strong>互联网服务</strong>：面向大量用户的在线服务，如电子商务、社交媒体等。</li>
<li><strong>移动应用</strong>：需要后端服务和数据库支持的移动应用程序。</li>
<li><strong>嵌入式系统</strong>：资源受限，对性能和可靠性有严格要求的系统。</li>
</ul>
<h2>基础知识</h2>
<h2>客户端-服务器架构（C/S）</h2>
<ul>
<li><strong>英文</strong>：Server/Client（C/S）Architecture</li>
<li><strong>简要说明</strong>：C/S架构因其结构简单、易于管理和扩展，被广泛应用于各种网络应用和服务中。</li>
<li><strong>主要特点</strong>：客户端发送请求，服务器响应请求。</li>
<li><strong>注意事项</strong>：不适用于需要高度分布式处理或对网络依赖较低的环境中。</li>
<li><strong>适用场景</strong>：需要稳定服务器和多个客户端的场景。</li>
</ul>
<p>详细总结：<a href="/software/Architecture-%E5%AE%A2%E6%88%B7%E7%AB%AF&amp;%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%9E%B6%E6%9E%84.html" target="_blank">客户端&amp;服务器架构</a></p>
<h2>浏览器-服务器架构（B/S）</h2>
<ul>
<li><strong>英文</strong>：Browser/Server（B/S）Architecture</li>
<li><strong>简要说明</strong>：B/S架构因其易于访问、维护和管理，以及良好的跨平台特性，在现代Web应用中得到了广泛的应用。</li>
<li>不适合需要高性能图形用户界面或离线工作的场景。</li>
<li><strong>主要特点</strong>：通过Web浏览器访问服务器端应用程序。</li>
<li><strong>注意事项</strong>：</li>
<li><strong>适用场景</strong>：Web应用和服务。</li>
</ul>
<p>详细总结：<a href="/software/Architecture-%E6%B5%8F%E8%A7%88%E5%99%A8&amp;%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%9E%B6%E6%9E%84.html" target="_blank">浏览器&amp;服务器架构</a></p>
<h2>事件驱动架构（EDA）</h2>
<ul>
<li><strong>英文</strong>：Event Driven Architecture（EDA）</li>
<li><strong>简要说明</strong>：事件驱动架构特别适用于那些需要高度响应性和灵活性的系统，以及在组件之间需要松耦合的应用场景。</li>
<li><strong>主要特点</strong>：组件之间通过事件进行通信。</li>
<li><strong>注意事项</strong>：</li>
<li><strong>适用场景</strong>：需要高度响应性和组件松耦合的场景。</li>
</ul>
<p>详细总结：<a href="/software/Architecture-%E4%BA%8B%E4%BB%B6%E9%A9%B1%E5%8A%A8%E6%9E%B6%E6%9E%84.html" target="_blank">事件驱动架构</a></p>
<h2>面向服务架构（SOA）</h2>
<ul>
<li><strong>英文</strong>：Service-Oriented Architecture（SOA）</li>
<li>又称：服务导向架构</li>
<li><strong>简要说明</strong>：SOA 适用于那些需要高度灵活性和可扩展性的企业级应用，尤其是在需要整合现有系统、支持业务流程变化以及实现跨组织协作的情况下。强调的是服务的集成和互操作性，通常会有一个服务总线（Service Bus）来协调服务之间的通信。围绕其他应用提供的应用服务。提供上层服务。</li>
<li><strong>主要特点</strong>：服务作为基本构建块，通过服务总线进行集成。</li>
<li><strong>注意事项</strong>：</li>
<li><strong>适用场景</strong>：大型企业应用，需要系统整合和互操作性。</li>
</ul>
<p>详细总结：<a href="/software/Architecture-%E9%9D%A2%E5%90%91%E6%9C%8D%E5%8A%A1%E6%9E%B6%E6%9E%84.html" target="_blank">面向服务架构</a></p>
<h2>单体架构</h2>
<ul>
<li><strong>英文</strong>：Monolithic Architecture</li>
<li><strong>简要说明</strong>：单体架构适合于简单、小规模的应用场景，但随着应用的增长和复杂性的增加，需要考虑向微服务架构或其他分布式架构迁移。</li>
<li><strong>主要特点</strong>：所有功能模块集中在一个单一的代码库中。</li>
<li><strong>注意事项</strong>：</li>
<li><strong>适用场景</strong>：小型、简单的应用。</li>
</ul>
<p>详细总结：<a href="/software/Architecture-%E5%8D%95%E4%BD%93%E6%9E%B6%E6%9E%84.html" target="_blank">单体架构</a></p>
<h2>分层架构</h2>
<ul>
<li><strong>英文</strong>：Layered Architecture</li>
<li><strong>简要说明</strong>：分层软件架构因其结构清晰、易于理解和维护，被广泛应用于各种类型的软件项目中。</li>
<li><strong>主要特点</strong>：系统按照不同的职责划分为多个层次。</li>
<li><strong>注意事项</strong>：</li>
<li><strong>适用场景</strong>：大多数类型的项目，特别是那些需要清晰职责划分的项目。</li>
</ul>
<p>详细总结：<a href="/software/Architecture-%E5%88%86%E5%B1%82%E6%9E%B6%E6%9E%84.html" target="_blank">分层架构</a></p>
<h2>组件化架构</h2>
<ul>
<li><strong>英文</strong>：</li>
<li><strong>简要说明</strong>：应用程序由独立的、可替换的组件构成，提高系统的模块化和可维护性。</li>
<li><strong>主要特点</strong>：系统由独立的、可替换的组件构成。</li>
<li><strong>注意事项</strong>：</li>
<li><strong>适用场景</strong>：- 需要高度模块化和可维护性的系统。</li>
</ul>
<p>详细总结：<a href="/software/Architecture-%E7%BB%84%E4%BB%B6%E5%8C%96%E6%9E%B6%E6%9E%84.html" target="_blank">组件化架构</a></p>
<h2>微内核架构</h2>
<ul>
<li><strong>英文</strong>：Microkernel Architecture</li>
<li><strong>简要说明</strong>：将系统的主要功能划分为一系列独立的、可替换的模块，这些模块通常称为插件。微内核架构关注于如何将系统核心功能与高级功能分离，以实现系统的灵活性和可扩展性。</li>
<li><strong>主要特点</strong>：核心功能简单，大部分功能通过插件实现。</li>
<li><strong>注意事项</strong>：</li>
<li><strong>适用场景</strong>：需要高度可扩展性和灵活性的系统。</li>
</ul>
<p>详细总结：<a href="/software/Architecture-%E5%BE%AE%E5%86%85%E6%A0%B8%E6%9E%B6%E6%9E%84.html" target="_blank">微内核架构</a></p>
<h2>模型-视图-控制器（MVC）</h2>
<ul>
<li><strong>英文</strong>：Model-View-Controller（MVC）</li>
<li><strong>简要说明</strong>：MVC架构因其清晰的结构和良好的组织性，被广泛应用于各种类型的应用程序开发中。有助于提高代码的可读性、可维护性和可扩展性。</li>
<li><strong>主要特点</strong>：分离模型、视图和控制器，以实现业务逻辑和用户界面的分离。</li>
<li><strong>注意事项</strong>：</li>
<li><strong>适用场景</strong>：大多数需要用户界面的应用程序。</li>
</ul>
<p>详细总结：<a href="/software/Architecture-%E6%A8%A1%E5%9E%8B&amp;%E8%A7%86%E5%9B%BE&amp;%E6%8E%A7%E5%88%B6%E5%99%A8%E6%9E%B6%E6%9E%84.html" target="_blank">模型&amp;视图&amp;控制器架构</a></p>
<h2>模型-视图-ViewModel（MVVM）</h2>
<ul>
<li><strong>英文</strong>：Model-View-ViewModel（MVVM）</li>
<li><strong>简要说明</strong>：MVVM 特别适合于那些需要将 UI 逻辑与业务逻辑分离，以及需要高可测试性的应用程序。使得前端开发者可以专注于 UI 设计，而后端开发者可以专注于业务逻辑和数据模型。</li>
<li><strong>主要特点</strong>：进一步抽象MVC，以支持更复杂的用户界面逻辑。</li>
<li><strong>注意事项</strong>：</li>
<li><strong>适用场景</strong>：具有复杂UI逻辑的应用程序。</li>
</ul>
<p>详细总结：<a href="/software/Architecture-%E6%A8%A1%E5%9E%8B&amp;%E8%A7%86%E5%9B%BE&amp;ViewModel%E6%9E%B6%E6%9E%84.html" target="_blank">模型&amp;视图&amp;ViewModel架构</a></p>
<h2>CQRS架构</h2>
<ul>
<li><strong>英文</strong>：Command Query Responsibility Segregation（CQRS） Architecture</li>
<li><strong>简要说明</strong>：将命令（写操作）和查询（读操作）分离，提高系统的性能和可扩展性。</li>
<li><strong>主要特点</strong>：分离命令和查询操作，优化读写性能。</li>
<li><strong>注意事项</strong>：</li>
<li><strong>适用场景</strong>：读写操作差异较大的系统。</li>
</ul>
<p>详细总结：<a href="/software/Architecture-CQRS%E6%9E%B6%E6%9E%84.html" target="_blank">CQRS架构</a></p>
<h2>事件溯源架构</h2>
<ul>
<li><strong>英文</strong>：</li>
<li><strong>简要说明</strong>：通过记录和存储系统中的所有域事件来构建应用程序的状态。系统状态的变化被记录为一系列事件，可以重放事件来重建系统状态。</li>
<li><strong>主要特点</strong>：通过记录事件来跟踪和重建系统状态。</li>
<li><strong>注意事项</strong>：</li>
<li><strong>适用场景</strong>：需要完整审计日志和可追溯性的系统。</li>
</ul>
<p>详细总结：<a href="/software/Architecture-%E4%BA%8B%E4%BB%B6%E6%BA%AF%E6%BA%90%E6%9E%B6%E6%9E%84.html" target="_blank">事件溯源架构</a></p>
<h2>微服务架构</h2>
<ul>
<li><strong>英文</strong>：Microservices Architecture</li>
<li><strong>简要说明</strong>：将应用程序作为一套小服务的集合来构建，每个服务运行在自己的进程中，并且与轻量级机制通信。服务围绕业务功能组织，每个服务都可以独立部署和扩展。围绕开发者提供的功能服务。提供底层服务。</li>
<li><strong>主要特点</strong>：应用程序由多个独立部署和运行的小服务组成。</li>
<li><strong>注意事项</strong>：</li>
<li><strong>适用场景</strong>：大型、复杂的系统，需要快速迭代和部署。</li>
</ul>
<p>详细总结：<a href="/software/Architecture-%E5%BE%AE%E6%9C%8D%E5%8A%A1%E6%9E%B6%E6%9E%84.html" target="_blank">微服务架构</a></p>
<h2>分布式架构</h2>
<ul>
<li><strong>英文</strong>：Distributed Architecture</li>
<li><strong>简要说明</strong>：将请求均匀分配到不同的服务器上，提高系统的可伸缩性和容错性。分布式架构关注于如何在多个网络节点间分配系统组件，以实现高可用性、可扩展性和容错性。</li>
<li><strong>主要特点</strong>：系统组件分布在多个服务器和网络节点上。</li>
<li><strong>注意事项</strong>：</li>
<li><strong>适用场景</strong>：需要高可用性、可伸缩性和负载均衡的系统。</li>
</ul>
<p>详细总结：<a href="/software/Architecture-%E5%88%86%E5%B8%83%E5%BC%8F%E6%9E%B6%E6%9E%84.html" target="_blank">分布式架构</a></p>
<h2>对等网络架构（P2P）</h2>
<ul>
<li><strong>英文</strong>：Peer-to-Peer Architecture（P2P）</li>
<li>又称为：点对点网络架构。</li>
<li><strong>简要说明</strong>：所有节点的地位平等，没有固定的服务器和客户端角色，每个节点既可以是服务的提供者，也可以是服务的消费者，节点之间直接进行通信和数据交换</li>
<li>网络中的节点既作为客户端又作为服务器，实现去中心化的通信和数据共享。</li>
<li><strong>主要特点</strong>：所有节点既是客户端又是服务器，实现去中心化。</li>
<li><strong>注意事项</strong>：</li>
<li><strong>适用场景</strong>：文件共享、分布式计算等场景。</li>
</ul>
<p>详细总结：<a href="/software/Architecture-%E5%AF%B9%E7%AD%89%E7%BD%91%E7%BB%9C%E6%9E%B6%E6%9E%84.html" target="_blank">对等网络架构</a></p>
<h2>无服务架构</h2>
<ul>
<li><strong>英文</strong>：Serverless Architecture</li>
<li><strong>简要说明</strong>：云提供商会自动管理基础设备，让开发者可以专注于编写和部署代码，而不必担心基础架构的运行和维护。</li>
<li><strong>主要特点</strong>：云服务提供商管理所有基础架构，开发者只需关注代码。</li>
<li><strong>注意事项</strong>：</li>
<li><strong>适用场景</strong>：不需要持续运行的服务，关注成本效益和快速开发。</li>
</ul>
<p>详细总结：<a href="/software/Architecture-%E6%97%A0%E6%9C%8D%E5%8A%A1%E6%9E%B6%E6%9E%84.html" target="_blank">无服务架构</a></p>
<h2>管道-过滤器架构</h2>
<ul>
<li><strong>英文</strong>：Bucshmann &amp; Meunier</li>
<li><strong>简要说明</strong>：数据通过一系列处理步骤（过滤器）流动，每个步骤对数据进行处理。这种架构风格非常适合于数据处理和转换任务。</li>
<li><strong>主要特点</strong>：数据通过一系列处理步骤流动。</li>
<li><strong>注意事项</strong>：</li>
<li><strong>适用场景</strong>：数据处理和转换任务。</li>
</ul>
<p>详细总结：<a href="/software/Architecture-%E7%AE%A1%E9%81%93&amp;%E8%BF%87%E6%BB%A4%E5%99%A8%E6%9E%B6%E6%9E%84.html" target="_blank">管道&amp;过滤器架构</a></p>
<h2>黑板架构</h2>
<ul>
<li><strong>英文</strong>：</li>
<li><strong>简要说明</strong>：黑板架构是一种用于解决问题和知识处理的软件架构风格，它模拟了人类专家解决问题时的推理过程。多个知识源（专家）通过共享数据结构（黑板）进行协作，适用于问题解决和决策支持系统。</li>
<li><strong>主要特点</strong>：多个知识源通过共享数据结构协作解决问题。</li>
<li><strong>注意事项</strong>：</li>
<li><strong>适用场景</strong>：问题解决和决策支持系统。</li>
</ul>
<p>详细总结：<a href="/software/Architecture-%E9%BB%91%E6%9D%BF%E6%9E%B6%E6%9E%84.html" target="_blank">黑板架构</a></p>
<h2>清洁架构</h2>
<ul>
<li><strong>英文</strong>：Clean Architecture</li>
<li><strong>简要说明</strong>：强调软件的分层，其中核心业务逻辑与外部关注点（如UI、数据库）分离。</li>
<li><strong>主要特点</strong>：强调软件分层，核心业务逻辑与外部关注点分离。</li>
<li><strong>注意事项</strong>：</li>
<li><strong>适用场景</strong>：需要长期维护和高度模块化的系统。</li>
</ul>
<p>详细总结：<a href="/software/Architecture-%E6%B8%85%E6%B4%81%E6%9E%B6%E6%9E%84.html" target="_blank">清洁架构</a></p>
<h2>主从模式架构</h2>
<h2>六边形</h2>
<h2>菱形架构</h2>
]]></content:encoded>
    </item>
    <item>
      <title>Library - Maven - SwaggerFox</title>
      <link>https://blog.magictable.ha.cn/software/Library-Maven-SwaggerFox.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Maven-SwaggerFox.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Maven - SwaggerFox</source>
      <description>文章摘要： 负责扫描代码提取信息生成API文档。 相关信息 外部相关文章 内部相关文章 RESTful API详细总结： OpenAPI描述规范详细总结： 简介 简要说明 Swagger（现在称为OpenAPI）是一个规范和完整的框架，用于描述、生产、消费和使用RESTful风格的Web服务。 它允许用户设计、构建、记录和使用RESTful API。 ...</description>
      <category>软件程序/代码类库</category>
      <pubDate>Sun, 01 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 负责扫描代码提取信息生成API文档。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li></li>
</ul>
<p>内部相关文章</p>
<ul>
<li>RESTful API详细总结：<a href="/note/Technology-%E9%80%9A%E4%BF%A1-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-API-REST.html" target="_blank">Technology-通信-查询手册-API-REST</a></li>
<li>OpenAPI描述规范详细总结：<a href="/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E8%A7%84%E8%8C%83-swagger%E5%92%8COpenAPI%E6%8F%8F%E8%BF%B0%E8%A7%84%E8%8C%83.html" target="_blank">基础知识-规范-swagger和OpenAPI描述规范</a></li>
</ul>
</div>
<h2>简介</h2>
<p>简要说明</p>
<blockquote>
<ul>
<li>Swagger（现在称为OpenAPI）是一个规范和完整的框架，用于描述、生产、消费和使用RESTful风格的Web服务。</li>
<li>它允许用户设计、构建、记录和使用RESTful API。</li>
<li>Swagger提供了一个强大的平台，通过一系列工具和库，使得API的文档编写、测试和部署变得更加简单和快捷。</li>
</ul>
</blockquote>
<p>主要功能</p>
<blockquote>
<ul>
<li><strong>API文档生成</strong>：自动生成可读性强的API文档，减少手动编写文档的工作量。</li>
<li><strong>API测试</strong>：提供交互式UI，允许开发者在文档中直接测试API。</li>
<li><strong>代码生成</strong>：基于API定义，可以生成服务端和客户端的代码。</li>
<li><strong>规范遵循</strong>：遵循OpenAPI规范，确保API的描述是标准化的。</li>
<li><strong>集成支持</strong>：与多种编程语言和框架集成，如Java、Spring、Node.js等。</li>
<li><strong>版本控制</strong>：支持API的版本控制，便于管理API变更。</li>
</ul>
</blockquote>
<p>注意事项</p>
<blockquote>
<ul>
<li><strong>安全性</strong>：确保敏感信息不被暴露在API文档中，如使用令牌或密钥。</li>
<li><strong>维护性</strong>：随着API的更新，Swagger文件也需要同步更新，以保持文档的准确性。</li>
<li><strong>性能影响</strong>：集成Swagger可能会对应用性能产生一定影响，尤其是在生产环境中。</li>
<li><strong>规范遵循</strong>：必须遵循OpenAPI规范，否则生成的文档可能不准确或无法使用。</li>
<li><strong>版本兼容性</strong>：不同的Swagger版本之间可能存在不兼容的问题，需要特别注意。</li>
</ul>
</blockquote>
<p>适用场景</p>
<blockquote>
<ul>
<li><strong>API开发</strong>：在开发RESTful API时，使用Swagger可以加速文档编写和测试过程。</li>
<li><strong>团队协作</strong>：帮助团队成员理解API功能和用法，提高协作效率。</li>
<li><strong>前后端分离</strong>：在前后端分离的开发模式中，Swagger可以作为沟通的桥梁。</li>
<li><strong>API文档化</strong>：对于需要对外提供API文档的项目，Swagger是一个很好的选择。</li>
<li><strong>API测试</strong>：在开发过程中，使用Swagger进行API的快速测试。</li>
<li><strong>微服务架构</strong>：在微服务架构中，Swagger可以帮助管理和文档化多个服务之间的API。</li>
</ul>
</blockquote>
<h2>Maven坐标</h2>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!--  --&gt;</span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>io.springfox<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>springfox-swagger2<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>2.7.0<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- 请自行查找合适版本 --&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!--  --&gt;</span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>io.springfox<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>springfox-swagger-ui<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>2.7.0<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- 请自行查找合适版本 --&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>Spring使用SPringfox-swagger集成Swagger</h2>
<h2>Springfox通过扫描注解生成API文档</h2>
<h2>Springfox包含方法参数对象注解</h2>
<h2>Swagger2整体注解</h2>
<h3>请求类注解</h3>
<h4><code>@Api</code></h4>
<p>说明</p>
<blockquote>
<ul>
<li>放在<code>@Controller</code>注解标识的类上。</li>
<li>对请求类的说明。</li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li><code>tags</code>：说明该类的作用，参数是一个数组，可以填多个。</li>
<li><code>value</code>：该参数没有什么意义，在UI界面上不显示，所以不用配置。</li>
<li><code>description</code>：用户基本信息操作。</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>请求方法注解</h3>
<h4><code>@ApiOperation</code></h4>
<p>说明</p>
<blockquote>
<ul>
<li>用在<code>@Controller</code>注解标识的类的方法上。</li>
<li>对该方法的说明。</li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h4><code>@ApiImplicitParam</code></h4>
<p>说明</p>
<blockquote>
<ul>
<li>用在<code>@Controller</code>注解标识的类的方法上。</li>
<li>对该方法的请求数据（传入数据）的说明。</li>
</ul>
</blockquote>
<h4><code>@ApiResponse</code></h4>
<p>说明</p>
<blockquote>
<ul>
<li>用在<code>@Controller</code>注解标识的类的方法上。</li>
<li>对该方法的响应数据（返回值）的说明。</li>
</ul>
</blockquote>
<h3>Bean对象类注解</h3>
<h4><code>@ApiModel</code></h4>
<p>说明</p>
<blockquote>
<ul>
<li>用在Bean类上。</li>
<li>对该类的说明。</li>
</ul>
</blockquote>
<h4><code>@ApiModelProperty</code></h4>
<p>说明</p>
<blockquote>
<ul>
<li>用在Bean类的属性上。</li>
<li>对该属性的含义说明。</li>
</ul>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>基础知识 - 规范 - swagger和OpenAPI描述规范</title>
      <link>https://blog.magictable.ha.cn/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E8%A7%84%E8%8C%83-swagger%E5%92%8COpenAPI%E6%8F%8F%E8%BF%B0%E8%A7%84%E8%8C%83.html</link>
      <guid>https://blog.magictable.ha.cn/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E8%A7%84%E8%8C%83-swagger%E5%92%8COpenAPI%E6%8F%8F%E8%BF%B0%E8%A7%84%E8%8C%83.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">基础知识 - 规范 - swagger和OpenAPI描述规范</source>
      <description>文章摘要： 摘要内容。 相关信息 外部相关文章 内部相关文章 RESTful API详细总结： 简介 简要说明 OpenAPI描述规范（OpenAPI Specification，简称OAS）是一个用于描述 RESTful API 的开放标准。 它允许开发人员以与语言无关的方式描述他们的API，这样其他人和计算机都可以理解和使用这些API，无需访问源代...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Sun, 01 Dec 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li></li>
</ul>
<p>内部相关文章</p>
<ul>
<li>RESTful API详细总结：<a href="/note/Technology-%E9%80%9A%E4%BF%A1-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-API-REST.html" target="_blank">RESTful API</a></li>
</ul>
</div>
<h2>简介</h2>
<p>简要说明</p>
<blockquote>
<ul>
<li>OpenAPI描述规范（OpenAPI Specification，简称OAS）是一个用于描述 RESTful API 的开放标准。</li>
<li>它允许开发人员以与语言无关的方式描述他们的API，这样其他人和计算机都可以理解和使用这些API，无需访问源代码或额外的文档。</li>
</ul>
</blockquote>
<p>主要功能</p>
<blockquote>
<ul>
<li><strong>API定义</strong>：提供一种结构化的方式来定义API的各个方面，包括可用的端点、操作、参数、请求和响应格式等。</li>
<li><strong>可读性</strong>：使得API文档易于阅读和理解，无论是开发者还是非开发者。</li>
<li><strong>可维护性</strong>：随着API的发展，规范可以帮助维护和更新API文档。</li>
<li><strong>互操作性</strong>：支持不同工具和服务之间的互操作性，如代码生成器、API测试工具和API文档工具。</li>
<li><strong>版本控制</strong>：允许API提供者通过规范来管理不同版本的API。</li>
</ul>
</blockquote>
<p>注意事项</p>
<blockquote>
<ul>
<li><strong>规范版本</strong>：OpenAPI有不同的版本（如2.0、3.0、3.1等），每个版本都有其特定的规范，需要确保使用正确的版本。</li>
<li><strong>准确性</strong>：确保API描述准确地反映了API的实际行为，避免误导使用者。</li>
<li><strong>安全性</strong>：不要在OpenAPI规范中暴露敏感信息，如API密钥或认证凭证。</li>
<li><strong>复杂性</strong>：对于复杂的API，可能需要花费更多的时间和精力来编写准确的OpenAPI描述。</li>
<li><strong>兼容性</strong>：在升级API或规范版本时，需要注意保持向前和向后的兼容性。</li>
</ul>
</blockquote>
<p>适用场景</p>
<blockquote>
<ul>
<li><strong>API文档化</strong>：任何需要文档化API的场景，OpenAPI规范都是一个理想的工具。</li>
<li><strong>API开发</strong>：在API开发过程中，使用OpenAPI规范可以帮助确保API的设计和实现是一致的。</li>
<li><strong>自动化工具集成</strong>：当需要与自动化工具（如代码生成器、测试框架等）集成时，OpenAPI规范提供了必要的接口描述。</li>
<li><strong>API共享与发布</strong>：当API需要被共享给外部开发者或公开发布时，OpenAPI规范提供了一个标准的描述方式。</li>
<li><strong>微服务架构</strong>：在微服务架构中，OpenAPI规范可以帮助描述和文档化各个服务之间的接口。</li>
<li><strong>API生命周期管理</strong>：OpenAPI规范有助于在API的整个生命周期中管理其设计和版本。</li>
</ul>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Language - JSON - 热门推荐 - 命名规范</title>
      <link>https://blog.magictable.ha.cn/software/Language-JSON-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E5%91%BD%E5%90%8D%E8%A7%84%E8%8C%83.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-JSON-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E5%91%BD%E5%90%8D%E8%A7%84%E8%8C%83.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - JSON - 热门推荐 - 命名规范</source>
      <description>文章摘要： JSON 数据命名规范。 键名：作为对象的成员名，通常使用字符串，且建议使用小驼峰式命名法（camelCase）。 命名规则： 应该有意义，易于理解。 避免使用JavaScript的保留字，如：null、true、false、undefined。 不应该包含特殊字符，通常只使用字母、数字和下划线。 不应该以数字开头。 案例</description>
      <category>软件程序/程序语言</category>
      <pubDate>Sat, 30 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> JSON 数据命名规范。</p>
<!-- more -->
<p><strong>键名</strong>：作为对象的成员名，通常使用字符串，且建议使用<strong>小驼峰式命名法</strong>（camelCase）。</p>
<p><strong>命名规则</strong>：</p>
<ul>
<li>应该有意义，易于理解。</li>
<li>避免使用JavaScript的保留字，如：<code>null</code>、<code>true</code>、<code>false</code>、<code>undefined</code>。</li>
<li>不应该包含特殊字符，通常只使用字母、数字和下划线。</li>
<li>不应该以数字开头。</li>
</ul>
<p>案例</p>
<div class="language-json line-numbers-mode" data-highlighter="prismjs" data-ext="json"><pre><code class="language-json"><span class="line"><span class="token punctuation">{</span></span>
<span class="line">  <span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"张三"</span><span class="token punctuation">,</span></span>
<span class="line">  <span class="token property">"age"</span><span class="token operator">:</span> <span class="token number">30</span><span class="token punctuation">,</span></span>
<span class="line">  <span class="token property">"isStudent"</span><span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span></span>
<span class="line">  <span class="token property">"courses"</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token string">"数学"</span><span class="token punctuation">,</span> <span class="token string">"英语"</span><span class="token punctuation">,</span> <span class="token string">"物理"</span><span class="token punctuation">]</span><span class="token punctuation">,</span></span>
<span class="line">  <span class="token property">"address"</span><span class="token operator">:</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token property">"city"</span><span class="token operator">:</span> <span class="token string">"北京"</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token property">"district"</span><span class="token operator">:</span> <span class="token string">"朝阳区"</span></span>
<span class="line">  <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Language - JSON - 热门推荐 - 数据传输模板</title>
      <link>https://blog.magictable.ha.cn/software/Language-JSON-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E6%95%B0%E6%8D%AE%E4%BC%A0%E8%BE%93%E6%A8%A1%E6%9D%BF.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-JSON-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E6%95%B0%E6%8D%AE%E4%BC%A0%E8%BE%93%E6%A8%A1%E6%9D%BF.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - JSON - 热门推荐 - 数据传输模板</source>
      <description>文章摘要： 整理常见的JSON数据传输时的模板。 表单 常见的表单格式。 登录 说明 案例 注册 说明 案例</description>
      <category>软件程序/程序语言</category>
      <pubDate>Sat, 30 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 整理常见的JSON数据传输时的模板。</p>
<!-- more -->
<h2>表单</h2>
<ul>
<li>常见的表单格式。</li>
</ul>
<h3>登录</h3>
<p>说明</p>
<ul>
<li></li>
</ul>
<p>案例</p>
<div class="language-json line-numbers-mode" data-highlighter="prismjs" data-ext="json"><pre><code class="language-json"><span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"></div></div><h3>注册</h3>
<p>说明</p>
<ul>
<li></li>
</ul>
<p>案例</p>
<div class="language-json line-numbers-mode" data-highlighter="prismjs" data-ext="json"><pre><code class="language-json"><span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Library - Maven - SpringBoot 3 - 场景启动器 - test - 注解</title>
      <link>https://blog.magictable.ha.cn/software/Library-Maven-SpringBoot3-%E5%9C%BA%E6%99%AF%E5%90%AF%E5%8A%A8%E5%99%A8-test-%E6%B3%A8%E8%A7%A3.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Maven-SpringBoot3-%E5%9C%BA%E6%99%AF%E5%90%AF%E5%8A%A8%E5%99%A8-test-%E6%B3%A8%E8%A7%A3.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Maven - SpringBoot 3 - 场景启动器 - test - 注解</source>
      <description>文章摘要： 摘要内容。 @SpringBootTest @AutoConfigureMockMvc</description>
      <category>软件程序/代码类库</category>
      <pubDate>Sat, 30 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2><code>@SpringBootTest</code></h2>
<h2><code>@AutoConfigureMockMvc</code></h2>
]]></content:encoded>
    </item>
    <item>
      <title>Library - Maven - SpringBoot 3 - 场景启动器 - test</title>
      <link>https://blog.magictable.ha.cn/software/Library-Maven-SpringBoot3-%E5%9C%BA%E6%99%AF%E5%90%AF%E5%8A%A8%E5%99%A8-test.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Maven-SpringBoot3-%E5%9C%BA%E6%99%AF%E5%90%AF%E5%8A%A8%E5%99%A8-test.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Maven - SpringBoot 3 - 场景启动器 - test</source>
      <description>文章摘要： 摘要内容。 简介 单元测试启动器。 用于使用 JUnit Jupiter、Hamcrest 和 Mockito 等库测试 Spring Boot 应用程序的 Starter。 Maven坐标 注解 详细总结：</description>
      <category>软件程序/代码类库</category>
      <pubDate>Sat, 30 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li>单元测试启动器。</li>
<li>用于使用 JUnit Jupiter、Hamcrest 和 Mockito 等库测试 Spring Boot 应用程序的 Starter。</li>
</ul>
</blockquote>
<h2>Maven坐标</h2>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.springframework.boot<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>spring-boot-starter-test<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>注解</h2>
<p>详细总结：<a href="/software/Library-Maven-SpringBoot3-%E5%9C%BA%E6%99%AF%E5%90%AF%E5%8A%A8%E5%99%A8-test-%E6%B3%A8%E8%A7%A3.html" target="_blank">Library-Maven-SpringBoot3-场景启动器-test-注解</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Library - Maven - SpringBoot 3 - 场景启动器 - web</title>
      <link>https://blog.magictable.ha.cn/software/Library-Maven-SpringBoot3-%E5%9C%BA%E6%99%AF%E5%90%AF%E5%8A%A8%E5%99%A8-web.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Maven-SpringBoot3-%E5%9C%BA%E6%99%AF%E5%90%AF%E5%8A%A8%E5%99%A8-web.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Maven - SpringBoot 3 - 场景启动器 - web</source>
      <description>文章摘要： 摘要内容。 简介 Web启动器。 使用 Spring MVC 构建 Web（包括 RESTful）应用程序的入门工具。使用 Tomcat 作为默认嵌入式容器。 提供了嵌入的Tomcat以及Spring MVC的依赖。 Maven坐标</description>
      <category>软件程序/代码类库</category>
      <pubDate>Sat, 30 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li>Web启动器。</li>
<li>使用 Spring MVC 构建 Web（包括 RESTful）应用程序的入门工具。使用 Tomcat 作为默认嵌入式容器。</li>
<li>提供了嵌入的Tomcat以及Spring MVC的依赖。</li>
</ul>
</blockquote>
<h2>Maven坐标</h2>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.springframework.boot<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>spring-boot-starter-web<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Library - Maven - SpringBoot 3 - 热门推荐 - 项目单元测试</title>
      <link>https://blog.magictable.ha.cn/software/Library-Maven-SpringBoot3-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E9%A1%B9%E7%9B%AE%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Maven-SpringBoot3-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E9%A1%B9%E7%9B%AE%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Maven - SpringBoot 3 - 热门推荐 - 项目单元测试</source>
      <description>文章摘要： 单元测试。 创建springboot项目 相关文章讲解： 添加spring-boot-test和spring-boot-web场景启动器，实现项目单元测试 在项目中添加相关注解</description>
      <category>软件程序/代码类库</category>
      <pubDate>Sat, 30 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 单元测试。</p>
<!-- more -->
<ol>
<li>创建springboot项目</li>
</ol>
<blockquote>
<ul>
<li>相关文章讲解：<a href=""></a></li>
</ul>
</blockquote>
<ol start="2">
<li>添加<code>spring-boot-test</code>和<code>spring-boot-web</code>场景启动器，实现项目单元测试</li>
</ol>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- 单元测试启动器 --&gt;</span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.springframework.boot<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>spring-boot-starter-test<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- Web开发启动器 --&gt;</span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.springframework.boot<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>spring-boot-starter-web<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ol start="3">
<li>在项目中添加相关注解</li>
</ol>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>junit<span class="token punctuation">.</span>jupiter<span class="token punctuation">.</span>api<span class="token punctuation">.</span></span><span class="token class-name">Test</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>beans<span class="token punctuation">.</span>factory<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span></span><span class="token class-name">Autowired</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>boot<span class="token punctuation">.</span>test<span class="token punctuation">.</span>autoconfigure<span class="token punctuation">.</span>web<span class="token punctuation">.</span>servlet<span class="token punctuation">.</span></span><span class="token class-name">AutoConfigureMockMvc</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>boot<span class="token punctuation">.</span>test<span class="token punctuation">.</span>context<span class="token punctuation">.</span></span><span class="token class-name">SpringBootTest</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>test<span class="token punctuation">.</span>web<span class="token punctuation">.</span>servlet<span class="token punctuation">.</span></span><span class="token class-name">MockMvc</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token annotation punctuation">@SpringBootTest</span></span>
<span class="line"><span class="token annotation punctuation">@AutoConfigureMockMvc</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">MockMvcTests</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token annotation punctuation">@Autowired</span></span>
<span class="line">    <span class="token class-name">MockMvc</span> mockMve<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">	<span class="token annotation punctuation">@Test</span></span>
<span class="line">	<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">testMockMVC</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">		<span class="token comment">// 发起一个模拟请求，不依赖网络，不依赖web服务，不需要启动web应用。</span></span>
<span class="line">		mockMvc<span class="token punctuation">.</span>perform <span class="token punctuation">{</span></span>
<span class="line">			</span>
<span class="line">		<span class="token punctuation">}</span></span>
<span class="line">	<span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Library - Maven - Netty</title>
      <link>https://blog.magictable.ha.cn/software/Library-Maven-Netty.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Maven-Netty.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Maven - Netty</source>
      <description>文章摘要： Netty 是一个异步的、基于事件驱动的网络应用框架，用于快速开发可维护、高性能的网络服务器和客户端。 简介 简要说明 Netty 是一个异步的、基于事件驱动的网络应用框架，用于快速开发可维护、高性能的网络服务器和客户端。 官方文档：https://netty.io/ 主要功能 网络通信：Netty提供了异步事件驱动的网络应用程序框架，支持...</description>
      <category>软件程序/代码类库</category>
      <pubDate>Fri, 29 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Netty 是一个异步的、基于事件驱动的网络应用框架，用于快速开发可维护、高性能的网络服务器和客户端。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<blockquote>
<ul>
<li>Netty 是一个异步的、基于事件驱动的网络应用框架，用于快速开发可维护、高性能的网络服务器和客户端。</li>
<li>官方文档：<a href="https://netty.io/" target="_blank" rel="noopener noreferrer">https://netty.io/</a></li>
</ul>
</blockquote>
<p>主要功能</p>
<blockquote>
<ul>
<li><strong>网络通信</strong>：Netty提供了异步事件驱动的网络应用程序框架，支持TCP、UDP等协议。</li>
<li><strong>高性能处理</strong>：基于Java的NIO实现非阻塞IO，能够高效处理大量并发连接。</li>
<li><strong>数据编解码</strong>：内置多种编解码器，支持自定义编解码逻辑，简化数据处理的复杂性。</li>
<li><strong>安全性</strong>：支持SSL/TLS等加密传输，保障数据安全。</li>
<li><strong>易用性</strong>：提供了丰富的API和组件，简化网络编程的难度。</li>
</ul>
</blockquote>
<p>注意事项</p>
<blockquote>
<ul>
<li><strong>资源管理</strong>：合理配置线程池（EventLoopGroup），避免创建过多线程导致资源浪费。</li>
<li><strong>异常处理</strong>：正确处理网络异常，防止服务器因未捕获的异常而崩溃。</li>
<li><strong>内存泄漏</strong>：注意释放Netty中的ByteBuf等资源，防止内存泄漏。</li>
<li><strong>版本兼容性</strong>：升级Netty版本时，注意API的变化，确保代码兼容性。</li>
</ul>
</blockquote>
<p>适用场景</p>
<blockquote>
<ul>
<li><strong>高并发网络应用</strong>：如即时通讯、游戏服务器、消息队列等。</li>
<li><strong>需要高性能网络处理</strong>：如金融交易系统、大数据处理等。</li>
<li><strong>需要定制协议处理</strong>：Netty灵活的编解码机制适合实现自定义网络协议。</li>
<li><strong>分布式系统</strong>：作为服务间通信的底层框架，支持服务发现、负载均衡等分布式系统组件。</li>
</ul>
</blockquote>
<h2>Maven坐标</h2>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- NIO客户端服务器框架 --&gt;</span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>io.netty<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>netty-all<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>4.1.115.Final<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- 请自行查找合适版本 --&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>图</h2>
<blockquote>
<p><img src="https://netty.io/images/components.png" alt="">
<img src="https://i-blog.csdnimg.cn/direct/ba632ea153314f79a286662fb0afabc0.png" alt=""></p>
</blockquote>
<h2>组件</h2>
<p>EventLoop、Channel、Future、Pipeline、Handler、ByteBuf组件。</p>
]]></content:encoded>
      <enclosure url="https://netty.io/images/components.png" type="image/png"/>
    </item>
    <item>
      <title>Package - MongoDB</title>
      <link>https://blog.magictable.ha.cn/software/Package-MongoDB.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-MongoDB.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - MongoDB</source>
      <description>文章摘要： MongoDB是一种开源的NoSQL数据库，文档型数据库。 简介 简要说明 数据以BSON（Binary JSON）格式存储，这是一种二进制表示形式，允许存储各种数据类型，包括数组和嵌套文档。 主要功能 无模式（Schema-less）：与传统的SQL数据库不同，MongoDB不需要预先定义模式。集合中的文档不需要具有相同的字段，这使得数据...</description>
      <category>软件程序/软件包</category>
      <pubDate>Fri, 29 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> MongoDB是一种开源的NoSQL数据库，文档型数据库。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>数据以BSON（Binary JSON）格式存储，这是一种二进制表示形式，允许存储各种数据类型，包括数组和嵌套文档。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>无模式（Schema-less）</strong>：与传统的SQL数据库不同，MongoDB不需要预先定义模式。集合中的文档不需要具有相同的字段，这使得数据模型非常灵活。</li>
<li><strong>易于扩展</strong>：MongoDB支持水平扩展，可以通过添加更多的服务器来分散数据，从而提高性能和容量。</li>
<li><strong>高性能</strong>：它提供了高性能的数据读写操作，特别适合处理大量数据和高流量的应用。</li>
<li><strong>丰富的查询语言</strong>：MongoDB支持丰富的查询语言，包括数据聚合、文本搜索和地理空间查询。</li>
<li><strong>复制和故障转移</strong>：MongoDB支持主从复制和自动故障转移，确保了数据的高可用性和灾难恢复。</li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>大数据</strong>：由于其高性能和可扩展性，MongoDB适用于处理大量数据的应用程序。</li>
<li><strong>实时应用</strong>：MongoDB的快速读写能力使其适合实时数据处理和即时分析。</li>
<li><strong>内容管理系统</strong>：由于其灵活的数据模型，MongoDB常用于内容管理系统（CMS）。</li>
<li><strong>移动应用</strong>：MongoDB的轻量级和可扩展性使其成为移动应用后端数据库的不错选择。</li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>在设计这些文档模型时，请考虑以下最佳实践：</p>
<ul>
<li><strong>内嵌还是引用</strong>：根据数据的使用模式决定是内嵌相关数据还是通过引用关联。</li>
<li><strong>索引</strong>：为常用的查询字段创建索引，以优化查询性能。</li>
<li><strong>数据一致性</strong>：确保通过适当的验证规则来维护数据的一致性。</li>
<li><strong>扩展性</strong>：考虑到未来的扩展性，设计时留有足够的灵活性。</li>
</ul>
</div>
<h2>安装与卸载</h2>
<p>详细总结：<a href=""></a></p>
<h2>终端命令</h2>
<p>详细总结：<a href=""></a></p>
<h2>配置文件</h2>
<p>详细总结：<a href=""></a></p>
<h2>热门推荐</h2>
<p>详细总结：<a href=""></a></p>
<h2>问题总结</h2>
<p>详细总结：<a href=""></a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - 热门推荐 - 命名规范</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E5%91%BD%E5%90%8D%E8%A7%84%E8%8C%83.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E5%91%BD%E5%90%8D%E8%A7%84%E8%8C%83.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - 热门推荐 - 命名规范</source>
      <description>文章摘要： Java编程语言命名规范。 相关信息 外部相关文章 内部相关文章 代码命名规范： 包名 全部小写：包名中的所有字母都应该是小写的，这是Java语言规范推荐的命名方式。 反向域名：包名通常采用反向域名的方式，这是为了在全球范围内保证包名的唯一性。这是因为域名本身就是唯一的，所以反向使用域名作为包名可以减少命名冲突的可能性。 点分隔：包名中的各...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Thu, 28 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Java编程语言命名规范。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li></li>
</ul>
<p>内部相关文章</p>
<ul>
<li>代码命名规范：<a href="/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E8%A7%84%E8%8C%83-%E9%80%9A%E7%94%A8%E4%BB%A3%E7%A0%81%E5%91%BD%E5%90%8D%E8%A7%84%E8%8C%83.html" target="_blank">基础知识-规范-通用代码命名规范</a></li>
</ul>
</div>
<p>包名</p>
<ul>
<li><strong>全部小写</strong>：包名中的所有字母都应该是小写的，这是Java语言规范推荐的命名方式。</li>
<li><strong>反向域名</strong>：包名通常采用反向域名的方式，这是为了在全球范围内保证包名的唯一性。这是因为域名本身就是唯一的，所以反向使用域名作为包名可以减少命名冲突的可能性。</li>
<li><strong>点分隔</strong>：包名中的各个部分使用点（<code>.</code>）分隔，每个点代表一层域名结构。</li>
<li>例如：<code>com.example.project</code></li>
</ul>
<p>类名</p>
<ul>
<li>大驼峰命名法（CamelCase）。</li>
<li>名字应该是一个名词，表示具体的对象或事物。</li>
<li>例如：<code>ChatAgent</code></li>
</ul>
<p>接口名</p>
<ul>
<li>大驼峰命名法（CamelCase）。</li>
<li>使用形容词、动词、名词来描述接口能够做什么。</li>
<li>例如：<code>ChatAgent</code></li>
</ul>
<p>抽象类名</p>
<ul>
<li>大驼峰命名法（CamelCase）。</li>
<li>在类名前加上<code>Abstract</code>或<code>Base</code>作为前缀。</li>
<li>例如：<code>AbstractChatAgent</code>、<code>BaseChatAgent</code></li>
</ul>
<p>抽象类名-实现</p>
<ul>
<li>大驼峰命名法（CamelCase）。</li>
<li>名字应该是一个名词，表示具体的对象或事物。</li>
<li>例如：<code>ChatAgent</code></li>
</ul>
<p>函数名</p>
<ul>
<li>小驼峰命名法（camelCase）。</li>
<li>通常是一个动词或动词短语，表示该方法执行的操作。</li>
<li>例如：<code>chatAgent</code></li>
</ul>
<p>变量名</p>
<ul>
<li>小驼峰命名法（camelCase）。</li>
<li>名字应该是一个名词，表示变量所存储的值。</li>
<li>例如：<code>chatAgent</code></li>
</ul>
<p>常量名</p>
<ul>
<li>大蛇形命名法（SNAKE_CASE）</li>
<li>例如：<code>CHAT_AGENT</code></li>
</ul>
<p>参数名</p>
<ul>
<li>小驼峰命名法（camelCase）</li>
<li>例如：<code>chatAgent</code></li>
</ul>
<p>注解名</p>
<ul>
<li>大驼峰命名法（CamelCase）。</li>
<li>使用清晰明了的前缀。</li>
<li>例如：<code>@TestAgent</code></li>
</ul>
<p>注释</p>
<ul>
<li>javadoc工具生成API文档的标签属性：<a href="/software/Package-OracleJDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-javadoc.html" target="_blank">Package-OracleJDK-终端命令-javadoc</a></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Library - Maven - SpringBoot 3 - 热门推荐 - 代码运行流程</title>
      <link>https://blog.magictable.ha.cn/software/Library-Maven-SpringBoot3-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E4%BB%A3%E7%A0%81%E8%BF%90%E8%A1%8C%E6%B5%81%E7%A8%8B.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Maven-SpringBoot3-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E4%BB%A3%E7%A0%81%E8%BF%90%E8%A1%8C%E6%B5%81%E7%A8%8B.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Maven - SpringBoot 3 - 热门推荐 - 代码运行流程</source>
      <description>文章摘要： SpringBoot 3 运行流程。</description>
      <category>软件程序/代码类库</category>
      <pubDate>Thu, 28 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> SpringBoot 3 运行流程。</p>
<!-- more -->
]]></content:encoded>
    </item>
    <item>
      <title>Package - Git - 热门推荐 - 分支工作流程模型</title>
      <link>https://blog.magictable.ha.cn/software/Package-Git-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E5%88%86%E6%94%AF%E5%B7%A5%E4%BD%9C%E6%B5%81%E7%A8%8B%E6%A8%A1%E5%9E%8B.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Git-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E5%88%86%E6%94%AF%E5%B7%A5%E4%BD%9C%E6%B5%81%E7%A8%8B%E6%A8%A1%E5%9E%8B.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Git - 热门推荐 - 分支工作流程模型</source>
      <description>文章摘要： 分支工作流程模型推荐方案。 主分支（main）：代表项目的稳定版本，每个提交到主分支（main）的代码都应该是经过测试分支（release）审核过的。 开发分支（develop）：用于日常开发，所有功能分支（feature）、测试分支（release）都应该从开发分支（develop）派生。 功能分支（feature）：用于开发单独的功能或...</description>
      <category>软件程序/软件包</category>
      <pubDate>Thu, 28 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 分支工作流程模型推荐方案。</p>
<!-- more -->
<ul>
<li><strong>主分支（main）</strong>：代表项目的稳定版本，每个提交到<code>主分支（main）</code>的代码都应该是经过<code>测试分支（release）</code>审核过的。</li>
<li><strong>开发分支（develop）</strong>：用于日常开发，所有<code>功能分支（feature）</code>、<code>测试分支（release）</code>都应该从<code>开发分支（develop）</code>派生。</li>
<li><strong>功能分支（feature）</strong>：用于开发单独的功能或特性，每个<code>功能分支（feature）</code>都应该从<code>开发分支（develop）</code>派生，并在开发完成后合并回<code>开发分支（develop）</code>。</li>
<li><strong>测试分支（release）</strong>：用于准备项目发布，<code>测试分支（release）</code>应该从<code>开发分支（develop）</code>派生，并在确认没有错误后合并回<code>主分支（main）</code>和<code>开发分支（develop）</code>。</li>
<li><strong>修补分支（hotfix）</strong>：用于修复<code>主分支（main）</code>上的紧急问题，修补分支应该从<code>主分支（main）</code>派生，并在修复完成后合并回<code>主分支（main）</code>和<code>开发分支（develop）</code>。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Library - Maven - HttpClient5</title>
      <link>https://blog.magictable.ha.cn/software/Library-Maven-HttpClient5.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Maven-HttpClient5.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Maven - HttpClient5</source>
      <description>文章摘要： HttpClient 5 是 Apache HttpComponents 项目中的一个重要组件，用于在 Java 应用程序中发送 HTTP 请求和处理 HTTP 响应。 相关信息 外部相关文章 官方网站：官方文档 内部相关文章 简介 简要说明 Apache HttpClient 5 是一个功能丰富且高度可定制的 HTTP 客户端库，专门用于...</description>
      <category>软件程序/代码类库</category>
      <pubDate>Wed, 27 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> HttpClient 5 是 Apache HttpComponents 项目中的一个重要组件，用于在 Java 应用程序中发送 HTTP 请求和处理 HTTP 响应。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li>官方网站：<a href="https://hc.apache.org/httpcomponents-client-5.4.x/index.html" target="_blank" rel="noopener noreferrer">官方文档</a></li>
</ul>
<p>内部相关文章</p>
<ul>
<li></li>
</ul>
</div>
<h2>简介</h2>
<p>简要说明</p>
<blockquote>
<ul>
<li>Apache HttpClient 5 是一个功能丰富且高度可定制的 HTTP 客户端库，专门用于发送 HTTP 请求、处理 HTTP 响应，并支持各种 HTTP 协议特性。</li>
</ul>
</blockquote>
<p>主要功能</p>
<blockquote>
<ul>
<li><strong>发送 HTTP 请求</strong>：支持 GET、POST、PUT、DELETE 等多种 HTTP 方法。</li>
<li><strong>处理响应</strong>：能够解析 HTTP 响应，提取状态码、响应头和响应体。</li>
<li><strong>连接池管理</strong>：通过连接池管理，提高性能和资源利用率。</li>
<li><strong>认证机制</strong>：支持多种认证方式，如基本认证、摘要认证等。</li>
<li><strong>配置灵活</strong>：提供丰富的配置选项，如超时设置、请求重试策略等。</li>
<li><strong>异步请求</strong>：支持异步执行 HTTP 请求，提高应用程序的响应性。</li>
<li><strong>Cookie 管理</strong>：自动处理 Cookie，支持会话管理。</li>
</ul>
</blockquote>
<p>注意事项</p>
<blockquote>
<ul>
<li><strong>版本兼容性</strong>：升级到新版本时，需要注意 API 变更和兼容性问题。</li>
<li><strong>资源管理</strong>：使用完毕后，应正确关闭 <code>CloseableHttpClient</code> 和其他资源，避免资源泄露。</li>
<li><strong>异常处理</strong>：合理处理可能出现的 IOException 和其他异常。</li>
<li><strong>性能考虑</strong>：合理配置连接池大小、超时时间等，以优化性能。</li>
<li><strong>安全性</strong>：在发送敏感数据时，确保使用 HTTPS 和适当的加密措施。</li>
</ul>
</blockquote>
<p>适用场景</p>
<blockquote>
<ul>
<li><strong>网络爬虫</strong>：用于从网络上抓取数据。</li>
<li><strong>微服务通信</strong>：微服务之间的 HTTP 调用。</li>
<li><strong>API 客户端</strong>：开发第三方 API 的客户端应用程序。</li>
<li><strong>自动化测试</strong>：自动化测试中模拟用户操作，发送 HTTP 请求。</li>
<li><strong>数据集成</strong>：在不同系统间进行数据集成和交换。</li>
</ul>
</blockquote>
<h2>Maven坐标</h2>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- HttpComponents 客户端 --&gt;</span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.apache.httpcomponents.client5<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>httpclient5<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>版本号<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- 请替换为实际的版本号 --&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - 查询手册 - Java SE 21</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-JavaSE21.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-JavaSE21.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - 查询手册 - Java SE 21</source>
      <description>文章摘要： Java是编程语言，跨平台、强类型、多线程、面向对象编程的编程语言。 相关信息 外部相关文章 内部相关文章 Java版本命名规范： 数据结构： 设计模式： 算法设计： 软件架构： 简介 简要说明 主要功能 注意事项 适用场景 同一个文件中的多个类 如果需要用于封装目的,可以在同一源文件中定义多个类 例如在以下示例中: JDK类与非JDK类 ...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Tue, 26 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Java是编程语言，跨平台、强类型、多线程、面向对象编程的编程语言。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li></li>
</ul>
<p>内部相关文章</p>
<ul>
<li>Java版本命名规范：<a href="/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E8%A7%84%E8%8C%83-%E5%9F%BA%E4%BA%8E%E6%97%B6%E9%97%B4%E7%9A%84%E7%89%88%E6%9C%AC%E6%A0%BC%E5%BC%8F%E8%A7%84%E8%8C%83.html" target="_blank">基础知识-规范-基于时间的版本格式规范</a></li>
<li>数据结构：<a href="/software/DataStructure%EF%BC%88%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%EF%BC%89.html" target="_blank">DataStructure（数据结构）</a></li>
<li>设计模式：<a href="/software/DesignPattern%EF%BC%88%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%EF%BC%89.html" target="_blank">DesignPattern（设计模式）</a></li>
<li>算法设计：<a href="/software/Algorithm%EF%BC%88%E7%AE%97%E6%B3%95%E8%AE%BE%E8%AE%A1%EF%BC%89.html" target="_blank">Algorithm（算法设计）</a></li>
<li>软件架构：<a href="/software/Architecture%EF%BC%88%E8%BD%AF%E4%BB%B6%E6%9E%B6%E6%9E%84%EF%BC%89.html" target="_blank">Architecture（软件架构）</a></li>
</ul>
</div>
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2>同一个文件中的多个类</h2>
<ul>
<li>如果需要用于封装目的,可以在同一源文件中定义多个类</li>
</ul>
<p>例如在以下示例中:</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">MultipleClassesInSameFile</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line"> </span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token class-name">GenerateMessage</span><span class="token punctuation">.</span><span class="token function">generateMessage</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token class-name">AnotherMessage</span><span class="token punctuation">.</span><span class="token function">generateAnotherMessage</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"> </span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">GenerateMessage</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">static</span> <span class="token class-name">String</span> <span class="token function">generateMessage</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">return</span> <span class="token string">"Here is one message"</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"> </span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">AnotherMessage</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">static</span> <span class="token class-name">String</span> <span class="token function">generateAnotherMessage</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">return</span> <span class="token string">"Here is another message"</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>JDK类与非JDK类</h2>
<p>JDK类与非JDK类的区别</p>
<ul>
<li><strong>JDK类</strong>：属于Java核心库的一部分，如<code>Scanner</code>和<code>MatchResult</code>。这些类在Java运行时环境中已经内置，因此无需额外添加到类路径中。</li>
<li><strong>非JDK类</strong>：不属于Java核心库，如Apache Commons Lang中的<code>RandomUtils</code>。这些类需要外部库的支持，因此需要将相应的jar文件添加到类路径中。</li>
</ul>
<p>编译和运行时的类路径管理</p>
<ul>
<li><strong>JDK类</strong>：直接编译和运行即可，无需额外配置类路径。</li>
<li><strong>非JDK类</strong>：需要使用<code>-cp</code>或<code>--class-path</code>选项指定外部库的路径，例如<code>java -cp /path/to/commons-lang3-3.12.0.jar ReferenceNonJDKClass.java</code>。</li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>注意事项</p>
<ul>
<li>确保使用的非JDK类库版本与代码兼容。</li>
<li>管理好类路径，避免出现路径错误或冲突。</li>
<li>可以使用构建工具（如Maven或Gradle）自动管理依赖和类路径，简化开发流程。</li>
<li>了解Java模块系统（JPMS）可以更好地管理大型项目的依赖和类路径。</li>
</ul>
</div>
<h2>简单源文件和实例主要方法</h2>
<h2>未命名模式和变量</h2>
<h2>字符串模板</h2>
<h2>记录模式</h2>
<h2>switch表达式和语句的匹配模式</h2>
<h2>密封类</h2>
<h2>纪录类</h2>
<h2>instanceof运算符的模式匹配</h2>
<h2>文本块</h2>
<h2>Lambda参数的局部变量语法</h2>
<h2>局部变量类型推理</h2>
<h2>Java平台模块系统</h2>
<h2>小的语言增强</h2>
<h2>API</h2>
<h2>问题总结</h2>
<p>详细总结：<a href=""></a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Diary - 工作流 - 软件开发 - 软件部署方案</title>
      <link>https://blog.magictable.ha.cn/note/Diary-%E5%B7%A5%E4%BD%9C%E6%B5%81-%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91-%E8%BD%AF%E4%BB%B6%E9%83%A8%E7%BD%B2%E6%96%B9%E6%A1%88.html</link>
      <guid>https://blog.magictable.ha.cn/note/Diary-%E5%B7%A5%E4%BD%9C%E6%B5%81-%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91-%E8%BD%AF%E4%BB%B6%E9%83%A8%E7%BD%B2%E6%96%B9%E6%A1%88.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Diary - 工作流 - 软件开发 - 软件部署方案</source>
      <description>文章摘要： 工作流程总结，简化工作流程。 简介 减少工作流程中所使用的软件数量，减少在软件之间切换的成本和时间。 提高工作流程中软件之间的协作程度，提高执行流畅度。 通用 微信 QQ 支付宝 数字人民币 VScode 飞书 钉钉 百度网盘 百度地图 哔哩哔哩 电脑 Obsidian Firefox浏览器 手机 闽政通 豫事办 京东 淘宝 得物 基于系统...</description>
      <category>学习笔记/日记</category>
      <pubDate>Mon, 25 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 工作流程总结，简化工作流程。</p>
<!-- more -->
<h2>简介</h2>
<ul>
<li>减少工作流程中所使用的软件数量，减少在软件之间切换的成本和时间。</li>
<li>提高工作流程中软件之间的协作程度，提高执行流畅度。</li>
</ul>
<p>通用</p>
<ul>
<li>
<p>微信</p>
</li>
<li>
<p>QQ</p>
</li>
<li>
<p>支付宝</p>
</li>
<li>
<p>数字人民币</p>
</li>
<li>
<p>VScode</p>
</li>
<li>
<p>飞书</p>
</li>
<li>
<p>钉钉</p>
</li>
<li>
<p>百度网盘</p>
</li>
<li>
<p>百度地图</p>
</li>
<li>
<p>哔哩哔哩</p>
</li>
</ul>
<p>电脑</p>
<ul>
<li>Obsidian</li>
<li>Firefox浏览器</li>
</ul>
<p>手机</p>
<ul>
<li>
<p>闽政通</p>
</li>
<li>
<p>豫事办</p>
</li>
<li>
<p>京东</p>
</li>
<li>
<p>淘宝</p>
</li>
<li>
<p>得物</p>
</li>
</ul>
<h2>基于系统安装软件</h2>
<ul>
<li>使用基本的操作系统安装软件的方式管理各类软件。</li>
<li>安装软件本体在本地运行。</li>
</ul>
<h2>基于浏览器书签</h2>
<ul>
<li>通过浏览器的书签进行管理常用的网站和工具。</li>
<li>通过网页的形式显示和控制软件程序。</li>
</ul>
<h2>基于软件集成插件</h2>
<ul>
<li>VScode：将所需要用到的软件都通过插件的形式在VScode中使用。</li>
<li>一个软件中通过插件的方式实现更多对其他软件或功能的控制。</li>
</ul>
<h2>基于自动化工具</h2>
<ul>
<li>自动化工具整理完善的自动化工作流。</li>
<li>一个程序运行流程模板执行各类功能。</li>
</ul>
<h2>基于Docker容器</h2>
<ul>
<li>docker容器中安装软件。</li>
<li>自行在本地运行应用的服务程序。</li>
<li>提示：一般情况是以网页形式显示和控制的界面。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Python 3 - 安装与卸载</title>
      <link>https://blog.magictable.ha.cn/software/Language-Python3-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Python3-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Python 3 - 安装与卸载</source>
      <description>文章摘要： 摘要内容。 软件获取 官方下载地址：https://www.python.org/ 安装 - apt包管理器 卸载 - apt包管理器 安装 - 预编译 卸载 - 预编译 安装 - 源代码 注释 可嵌入包：是个压缩包无需安装即可使用，其内部有标准库、编译器，没有pip包管理器，文件是编译后的文件。 卸载 - 源代码 Miniconda虚拟环...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Mon, 25 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>软件获取</h2>
<ul>
<li>官方下载地址：<a href="https://www.python.org/" target="_blank" rel="noopener noreferrer">https://www.python.org/</a></li>
</ul>
<h2>安装 - apt包管理器</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>卸载 - apt包管理器</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>安装 - 预编译</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>卸载 - 预编译</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>安装 - 源代码</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>可嵌入包：是个压缩包无需安装即可使用，其内部有标准库、编译器，没有pip包管理器，文件是编译后的文件。</p>
</div>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>卸载 - 源代码</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>Miniconda虚拟环境</h2>
<ul>
<li>使用Miniconda管理虚拟环境</li>
<li>有效避免在多个项目中同时需要一些第三方库但版本各不相同导致缺少依赖库。</li>
<li>需要先安装 Miniconda 专属于python编程语言虚拟环境管理软件。</li>
</ul>
<p>详细总结：<a href="/software/Package-Miniconda.html" target="_blank">Package-Miniconda</a></p>
<h2>Docker容器</h2>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Library - Maven - Druid</title>
      <link>https://blog.magictable.ha.cn/software/Library-Maven-Druid.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Maven-Druid.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Maven - Druid</source>
      <description>文章摘要： 数据库连接池。 简介 简要说明 主要功能 注意事项 适用场景 Maven坐标</description>
      <category>软件程序/代码类库</category>
      <pubDate>Mon, 25 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 数据库连接池。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>主要功能</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>注意事项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>适用场景</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>Maven坐标</h2>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- Druid数据库连接池 --&gt;</span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>com.alibaba<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>druid<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>版本号<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- 请替换为实际的版本号 --&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Library - Maven - Lombok</title>
      <link>https://blog.magictable.ha.cn/software/Library-Maven-Lombok.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Maven-Lombok.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Maven - Lombok</source>
      <description>文章摘要： Lombok 被称为“小辣椒”，通过注解的方式自动生成样板代码来简化 Java 开发。 简介 简要说明 Lombok 被称为“小辣椒”。 通过注解的方式自动生成样板代码来简化 Java 开发。 主要功能 减少样板代码：通过注解，开发者可以省去手动编写大量getter、setter等方法的麻烦，使得代码更加简洁。 易于阅读和维护：减少了重复代...</description>
      <category>软件程序/代码类库</category>
      <pubDate>Mon, 25 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Lombok 被称为“小辣椒”，通过注解的方式自动生成样板代码来简化 Java 开发。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<blockquote>
<ul>
<li>Lombok 被称为“小辣椒”。</li>
<li>通过注解的方式自动生成样板代码来简化 Java 开发。</li>
</ul>
</blockquote>
<p>主要功能</p>
<blockquote>
<ul>
<li><strong>减少样板代码</strong>：通过注解，开发者可以省去手动编写大量getter、setter等方法的麻烦，使得代码更加简洁。</li>
<li><strong>易于阅读和维护</strong>：减少了重复代码，使得代码更加清晰，易于阅读和维护。</li>
<li><strong>提高开发效率</strong>：自动生成代码减少了手动编写和修改的时间，提高了开发效率。</li>
</ul>
</blockquote>
<p>注意事项</p>
<blockquote>
<ul>
<li>由于Lombok在编译时自动生成代码，因此在某些情况下（如调试时）可能会遇到一些挑战，因为生成的代码并不直接体现在源代码中。</li>
<li>过度使用Lombok可能会使代码的可读性降低，特别是对于不熟悉Lombok的开发者来说。因此，建议适度使用，保持代码的清晰和可读性。</li>
</ul>
</blockquote>
<p>适用场景</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>Maven坐标</h2>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- 映射数据库字段的实体类 --&gt;</span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.projectlombok<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>lombok<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>版本号<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- 请替换为实际的版本号 --&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>常用注解</h2>
<blockquote>
<ul>
<li><code>@Getter</code> 和 <code>@Setter</code>：自动为类的字段生成getter和setter方法。</li>
<li><code>@ToString</code>：自动生成<code>toString</code>方法。</li>
<li><code>@EqualsAndHashCode</code>：自动生成<code>equals</code>和<code>hashCode</code>方法。</li>
<li><code>@NoArgsConstructor</code>、<code>@AllArgsConstructor</code> 和 <code>@RequiredArgsConstructor</code>：分别生成无参构造函数、包含所有参数的构造函数和包含必须参数的构造函数（基于<code>final</code>字段和非空字段）。</li>
<li><code>@Data</code>：是一个方便的注解，它集成了<code>@ToString</code>、<code>@EqualsAndHashCode</code>、<code>@Getter</code>、<code>@Setter</code>和<code>@RequiredArgsConstructor</code>的功能。</li>
<li><code>@Builder</code>：提供了一种复杂对象的构建方式，通过链式调用设置属性，最后生成不可变对象。</li>
<li><code>@Value</code>：用于创建不可变的类，自动生成<code>final</code>字段、getter、<code>equals</code>、<code>hashCode</code>和<code>toString</code>方法。</li>
</ul>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Library - Maven - MyBatis Plus</title>
      <link>https://blog.magictable.ha.cn/software/Library-Maven-MyBatisPlus.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Maven-MyBatisPlus.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Maven - MyBatis Plus</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 主要功能 注意事项 适用场景 Maven坐标</description>
      <category>软件程序/代码类库</category>
      <pubDate>Mon, 25 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>主要功能</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>注意事项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>适用场景</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>Maven坐标</h2>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- MyBatis plus --&gt;</span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>com.baomidou<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>mybatis-plus-boot-starter<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>版本号<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- 请替换为实际的版本号 --&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Library - Maven - MySQL Connector J</title>
      <link>https://blog.magictable.ha.cn/software/Library-Maven-MySQLConnectorJ.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Maven-MySQLConnectorJ.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Maven - MySQL Connector J</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 主要功能 注意事项 适用场景 Maven坐标</description>
      <category>软件程序/代码类库</category>
      <pubDate>Mon, 25 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>主要功能</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>注意事项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>适用场景</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>Maven坐标</h2>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- MySQL数据库驱动 --&gt;</span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>com.mysql<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>mysql-connector-j<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>版本号<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- 请替换为实际的版本号 --&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Library - Maven - SpringBoot 3 - 约定</title>
      <link>https://blog.magictable.ha.cn/software/Library-Maven-SpringBoot3-%E7%BA%A6%E5%AE%9A.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Maven-SpringBoot3-%E7%BA%A6%E5%AE%9A.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Maven - SpringBoot 3 - 约定</source>
      <description>文章摘要： 约定大于配置，该文章将整理SpringBoot相关的约定。 注释 整合第三方日志框架后，日志的配置文件若需要使用SpringBoot提供的属性，因此日志配置文件的命名必须是：&amp;lt;日志框架实现&amp;gt; -spring.xml。 因为logback.xml会在SpringBoot容器加载前先被logback加载到，由于logback无法解析Spring...</description>
      <category>软件程序/代码类库</category>
      <pubDate>Mon, 25 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 约定大于配置，该文章将整理SpringBoot相关的约定。</p>
<!-- more -->
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>整合第三方日志框架后，日志的配置文件若需要使用SpringBoot提供的属性，因此日志配置文件的命名必须是：<code>&lt;日志框架实现&gt; -spring.xml</code>。</li>
<li>因为<code>logback.xml</code>会在SpringBoot容器加载前先被logback加载到，由于logback无法解析Spring Profile，将会报错。</li>
</ul>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Library - Maven - SpringBoot 3 - 热门推荐 - 集成第三方功能</title>
      <link>https://blog.magictable.ha.cn/software/Library-Maven-SpringBoot3-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E6%95%B4%E5%90%88%E7%AC%AC%E4%B8%89%E6%96%B9%E5%8A%9F%E8%83%BD.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Maven-SpringBoot3-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E6%95%B4%E5%90%88%E7%AC%AC%E4%B8%89%E6%96%B9%E5%8A%9F%E8%83%BD.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Maven - SpringBoot 3 - 热门推荐 - 集成第三方功能</source>
      <description>文章摘要： 第三方框架。 Swagger Springfox</description>
      <category>软件程序/代码类库</category>
      <pubDate>Mon, 25 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 第三方框架。</p>
<!-- more -->
<h2>Swagger Springfox</h2>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!--  --&gt;</span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>io.springfox<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>springfox-swagger2<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>2.7.0<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- 请自行查找合适版本 --&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!--  --&gt;</span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>io.springfox<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>springfox-swagger-ui<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>2.7.0<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- 请自行查找合适版本 --&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Library - Maven - SpringBoot 3 - 热门推荐 - 整合第三方中间件</title>
      <link>https://blog.magictable.ha.cn/software/Library-Maven-SpringBoot3-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E9%9B%86%E6%88%90%E7%AC%AC%E4%B8%89%E6%96%B9%E4%B8%AD%E9%97%B4%E4%BB%B6.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Maven-SpringBoot3-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E9%9B%86%E6%88%90%E7%AC%AC%E4%B8%89%E6%96%B9%E4%B8%AD%E9%97%B4%E4%BB%B6.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Maven - SpringBoot 3 - 热门推荐 - 整合第三方中间件</source>
      <description>文章摘要： 中间件。 简介 简要说明 主要功能 注意事项 适用场景</description>
      <category>软件程序/代码类库</category>
      <pubDate>Mon, 25 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 中间件。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>主要功能</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>注意事项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>适用场景</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - API - 「java.awt」</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjava.awt%E3%80%8D.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjava.awt%E3%80%8D.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - API - 「java.awt」</source>
      <description>文章摘要： 包含用于创建用户界面和绘制图形图像的所有类。 介绍 简要说明 awt（Abstract Window Toolkit）是 Java 早期提供的一个用于创建和操作图形用户界面（GUI）以及绘制图形和图像的 API。 是 Java 原始的图形界面工具包，尽管后续版本中引入了更先进的 Swing 库，但 java.awt 仍然在某些场景下被使用。...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Sun, 24 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 包含用于创建用户界面和绘制图形图像的所有类。</p>
<!-- more -->
<h2>介绍</h2>
<p>简要说明</p>
<ul>
<li>awt（Abstract Window Toolkit）是 Java 早期提供的一个用于创建和操作图形用户界面（GUI）以及绘制图形和图像的 API。</li>
<li>是 Java 原始的图形界面工具包，尽管后续版本中引入了更先进的 Swing 库，但 <code>java.awt</code> 仍然在某些场景下被使用。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>组件创建</strong>：提供了一系列基础组件，如按钮（Button）、文本框（TextField）、标签（Label）等。</li>
<li><strong>容器布局</strong>：提供了多种布局管理器（LayoutManager），如FlowLayout、BorderLayout、GridLayout等，用于控制组件的布局。</li>
<li><strong>图形绘制</strong>：允许绘制基本的图形元素，如线条、矩形、椭圆等。</li>
<li><strong>图像处理</strong>：支持图像的加载、显示和操作。</li>
<li><strong>事件处理</strong>：提供了事件监听和处理机制，允许用户与 GUI 组件交互。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>跨平台限制</strong>：<code>java.awt</code> 组件的外观和行为可能会因操作系统的不同而有所不同，这可能导致跨平台应用程序的一致性问题。</li>
<li><strong>功能限制</strong>：与 Swing 相比，<code>java.awt</code> 提供的功能较为有限，例如在组件外观定制方面。</li>
<li><strong>性能问题</strong>：在某些情况下，<code>java.awt</code> 组件的性能可能不如 Swing 组件。</li>
<li><strong>现代 GUI 替代品</strong>：随着 JavaFX 的推出，<code>java.awt</code> 和 Swing 被视为较老的技术，JavaFX 提供了更现代、更强大的 GUI 功能。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>简单 GUI 应用程序</strong>：当需要快速创建一个简单的 GUI 应用程序，而不需要复杂的界面设计时。</li>
<li><strong>遗留系统维护</strong>：在维护或更新使用 <code>java.awt</code> 的遗留系统时。</li>
<li><strong>特定需求</strong>：在某些特定场景下，可能需要 <code>java.awt</code> 提供的特定功能，比如直接操作底层图形设备。</li>
</ul>
<h3>主要组件和类</h3>
<ul>
<li><strong>Component</strong>: 所有 AWT 组件的基类，提供组件的基本功能，如大小、位置和可见性。</li>
<li><strong>Container</strong>: 是 Component 的子类，可以包含其他组件，如 Window 和 Panel。</li>
<li><strong>Window</strong>: 是一个容器，代表一个顶级窗口，可以包含其他组件。</li>
<li><strong>Frame</strong>: 是 Window 的子类，通常用作应用程序的主窗口。</li>
<li><strong>Panel</strong>: 是一个通用容器，用于容纳其他组件。</li>
<li><strong>Button</strong>: 基本的按钮组件。</li>
<li><strong>TextField</strong>: 单行文本输入组件。</li>
<li><strong>TextArea</strong>: 多行文本输入和显示组件。</li>
<li><strong>Choice</strong>: 下拉菜单组件。</li>
<li><strong>Checkbox</strong>: 复选框组件。</li>
<li><strong>CheckboxGroup</strong>: 复选框组，用于将多个 Checkbox 组件组织在一起。</li>
<li><strong>List</strong>: 可滚动的列表组件。</li>
<li><strong>Label</strong>: 用于显示文本的组件。</li>
<li><strong>Canvas</strong>: 用于绘制的画布组件。</li>
<li><strong>ScrollPane</strong>: 提供滚动功能的容器。</li>
</ul>
<h3>事件处理</h3>
<ul>
<li><strong>Event</strong>: 表示发生的事件。</li>
<li><strong>EventListener</strong>: 所有事件监听器必须实现的接口。</li>
<li><strong>Adapter Classes</strong>: 提供空实现的监听器适配器类，用于简化事件监听器的创建。</li>
<li><strong>Event Queue</strong>: 事件队列用于存储待处理的事件。</li>
</ul>
<h3>布局管理器</h3>
<ul>
<li><strong>LayoutManager</strong>: 布局管理器的接口，用于确定组件的位置和大小。</li>
<li><strong>FlowLayout</strong>: 组件按照添加顺序从左到右排列。</li>
<li><strong>BorderLayout</strong>: 将容器划分为五个区域：北、南、东、西、中。</li>
<li><strong>GridLayout</strong>: 将容器划分为一个网格，所有组件大小相同。</li>
<li><strong>CardLayout</strong>: 允许容器包含多个组件，但每次只显示一个。</li>
</ul>
<h3>图形和绘图</h3>
<ul>
<li><strong>Graphics</strong>: 提供绘图操作的方法，如绘制文本、线条、矩形等。</li>
<li><strong>Color</strong>: 表示颜色。</li>
<li><strong>Font</strong>: 表示字体。</li>
<li><strong>Image</strong>: 表示图形图像。</li>
</ul>
<h2><code>java.awt.color</code></h2>
<p>提供色彩空间的类。</p>
<h2><code>java.awt.datatransfer</code></h2>
<p>提供用于在应用程序之间和应用程序内传输数据的接口和类。</p>
<h2><code>java.awt.dnd</code></h2>
<p>Drag and Drop 是许多图形用户界面系统中的一种直接操作手势，它提供了一种机制，用于在逻辑上与 GUI 中的表示元素关联的两个实体之间传输信息。</p>
<h2><code>java.awt.event</code></h2>
<p>提供用于处理 AWT 组件触发的不同类型的事件的接口和类。</p>
<h2><code>java.awt.font</code></h2>
<p>提供与字体相关的类和接口。</p>
<h2><code>java.awt.geom</code></h2>
<p>提供 Java 2D 类，用于定义和执行与二维几何相关的对象的操作。</p>
<h2><code>java.awt.im</code></h2>
<p>为输入法框架提供类和接口。</p>
<h2><code>java.awt.im.spi</code></h2>
<p>提供接口，用于开发可与任何 Java 运行时环境一起使用的输入法。</p>
<h2><code>java.awt.image</code></h2>
<p>提供用于创建和修改图像的类。</p>
<h2><code>java.awt.image.renderable</code></h2>
<p>提供用于生成与渲染无关的图像的类和接口。</p>
<h2><code>java.awt.print</code></h2>
<p>为常规打印 API 提供类和接口。</p>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - API - 「java.io」</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjava.io%E3%80%8D.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjava.io%E3%80%8D.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - API - 「java.io」</source>
      <description>文章摘要： Java 平台提供的一组输入/输出（I/O）相关的 API。 介绍 简要说明 通过数据流、序列化和文件系统提供系统输入和输出。 Java 平台提供的一组输入/输出（I/O）相关的 API。 用于处理数据流、文件操作以及其他与 I/O 相关的任务。 提供了丰富的类和接口，以支持不同类型的 I/O 操作。 主要功能 流操作：提供了字节流（Inp...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Sun, 24 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Java 平台提供的一组输入/输出（I/O）相关的 API。</p>
<!-- more -->
<h2>介绍</h2>
<p>简要说明</p>
<ul>
<li>通过数据流、序列化和文件系统提供系统输入和输出。</li>
<li>Java 平台提供的一组输入/输出（I/O）相关的 API。</li>
<li>用于处理数据流、文件操作以及其他与 I/O 相关的任务。</li>
<li>提供了丰富的类和接口，以支持不同类型的 I/O 操作。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>流操作</strong>：提供了字节流（InputStream 和 OutputStream）和字符流（Reader 和 Writer）来处理二进制和文本数据。</li>
<li><strong>文件操作</strong>：提供了 File 类来表示文件和目录路径信息，并可以进行创建、删除、重命名等操作。</li>
<li><strong>序列化与反序列化</strong>：支持对象的序列化（将对象状态保存到字节流）和反序列化（从字节流恢复对象状态）。</li>
<li><strong>缓冲区操作</strong>：提供了缓冲流（BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter）来提高 I/O 操作的效率。</li>
<li><strong>数据操作</strong>：提供了 DataInputStream 和 DataOutputStream 用于读写基本数据类型。</li>
<li><strong>对象流操作</strong>：提供了 ObjectInputStream 和 ObjectOutputStream 用于对象的序列化和反序列化。</li>
<li><strong>随机访问文件</strong>：提供了 RandomAccessFile 类用于随机访问文件内容。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>资源管理</strong>：在使用 I/O 资源时，应该始终注意资源的关闭，以避免资源泄露。Java 7 引入了 try-with-resources 语句来简化资源管理。</li>
<li><strong>异常处理</strong>：I/O 操作可能抛出 IOException，因此需要妥善处理这些异常。</li>
<li><strong>性能考虑</strong>：使用缓冲流可以提高 I/O 操作的性能，特别是在处理大量数据时。</li>
<li><strong>字符编码</strong>：在处理文本数据时，需要特别注意字符编码问题，以避免乱码。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>文件读写</strong>：当需要读取或写入文件时，<code>java.io</code> 提供了丰富的类和方法来支持这些操作。</li>
<li><strong>网络通信</strong>：在网络编程中，经常需要使用 <code>java.io</code> 来处理网络数据流。</li>
<li><strong>数据序列化</strong>：当需要将对象状态持久化或通过网络传输对象时，可以使用 <code>java.io</code> 的序列化机制。</li>
<li><strong>系统间数据交换</strong>：<code>java.io</code> 可以用于不同系统或组件之间的数据交换。</li>
<li><strong>基础数据处理</strong>：在处理基本数据类型和字符串时，<code>java.io</code> 提供了方便的 API。</li>
</ul>
<h3>基本概念</h3>
<ul>
<li><strong>流（Stream）</strong>: 数据的流动，可以是输入流（读取数据）或输出流（写入数据）。</li>
<li><strong>字节流（Byte Stream）</strong>: 以字节为单位进行读写，适用于所有类型的文件数据。</li>
<li><strong>字符流（Character Stream）</strong>: 以字符为单位进行读写，适用于文本文件。</li>
<li><strong>过滤器流（Filter Stream）</strong>: 用于装饰其他流，提供额外的功能，如缓冲、数据压缩、加密等。</li>
</ul>
<h3>主要类和接口</h3>
<h4>输入流（InputStream 和 Reader）</h4>
<ul>
<li><strong>InputStream</strong>: 所有输入字节流的超类，提供读取字节的基本方法。</li>
<li><strong>Reader</strong>: 所有输入字符流的超类，提供读取字符的基本方法。</li>
<li><strong>FileInputStream</strong>: 用于从文件系统中的文件读取数据。</li>
<li><strong>FileReader</strong>: 用于从文件系统中的文件读取文本数据。</li>
<li><strong>BufferedInputStream</strong>: 用于包装另一个输入流，提供缓冲功能，提高读取效率。</li>
<li><strong>BufferedReader</strong>: 用于包装另一个输入流，提供缓冲功能，提高文本读取效率。</li>
</ul>
<h4>输出流（OutputStream 和 Writer）</h4>
<ul>
<li><strong>OutputStream</strong>: 所有输出字节流的超类，提供写入字节的基本方法。</li>
<li><strong>Writer</strong>: 所有输出字符流的超类，提供写入字符的基本方法。</li>
<li><strong>FileOutputStream</strong>: 用于向文件系统中的文件写入数据。</li>
<li><strong>FileWriter</strong>: 用于向文件系统中的文件写入文本数据。</li>
<li><strong>BufferedOutputStream</strong>: 用于包装另一个输出流，提供缓冲功能，提高写入效率。</li>
<li><strong>BufferedWriter</strong>: 用于包装另一个输出流，提供缓冲功能，提高文本写入效率。</li>
</ul>
<h4>其他重要类</h4>
<ul>
<li><strong>File</strong>: 提供文件和目录路径名的操作。</li>
<li><strong>RandomAccessFile</strong>: 支持随机访问文件的读写操作。</li>
<li><strong>ObjectInputStream/ObjectOutputStream</strong>: 用于对象的序列化和反序列化。</li>
<li><strong>InputStreamReader/OutputStreamWriter</strong>: 用于在字节流和字符流之间转换。</li>
</ul>
<h3>学习总结</h3>
<h4>文件操作</h4>
<ul>
<li><strong>文件读写</strong>: 学习如何使用 FileInputStream/FileOutputStream 和 FileReader/FileWriter 进行文件的基本读写操作。</li>
<li><strong>随机访问文件</strong>: 了解 RandomAccessFile 的使用，它可以跳转到文件的任意位置进行读写。</li>
</ul>
<h4>流操作</h4>
<ul>
<li><strong>流类型</strong>: 区分字节流和字符流，了解它们的使用场景。</li>
<li><strong>缓冲流</strong>: 学习使用 BufferedInputStream/BufferedReader 和 BufferedOutputStream/BufferedWriter 来提高 I/O 操作的效率。</li>
<li><strong>过滤器流</strong>: 掌握如何使用过滤器流（如 DataInputStream/DataOutputStream）来处理不同类型的数据。</li>
</ul>
<h4>序列化</h4>
<ul>
<li><strong>对象序列化</strong>: 学习如何使用 ObjectOutputStream 和 ObjectInputStream 来序列化和反序列化对象。</li>
</ul>
<h4>资源管理</h4>
<ul>
<li><strong>关闭流</strong>: 确保在不再需要时关闭流，释放系统资源，可以使用 try-with-resources 语句来自动关闭资源。</li>
<li><strong>异常处理</strong>: 学习如何处理 IOException 和其他相关异常。</li>
</ul>
<h4>实践建议</h4>
<ul>
<li><strong>使用缓冲</strong>: 总是使用缓冲流来包装原始流，以提高性能。</li>
<li><strong>异常处理</strong>: 在 I/O 操作中总是包含异常处理逻辑。</li>
<li><strong>资源管理</strong>: 使用 try-with-resources 语句来管理资源，避免资源泄露。</li>
<li><strong>文件路径</strong>: 注意操作系统之间的文件路径差异。</li>
<li><strong>编码问题</strong>: 在处理文本文件时，注意字符编码和解码的问题。</li>
</ul>
<h2><code>java.io.File</code></h2>
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<ul>
<li>File对象用于代表硬盘中的一个文件或文件夹。</li>
<li>File对象只能对文件本身进行操作，不能读写文件里面存储的数据进行操作。</li>
<li>File对象能接收一个不存在的文件或文件夹。</li>
<li>支持“绝对路径、相对路径”的文件路径。</li>
<li>类库路径：<code>java.io.File</code></li>
</ul>
</div>
<h3>实例化File对象</h3>
<table>
<thead>
<tr>
<th style="text-align:left">方法</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>new File(String &lt;文件路径&gt;)</code></td>
<td style="text-align:left">根据文件路径创建文件对象</td>
</tr>
<tr>
<td style="text-align:left"><code>new File(String &lt;父级路径&gt;, String &lt;子路径&gt;)</code></td>
<td style="text-align:left">根据父级路径和子路径名称创建文件对象</td>
</tr>
<tr>
<td style="text-align:left"><code>new File(File &lt;父级路径&gt;, String &lt;子路径&gt;)</code></td>
<td style="text-align:left">根据父级路径对应文件对象和子路径名称</td>
</tr>
</tbody>
</table>
<h3>创建</h3>
<table>
<thead>
<tr>
<th style="text-align:left">方法</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>&lt;File&gt;.createNewFile()</code></td>
<td style="text-align:left">创建文件，若创建成功则返回<code>true</code></td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;File&gt;.mkdir()</code></td>
<td style="text-align:left">创建文件夹，只能创建一级文件夹，若创建成功则返回<code>true</code></td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;File&gt;.mkdirs()</code></td>
<td style="text-align:left">创建文件夹，可以创建多层级文件夹，若创建成功则返回<code>true</code></td>
</tr>
</tbody>
</table>
<h3>删除</h3>
<table>
<thead>
<tr>
<th style="text-align:left">方法</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>&lt;File&gt;.delete()</code></td>
<td style="text-align:left">删除文件或空目录，若删除成功则返回<code>true</code></td>
</tr>
</tbody>
</table>
<h3>修改</h3>
<table>
<thead>
<tr>
<th style="text-align:left">方法</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>&lt;File&gt;.renameTo()</code></td>
<td style="text-align:left">修改文件名称</td>
</tr>
</tbody>
</table>
<h3>查询</h3>
<table>
<thead>
<tr>
<th style="text-align:left">方法</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>&lt;File&gt;.exists()</code></td>
<td style="text-align:left">判断文件是否存在，若存在则返回<code>true</code></td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;File&gt;.isFile()</code></td>
<td style="text-align:left">判断文件是否是文件，若是文件则返回<code>true</code></td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;File&gt;.isDirectory()</code></td>
<td style="text-align:left">判断文件是否是文件夹，若是文件夹则返回<code>true</code></td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;File&gt;.getName()</code></td>
<td style="text-align:left">获取文件的名称（包含后缀）</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;File&gt;.length()</code></td>
<td style="text-align:left">获取文件的大小，返回字节个数</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;File&gt;.lastModified()</code></td>
<td style="text-align:left">获取文件的最后修改时间</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;File&gt;.getPath()</code></td>
<td style="text-align:left">获取创建文件时使用的路径</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;File&gt;.getAbsolutePath()</code></td>
<td style="text-align:left">获取文件的绝对路径</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;File&gt;.getParent()</code></td>
<td style="text-align:left">获取文件所在的父级目录</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;File&gt;.list()</code></td>
<td style="text-align:left">获取当前目录下所有的“一级文件和文件夹的名称”，返回<code>String[]</code></td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;File&gt;.listFiles()</code></td>
<td style="text-align:left">获取当前目录下所有的“一级文件和文件夹的对象”，返回<code>File[]</code></td>
</tr>
</tbody>
</table>
<blockquote>
<ul>
<li><code>&lt;File&gt;.canWrite()</code>：是否可写</li>
<li><code>&lt;File&gt;.isFile()</code>：是否隐藏</li>
</ul>
</blockquote>
<h3>案例</h3>
<p>分析：</p>
<blockquote>
<ul>
<li>输入文件夹，作为查找范围</li>
<li>遍历全部一级文件对象，判断是否是文件</li>
<li>若是文件，判断是否是自己想要的文件</li>
<li>若是文件夹，则获取该文件夹下全部一级文件，重复上述过程</li>
</ul>
</blockquote>
<p>代码</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token class-name">File</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>util<span class="token punctuation">.</span></span><span class="token class-name">ArrayList</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Main</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> ages<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 创建存放查找结果的文件列表</span></span>
<span class="line">        <span class="token class-name">ArrayList</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">String</span><span class="token punctuation">&gt;</span></span> fileList <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ArrayList</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token punctuation">&gt;</span></span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 调用方法</span></span>
<span class="line">        <span class="token comment">// - 传入查找目录范围（File对象）</span></span>
<span class="line">        <span class="token comment">// - 查找的目标文件名</span></span>
<span class="line">        <span class="token comment">// - 保存查找到的文件列表</span></span>
<span class="line">        <span class="token function">searchFile</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">File</span><span class="token punctuation">(</span><span class="token string">"/home/magictable/Projec/"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">"Main.java"</span><span class="token punctuation">,</span> fileList<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 判断文件列表中的最新数据是否为0</span></span>
<span class="line">        <span class="token keyword">if</span> <span class="token punctuation">(</span>fileList<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"未找到目标文件"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">        <span class="token comment">// 输出文件列表中存储的最新数据</span></span>
<span class="line">        <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator">&lt;</span> fileList<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token comment">// 格式化输出结果</span></span>
<span class="line">            <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"结果"</span><span class="token operator">+</span> <span class="token punctuation">(</span>i<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token string">"："</span> <span class="token operator">+</span> fileList<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token doc-comment comment">/**</span>
<span class="line">     * 搜索指定目录范围下的目标文件</span>
<span class="line">     * <span class="token keyword">@param</span> <span class="token parameter">dir</span> 查找的目录范围（File文件）</span>
<span class="line">     * <span class="token keyword">@param</span> <span class="token parameter">fileName</span> 查找的目标文件名</span>
<span class="line">     * <span class="token keyword">@param</span> <span class="token parameter">fileList</span> 保存查找到的文件列表</span>
<span class="line">     */</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">searchFile</span><span class="token punctuation">(</span><span class="token class-name">File</span> dir<span class="token punctuation">,</span> <span class="token class-name">String</span> fileName<span class="token punctuation">,</span> <span class="token class-name">ArrayList</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">String</span><span class="token punctuation">&gt;</span></span> fileList<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 判断输入的`dir`文件夹：</span></span>
<span class="line">        <span class="token comment">// - 是否不存在</span></span>
<span class="line">        <span class="token comment">// - 是否是一个文件</span></span>
<span class="line">        <span class="token comment">// - 是否是空目录</span></span>
<span class="line">        <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>dir<span class="token punctuation">.</span><span class="token function">exists</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">||</span> dir<span class="token punctuation">.</span><span class="token function">isFile</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">||</span> dir <span class="token operator">==</span> <span class="token keyword">null</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token keyword">return</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 获取`dir`目录下的全部一级文件对象</span></span>
<span class="line">        <span class="token class-name">File</span><span class="token punctuation">[</span><span class="token punctuation">]</span> fileArray <span class="token operator">=</span> dir<span class="token punctuation">.</span><span class="token function">listFiles</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token comment">// 判断文件夹大小是否为“0字节”（用于判断是否拥有该文件夹的权限）</span></span>
<span class="line">        <span class="token comment">// 是否是空的“文件夹”</span></span>
<span class="line">        <span class="token keyword">if</span> <span class="token punctuation">(</span>fileArray<span class="token punctuation">.</span>length <span class="token operator">&gt;</span> <span class="token number">0</span>  <span class="token operator">&amp;&amp;</span> fileArray <span class="token operator">!=</span> <span class="token keyword">null</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token comment">// 获取该目录下的全部一级文件对象</span></span>
<span class="line">            <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token class-name">File</span> f <span class="token operator">:</span> fileArray<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                <span class="token comment">// 判断文件是否是文件</span></span>
<span class="line">                <span class="token keyword">if</span> <span class="token punctuation">(</span>f<span class="token punctuation">.</span><span class="token function">isFile</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                    <span class="token comment">// 判断文件是否是我们要找的</span></span>
<span class="line">                    <span class="token keyword">if</span> <span class="token punctuation">(</span>f<span class="token punctuation">.</span><span class="token function">getName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">equals</span><span class="token punctuation">(</span>fileName<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                        <span class="token comment">// 将当前文件对象的绝对路径保存到文件列表中</span></span>
<span class="line">                        fileList<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span>f<span class="token punctuation">.</span><span class="token function">getAbsolutePath</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                    <span class="token punctuation">}</span></span>
<span class="line">                <span class="token punctuation">}</span></span>
<span class="line">                <span class="token keyword">else</span> <span class="token punctuation">{</span>   <span class="token comment">// 当前文件是一个文件夹</span></span>
<span class="line">                    <span class="token comment">// 调用该方法进行重复查找过程，递归算法</span></span>
<span class="line">                    <span class="token function">searchFile</span><span class="token punctuation">(</span>f<span class="token punctuation">,</span> fileName<span class="token punctuation">,</span> fileList<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                <span class="token punctuation">}</span></span>
<span class="line">            <span class="token punctuation">}</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>编码和解码</h2>
<blockquote>
<ul>
<li>需要写异常处理。</li>
<li>编码与解码使用的字符集必须一致，才不会出现乱码。</li>
</ul>
</blockquote>
<p>编码</p>
<table>
<thead>
<tr>
<th style="text-align:left">方法</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>&lt;String&gt;.getBytes()</code></td>
<td style="text-align:left">使用平台的默认字符集将该String对象编码为一些列字节，返回<code>byte[]</code></td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;String&gt;.getBytes(String charsetName)</code></td>
<td style="text-align:left">使用指定的字符集将该String对象编码为一些列字节，返回<code>byte[]</code></td>
</tr>
</tbody>
</table>
<p>解码</p>
<table>
<thead>
<tr>
<th style="text-align:left">方法</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>new String(byte[] bytes)</code></td>
<td style="text-align:left">通过使用平台默认字符集解码指定的字节数组，返回新的<code>String</code></td>
</tr>
<tr>
<td style="text-align:left"><code>new String(byte[] bytes, String charsetName)</code></td>
<td style="text-align:left">通过指定的字符集解码指定的字节数组，返回新的<code>String</code></td>
</tr>
</tbody>
</table>
<h2>IO流基础知识</h2>
<blockquote>
<ul>
<li>I是Input，输入流，负责把数据读取到内存中。</li>
<li>O是Output，输出流，负责把数据写入到（硬盘/网络）中。</li>
<li>内存与存储设备之间传输数据的通道。</li>
<li>用于读写数据。</li>
</ul>
</blockquote>
<p><strong>框架图</strong>
</p>
<p><strong>IO流的分类</strong></p>
<blockquote>
<p><strong>按方向</strong></p>
<ul>
<li>输入流：将“存储设备/网络”中的内容读入到“内存/本地”中。</li>
<li>输出流：将“内存/本地”中的内容写入到“存储设备/网络”中。</li>
</ul>
<p><strong>按单位</strong></p>
<ul>
<li>字节流：以字节为单位，适合读写所有类型的文件。</li>
<li>字符流：以字符为单位，只适合读写文本类型的文件。</li>
</ul>
<p><strong>按功能</strong></p>
<ul>
<li>节点流：具有实际传输数据的读写功能，基础流（字节流、字符流）。</li>
<li>过滤流：在节点流的基础之上增强功能，高级流（缓存流、转换流、打印流、数据流、序列化流）。</li>
</ul>
</blockquote>
<h3>字节输入流</h3>
<blockquote>
<ul>
<li>
<p>以内存为基准，将磁盘上的数据以“字节”的形式“读取输入”到内存中。</p>
</li>
<li>
<p>使用完后需要关闭流。</p>
</li>
<li>
<p>包路径：<code>java.io.FileInputStream</code></p>
</li>
</ul>
</blockquote>
<p><strong>构造方法</strong></p>
<table>
<thead>
<tr>
<th style="text-align:left">方法</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>new FileInputStream(File file)</code></td>
<td style="text-align:left">将File文件对象作为参数进行传输</td>
</tr>
<tr>
<td style="text-align:left"><code>new FileInputStream(String name)</code></td>
<td style="text-align:left">将文件路径作为参数进行传输</td>
</tr>
<tr>
<td style="text-align:left"><code>new FileInputStream(FileDescriptor fdObj)</code></td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
<p><strong>相关方法</strong></p>
<table>
<thead>
<tr>
<th style="text-align:left">方法</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>&lt;FileInputStream&gt;.read()</code></td>
<td style="text-align:left">从输入流中读取一个字节的数据，返回<code>int</code>，当没有数据时返回<code>-1</code></td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;FileInputStream&gt;.read(byte[] b)</code></td>
<td style="text-align:left">从输入流中读取b个字节的长度，返回<code>int</code>，当没有数据时返回<code>-1</code></td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;FileInputStream&gt;.available()</code></td>
<td style="text-align:left">将当前字节输入流对应的文件对象字节数据装到一个字节数组返回</td>
</tr>
</tbody>
</table>
<p><strong>案例</strong></p>
<blockquote>
<ul>
<li>设定固定大小的缓存区，进行多字节批量读取数据。</li>
<li>缺点：读取性能差，频繁与硬盘交互，无法解决乱码问题。</li>
</ul>
</blockquote>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">try</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 实例化File对象，添加要操作的文件</span></span>
<span class="line">    <span class="token class-name">File</span> file <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">File</span><span class="token punctuation">(</span><span class="token string">"/home/abc.text"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 实例化字节输入流对象，传入需要读取的File文件对象</span></span>
<span class="line"> <span class="token class-name">FileInputStream</span> inputFile <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">FileInputStream</span><span class="token punctuation">(</span>file<span class="token punctuation">)</span><span class="token punctuation">;</span>      </span>
<span class="line"> </span>
<span class="line">    <span class="token comment">// 类似缓存区，一批次能读取多少字节</span></span>
<span class="line"> <span class="token keyword">byte</span><span class="token punctuation">[</span><span class="token punctuation">]</span> byteData <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token keyword">byte</span><span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token comment">// 记录当前批次读取了多少字节</span></span>
<span class="line"> <span class="token keyword">int</span> len<span class="token punctuation">;</span></span>
<span class="line"> <span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token punctuation">(</span>len <span class="token operator">=</span> inputFile<span class="token punctuation">.</span><span class="token function">read</span><span class="token punctuation">(</span>byteData<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">!=</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 读取的内容是根据data读取多少字节，就输出到多少字节。</span></span>
<span class="line">        <span class="token comment">// 该步骤是正在“解码”操作，即将二进制文件转换为字符串数据</span></span>
<span class="line">        <span class="token class-name">String</span> fileData <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">String</span><span class="token punctuation">(</span>byteData<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> len<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token comment">// 在控制台输出显示</span></span>
<span class="line">        <span class="token class-name">String</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span>fileData<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"> <span class="token punctuation">}</span></span>
<span class="line"> <span class="token comment">// 释放输出流对象</span></span>
<span class="line"> inputFile<span class="token punctuation">.</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">IOException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line"> <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"文件操作报错："</span> <span class="token operator">+</span> e<span class="token punctuation">.</span><span class="token function">getMessage</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>字节输出流</h3>
<blockquote>
<ul>
<li>
<p>以内存为基准，将内存上的数据以“字节”的形式“写入输出”到磁盘中。</p>
</li>
<li>
<p>使用完后需要关闭流。</p>
</li>
<li>
<p>包路径：<code>java.io.FileOutputStream</code></p>
</li>
</ul>
</blockquote>
<p><strong>构造方法</strong></p>
<table>
<thead>
<tr>
<th style="text-align:left">方法</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>new FileOutputStream(File file)</code></td>
<td style="text-align:left">（覆盖）创建字节输入流管道与源文件对象接通</td>
</tr>
<tr>
<td style="text-align:left"><code>new FileOutputStream(String filepath)</code></td>
<td style="text-align:left">（覆盖）创建字节输入流管道与源文件路径接通</td>
</tr>
<tr>
<td style="text-align:left"><code>new FileOutputStream(File file, boolean append)</code></td>
<td style="text-align:left">（追加）创建字节输入流管道与源文件对象接通,可追加数据</td>
</tr>
<tr>
<td style="text-align:left"><code>new FileOutputStream(String filepath, boolean append)</code></td>
<td style="text-align:left">（追加）创建字节输入流管道与源文件对象接通，可追加数据</td>
</tr>
</tbody>
</table>
<p><strong>相关方法</strong></p>
<blockquote>
<ul>
<li>提示：写入数据若文件不存在则自动创建。</li>
</ul>
</blockquote>
<table>
<thead>
<tr>
<th style="text-align:left">方法</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>&lt;FileOutputStream&gt;.write(int a)</code></td>
<td style="text-align:left">写入一个字节到文件中</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;FileOutputStream&gt;.write(byte[] buffer)</code></td>
<td style="text-align:left">写入一个字节数组到文件中</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;FileOutputStream&gt;.write(byte[] buffer, int pos, int len)</code></td>
<td style="text-align:left">写入一个字节数组的一部分到文件中</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;FileOutputStream&gt;.flush()</code></td>
<td style="text-align:left">刷新，将缓冲区中的内容写入到文件中。</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;FileOutputStream&gt;.close()</code></td>
<td style="text-align:left">释放流，包含了刷新</td>
</tr>
</tbody>
</table>
<p><strong>案例</strong></p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">try</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 实例化File对象，添加要操作的文件</span></span>
<span class="line">    <span class="token class-name">File</span> file <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">File</span><span class="token punctuation">(</span><span class="token string">"/home/abc.text"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 实例化字节输出流对象，传入需要写入的File文件对象</span></span>
<span class="line"> <span class="token class-name">FileOutputStream</span> outputFile <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">FileOutputStream</span><span class="token punctuation">(</span>file<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"> </span>
<span class="line">    <span class="token comment">// 需要写入文件的数据</span></span>
<span class="line">    <span class="token class-name">String</span> data <span class="token operator">=</span> <span class="token string">"你好，世界。"</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 将数据进行“编码”操作，即将字符串数据转换为二进制文件</span></span>
<span class="line">    <span class="token keyword">byte</span><span class="token punctuation">[</span><span class="token punctuation">]</span> byteData <span class="token operator">=</span> data<span class="token punctuation">.</span><span class="token function">getBytes</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 将编码后的数据，通过字节输出流对象，写入到文件</span></span>
<span class="line">    outputFile<span class="token punctuation">.</span><span class="token function">write</span><span class="token punctuation">(</span>byteData<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 释放输出流对象</span></span>
<span class="line">    outputFile<span class="token punctuation">.</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">IOException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line"> <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"文件复制失败："</span> <span class="token operator">+</span> e<span class="token punctuation">.</span><span class="token function">getMessage</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>字符输入流</h3>
<blockquote>
<ul>
<li>
<p>以内存为基准，可以吧文件中的数据以“字符”的形式“读取输入”到内存中。</p>
</li>
<li>
<p>使用完后需要关闭流。</p>
</li>
<li>
<p>包路径：<code>java.io.FileReader</code></p>
</li>
</ul>
</blockquote>
<p><strong>构造方法</strong></p>
<table>
<thead>
<tr>
<th style="text-align:left">方法</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>new FileReader(File file)</code></td>
<td style="text-align:left">创建字符输入流管道与源文件接通</td>
</tr>
<tr>
<td style="text-align:left"><code>new FileReader(String pathname)</code></td>
<td style="text-align:left">创建字符输入流管道与源文件接通</td>
</tr>
</tbody>
</table>
<p><strong>相关方法</strong></p>
<table>
<thead>
<tr>
<th style="text-align:left">方法</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>&lt;FileReader&gt;.read()</code></td>
<td style="text-align:left">每次读取一个字符返回，若没有数据可读时返回<code>-1</code></td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;FileReader&gt;.read(char[] buffer)</code></td>
<td style="text-align:left">每次用一个字符数组去读取数据，返回字符数组读取了多少字节，若没有数据可读时返回<code>-1</code></td>
</tr>
</tbody>
</table>
<p><strong>案例</strong></p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 实例化File对象，添加要操作的文件</span></span>
<span class="line"><span class="token class-name">File</span> file <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">File</span><span class="token punctuation">(</span><span class="token string">"/home/file.text"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">try</span> <span class="token punctuation">(</span></span>
<span class="line">        <span class="token comment">// 实例化字符输入流，添加要读取的File对象</span></span>
<span class="line">        <span class="token class-name">FileReader</span> readerFile <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">FileReader</span><span class="token punctuation">(</span>file<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 创建临时存储空间，存储读取出的字符</span></span>
<span class="line">    <span class="token keyword">char</span><span class="token punctuation">[</span><span class="token punctuation">]</span> charArray <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token keyword">char</span><span class="token punctuation">[</span><span class="token number">1024</span><span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token comment">// 记住当批次读取了多少字符</span></span>
<span class="line">    <span class="token keyword">int</span> len<span class="token punctuation">;</span></span>
<span class="line">    <span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token punctuation">(</span>len<span class="token operator">=</span>readerFile<span class="token punctuation">.</span><span class="token function">read</span><span class="token punctuation">(</span>charArray<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">!=</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 将字符列表“解码”成字符串</span></span>
<span class="line">        <span class="token class-name">String</span> data <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">String</span><span class="token punctuation">(</span>charArray<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> len<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token comment">// 将结果输出到控制台</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span>data<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">IOException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line"> <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"文件复制失败："</span> <span class="token operator">+</span> e<span class="token punctuation">.</span><span class="token function">getMessage</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>字符输出流</h3>
<blockquote>
<ul>
<li>以内存为基准，把内存中的数据以“字符”的形式“写入输出”到文件中。</li>
<li>使用完后需要关闭流。</li>
<li>包路径：<code>java.io.FileWriter</code></li>
</ul>
</blockquote>
<p><strong>构造方法</strong></p>
<table>
<thead>
<tr>
<th style="text-align:left">方法</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>new FileWriter(File file)</code></td>
<td style="text-align:left">（覆盖）创建字节输出流管道与源文件对象接通</td>
</tr>
<tr>
<td style="text-align:left"><code>new FileWriter(String filepath)</code></td>
<td style="text-align:left">（覆盖）创建字节输出流管道与源文件路径接通</td>
</tr>
<tr>
<td style="text-align:left"><code>new FileWriter(File file, boolean append)</code></td>
<td style="text-align:left">（追加）创建字节输出流管道与源文件对象接通，可追加数据</td>
</tr>
<tr>
<td style="text-align:left"><code>new FileWriter(String filepath, boolean append)</code></td>
<td style="text-align:left">（追加）创建字节输出流管道与源文件路径接通，可追加数据</td>
</tr>
</tbody>
</table>
<p><strong>相关方法</strong></p>
<table>
<thead>
<tr>
<th style="text-align:left">方法</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>&lt;FileWriter&gt;.write(int a)</code></td>
<td style="text-align:left">写入一个字符</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;FileWriter&gt;.write(String str)</code></td>
<td style="text-align:left">写入一个字符串</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;FileWriter&gt;.write(String str, int off, int len)</code></td>
<td style="text-align:left">写入一个字符串的一部分</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;FileWriter&gt;.write(char[] cbuf)</code></td>
<td style="text-align:left">写入一个字符数组</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;FileWriter&gt;.write(char[] cbuf, int off, int len)</code></td>
<td style="text-align:left">写入字符数组的一部分</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;FileWriter&gt;.flush()</code></td>
<td style="text-align:left">刷新，将缓冲区中的内容写入到文件中。</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;FileWriter&gt;.close()</code></td>
<td style="text-align:left">释放流，包含了刷新</td>
</tr>
</tbody>
</table>
<p><strong>案例</strong></p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 实例化File对象，添加要操作的文件</span></span>
<span class="line"><span class="token class-name">File</span> file <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">File</span><span class="token punctuation">(</span><span class="token string">"/home/file.text"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">try</span> <span class="token punctuation">(</span></span>
<span class="line">        <span class="token comment">// 实例化字符输出流对象，传入需要写入的File文件对象</span></span>
<span class="line">        <span class="token class-name">FileWriter</span> fileWriter <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">FileWriter</span><span class="token punctuation">(</span>file<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">    </span>
<span class="line">    <span class="token comment">// 需要写入文件的数据</span></span>
<span class="line">    <span class="token class-name">String</span> data <span class="token operator">=</span> <span class="token string">"你好，世界。"</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 将数据通过字符输出流对象，写入到File文件</span></span>
<span class="line">    fileWriter<span class="token punctuation">.</span><span class="token function">write</span><span class="token punctuation">(</span>data<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">IOException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line"> <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"文件写入失败："</span> <span class="token operator">+</span> e<span class="token punctuation">.</span><span class="token function">getMessage</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>缓冲流</h3>
<blockquote>
<ul>
<li>添加缓冲流，提高原始数据流读写数据的性能，减少与硬盘交互的次数。</li>
<li>缓冲流类似添加“字符数组”，分批次读取数据。</li>
</ul>
<p><strong>类别</strong></p>
<ul>
<li><code>BufferedInputStream</code>：缓冲字节输入流</li>
<li><code>BufferedOotputStream</code>：缓冲字节输出流</li>
<li><code>BufferedReader</code>：缓冲字符输入流</li>
<li><code>BufferedWriter</code>：缓冲字符输出流</li>
</ul>
<p><strong>提示</strong></p>
<ul>
<li>缓冲流需要传入输入流或输出流，因此需要先创建原始数据流。</li>
<li>缓冲流包装原始数据流。</li>
</ul>
</blockquote>
<p><strong>构造方法</strong></p>
<table>
<thead>
<tr>
<th style="text-align:left">方法</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>new BufferedInputStream(InputStream is)</code></td>
<td style="text-align:left">（缓冲字节输入流）默认<code>8192byte</code>缓冲区大小</td>
</tr>
<tr>
<td style="text-align:left"><code>new BufferedInputStream(InputStream is, int size)</code></td>
<td style="text-align:left">（缓冲字节输入流）指定缓冲区大小</td>
</tr>
<tr>
<td style="text-align:left"><code>new BufferedOotputStream(OutputStream os)</code></td>
<td style="text-align:left">（缓冲字节输出流）默认<code>8192byte</code>缓冲区大小</td>
</tr>
<tr>
<td style="text-align:left"><code>new BufferedOotputStream(OutputStream os, int size)</code></td>
<td style="text-align:left">（缓冲字节输出流）指定缓冲区大小</td>
</tr>
<tr>
<td style="text-align:left"><code>new BufferedReader(Reader fr)</code></td>
<td style="text-align:left">（缓冲字符输入流）默认<code>8192byte</code>缓冲区大小</td>
</tr>
<tr>
<td style="text-align:left"><code>new BufferedReader(Reader fr, int sz)</code></td>
<td style="text-align:left">（缓冲字符输入流）指定缓冲区大小</td>
</tr>
<tr>
<td style="text-align:left"><code>new BufferedWriter(Writer fw)</code></td>
<td style="text-align:left">（缓冲字符输出流）默认<code>8192byte</code>缓冲区大小</td>
</tr>
<tr>
<td style="text-align:left"><code>new BufferedWriter(Writer fw, int sz)</code></td>
<td style="text-align:left">（缓冲字符输出流）指定缓冲区大小</td>
</tr>
</tbody>
</table>
<p><strong>相关方法</strong></p>
<table>
<thead>
<tr>
<th style="text-align:left">方法</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>&lt;BufferedReader&gt;.readLine()</code></td>
<td style="text-align:left">缓冲字符输入流，读取一行数据，返回<code>String</code>，没有数据时返回<code>null</code></td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;BufferedWriter&gt;.newLine()</code></td>
<td style="text-align:left">缓冲字符输出流，换行，没有返回值</td>
</tr>
</tbody>
</table>
<p><strong>案例 - 字节流操作</strong></p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token class-name">IOException</span></span><span class="token punctuation">;</span>  <span class="token comment">// IO异常处理类</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token class-name">File</span></span><span class="token punctuation">;</span>         <span class="token comment">// File文件对象</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token class-name">FileInputStream</span></span><span class="token punctuation">;</span>   <span class="token comment">// 文本字节输入流</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token class-name">FileOutputStream</span></span><span class="token punctuation">;</span>  <span class="token comment">// 文本字节输出流</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token class-name">BufferedInputStream</span></span><span class="token punctuation">;</span>   <span class="token comment">// 文本字节缓冲输入流</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token class-name">BufferedOutputStream</span></span><span class="token punctuation">;</span>  <span class="token comment">// 文本字节缓冲输出流</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Main</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> ages<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 实例化File对象，添加要读取的文件</span></span>
<span class="line">        <span class="token class-name">File</span> file <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">File</span><span class="token punctuation">(</span><span class="token string">"/home/file.text"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token comment">// 实例化File对象，添加要复制写入的文件</span></span>
<span class="line">        <span class="token class-name">File</span> fileCopy <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">File</span><span class="token punctuation">(</span><span class="token string">"/home/fileCopy.text"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token keyword">try</span> <span class="token punctuation">(</span></span>
<span class="line">                <span class="token comment">// 实例化字节输入流对象，添加要读取的File对象</span></span>
<span class="line">                <span class="token class-name">FileInputStream</span> is <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">FileInputStream</span><span class="token punctuation">(</span>file<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                <span class="token comment">// 实例化字节缓冲输入流对象，包装原始字节输入流，即添加缓冲区</span></span>
<span class="line">                <span class="token class-name">BufferedInputStream</span> bis <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">BufferedInputStream</span><span class="token punctuation">(</span>is<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">                <span class="token comment">// 实例化字节输出流对象，添加要写入的File对象</span></span>
<span class="line">                <span class="token class-name">FileOutputStream</span> of <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">FileOutputStream</span><span class="token punctuation">(</span>fileCopy<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                <span class="token comment">// 实例化字节缓冲输出流对象，包装原始字节输出流，即添加缓冲区</span></span>
<span class="line">                <span class="token class-name">BufferedOutputStream</span> bos <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">BufferedOutputStream</span><span class="token punctuation">(</span>of<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token comment">// 创建临时存储空间，存储读取出的字节</span></span>
<span class="line">            <span class="token keyword">byte</span><span class="token punctuation">[</span><span class="token punctuation">]</span> byteData <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token keyword">byte</span><span class="token punctuation">[</span><span class="token number">1024</span><span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token comment">// 记录当前批次存储了多少字节</span></span>
<span class="line">            <span class="token keyword">int</span> len<span class="token punctuation">;</span></span>
<span class="line">            <span class="token comment">// 循环与硬盘交互</span></span>
<span class="line">            <span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token punctuation">(</span>len <span class="token operator">=</span> bis<span class="token punctuation">.</span><span class="token function">read</span><span class="token punctuation">(</span>byteData<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">!=</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                <span class="token comment">// 读取的内容是根据data读取多少字节，就输出到多少字节。</span></span>
<span class="line">                <span class="token comment">// 将当批次获得的字节数据，通过字节缓冲输出流，写入到另一个File文件</span></span>
<span class="line">                bos<span class="token punctuation">.</span><span class="token function">write</span><span class="token punctuation">(</span>byteData<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> len<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token punctuation">}</span></span>
<span class="line">        <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">IOException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"文件复制失败："</span> <span class="token operator">+</span> e<span class="token punctuation">.</span><span class="token function">getMessage</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>案例 - 字符流操作</strong></p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token class-name">IOException</span></span><span class="token punctuation">;</span>  <span class="token comment">// IO异常处理类</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token class-name">File</span></span><span class="token punctuation">;</span>         <span class="token comment">// File文件对象</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token class-name">FileReader</span></span><span class="token punctuation">;</span>   <span class="token comment">// 文本字符输入流</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token class-name">FileWriter</span></span><span class="token punctuation">;</span>   <span class="token comment">// 文本字符输出流</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token class-name">BufferedReader</span></span><span class="token punctuation">;</span>   <span class="token comment">// 文本字符缓冲输入流</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token class-name">BufferedWriter</span></span><span class="token punctuation">;</span>   <span class="token comment">// 文本字符缓冲输出流</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Main</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> ages<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 实例化File对象，添加需要复制的源文件</span></span>
<span class="line">        <span class="token class-name">File</span> file <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">File</span><span class="token punctuation">(</span><span class="token string">"/home/file.text"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token comment">// 实例化File对象，添加需要复制的新文件</span></span>
<span class="line">        <span class="token class-name">File</span> fileCopy <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">File</span><span class="token punctuation">(</span><span class="token string">"/home/fileCopy.text"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token keyword">try</span> <span class="token punctuation">(</span></span>
<span class="line">                <span class="token comment">// 实例化字符输入流，添加要读取的File对象</span></span>
<span class="line">                <span class="token class-name">FileReader</span> fr <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">FileReader</span><span class="token punctuation">(</span>file<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                <span class="token comment">// 实例化字符缓冲输入流，包装原始字符输入流，即添加缓冲区</span></span>
<span class="line">                <span class="token class-name">BufferedReader</span> br <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">BufferedReader</span><span class="token punctuation">(</span>fr<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">                <span class="token comment">// 实例化字符输出流，添加要写入的File对象</span></span>
<span class="line">                <span class="token class-name">FileWriter</span> fw <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">FileWriter</span><span class="token punctuation">(</span>fileCopy<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                <span class="token comment">// 实例化字符缓冲输出流，包装原始字符输出流，即添加缓冲区</span></span>
<span class="line">                <span class="token class-name">BufferedWriter</span> bw <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">BufferedWriter</span><span class="token punctuation">(</span>fw<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token comment">// 创建临时存储空间，存储读取出的字符</span></span>
<span class="line">            <span class="token keyword">char</span><span class="token punctuation">[</span><span class="token punctuation">]</span> charArray <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token keyword">char</span><span class="token punctuation">[</span><span class="token number">1024</span><span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token comment">// 记录当前批次存储了多少字符</span></span>
<span class="line">            <span class="token keyword">int</span> len<span class="token punctuation">;</span></span>
<span class="line">            <span class="token comment">// 循环与硬盘交互</span></span>
<span class="line">            <span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token punctuation">(</span>len <span class="token operator">=</span> br<span class="token punctuation">.</span><span class="token function">read</span><span class="token punctuation">(</span>charArray<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">!=</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                <span class="token comment">// 将当批次获得的字符数据，通过字节缓冲输出流，写入到另一个File文件</span></span>
<span class="line">                bw<span class="token punctuation">.</span><span class="token function">write</span><span class="token punctuation">(</span>charArray<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> len<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token punctuation">}</span></span>
<span class="line">        <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">IOException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token keyword">throw</span> <span class="token keyword">new</span> <span class="token class-name">RuntimeException</span><span class="token punctuation">(</span>e<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>转换流</h3>
<blockquote>
<ul>
<li>若代码编码和被读取的文本文件的编码不一致，则使用字符流读取文本文件时就会出现乱码。</li>
<li>解决不同编码时，字符流读取文本内容乱码的问题。</li>
<li>解决思路：先获取文件的原始字节流，再将其按真实的字符集编码转换成字符输入流，这样字符输入流中的字符就不会乱码。</li>
</ul>
<p><strong>类别</strong></p>
<ul>
<li><code>InputStreamReader</code>字符输入转换流：控制输入读取的文件用什么字符集解码。</li>
<li><code>OutputStreamWrite</code>字符输出转换流：控制输出写入的文件用什么字符集编码。</li>
</ul>
</blockquote>
<p><strong>构造方法</strong></p>
<table>
<thead>
<tr>
<th style="text-align:left">方法</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>new InputStreamReader(InputStream is)</code></td>
<td style="text-align:left">（字符输入转换流）把原始的字节输入流，按照代码默认编码转换成字符输入流（与直接使用FileReader的效果一样）</td>
</tr>
<tr>
<td style="text-align:left"><code>new InputStreamReader(InputStream is, String charset)</code></td>
<td style="text-align:left">（字符输入转换流）将原始字节输入流，按照指定字符集编码转成字符输入流</td>
</tr>
<tr>
<td style="text-align:left"><code>new OutputStreamWrite(OutputStream is)</code></td>
<td style="text-align:left">（字符输出转换流）将原始字节数据流，按照文件默认编码转换成字符输出流</td>
</tr>
<tr>
<td style="text-align:left"><code>new OutputStreamWrite(OutputStream is, String charset)</code></td>
<td style="text-align:left">（字符输出转换流）将原始字节数据流，按照指定编码转换成字符输出流</td>
</tr>
</tbody>
</table>
<h3>打印流</h3>
<blockquote>
<ul>
<li><code>PrintStream</code>：字节打印流</li>
<li><code>PrintWriter</code>：字符打印流</li>
</ul>
</blockquote>
<p><strong>构造方法</strong></p>
<table>
<thead>
<tr>
<th style="text-align:left">字节打印流方法</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>new PrintStream(OutputStream fos)</code></td>
<td style="text-align:left">打印流直接通向字节输出流对象</td>
</tr>
<tr>
<td style="text-align:left"><code>new PrintStream(File file)</code></td>
<td style="text-align:left">打印流直接通向File文件对象</td>
</tr>
<tr>
<td style="text-align:left"><code>new PrintStream(String fileName)</code></td>
<td style="text-align:left">打印流直接通向文件路径</td>
</tr>
<tr>
<td style="text-align:left"><code>new PrintStream(String fileName, Charset charset)</code></td>
<td style="text-align:left">指定写入的字符编码</td>
</tr>
<tr>
<td style="text-align:left"><code>new PrintStream(OutputStream out, boolean autoFlush)</code></td>
<td style="text-align:left">指定字节输出流，是否自动刷新</td>
</tr>
<tr>
<td style="text-align:left"><code>new PrintStream(OutputStream out, boolean autoFlush, String encoding)</code></td>
<td style="text-align:left">指定字节输出流，是否自动刷新，字符编码</td>
</tr>
</tbody>
</table>
<table>
<thead>
<tr>
<th style="text-align:left">字符打印流方法</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>new PrintWriter(OutputStream fos)</code></td>
<td style="text-align:left">打印流直接通向字符输出流对象</td>
</tr>
<tr>
<td style="text-align:left"><code>new PrintWriter(File file)</code></td>
<td style="text-align:left">打印流直接通向File文件对象</td>
</tr>
<tr>
<td style="text-align:left"><code>new PrintWriter(String fileName)</code></td>
<td style="text-align:left">打印流直接通向文件路径</td>
</tr>
<tr>
<td style="text-align:left"><code>new PrintWriter(String fileName, Charset charset)</code></td>
<td style="text-align:left">指定写入的字符编码</td>
</tr>
<tr>
<td style="text-align:left"><code>new PrintWriter(OutputStream out, boolean autoFlush)</code></td>
<td style="text-align:left">指定字符输出流，是否自动刷新</td>
</tr>
<tr>
<td style="text-align:left"><code>new PrintWriter(OutputStream out, boolean autoFlush, String encoding)</code></td>
<td style="text-align:left">指定字符输出流，是否自动刷新，字符编码</td>
</tr>
</tbody>
</table>
<p><strong>相关方法</strong></p>
<table>
<thead>
<tr>
<th style="text-align:left">字节打印流方法</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>&lt;PrintStream&gt;.println(&lt;任意数据&gt;)</code></td>
<td style="text-align:left">打印任意数据，有换行</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;PrintStream&gt;.print(&lt;任意数据&gt;)</code></td>
<td style="text-align:left">打印任意数据，不会换行</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;PrintStream&gt;.write(&lt;数据&gt;)</code></td>
<td style="text-align:left">可以支持写字节数据</td>
</tr>
</tbody>
</table>
<table>
<thead>
<tr>
<th style="text-align:left">字符打印流方法</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>&lt;PrintWriter&gt;.println(&lt;任意数据&gt;)</code></td>
<td style="text-align:left">打印任意数据，有换行</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;PrintWriter&gt;.print(&lt;任意数据&gt;)</code></td>
<td style="text-align:left">打印任意数据，不会换行</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;PrintWriter&gt;.write(&lt;数据&gt;)</code></td>
<td style="text-align:left">可以支持写字节数据</td>
</tr>
</tbody>
</table>
<h3>数据流</h3>
<blockquote>
<ul>
<li>允许把数据和其类型一并写出去。</li>
</ul>
<p><strong>类别</strong></p>
<ul>
<li><code>DataInputStream</code>：输入数据流</li>
<li><code>DataOutputStream</code>：输出数据流</li>
</ul>
</blockquote>
<p><strong>构造方法</strong></p>
<table>
<thead>
<tr>
<th style="text-align:left">输入数据流方法</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>new DataInputStream(OutputStream out)</code></td>
<td style="text-align:left">创建新数据输出流包基础的字节输入流</td>
</tr>
</tbody>
</table>
<table>
<thead>
<tr>
<th style="text-align:left">输出数据流方法</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>new DataOutputStream(OutputStream out)</code></td>
<td style="text-align:left">创建新数据输出流包基础的字节输出流</td>
</tr>
</tbody>
</table>
<p><strong>相关方法</strong></p>
<table>
<thead>
<tr>
<th style="text-align:left">输入数据流方法</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>&lt;DataInputStream&gt;.readerByte()</code></td>
<td style="text-align:left">将<code>byte</code>类型数据写入基础的字节输出流</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;DataInputStream&gt;.readerInt()</code></td>
<td style="text-align:left">将<code>int</code>类型数据写入基础的字节输出流</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;DataInputStream&gt;.readerDouble()</code></td>
<td style="text-align:left">将<code>double</code>类型数据写入基础的字节输出流</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;DataInputStream&gt;.readerUTF()</code></td>
<td style="text-align:left">将字符串数据以UTF-8编码成字节写入基础的字节输出流</td>
</tr>
</tbody>
</table>
<table>
<thead>
<tr>
<th style="text-align:left">输出数据流方法</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>&lt;DataOutputStream&gt;.writeByte(int v)</code></td>
<td style="text-align:left">将<code>byte</code>类型数据写入基础的字节输出流</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;DataOutputStream&gt;.writeInt(int v)</code></td>
<td style="text-align:left">将<code>int</code>类型数据写入基础的字节输出流</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;DataOutputStream&gt;.writeDouble(Double v)</code></td>
<td style="text-align:left">将<code>double</code>类型数据写入基础的字节输出流</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;DataOutputStream&gt;.writeUTF(String str)</code></td>
<td style="text-align:left">将字符串数据以UTF-8编码成字节写入基础的字节输出流</td>
</tr>
</tbody>
</table>
<h3>序列化流</h3>
<blockquote>
<p><strong>类别</strong></p>
<ul>
<li><code>ObjectInputStream</code>：（对象字节输入流）对象反序列化，把文件里的java对象读出来。</li>
<li><code>ObjectOutputStream</code>：（对象字节输出流）对象序列化，把java对象写入到文件中去。</li>
</ul>
<p>提示：</p>
<ul>
<li>对象如果需要参与序列化，则必须让该对象的类实现序列化接口<code>java.io.Serializable</code>，用于表示一个标记，通过获取对象是否有该方法来判断对象是否运行被序列化。</li>
</ul>
</blockquote>
<p><strong>构造方法</strong></p>
<table>
<thead>
<tr>
<th style="text-align:left">方法</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>new ObjectInputStream(OutputStream fis)</code></td>
<td style="text-align:left">创建对象字符输入流，包装基础的字节输入流</td>
</tr>
<tr>
<td style="text-align:left"><code>new ObjectOutputStream(OutputStream fos)</code></td>
<td style="text-align:left">创建对象字符输出流，包装基础的字节输出流</td>
</tr>
</tbody>
</table>
<p><strong>相关方法</strong></p>
<table>
<thead>
<tr>
<th style="text-align:left">方法</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;ObjectOutputStream&gt;.readObject()</code></td>
<td style="text-align:left">将对象输入读取出来，返回<code>Object</code></td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;ObjectOutputStream&gt;.writeObject(object o)</code></td>
<td style="text-align:left">将对象输出写入到文件</td>
</tr>
</tbody>
</table>
<p><strong>案例 - 对象序列化</strong></p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token operator">*</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Main</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> ages<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 实例化File对象</span></span>
<span class="line">        <span class="token class-name">File</span> file <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">File</span><span class="token punctuation">(</span><span class="token string">"/home/file.text"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token keyword">try</span> <span class="token punctuation">(</span></span>
<span class="line">                <span class="token comment">// 实例化文件字节输出流，添加需要写入数据的File对象</span></span>
<span class="line">                <span class="token class-name">FileOutputStream</span> fos <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">FileOutputStream</span><span class="token punctuation">(</span>file<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                <span class="token comment">// 实例化对象字节输出流，添加文件字节输出流</span></span>
<span class="line">                <span class="token class-name">ObjectOutputStream</span> oos <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ObjectOutputStream</span><span class="token punctuation">(</span>fos<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token comment">// 创建对象，该对象的类必须继承`Serializable`接口</span></span>
<span class="line">            <span class="token class-name">User</span> user <span class="token operator">=</span> <span class="token class-name">User</span><span class="token punctuation">(</span><span class="token string">"姓名"</span><span class="token punctuation">,</span> <span class="token number">18</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token comment">// 通过对象通过对象字节输出流，将对象写入文件</span></span>
<span class="line">            oos<span class="token punctuation">.</span><span class="token function">writeObject</span><span class="token punctuation">(</span>user<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">FileNotFoundException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token keyword">throw</span> <span class="token keyword">new</span> <span class="token class-name">RuntimeException</span><span class="token punctuation">(</span>e<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">IOException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token keyword">throw</span> <span class="token keyword">new</span> <span class="token class-name">RuntimeException</span><span class="token punctuation">(</span>e<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>案例 - 对象反序列化</strong></p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token operator">*</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Main</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> ages<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 实例化File对象</span></span>
<span class="line">        <span class="token class-name">File</span> file <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">File</span><span class="token punctuation">(</span><span class="token string">"/home/file.text"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token keyword">try</span> <span class="token punctuation">(</span></span>
<span class="line">                <span class="token comment">// 实例化文件字节输入流，添加需要读取数据的File对象</span></span>
<span class="line">                <span class="token class-name">FileInputStream</span> fos <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">FileInputStream</span><span class="token punctuation">(</span>file<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                <span class="token comment">// 实例化对象字节输入流，添加文件字节输入流</span></span>
<span class="line">                <span class="token class-name">ObjectIntputStream</span> oos <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ObjectIntputStream</span><span class="token punctuation">(</span>fos<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token comment">// 通过对象通过对象字节输出流，将对象读取出来</span></span>
<span class="line">            <span class="token comment">// (重点)获得将对象文件后，需要手动强转成User对象数据类型</span></span>
<span class="line">            <span class="token class-name">User</span> user <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token class-name">User</span><span class="token punctuation">)</span>oos<span class="token punctuation">.</span><span class="token function">writeObject</span><span class="token punctuation">(</span>user<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">FileNotFoundException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token keyword">throw</span> <span class="token keyword">new</span> <span class="token class-name">RuntimeException</span><span class="token punctuation">(</span>e<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">IOException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token keyword">throw</span> <span class="token keyword">new</span> <span class="token class-name">RuntimeException</span><span class="token punctuation">(</span>e<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>IO流的资源释放操作</h2>
<h3><code>try-catch-finally</code></h3>
<p><strong>案例</strong></p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token class-name">File</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token class-name">FileInputStream</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token class-name">FileOutputStream</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token class-name">IOException</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Main</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> ages<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 实例化File对象，添加要读取的文件</span></span>
<span class="line">        <span class="token class-name">File</span> file <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">File</span><span class="token punctuation">(</span><span class="token string">"/home/file.text"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token comment">// 实例化File对象，添加要复制写入的文件</span></span>
<span class="line">        <span class="token class-name">File</span> fileCopy <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">File</span><span class="token punctuation">(</span><span class="token string">"/home/fileCopy.text"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 实例化字节输入流对象</span></span>
<span class="line">        <span class="token class-name">InputStream</span> inputFile <span class="token operator">=</span> <span class="token keyword">null</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token comment">// 实例化字节输出流对象</span></span>
<span class="line">        <span class="token class-name">OutputStream</span> outputFile <span class="token operator">=</span> <span class="token keyword">null</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token keyword">try</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token comment">// 传入需要读取的File文件对象</span></span>
<span class="line">            inputFile <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">FileInputStream</span><span class="token punctuation">(</span>file<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token comment">// 传入需要写入的File文件对象</span></span>
<span class="line">            outputFile <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">FileOutputStream</span><span class="token punctuation">(</span>fileCopy<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">            <span class="token comment">// 类似缓存区，一批次能读取多少字节</span></span>
<span class="line">            <span class="token keyword">byte</span><span class="token punctuation">[</span><span class="token punctuation">]</span> byteData <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token keyword">byte</span><span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token comment">// 记录当前批次读取了多少字节</span></span>
<span class="line">            <span class="token keyword">int</span> len<span class="token punctuation">;</span></span>
<span class="line">            <span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token punctuation">(</span>len <span class="token operator">=</span> inputFile<span class="token punctuation">.</span><span class="token function">read</span><span class="token punctuation">(</span>byteData<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">!=</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                <span class="token comment">// 读取的内容是根据data读取多少字节，就输出到多少字节。</span></span>
<span class="line">                <span class="token comment">// 将读取到的字节数据，通过字节输出流对象，写入到文件</span></span>
<span class="line">                outputFile<span class="token punctuation">.</span><span class="token function">write</span><span class="token punctuation">(</span>byteData<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> len<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">        <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">IOException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"文件复制失败："</span> <span class="token operator">+</span> e<span class="token punctuation">.</span><span class="token function">getMessage</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token punctuation">}</span> <span class="token keyword">finally</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token comment">// 释放输出流对象资源</span></span>
<span class="line">            <span class="token keyword">try</span> <span class="token punctuation">{</span></span>
<span class="line">                <span class="token comment">// 判断输出流对象是否已经关闭</span></span>
<span class="line">                <span class="token keyword">if</span> <span class="token punctuation">(</span>outputFile <span class="token operator">!=</span> <span class="token keyword">null</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                    <span class="token comment">// 释放输出流对象</span></span>
<span class="line">                    outputFile<span class="token punctuation">.</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                <span class="token punctuation">}</span></span>
<span class="line">            <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">IOException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                e<span class="token punctuation">.</span><span class="token function">printStackTrace</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token punctuation">}</span></span>
<span class="line">            <span class="token comment">// 释放输入流对象资源</span></span>
<span class="line">            <span class="token keyword">try</span> <span class="token punctuation">{</span></span>
<span class="line">                <span class="token comment">// 判断输入流对象是否已经关闭</span></span>
<span class="line">                <span class="token keyword">if</span> <span class="token punctuation">(</span>inputFile <span class="token operator">!=</span> <span class="token keyword">null</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                    <span class="token comment">// 释放输出流对象</span></span>
<span class="line">                    inputFile<span class="token punctuation">.</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                <span class="token punctuation">}</span></span>
<span class="line">            <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">IOException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                e<span class="token punctuation">.</span><span class="token function">printStackTrace</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token punctuation">}</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3><code>try-with-resource</code></h3>
<p><strong>案例</strong></p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token class-name">File</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token class-name">FileInputStream</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token class-name">FileOutputStream</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token class-name">IOException</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Main</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> ages<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 实例化File对象，添加要读取的文件</span></span>
<span class="line">        <span class="token class-name">File</span> file <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">File</span><span class="token punctuation">(</span><span class="token string">"/home/file.text"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token comment">// 实例化File对象，添加要复制写入的文件</span></span>
<span class="line">        <span class="token class-name">File</span> fileCopy <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">File</span><span class="token punctuation">(</span><span class="token string">"/home/fileCopy.text"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token keyword">try</span> <span class="token punctuation">(</span></span>
<span class="line">                <span class="token comment">// 实例化字节输入流对象，传入需要读取的File文件对象</span></span>
<span class="line">                <span class="token class-name">InputStream</span> inputFile <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">FileInputStream</span><span class="token punctuation">(</span>file<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                <span class="token comment">// 实例化字节输出流对象，传入需要写入的File文件对象</span></span>
<span class="line">                <span class="token class-name">OutputStream</span> outputFile <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">FileOutputStream</span><span class="token punctuation">(</span>fileCopy<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            </span>
<span class="line">            <span class="token comment">// 类似缓存区，一批次能读取多少字节</span></span>
<span class="line">            <span class="token keyword">byte</span><span class="token punctuation">[</span><span class="token punctuation">]</span> byteData <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token keyword">byte</span><span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token comment">// 记录当前批次读取了多少字节</span></span>
<span class="line">            <span class="token keyword">int</span> len<span class="token punctuation">;</span></span>
<span class="line">            <span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token punctuation">(</span>len <span class="token operator">=</span> inputFile<span class="token punctuation">.</span><span class="token function">read</span><span class="token punctuation">(</span>byteData<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">!=</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                <span class="token comment">// 读取的内容是根据data读取多少字节，就输出到多少字节。</span></span>
<span class="line">                <span class="token comment">// 将读取到的字节数据，通过字节输出流对象，写入到文件</span></span>
<span class="line">                outputFile<span class="token punctuation">.</span><span class="token function">write</span><span class="token punctuation">(</span>byteData<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> len<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">        <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">IOException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"文件复制失败："</span> <span class="token operator">+</span> e<span class="token punctuation">.</span><span class="token function">getMessage</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - API - 「java.lang」</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjava.lang%E3%80%8D.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjava.lang%E3%80%8D.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - API - 「java.lang」</source>
      <description>文章摘要： 提供java语言程序设计的基础类和接口。 介绍 简要说明 包含了 Java 程序设计中的基础类和接口。 这个包自动导入到所有的 Java 程序中，因此其类和接口可以直接使用，无需显式导入。 主要功能 基本类和接口：提供了 Object 类（所有类的超类）、Class 类（反射功能的支持）、String 类（字符串操作）、Thread 类（多...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Sun, 24 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 提供java语言程序设计的基础类和接口。</p>
<!-- more -->
<h2>介绍</h2>
<p>简要说明</p>
<ul>
<li>包含了 Java 程序设计中的基础类和接口。</li>
<li>这个包自动导入到所有的 Java 程序中，因此其类和接口可以直接使用，无需显式导入。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>基本类和接口</strong>：提供了 Object 类（所有类的超类）、Class 类（反射功能的支持）、String 类（字符串操作）、Thread 类（多线程支持）等。</li>
<li><strong>基本数据类型的包装类</strong>：如 Integer、Long、Float、Double、Boolean 等，用于将基本数据类型转换为对象。</li>
<li><strong>数学运算</strong>：Math 类提供了基本的数学运算和函数。</li>
<li><strong>异常处理</strong>：定义了 Throwable 类及其子类 Error 和 Exception，用于异常处理机制。</li>
<li><strong>系统操作</strong>：System 类提供了标准输入输出流以及访问外部定义的属性和环境变量的方法。</li>
<li><strong>运行时操作</strong>：Runtime 类和 ProcessBuilder 类提供了与 Java 运行时环境交互的方法。</li>
<li><strong>安全操作</strong>：SecurityManager 类用于安全管理。</li>
<li><strong>反射操作</strong>：提供了反射 API，如 Method、Field、Constructor 类，允许程序在运行时取得任何类的内部信息，并能直接操作任意对象的内部属性及方法。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>字符串不可变性</strong>：String 类的对象是不可变的，修改字符串实际上会创建一个新的字符串对象。</li>
<li><strong>异常处理</strong>：在编写代码时，应合理使用 try-catch-finally 结构来处理异常。</li>
<li><strong>包装类缓存</strong>：基本数据类型的包装类对于某些值有缓存机制，例如 Integer 对 -128 到 127 的整数进行了缓存。</li>
<li><strong>反射性能</strong>：反射操作通常比直接代码执行要慢，因为它涉及到动态类型检查和方法调用。</li>
<li><strong>线程安全</strong>：在使用多线程时，要注意同步和线程安全问题。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>基础编程</strong>：任何 Java 程序都会直接或间接地使用 <code>java.lang</code> 包中的类和接口。</li>
<li><strong>字符串操作</strong>：String 和 StringBuilder 类广泛用于文本处理。</li>
<li><strong>数学计算</strong>：Math 类在需要进行数学计算时非常有用。</li>
<li><strong>多线程编程</strong>：Thread 和 Runnable 接口用于实现多线程。</li>
<li><strong>异常处理</strong>：所有的异常处理都会用到 <code>java.lang</code> 包中的异常类。</li>
<li><strong>反射编程</strong>：当需要在运行时分析或操作类和对象时，反射 API 是必不可少的。</li>
<li><strong>系统交互</strong>：System 和 Runtime 类提供了与底层操作系统交互的功能。</li>
</ul>
<h3>基础类和接口</h3>
<ul>
<li><strong>Object</strong>: 所有类的超类，提供了诸如 <code>equals()</code>, <code>hashCode()</code>, <code>toString()</code>, <code>getClass()</code> 和 <code>clone()</code> 等方法。</li>
<li><strong>Class</strong>: 表示类的抽象，提供了反射的功能。</li>
<li><strong>String</strong>: 不可变的字符串类，提供了处理字符串的各种方法。</li>
<li><strong>StringBuilder/StringBuffer</strong>: 可变的字符串类，用于高效地构建字符串。</li>
<li><strong>Math</strong>: 包含执行基本数学运算的方法，如三角函数、指数、对数、平方根等。</li>
<li><strong>System</strong>: 提供标准输入输出流和系统属性访问的方法。</li>
<li><strong>Runtime</strong>: 提供与 Java 运行时环境交互的方法。</li>
</ul>
<h3>异常类</h3>
<ul>
<li><strong>Throwable</strong>: 所有错误和异常的超类。</li>
<li><strong>Error</strong>: 表示合理的应用程序不应该捕获的严重问题。</li>
<li><strong>Exception</strong>: 表示合理的应用程序可能想要捕获的条件。</li>
<li><strong>RuntimeException</strong>: 表示可能在 Java 代码中的任何地方抛出的异常。</li>
</ul>
<h3>包装类（Wrapper Classes）</h3>
<ul>
<li><strong>Integer, Long, Float, Double, Byte, Short, Character, Boolean</strong>: 这些类提供了对应的基本数据类型的对象包装，以及一些有用的方法，如转换和解析。</li>
</ul>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 通过包装类，实现 数据类型 转换为 基本数据类型</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 数据类型转换 - 转换为int类型</span></span>
<span class="line"><span class="token class-name">Integer</span><span class="token punctuation">.</span><span class="token function">parseInt</span><span class="token punctuation">(</span><span class="token operator">&lt;</span>需要转换的数据<span class="token operator">&gt;</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token comment">// 数据类型转换 - 转换为double类型</span></span>
<span class="line"><span class="token class-name">Double</span><span class="token punctuation">.</span><span class="token function">parseDouble</span><span class="token punctuation">(</span><span class="token operator">&lt;</span>需要转换的数据<span class="token operator">&gt;</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>安全和管理</h3>
<ul>
<li><strong>SecurityManager</strong>: 允许应用程序实现安全策略。</li>
<li><strong>Thread</strong>: 表示线程，提供创建和管理线程的方法。</li>
<li><strong>ThreadGroup</strong>: 表示线程的集合。</li>
</ul>
<h3>反射和接口</h3>
<ul>
<li><strong>反射相关的类（如 Method, Field, Constructor）</strong>: 提供了在运行时分析或操作类和对象的属性和方法的能力。</li>
<li><strong>Cloneable</strong>: 标记接口，表示一个类可以通过 <code>clone()</code> 方法克隆其对象。</li>
<li><strong>Serializable</strong>: 标记接口，表示一个类的对象可以被序列化。</li>
</ul>
<h3>学习总结</h3>
<h4>基础知识</h4>
<ul>
<li><strong>Object 类</strong>: 理解 <code>Object</code> 类的方法是理解 Java 面向对象的基础。</li>
<li><strong>字符串操作</strong>: 掌握 <code>String</code>, <code>StringBuilder</code>, 和 <code>StringBuffer</code> 的使用场景和区别。</li>
<li><strong>数学运算</strong>: 熟悉 <code>Math</code> 类提供的方法，用于执行数学计算。</li>
</ul>
<h4>异常处理</h4>
<ul>
<li><strong>异常机制</strong>: 学习如何使用 try-catch-finally 语句块来处理异常。</li>
<li><strong>自定义异常</strong>: 学习如何创建和使用自定义异常类。</li>
</ul>
<h4>包装类</h4>
<ul>
<li><strong>自动装箱和拆箱</strong>: 理解基本数据类型和包装类之间的自动转换。</li>
<li><strong>实用方法</strong>: 掌握包装类提供的一些实用方法，如 <code>valueOf()</code>, <code>parseInt()</code> 等。</li>
</ul>
<h4>反射</h4>
<ul>
<li><strong>反射API</strong>: 学习如何使用反射 API 来分析类和对象的属性和方法。</li>
<li><strong>动态代理</strong>: 了解如何使用 <code>Proxy</code> 类和 <code>InvocationHandler</code> 接口创建动态代理。</li>
</ul>
<h4>线程</h4>
<ul>
<li><strong>线程创建和管理</strong>: 学习如何创建、启动、同步和管理线程。</li>
<li><strong>线程安全</strong>: 了解多线程环境下可能出现的问题，以及如何避免这些问题。</li>
</ul>
<h4>实践建议</h4>
<ul>
<li><strong>避免使用字符串连接符</strong>: 在需要频繁修改字符串时，使用 <code>StringBuilder</code> 或 <code>StringBuffer</code>。</li>
<li><strong>异常处理</strong>: 不要使用异常来控制正常的程序流程。</li>
<li><strong>包装类</strong>: 在集合中使用包装类而不是基本数据类型。</li>
<li><strong>反射使用</strong>: 反射是一个强大的工具，但应谨慎使用，因为它可能会影响性能和安全性。</li>
<li><strong>线程同步</strong>: 在多线程编程中，合理使用同步机制来避免竞态条件和死锁。</li>
</ul>
<h2><code>java.lang.annotation</code></h2>
<p>为 Java 编程语言注释工具提供库支持。</p>
<h2><code>java.lang.instrument</code></h2>
<p>提供允许 Java 编程语言代理检测 JVM 上运行的程序的服务。</p>
<h2><code>java.lang.invoke</code></h2>
<p><code>java.lang.invoke</code> 包包含由 Java 核心类库和虚拟机直接提供的动态语言支持。</p>
<h2><code>java.lang.management</code></h2>
<p>提供管理接口，用于监控和管理 Java 虚拟机和 Java 运行时中的其他组件。</p>
<h2><code>java.lang.ref</code></h2>
<p>提供引用对象类，这些类支持与垃圾回收器进行有限程度的交互。</p>
<h2><code>java.lang.reflect</code></h2>
<p>提供用于获取有关类和对象的反射信息的类和接口。</p>
<h1>cache</h1>
<h3><code>String</code></h3>
<ul>
<li>封装了与字符串类型相关的操作方法。</li>
<li><code>&lt;String&gt;.split(regex)</code>：根据传入regex参数，来分割传入的字符串对象，regex是一个正则表达式，即根据什么符号进行分割，返回<code>String[]</code>。</li>
</ul>
<p>方法</p>
<ul>
<li><code>&lt;对象&gt;.equals(&lt;字符或字符串&gt;)</code>：判断“对象”与“字符或字符串”是否相等。</li>
</ul>
<h3><code>Class</code></h3>
<ul>
<li>用于描述正在运行的java应用程序中的类和接口的状态。</li>
</ul>
<h3><code>ClassLoader</code></h3>
<ul>
<li>用于加载类的对象。</li>
</ul>
<h3><code>Enum</code></h3>
<ul>
<li>用于定义枚举类型。</li>
</ul>
<h3><code>Math</code></h3>
<ul>
<li>用于实现基本数学运算。</li>
</ul>
<h3><code>Number</code></h3>
<ul>
<li>抽象类，是基本数据类型类的父类。</li>
</ul>
<h3><code>Object</code></h3>
<ul>
<li>所有java类的根类。</li>
</ul>
<h3><code>Package</code></h3>
<ul>
<li>封装类有关java包的实现和规范的版本信息。</li>
</ul>
<h3><code>Runtime</code></h3>
<ul>
<li>Runtime类对象使java应用程序与其运行环境相连接。</li>
</ul>
<h3><code>StringBuffer</code></h3>
<ul>
<li>用于可变字符串的操作。</li>
</ul>
<h3><code>StringBuilder</code></h3>
<ul>
<li>创建可变的字符串对象。</li>
</ul>
<h3><code>System</code></h3>
<ul>
<li>封装了一些与java虚拟机系统相关的方法。</li>
</ul>
<h3><code>Thread</code></h3>
<ul>
<li>创建和控制线程。</li>
</ul>
<h3><code>ThreadGroup</code></h3>
<ul>
<li>创建和控制线程组。</li>
</ul>
<h3><code>Throwable</code></h3>
<ul>
<li>定义了java中的所有错误和异常的父类。</li>
</ul>
<h3><code>Process</code></h3>
<ul>
<li>定义一个进程<code>process</code>对象，通过<code>Runtime</code>类中的<code>exec</code>方法启动该进程对象。</li>
</ul>
<h3>常见的接口</h3>
<ul>
<li><code>Appendable</code>：用于追加字符串。</li>
<li><code>Cloneable</code>：用于复制类对象。</li>
<li><code>Runnable</code>：用于实现类对象具有线程功能。</li>
<li><code>Comparable</code>：用于类对象的排序。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - API - 「java.nio」</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjava.nio%E3%80%8D.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjava.nio%E3%80%8D.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - API - 「java.nio」</source>
      <description>文章摘要： 为输入输出提供缓冲区的类。 介绍 简要说明 提供用于高性能I/O操作的API。 包含了一套新的抽象，如缓冲区（Buffers）、通道（Channels）和选择器（Selectors），这些抽象支持非阻塞I/O操作，是Java New I/O API的核心。 主要功能 缓冲区（Buffers）：提供了一组用于存储不同数据类型的容器，如Byte...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Sun, 24 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 为输入输出提供缓冲区的类。</p>
<!-- more -->
<h2>介绍</h2>
<p>简要说明</p>
<ul>
<li>提供用于高性能I/O操作的API。</li>
<li>包含了一套新的抽象，如缓冲区（Buffers）、通道（Channels）和选择器（Selectors），这些抽象支持非阻塞I/O操作，是Java New I/O API的核心。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>缓冲区（Buffers）</strong>：提供了一组用于存储不同数据类型的容器，如ByteBuffer、CharBuffer等，这些缓冲区是通道读写数据的中介。</li>
<li><strong>通道（Channels）</strong>：代表打开到I/O设备（如文件、套接字等）的连接。通道用于从缓冲区读取数据或将数据写入缓冲区。</li>
<li><strong>选择器（Selectors）</strong>：用于监控多个通道的事件（如连接、接受、读取、写入），使得单个线程可以管理多个通道，适用于实现多路复用、非阻塞I/O。</li>
<li><strong>文件系统（FileSystems）</strong>：提供了访问文件系统的高级API，支持文件属性的查询和修改，以及文件系统的遍历。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>内存管理</strong>：在使用缓冲区时，需要注意内存分配和释放，避免内存泄漏。</li>
<li><strong>线程安全</strong>：缓冲区不是线程安全的，多线程操作同一缓冲区时需要外部同步。</li>
<li><strong>性能影响</strong>：非阻塞I/O可以提高应用程序的性能，但同时也增加了编程的复杂性。</li>
<li><strong>正确的资源关闭</strong>：使用完通道和其他资源后，应该正确地关闭它们以释放系统资源。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>高性能网络编程</strong>：使用NIO实现非阻塞网络通信，适用于需要高并发处理的网络应用。</li>
<li><strong>文件处理</strong>：使用NIO的文件通道和文件属性视图进行高效的文件读写操作。</li>
<li><strong>大规模数据处理</strong>：当需要处理大量数据时，NIO的缓冲区可以提供更高效的数据传输方式。</li>
<li><strong>需要非阻塞I/O的场景</strong>：在需要同时处理多个I/O操作而不希望为每个操作创建一个线程时，NIO的选择器非常有用。</li>
</ul>
<h3>主要组件</h3>
<h4>Channels</h4>
<p>通道是用于 I/O 操作的途径，与传统的流不同，通道是双向的，可以用于读写操作。</p>
<ul>
<li><code>FileChannel</code>: 用于文件的数据读写。</li>
<li><code>SocketChannel</code>: 用于 TCP 网络的数据读写。</li>
<li><code>ServerSocketChannel</code>: 监听 TCP 连接请求，并为每个请求创建一个 <code>SocketChannel</code>。</li>
<li><code>DatagramChannel</code>: 用于 UDP 网络的数据读写。</li>
</ul>
<h4>Buffers</h4>
<p>缓冲区是数据的容器，用于与通道进行数据交换。</p>
<ul>
<li><code>ByteBuffer</code>: 最常用的缓冲区，可以存储字节数据。</li>
<li><code>CharBuffer</code>, <code>ShortBuffer</code>, <code>IntBuffer</code>, <code>LongBuffer</code>, <code>FloatBuffer</code>, <code>DoubleBuffer</code>: 用于存储不同类型的数据。</li>
</ul>
<h4>Selectors</h4>
<p>选择器用于检查一个或多个通道是否准备好进行 I/O 操作，是支持非阻塞 I/O 的核心。</p>
<h4>Files</h4>
<p><code>Files</code> 类提供了大量用于操作文件和文件系统的静态方法。</p>
<h3>主要类和方法</h3>
<h4>ByteBuffer</h4>
<ul>
<li><code>allocate(int capacity)</code>: 分配一个新的字节缓冲区。</li>
<li><code>flip()</code>: 切换读写模式，将缓冲区的 limit 设置为 position，position 设置为 0。</li>
<li><code>clear()</code>: 清空缓冲区，准备下一次读写操作。</li>
<li><code>rewind()</code>: 重置 position 为 0，limit 保持不变。</li>
<li><code>remaining()</code>: 返回当前位置和限制之间的元素数。</li>
</ul>
<h4>FileChannel</h4>
<ul>
<li><code>read(ByteBuffer dst)</code>: 从通道读取数据到缓冲区。</li>
<li><code>write(ByteBuffer src)</code>: 从缓冲区写入数据到通道。</li>
<li><code>position()</code>: 返回通道的当前位置。</li>
<li><code>size()</code>: 返回通道所关联文件的大小。</li>
<li><code>transferFrom(ReadableByteChannel src, long position, long count)</code>: 从给定通道传输数据到这个通道。</li>
<li><code>transferTo(long position, long count, WritableByteChannel target)</code>: 从这个通道传输数据到给定的通道。</li>
</ul>
<h4>Selector</h4>
<ul>
<li><code>open()</code>: 打开一个选择器。</li>
<li><code>select()</code>: 选择一组键，其相应的通道已准备好进行 I/O 操作。</li>
<li><code>selectedKeys()</code>: 返回此选择器的已选择键集。</li>
</ul>
<h4>Files</h4>
<ul>
<li><code>readAllBytes(Path path)</code>: 读取整个文件内容到字节序列。</li>
<li><code>write(Path path, byte[] bytes, OpenOption... options)</code>: 将字节序列写入文件。</li>
<li><code>newBufferedReader(Path path, Charset cs)</code>: 打开一个用于读取文本文件的缓冲字符输入流。</li>
<li><code>newBufferedWriter(Path path, Charset cs, OpenOption... options)</code>: 打开一个用于写入文本文件的缓冲字符输出流。</li>
<li><code>copy(Path source, OutputStream out)</code>: 将文件内容复制到输出流。</li>
<li><code>walk(Path start, FileVisitOption... options)</code>: 遍历文件树。</li>
</ul>
<h3>学习总结</h3>
<ul>
<li><strong>非阻塞I/O</strong>: <code>java.nio</code> 提供的非阻塞 I/O 特性允许单个线程管理多个通道，从而提高性能。</li>
<li><strong>通道和缓冲区</strong>: 通道用于传输数据，缓冲区用于存储数据。通道的所有读写操作都是通过缓冲区来完成的。</li>
<li><strong>内存映射文件</strong>: <code>FileChannel</code> 支持内存映射文件，可以非常高效地读写文件内容。</li>
<li><strong>文件系统操作</strong>: <code>Files</code> 类提供了丰富的文件操作方法，包括文件读写、复制、遍历等。</li>
<li><strong>选择器</strong>: 选择器用于实现多路复用 I/O，可以在单个线程中处理多个通道。</li>
<li><strong>性能</strong>: 相比于传统的基于流的 I/O，<code>java.nio</code> 可以提供更高的性能，尤其是在处理大量数据时。</li>
<li><strong>安全性</strong>: 使用 <code>java.nio</code> 时需要注意资源管理和异常处理，以避免资源泄露和错误处理。</li>
</ul>
<h2><code>java.nio.channels</code></h2>
<p>定义通道，这些通道表示与能够执行 I/O 操作的实体（例如文件和套接字）的连接;定义选择器，用于多路复用、非阻塞 I/O 操作。</p>
<h2><code>java.nio.channels.spi</code></h2>
<p>java.nio.channels Service-provider 类。</p>
<h2><code>java.nio.charset</code></h2>
<p>定义字符集、解码器和编码器，用于在字节和 Unicode 字符之间进行转换。</p>
<h2><code>java.nio.charset.spi</code></h2>
<p>java.nio.charset Service-provider 类。</p>
<h2><code>java.nio.file</code></h2>
<p>定义 Java 虚拟机访问文件、文件属性和文件系统的接口和类。</p>
<h2><code>java.nio.file.attribute</code></h2>
<p>提供对文件和文件系统属性的访问的接口和类。</p>
<h2><code>java.nio.file.spi</code></h2>
<p>java.nio.file Service-provider 类。</p>
<h1>cache</h1>
<h2><code>Path</code></h2>
<h2><code>Paths</code></h2>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 相对路径</span></span>
<span class="line"><span class="token class-name">Path</span> source <span class="token operator">=</span> <span class="token class-name">Paths</span><span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token string">"x1.txt"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token comment">// 绝对路径</span></span>
<span class="line"><span class="token class-name">Path</span> source <span class="token operator">=</span> <span class="token class-name">Paths</span><span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token string">"/home/user/x1.txt"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token comment">// 目录拼接，代表 /home/user/x1.txt</span></span>
<span class="line"><span class="token class-name">Path</span> source <span class="token operator">=</span> <span class="token class-name">Paths</span><span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token string">"/home/user“, "</span>x1<span class="token punctuation">.</span>txt"<span class="token punctuation">)</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>核心类和接口</h2>
<ul>
<li>
<p><code>Buffer</code>：所有缓冲区的超类，提供了一系列用于数据存取的方法。</p>
<ul>
<li><code>ByteBuffer</code></li>
<li><code>CharBuffer</code></li>
<li><code>ShortBuffer</code></li>
<li><code>IntBuffer</code></li>
<li><code>LongBuffer</code></li>
<li><code>FloatBuffer</code></li>
<li><code>DoubleBuffer</code></li>
<li><code>MappedByteBuffer</code></li>
</ul>
</li>
<li>
<p><code>Channel</code>：用于I/O操作的数据传输通道，类似于流。</p>
<ul>
<li><code>FileChannel</code>：用于文件的数据读写。</li>
<li><code>SocketChannel</code>：用于TCP网络的数据读写。</li>
<li><code>ServerSocketChannel</code>：用于监听TCP连接请求。</li>
<li><code>DatagramChannel</code>：用于UDP网络的数据读写。</li>
</ul>
</li>
<li>
<p><code>Selector</code>：用于检查一个或多个NIO通道的状态是否准备好进行数据读写。</p>
</li>
<li>
<p><code>SelectionKey</code>：表示SelectableChannel在Selector中注册的标记，包含了通道操作的状态和兴趣集合。</p>
</li>
</ul>
<h2>文件系统类和接口</h2>
<ul>
<li><code>Path</code>：表示文件系统中的路径。</li>
<li><code>Paths</code>：用于获取Path实例的工厂类。</li>
<li><code>Files</code>：提供文件操作的方法，如读写、创建、删除等。</li>
<li><code>FileVisitor</code>：用于文件遍历的访问者接口。</li>
<li><code>FileSystem</code>：表示文件系统。</li>
<li><code>FileStore</code>：提供文件存储区域的信息。</li>
<li><code>WatchService</code>：用于监控文件系统事件。</li>
</ul>
<h2>网络类</h2>
<ul>
<li><code>Socket</code>：表示网络套接字。</li>
<li><code>ServerSocket</code>：用于监听客户端的套接字连接。</li>
<li><code>DatagramSocket</code>：用于发送和接收UDP数据报包。</li>
</ul>
<h2>属性类</h2>
<ul>
<li><code>FileAttribute</code>：用于配置文件系统的文件属性。</li>
<li><code>PosixFilePermission</code>：用于POSIX文件权限。</li>
</ul>
<h2>其他类和接口</h2>
<ul>
<li><code>charset</code>：用于字符集编码和解码。</li>
<li><code>StandardCharsets</code>：提供标准字符集的常量。</li>
<li><code>FileSystemProvider</code>：文件系统提供者的抽象类。</li>
<li><code>AsynchronousFileChannel</code>：用于异步文件读写操作的文件通道。</li>
<li><code>AsynchronousSocketChannel</code>：用于异步TCP套接字连接的数据读写。</li>
<li><code>AsynchronousServerSocketChannel</code>：用于异步监听TCP连接请求。</li>
<li><code>AsynchronousChannelGroup</code>：用于异步通道的分组管理。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - API - 「java.sql」</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjava.sql%E3%80%8D.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjava.sql%E3%80%8D.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - API - 「java.sql」</source>
      <description>文章摘要： 提供了访问和处理 SQL 数据库的标准接口和类。 介绍 简要说明 提供了访问和处理 SQL 数据库的标准接口和类。 这个包是 JDBC（Java Database Connectivity）API 的一部分，允许 Java 程序与 SQL 数据库进行交互。 主要功能 连接管理：提供 DriverManager 类用于管理数据库连接，以及 D...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Sun, 24 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 提供了访问和处理 SQL 数据库的标准接口和类。</p>
<!-- more -->
<h2>介绍</h2>
<p>简要说明</p>
<ul>
<li>提供了访问和处理 SQL 数据库的标准接口和类。</li>
<li>这个包是 JDBC（Java Database Connectivity）API 的一部分，允许 Java 程序与 SQL 数据库进行交互。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>连接管理</strong>：提供 <code>DriverManager</code> 类用于管理数据库连接，以及 <code>DataSource</code> 接口用于数据源管理。</li>
<li><strong>SQL 语句执行</strong>：通过 <code>Statement</code>、<code>PreparedStatement</code> 和 <code>CallableStatement</code> 接口执行 SQL 语句。</li>
<li><strong>结果集处理</strong>：<code>ResultSet</code> 接口用于处理 SQL 查询返回的结果集。</li>
<li><strong>事务管理</strong>：支持事务的开始、提交和回滚操作。</li>
<li><strong>元数据访问</strong>：提供 <code>DatabaseMetaData</code> 和 <code>ResultSetMetaData</code> 接口用于获取数据库和结果集的元数据。</li>
<li><strong>类型映射</strong>：定义了 SQL 和 Java 数据类型之间的映射关系。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>资源管理</strong>：数据库连接、语句和结果集都是需要关闭的资源，应该在使用完毕后及时关闭，以避免资源泄露。</li>
<li><strong>异常处理</strong>：在进行数据库操作时，应该捕获并处理 <code>SQLException</code>。</li>
<li><strong>SQL 注入</strong>：使用 <code>PreparedStatement</code> 而不是 <code>Statement</code> 来避免 SQL 注入攻击。</li>
<li><strong>连接池</strong>：为了提高性能，应该使用连接池来管理数据库连接。</li>
<li><strong>驱动兼容性</strong>：确保使用的 JDBC 驱动与数据库兼容，并且是最新版本。</li>
<li><strong>事务控制</strong>：正确使用事务控制语句，确保数据的一致性和完整性。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>数据库访问</strong>：任何需要从 Java 应用程序访问 SQL 数据库的场景。</li>
<li><strong>数据操作</strong>：执行插入、更新、删除和查询数据库中的数据。</li>
<li><strong>数据迁移</strong>：在不同数据库之间迁移数据。</li>
<li><strong>Web 应用</strong>：在 Web 应用程序中处理用户请求，并与数据库进行交互。</li>
<li><strong>企业应用</strong>：在企业级应用程序中处理复杂的业务逻辑和数据存储需求。</li>
</ul>
<h3>主要概念</h3>
<h4>JDBC（Java Database Connectivity）</h4>
<ul>
<li>JDBC 是一个用于数据库连接的 API，允许 Java 程序与各种数据库进行交互。</li>
</ul>
<h4>数据库驱动（Driver）</h4>
<ul>
<li>数据库驱动是实现 JDBC 接口的库，用于与特定数据库进行通信。</li>
</ul>
<h4>连接（Connection）</h4>
<ul>
<li><code>Connection</code> 对象代表与数据库的会话。</li>
</ul>
<h4>语句（Statement）</h4>
<ul>
<li><code>Statement</code> 对象用于执行 SQL 语句并返回结果。</li>
</ul>
<h4>预备语句（PreparedStatement）</h4>
<ul>
<li><code>PreparedStatement</code> 是 <code>Statement</code> 的子接口，提供了预编译 SQL 语句的功能，可以防止 SQL 注入攻击。</li>
</ul>
<h4>调用语句（CallableStatement）</h4>
<ul>
<li><code>CallableStatement</code> 用于执行 SQL 存储过程。</li>
</ul>
<h4>结果集（ResultSet）</h4>
<ul>
<li><code>ResultSet</code> 对象用于保存 SQL 查询的结果。</li>
</ul>
<h4>元数据（MetaData）</h4>
<ul>
<li>元数据提供了关于数据库的结构信息，如表名、列名、数据类型等。</li>
</ul>
<h3>主要类和接口</h3>
<h4>DriverManager</h4>
<ul>
<li>用于管理 JDBC 驱动程序并建立新的数据库连接。</li>
</ul>
<h4>Connection</h4>
<ul>
<li>表示到数据库的连接。</li>
</ul>
<h4>Statement</h4>
<ul>
<li>用于执行不带参数的 SQL 语句。</li>
</ul>
<h4>PreparedStatement</h4>
<ul>
<li>用于执行带参数的 SQL 语句。</li>
</ul>
<h4>CallableStatement</h4>
<ul>
<li>用于执行 SQL 存储过程。</li>
</ul>
<h4>ResultSet</h4>
<ul>
<li>表示数据库查询的结果集。</li>
</ul>
<h4>ResultSetMetaData</h4>
<ul>
<li>用于获取关于 <code>ResultSet</code> 对象中列的类型和属性信息。</li>
</ul>
<h4>DatabaseMetaData</h4>
<ul>
<li>用于获取关于数据库的元数据。</li>
</ul>
<h3>学习总结</h3>
<h4>加载和注册驱动</h4>
<ul>
<li>使用 <code>Class.forName()</code> 加载 JDBC 驱动。</li>
<li>从 Java 6 开始，驱动自动加载，无需显式注册。</li>
</ul>
<h4>建立连接</h4>
<ul>
<li>使用 <code>DriverManager.getConnection()</code> 方法建立到数据库的连接。</li>
</ul>
<h4>执行 SQL 语句</h4>
<ul>
<li>使用 <code>Statement</code> 执行简单的 SQL 语句。</li>
<li>使用 <code>PreparedStatement</code> 执行带参数的 SQL 语句，以提高性能并防止 SQL 注入。</li>
<li>使用 <code>CallableStatement</code> 调用存储过程。</li>
</ul>
<h4>处理结果集</h4>
<ul>
<li>使用 <code>ResultSet</code> 的 <code>next()</code> 方法遍历结果集。</li>
<li>使用 <code>getXxx()</code> 方法（如 <code>getInt()</code>, <code>getString()</code>）获取列的值。</li>
</ul>
<h4>元数据处理</h4>
<ul>
<li>使用 <code>ResultSetMetaData</code> 获取关于结果集的元数据。</li>
<li>使用 <code>DatabaseMetaData</code> 获取关于数据库的元数据。</li>
</ul>
<h4>事务管理</h4>
<ul>
<li>使用 <code>Connection</code> 对象的 <code>setAutoCommit(false)</code> 禁用自动提交。</li>
<li>使用 <code>commit()</code> 提交事务。</li>
<li>使用 <code>rollback()</code> 回滚事务。</li>
</ul>
<h4>资源管理</h4>
<ul>
<li>使用 <code>try-with-resources</code> 语句确保 <code>Connection</code>, <code>Statement</code>, <code>ResultSet</code> 等资源被正确关闭。</li>
</ul>
<h4>异常处理</h4>
<ul>
<li>处理 <code>SQLException</code>，它是 JDBC 操作中可能抛出的异常。</li>
</ul>
<h4>注意事项</h4>
<ul>
<li>总是使用 <code>PreparedStatement</code> 而不是 <code>Statement</code>，以避免 SQL 注入攻击。</li>
<li>确保在 finally 块中或在 try-with-resources 语句中关闭所有数据库资源。</li>
<li>在处理大量数据时，考虑使用流式 <code>ResultSet</code> 以减少内存消耗。</li>
<li>对于生产环境，考虑使用连接池来管理数据库连接。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - API - 「java.text」</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjava.text%E3%80%8D.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjava.text%E3%80%8D.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - API - 「java.text」</source>
      <description>文章摘要： 提供了处理文本、日期、数字和消息格式化的类和接口。 介绍 简要说明 提供了处理文本、日期、数字和消息格式化的类和接口。 允许开发者执行国际化（i18n）和本地化（l10n）的任务，确保应用程序能够在不同的语言和地区环境中正确运行。 主要功能 文本格式化：Format 类及其子类（如 DateFormat、NumberFormat 和 Mes...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Sun, 24 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 提供了处理文本、日期、数字和消息格式化的类和接口。</p>
<!-- more -->
<h2>介绍</h2>
<p>简要说明</p>
<ul>
<li>提供了处理文本、日期、数字和消息格式化的类和接口。</li>
<li>允许开发者执行国际化（i18n）和本地化（l10n）的任务，确保应用程序能够在不同的语言和地区环境中正确运行。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>文本格式化</strong>：<code>Format</code> 类及其子类（如 <code>DateFormat</code>、<code>NumberFormat</code> 和 <code>MessageFormat</code>）用于格式化和解析文本。</li>
<li><strong>日期和时间处理</strong>：<code>DateFormat</code> 类用于格式化和解析日期和时间值。</li>
<li><strong>数字处理</strong>：<code>NumberFormat</code> 类用于格式化和解析数字。</li>
<li><strong>字符集编码</strong>：<code>Charset</code> 和 <code>CharsetEncoder</code>/<code>CharsetDecoder</code> 类用于处理字符集编码和解码。</li>
<li><strong>字符串搜索</strong>：<code>CollationElementIterator</code> 和 <code>Collator</code> 类用于字符串比较和搜索。</li>
<li><strong>消息格式化</strong>：<code>MessageFormat</code> 类用于创建带有占位符的格式化字符串。</li>
<li><strong>解析和格式化规则</strong>：<code>ParseException</code> 类用于处理格式化解析过程中出现的错误。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>本地化</strong>：在处理文本时，应该考虑到应用程序的本地化需求，使用合适的 <code>Locale</code> 对象。</li>
<li><strong>线程安全</strong>：<code>java.text</code> 包中的某些类（如 <code>DateFormat</code> 和 <code>NumberFormat</code>）不是线程安全的，应在多线程环境中谨慎使用。</li>
<li><strong>解析异常</strong>：在解析文本时，应该捕获并处理 <code>ParseException</code>。</li>
<li><strong>性能考量</strong>：频繁的格式化和解析操作可能会影响性能，考虑使用缓存或预格式化的方式。</li>
<li><strong>国际化格式</strong>：对于国际化的格式，应该使用 <code>java.text</code> 包中的类，而不是硬编码格式字符串。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>国际化应用</strong>：开发需要支持多种语言和地区的应用程序。</li>
<li><strong>日期和时间处理</strong>：需要格式化或解析日期和时间的场景。</li>
<li><strong>数字处理</strong>：需要格式化或解析数字，包括货币和百分比。</li>
<li><strong>消息本地化</strong>：需要根据不同的语言环境显示不同的消息。</li>
<li><strong>文本比较</strong>：需要根据特定语言规则比较字符串的场景。</li>
<li><strong>字符编码转换</strong>：处理不同字符集编码的文本数据。</li>
</ul>
<h3>主要概念</h3>
<h4>格式化</h4>
<ul>
<li>格式化是将数据转换为特定格式的字符串表示形式的过程。</li>
</ul>
<h4>解析</h4>
<ul>
<li>解析是将字符串转换回原始数据类型的过程。</li>
</ul>
<h4>本地化</h4>
<ul>
<li>本地化是指根据特定地区或文化的约定来格式化和解析数据。</li>
</ul>
<h3>主要类和接口</h3>
<h4>DateFormat</h4>
<ul>
<li>用于格式化和解析日期和时间的类。</li>
</ul>
<h4>NumberFormat</h4>
<ul>
<li>用于格式化和解析数字的类。</li>
</ul>
<h4>MessageFormat</h4>
<ul>
<li>用于格式化包含占位符的复杂字符串。</li>
</ul>
<h4>SimpleDateFormat</h4>
<ul>
<li><code>DateFormat</code> 的一个具体子类，用于以简单的、可自定义的方式格式化和解析日期。</li>
</ul>
<h4>DecimalFormat</h4>
<ul>
<li><code>NumberFormat</code> 的一个具体子类，用于格式化和解析十进制数字。</li>
</ul>
<h4>ChoiceFormat</h4>
<ul>
<li>用于格式化数字，可以根据数字范围选择不同的字符串。</li>
</ul>
<h4>Collator</h4>
<ul>
<li>用于字符串比较的类，考虑了不同语言的排序规则。</li>
</ul>
<h4>BreakIterator</h4>
<ul>
<li>用于在文本中查找边界，如单词边界、句子边界等。</li>
</ul>
<h4>AttributedCharacterIterator</h4>
<ul>
<li>用于迭代文本和相关的属性。</li>
</ul>
<h3>学习总结</h3>
<h4>日期和时间格式化</h4>
<ul>
<li>使用 <code>DateFormat</code> 类来格式化和解析日期和时间。</li>
<li><code>SimpleDateFormat</code> 允许自定义日期和时间格式，通过传递格式模式字符串来定义格式。</li>
</ul>
<h4>数字格式化</h4>
<ul>
<li>使用 <code>NumberFormat</code> 类来格式化和解析数字。</li>
<li><code>DecimalFormat</code> 提供了更细粒度的控制，允许自定义数字格式，包括小数点、分组分隔符等。</li>
</ul>
<h4>消息格式化</h4>
<ul>
<li>使用 <code>MessageFormat</code> 类来格式化包含变量的字符串，例如 <code>"Hello, {0}! Today is {1}."</code>。</li>
</ul>
<h4>本地化</h4>
<ul>
<li><code>DateFormat</code> 和 <code>NumberFormat</code> 都是抽象类，它们提供了 <code>get*Instance()</code> 方法来获取特定本地化的实例。</li>
<li>可以使用 <code>Locale</code> 类来指定地区，从而影响格式化和解析的行为。</li>
</ul>
<h4>字符串比较</h4>
<ul>
<li>使用 <code>Collator</code> 类来进行本地化的字符串比较，它考虑了不同语言的排序规则。</li>
</ul>
<h4>文本边界</h4>
<ul>
<li>使用 <code>BreakIterator</code> 类来确定文本中的单词、句子、行等的边界。</li>
</ul>
<h4>属性文本</h4>
<ul>
<li>使用 <code>AttributedCharacterIterator</code> 和相关类来处理带有属性的文本，如字体、颜色等。</li>
</ul>
<h4>注意事项</h4>
<ul>
<li>在格式化和解析时，始终考虑本地化，确保使用正确的 <code>Locale</code>。</li>
<li>对于格式化模式，使用正确的模式字符串以避免错误。</li>
<li>在多线程环境中，<code>DateFormat</code> 和 <code>NumberFormat</code> 实例不是线程安全的，应避免共享实例或使用 <code>ThreadLocal</code>。</li>
<li>在处理国际化的应用程序时，使用 <code>java.text</code> 包中的类而不是 <code>java.util</code> 包中的相应类，因为后者不考虑本地化。</li>
</ul>
<h2><code>java.text.spi</code></h2>
<p>java.text 包中类的 Service Provider 类。</p>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - API - 「java.time」</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjava.time%E3%80%8D.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjava.time%E3%80%8D.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - API - 「java.time」</source>
      <description>文章摘要： 日期、时间、时刻和持续时间的主要 API。 介绍 简要说明 主要功能 注意事项 适用场景 java.time.chrono 默认 ISO 以外的日历系统的通用 API。 java.time.format 提供用于打印和分析日期和时间的类。 java.time.temporal 使用字段和单位以及日期时间调整器访问日期和时间。 java.ti...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Sun, 24 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 日期、时间、时刻和持续时间的主要 API。</p>
<!-- more -->
<h2>介绍</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<h2><code>java.time.chrono</code></h2>
<p>默认 ISO 以外的日历系统的通用 API。</p>
<h2><code>java.time.format</code></h2>
<p>提供用于打印和分析日期和时间的类。</p>
<h2><code>java.time.temporal</code></h2>
<p>使用字段和单位以及日期时间调整器访问日期和时间。</p>
<h2><code>java.time.zone</code></h2>
<p>支持时区及其规则。</p>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - 数据类型</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - 数据类型</source>
      <description>文章摘要： Java数据类型查询手册。 相关信息 外部相关文章 内部相关文章 基本数据类型 整数 以二进制补码表示的整数。 定义long类型需要在值后面添加l或L。 数据类型：基本数据类型 默认类型：int 默认数值：0 适用场景： 案例 浮点数 带小数的数值。 在机器中存放的形式（浮点数 = 符号位 + 指数位 + 尾数位），尾数部分可能丢失，导致精...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Sun, 24 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Java数据类型查询手册。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li></li>
</ul>
<p>内部相关文章</p>
<ul>
<li><a href="/software/DataStructure%EF%BC%88%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%EF%BC%89.html" target="_blank">DataStructure（数据结构）</a></li>
</ul>
</div>
<h2>基本数据类型</h2>
<h3>整数</h3>
<ul>
<li>以二进制补码表示的整数。</li>
<li>定义<code>long</code>类型需要在值后面添加<code>l</code>或<code>L</code>。</li>
<li><strong>数据类型</strong>：基本数据类型</li>
<li><strong>默认类型</strong>：<code>int</code></li>
<li><strong>默认数值</strong>：<code>0</code></li>
<li><strong>适用场景</strong>：</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:center">关键字</th>
<th style="text-align:center">名称</th>
<th style="text-align:center">位数</th>
<th style="text-align:left">最小值</th>
<th style="text-align:left">最大值</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">byte</td>
<td style="text-align:center">字符整型</td>
<td style="text-align:center">8位（1字节）</td>
<td style="text-align:left"><span v-pre="" class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>−</mo><mn>128</mn><mo stretchy="false">(</mo><mo>−</mo><msup><mn>2</mn><mn>7</mn></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">-128(-2^{7})</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em;"></span><span class="mord">−</span><span class="mord">128</span><span class="mopen">(</span><span class="mord">−</span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">7</span></span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></td>
<td style="text-align:left"><span v-pre="" class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>127</mn><mo stretchy="false">(</mo><msup><mn>2</mn><mn>7</mn></msup><mo>−</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">127(2^{7}-1)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em;"></span><span class="mord">127</span><span class="mopen">(</span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">7</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">1</span><span class="mclose">)</span></span></span></span></td>
</tr>
<tr>
<td style="text-align:center">short</td>
<td style="text-align:center">短整型</td>
<td style="text-align:center">16位（2字节）</td>
<td style="text-align:left"><span v-pre="" class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>−</mo><mn>32768</mn><mo stretchy="false">(</mo><mo>−</mo><msup><mn>2</mn><mn>15</mn></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">-32 768(-2^{15})</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em;"></span><span class="mord">−</span><span class="mord">32768</span><span class="mopen">(</span><span class="mord">−</span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">15</span></span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></td>
<td style="text-align:left"><span v-pre="" class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>32767</mn><mo stretchy="false">(</mo><msup><mn>2</mn><mn>15</mn></msup><mo>−</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">32 767(2^{15}-1)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em;"></span><span class="mord">32767</span><span class="mopen">(</span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">15</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">1</span><span class="mclose">)</span></span></span></span></td>
</tr>
<tr>
<td style="text-align:center">int</td>
<td style="text-align:center">整型</td>
<td style="text-align:center">32位（4字节）</td>
<td style="text-align:left"><span v-pre="" class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>−</mo><mn>2147483648</mn><mo stretchy="false">(</mo><mo>−</mo><msup><mn>2</mn><mn>31</mn></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">-2 147 483 648(-2^{31})</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em;"></span><span class="mord">−</span><span class="mord">2147483648</span><span class="mopen">(</span><span class="mord">−</span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">31</span></span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></td>
<td style="text-align:left"><span v-pre="" class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2147483647</mn><mo stretchy="false">(</mo><msup><mn>2</mn><mn>31</mn></msup><mo>−</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">2 147 483 647(2^{31}-1)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em;"></span><span class="mord">2147483647</span><span class="mopen">(</span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">31</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">1</span><span class="mclose">)</span></span></span></span></td>
</tr>
<tr>
<td style="text-align:center">long</td>
<td style="text-align:center">长整型</td>
<td style="text-align:center">64位（8字节）</td>
<td style="text-align:left"><span v-pre="" class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>−</mo><mn>9223372036854775808</mn><mo stretchy="false">(</mo><mo>−</mo><msup><mn>2</mn><mn>63</mn></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">-9 223 372 036 854 775 808(-2^{63})</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em;"></span><span class="mord">−</span><span class="mord">9223372036854775808</span><span class="mopen">(</span><span class="mord">−</span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">63</span></span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></td>
<td style="text-align:left"><span v-pre="" class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>9223372036854775807</mn><mo stretchy="false">(</mo><msup><mn>2</mn><mn>63</mn></msup><mo>−</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">9 223 372 036 854 775 807(2^{63}-1)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em;"></span><span class="mord">9223372036854775807</span><span class="mopen">(</span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">63</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">1</span><span class="mclose">)</span></span></span></span></td>
</tr>
</tbody>
</table>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>浮点数</h3>
<ul>
<li>带小数的数值。</li>
<li>在机器中存放的形式（浮点数 = 符号位 + 指数位 + 尾数位），尾数部分可能丢失，导致精度损失。</li>
<li>浮点数类型的数值可以采用<strong>科学技术法</strong>表示。（例如：<span v-pre="" class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2.5</mn><mi>e</mi><mn>2</mn></mrow><annotation encoding="application/x-tex">2.5e2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2.5</span><span class="mord mathnormal">e</span><span class="mord">2</span></span></span></span>等价于<span v-pre="" class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2.5</mn><mo>∗</mo><msup><mn>10</mn><mn>2</mn></msup></mrow><annotation encoding="application/x-tex">2.5*10^{2}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2.5</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">∗</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span>、<span v-pre="" class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>3.5</mn><mi>E</mi><mo>−</mo><mn>2</mn></mrow><annotation encoding="application/x-tex">3.5E-2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7667em;vertical-align:-0.0833em;"></span><span class="mord">3.5</span><span class="mord mathnormal" style="margin-right:0.05764em;">E</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span></span></span></span>等价于<span v-pre="" class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>3.5</mn><mi mathvariant="normal">/</mi><msup><mn>10</mn><mn>2</mn></msup></mrow><annotation encoding="application/x-tex">3.5/10^{2}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em;"></span><span class="mord">3.5/1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span>）</li>
<li>定义<code>float</code>类型需要在值后面添加<code>f</code>或<code>F</code>。</li>
<li><strong>数据类型</strong>：基本数据类型</li>
<li><strong>默认类型</strong>：<code>double</code></li>
<li><strong>默认数值</strong>：<code>0.0</code></li>
<li><strong>适用场景</strong>：</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:center">关键字</th>
<th style="text-align:center">名称</th>
<th style="text-align:center">位数</th>
<th style="text-align:left">最小值</th>
<th style="text-align:left">最大值</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">float</td>
<td style="text-align:center">单精度浮点数</td>
<td style="text-align:center">32位（4字节）</td>
<td style="text-align:left"><span v-pre="" class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>−</mo><mn>3.4</mn><mi>E</mi><mo>+</mo><mn>38</mn></mrow><annotation encoding="application/x-tex">-3.4E+38</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7667em;vertical-align:-0.0833em;"></span><span class="mord">−</span><span class="mord">3.4</span><span class="mord mathnormal" style="margin-right:0.05764em;">E</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">38</span></span></span></span> ~ <span v-pre="" class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1.4</mn><mi>E</mi><mo>−</mo><mn>45</mn></mrow><annotation encoding="application/x-tex">1.4E-45</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7667em;vertical-align:-0.0833em;"></span><span class="mord">1.4</span><span class="mord mathnormal" style="margin-right:0.05764em;">E</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">45</span></span></span></span></td>
<td style="text-align:left"><span v-pre="" class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1.4</mn><mi>E</mi><mo>−</mo><mn>45</mn></mrow><annotation encoding="application/x-tex">1.4E-45</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7667em;vertical-align:-0.0833em;"></span><span class="mord">1.4</span><span class="mord mathnormal" style="margin-right:0.05764em;">E</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">45</span></span></span></span> ~ <span v-pre="" class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>3.4</mn><mi>E</mi><mo>+</mo><mn>38</mn></mrow><annotation encoding="application/x-tex">3.4E+38</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7667em;vertical-align:-0.0833em;"></span><span class="mord">3.4</span><span class="mord mathnormal" style="margin-right:0.05764em;">E</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">38</span></span></span></span></td>
</tr>
<tr>
<td style="text-align:center">double</td>
<td style="text-align:center">双精度浮点数</td>
<td style="text-align:center">64位（8字节）</td>
<td style="text-align:left"><span v-pre="" class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>−</mo><mn>1.7</mn><mi>E</mi><mo>+</mo><mn>308</mn></mrow><annotation encoding="application/x-tex">-1.7E+308</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7667em;vertical-align:-0.0833em;"></span><span class="mord">−</span><span class="mord">1.7</span><span class="mord mathnormal" style="margin-right:0.05764em;">E</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">308</span></span></span></span> ~ <span v-pre="" class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>4.9</mn><mi>E</mi><mo>−</mo><mn>324</mn></mrow><annotation encoding="application/x-tex">4.9E-324</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7667em;vertical-align:-0.0833em;"></span><span class="mord">4.9</span><span class="mord mathnormal" style="margin-right:0.05764em;">E</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">324</span></span></span></span></td>
<td style="text-align:left"><span v-pre="" class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>4.9</mn><mi>E</mi><mo>−</mo><mn>324</mn></mrow><annotation encoding="application/x-tex">4.9E-324</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7667em;vertical-align:-0.0833em;"></span><span class="mord">4.9</span><span class="mord mathnormal" style="margin-right:0.05764em;">E</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">324</span></span></span></span> ~ <span v-pre="" class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1.7</mn><mi>E</mi><mo>+</mo><mn>308</mn></mrow><annotation encoding="application/x-tex">1.7E+308</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7667em;vertical-align:-0.0833em;"></span><span class="mord">1.7</span><span class="mord mathnormal" style="margin-right:0.05764em;">E</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">308</span></span></span></span></td>
</tr>
</tbody>
</table>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>字符</h3>
<ul>
<li>使用**单引号（<code>''</code>）**引起来的内容是字符类型。</li>
<li>字符数据类型可以存储<strong>单个字符</strong>、<strong>转义字符</strong>、<strong>Unicode字符编码表中的数字</strong>。</li>
<li><strong>数据类型</strong>：基本数据类型</li>
<li><strong>默认数值</strong>：<code>\u0000</code></li>
<li><strong>适用场景</strong>：</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:center">关键字</th>
<th style="text-align:center">位数</th>
<th style="text-align:center">取值范围</th>
<th style="text-align:left">字符编码</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">char</td>
<td style="text-align:center">16位（2字节）</td>
<td style="text-align:center">0~65535 | '\u0000' ~ '\uFFFF'</td>
<td style="text-align:left">Unicode编码</td>
</tr>
</tbody>
</table>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">char</span> x1 <span class="token operator">=</span> <span class="token char">'a'</span><span class="token punctuation">;</span>  <span class="token comment">// 单个字符</span></span>
<span class="line"><span class="token keyword">char</span> x2 <span class="token operator">=</span> <span class="token char">'苏'</span><span class="token punctuation">;</span> <span class="token comment">// 单个字符</span></span>
<span class="line"><span class="token keyword">char</span> x3 <span class="token operator">=</span> <span class="token char">'\n'</span><span class="token punctuation">;</span> <span class="token comment">// 转义字符</span></span>
<span class="line"><span class="token keyword">char</span> x4 <span class="token operator">=</span> <span class="token number">97</span><span class="token punctuation">;</span>   <span class="token comment">// 字符编码</span></span>
<span class="line"><span class="token comment">// 提示：字符 -&gt; 字符编码，会以ASCII编码为准进行转换。</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>布尔</h3>
<ul>
<li>用于表示逻辑条件，即<code>true</code>真或<code>false</code>假。</li>
<li><strong>数据类型</strong>：基本数据类型</li>
<li><strong>默认数值</strong>：<code>false</code></li>
<li><strong>适用场景</strong>：</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:center">关键字</th>
<th style="text-align:center">位数</th>
<th style="text-align:center">取值范围</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">boolean</td>
<td style="text-align:center">32位（8字节）</td>
<td style="text-align:center">true/false</td>
<td style="text-align:left">仅可描述<code>真</code>或<code>假</code></td>
</tr>
</tbody>
</table>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>引用（对象）数据类型</h2>
<h3>类</h3>
<h3>接口</h3>
<h3>字符串（String）</h3>
<ul>
<li>由多个字符组成的字符序列称为字符串。</li>
<li><strong>数据类型</strong>：引用（对象）数据类型</li>
<li><strong>定义符号</strong>：双引号<code>" "</code></li>
<li><strong>默认数值</strong>：<code>null</code></li>
<li><strong>适用场景</strong>：2个以上的字符内容长度。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:center">关键字</th>
<th style="text-align:center">取值范围</th>
<th style="text-align:left">字符编码</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">String</td>
<td style="text-align:center">在双引号<code>" "</code>之间的任意字符</td>
<td style="text-align:left">Unicode编码</td>
</tr>
</tbody>
</table>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>数组（Array）</h3>
<ul>
<li>数组保存的是一组连续的存储空间，存储多个相同数据类型的值。</li>
<li><strong>数据类型</strong>：引用（对象）数据类型</li>
<li><strong>定义符号</strong>：花括号<code>{}</code></li>
<li><strong>默认数值</strong>：<code>null</code></li>
<li><strong>适用场景</strong>：存储多个数值，数量有限个，数据类型相同。</li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>可以通过数组<code>下标/索引</code>来访问数组中具体的值。</li>
<li>下标的概念：数组通过对内存地址修改“<strong>偏移量</strong>”来快速读取相应数据，因此从<code>0</code>开始计算，根据下标的顺序，在内存中按顺序存放。</li>
</ul>
</div>
<h4>创建 - 动态初始化数组</h4>
<ul>
<li>动态初始化数组，声明数组变量名，并指定数据的类型和数组长度。</li>
</ul>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 先声明数组</span></span>
<span class="line"><span class="token operator">&lt;</span>数据类型<span class="token operator">&gt;</span><span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token operator">&lt;</span>数组名<span class="token operator">&gt;</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token operator">&lt;</span>数据类型<span class="token operator">&gt;</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token operator">&lt;</span>数组名<span class="token operator">&gt;</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token operator">&lt;</span>数据类型<span class="token operator">&gt;</span> <span class="token operator">&lt;</span>数组名<span class="token operator">&gt;</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token operator">&lt;</span>数据类型<span class="token operator">&gt;</span> <span class="token operator">&lt;</span>数组名<span class="token operator">&gt;</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token operator">&lt;</span>数据类型<span class="token operator">&gt;</span><span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token operator">&lt;</span>数组名<span class="token operator">&gt;</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 创建数组</span></span>
<span class="line"><span class="token operator">&lt;</span>数组名<span class="token operator">&gt;</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token operator">&lt;</span>数据类型<span class="token operator">&gt;</span><span class="token punctuation">[</span><span class="token operator">&lt;</span>数组长度<span class="token operator">&gt;</span><span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 一维数组</span></span>
<span class="line"><span class="token operator">&lt;</span>数据类型<span class="token operator">&gt;</span><span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token operator">&lt;</span>数组名<span class="token operator">&gt;</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token operator">&lt;</span>数据类型<span class="token operator">&gt;</span><span class="token punctuation">[</span><span class="token operator">&lt;</span>数组长度<span class="token operator">&gt;</span><span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token operator">&lt;</span>数据类型<span class="token operator">&gt;</span><span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token operator">&lt;</span>数组名<span class="token operator">&gt;</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token operator">&lt;</span>数据类型<span class="token operator">&gt;</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">{</span><span class="token operator">&lt;</span>数值<span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">}</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 二维数组</span></span>
<span class="line"><span class="token operator">&lt;</span>数据类型<span class="token operator">&gt;</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token operator">&lt;</span>数组名<span class="token operator">&gt;</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token operator">&lt;</span>数据类型<span class="token operator">&gt;</span><span class="token punctuation">[</span><span class="token operator">&lt;</span>数组长度<span class="token operator">&gt;</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token operator">&lt;</span>数组长度<span class="token operator">&gt;</span><span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token operator">&lt;</span>数据类型<span class="token operator">&gt;</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token operator">&lt;</span>数组名<span class="token operator">&gt;</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token operator">&lt;</span>数据类型<span class="token operator">&gt;</span><span class="token punctuation">[</span><span class="token operator">&lt;</span>数组长度<span class="token operator">&gt;</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token operator">&lt;</span>数据类型<span class="token operator">&gt;</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token operator">&lt;</span>数组名<span class="token operator">&gt;</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token operator">&lt;</span>数据类型<span class="token operator">&gt;</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">{</span><span class="token punctuation">{</span><span class="token operator">&lt;</span>数值<span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">}</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4>创建 - 静态初始化数组</h4>
<ul>
<li>静态初始化数组，直接赋值具体的数值，使用花括号<code>{}</code>表示数组。</li>
</ul>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 一维数组</span></span>
<span class="line"><span class="token operator">&lt;</span>数据类型<span class="token operator">&gt;</span><span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token operator">&lt;</span>数组名<span class="token operator">&gt;</span> <span class="token operator">=</span> <span class="token punctuation">{</span></span>
<span class="line">	<span class="token operator">&lt;</span>数值<span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token operator">&lt;</span>数值<span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"><span class="token punctuation">}</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 二维数组</span></span>
<span class="line"><span class="token operator">&lt;</span>数据类型<span class="token operator">&gt;</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token operator">&lt;</span>数组名<span class="token operator">&gt;</span> <span class="token operator">=</span> <span class="token punctuation">{</span></span>
<span class="line">	<span class="token punctuation">{</span><span class="token operator">&lt;</span>数值<span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token operator">&lt;</span>数值<span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">}</span><span class="token punctuation">,</span> </span>
<span class="line">	<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"><span class="token punctuation">}</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4>修改/取值</h4>
<ul>
<li>左闭右开区间，下标从<code>0</code>开始计数，<code>-1</code>代表倒数第一个。</li>
</ul>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 一维数组</span></span>
<span class="line"><span class="token operator">&lt;</span>数组名<span class="token operator">&gt;</span><span class="token punctuation">[</span><span class="token operator">&lt;</span>下标数<span class="token operator">&gt;</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token operator">&lt;</span>新数值<span class="token operator">&gt;</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 二维数组</span></span>
<span class="line"><span class="token operator">&lt;</span>数组名<span class="token operator">&gt;</span><span class="token punctuation">[</span><span class="token operator">&lt;</span>下标数<span class="token operator">&gt;</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token operator">&lt;</span>下标数<span class="token operator">&gt;</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token operator">&lt;</span>新数值<span class="token operator">&gt;</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token operator">&lt;</span>数组名<span class="token operator">&gt;</span><span class="token punctuation">[</span><span class="token operator">&lt;</span>下标数<span class="token operator">&gt;</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token operator">&lt;</span>数据类型<span class="token operator">&gt;</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">{</span><span class="token operator">&lt;</span>新数值<span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">}</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>集合</h3>
<ul>
<li>list（有序、可重复、有下标）、set（无序、不可重复）、map</li>
<li><strong>数据类型</strong>：引用（对象）数据类型</li>
<li><strong>定义符号</strong>：</li>
<li><strong>默认数值</strong>：<code>null</code></li>
<li><strong>适用场景</strong>：</li>
</ul>
<p><strong>数组类型的优缺点</strong></p>
<ul>
<li>数组存取效率高，使用是要求容量大小固定</li>
<li>遇到不同类型的数据，则需要不同的数组来存放</li>
</ul>
<p><strong>集合类型的优缺点</strong></p>
<ul>
<li>无需声明存储大小，在新增数据时能自动扩容。</li>
<li>支持存储不同数据类型</li>
</ul>
<p>Collection
存储不同类型 LIst
数组列表 ArrayList
链接列表 Linxxxxx List
栈结构Stack
集合（队列）Queue</p>
<p>添加</p>
<p><code>.add(&lt;&gt;);</code></p>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - 热门推荐 - 代码风格</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E4%BB%A3%E7%A0%81%E9%A3%8E%E6%A0%BC.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E4%BB%A3%E7%A0%81%E9%A3%8E%E6%A0%BC.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - 热门推荐 - 代码风格</source>
      <description>文章摘要： 整理一份代码的视觉呈现和编写习惯，确保代码更容易被理解和阅读，可以想象成是代码的“排版”和“语气”。 注释 关注代码的外观和可读性。例如，缩进风格、命名约定、括号使用、空格与制表符的使用、注释风格等。 通常具有一定的灵活性，团队可以自行约定并保持一致即可。虽然推荐遵循一些最佳实践，但风格问题通常不会导致程序错误。 代码缩进使用4个空格 不使...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Sun, 24 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 整理一份代码的视觉呈现和编写习惯，确保代码更容易被理解和阅读，可以想象成是代码的“排版”和“语气”。</p>
<!-- more -->
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>关注代码的<strong>外观</strong>和<strong>可读性</strong>。例如，缩进风格、命名约定、括号使用、空格与制表符的使用、注释风格等。</li>
<li>通常具有一定的灵活性，团队可以自行约定并保持一致即可。虽然推荐遵循一些最佳实践，但风格问题通常不会导致程序错误。</li>
</ul>
</div>
<p>代码缩进使用4个空格</p>
<ul>
<li>不使用TAB键，因为TAB键是可以设置为其他数量的空格。</li>
<li>避免设置问题导致不是4个空格的缩进。</li>
</ul>
<p>运算符和等号两边各加上一个空格</p>
<ul>
<li>案例：<code>a = 1 + 1</code></li>
<li>提高阅读性。</li>
</ul>
<p>每行尽量不超过80个字符</p>
<ul>
<li>提高阅读性。</li>
<li>可以尝试换行编写过长的代码。</li>
</ul>
<p>代码编写“行尾风格”和“次行风格”</p>
<ul>
<li>行尾风格：起始大括号在当前行的行尾。</li>
<li>次行风格：大括号独占一行。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 通信 - 技术 - VoIP</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-VoIP.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF-VoIP.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 通信 - 技术 - VoIP</source>
      <description>文章摘要： 摘要内容。 简介 基于IP的语音传输（英语：Voice over Internet Protocol，缩写为VoIP）是一种语音通话技术。 经由网际协议（IP）来达成语音通话与多媒体会议，也就是经由互联网来进行通信。 其他非正式的名称有IP电话（IP telephony）、互联网电话（Internet telephony）、宽带电话（bro...</description>
      <category>学习笔记/技术</category>
      <pubDate>Sat, 23 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<ul>
<li>基于IP的语音传输（英语：Voice over Internet Protocol，缩写为VoIP）是一种语音通话技术。</li>
<li>经由网际协议（IP）来达成语音通话与多媒体会议，也就是经由互联网来进行通信。</li>
<li>其他非正式的名称有IP电话（IP telephony）、互联网电话（Internet telephony）、宽带电话（broadband telephony）以及宽带电话服务（broadband phone service）。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>成本效益</strong>：VoIP通话通常比传统电话便宜，尤其是长途和国际通话。</li>
<li><strong>灵活性</strong>：用户可以在任何有互联网连接的地方使用VoIP服务。</li>
<li><strong>多功能性</strong>：支持视频通话、即时消息、会议通话等。</li>
<li><strong>易于扩展</strong>：对于企业来说，增加新用户和功能通常比较简单。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>通话质量</strong>：受网络带宽和质量的影响，VoIP通话质量可能不如传统电话。</li>
<li><strong>依赖网络</strong>：VoIP服务需要稳定的互联网连接。</li>
<li><strong>安全性</strong>：VoIP通话可能面临窃听和其他安全威胁。</li>
<li><strong>法规遵从</strong>：VoIP服务提供商需要遵守各种法律法规。</li>
</ul>
<p>适用场景</p>
<p><strong>家庭/个人使用</strong></p>
<ul>
<li>个人用户可以通过VoIP服务进行低成本的国内外通话。</li>
<li>家庭用户可以实现多部电话共享一个电话号码，便于家庭成员之间的沟通。</li>
</ul>
<p><strong>中小企业（SMBs）</strong></p>
<ul>
<li>VoIP为企业提供成本效益高的通信解决方案，减少固定电话线路的开支。</li>
<li>企业可以轻松实现电话会议、视频会议等功能，提高工作效率。</li>
</ul>
<p><strong>远程工作/分布式团队</strong></p>
<ul>
<li>远程工作人员和分布式团队可以通过VoIP保持无缝沟通。</li>
<li>VoIP服务使得员工可以在任何地点使用公司电话系统。</li>
</ul>
<p><strong>呼叫中心</strong></p>
<ul>
<li>呼叫中心可以利用VoIP实现自动呼叫分配、呼叫记录、客户关系管理等功能。</li>
<li>VoIP系统可以轻松扩展，以适应呼叫中心业务的增长。</li>
</ul>
<p><strong>多地点办公室</strong></p>
<ul>
<li>VoIP允许不同地点的办公室使用同一个电话系统，实现内部免费通话。</li>
<li>便于跨地区、跨国家的内部沟通和管理。</li>
</ul>
<p><strong>移动通信</strong></p>
<ul>
<li>移动VoIP应用使得用户可以在移动设备上使用VoIP服务，不受地理位置限制。</li>
</ul>
<p><strong>微信（WeChat）</strong></p>
<ul>
<li>微信是中国最流行的即时通讯应用之一，提供语音和视频通话功能。</li>
<li>微信的VoIP服务支持个人和群组通话，广泛应用于日常生活和工作中。</li>
</ul>
<p><strong>钉钉（DingTalk）</strong></p>
<ul>
<li>钉钉是一款面向企业的通讯和协作平台，提供电话会议、视频会议等VoIP服务。</li>
<li>钉钉的VoIP服务特别适合企业内部沟通和远程协作。</li>
</ul>
<p><strong>腾讯会议（Tencent Meeting）</strong></p>
<ul>
<li>腾讯会议是一款专业的视频会议软件，支持高清视频和语音通话。</li>
<li>它被广泛应用于企业会议、在线教育和远程医疗等领域。</li>
</ul>
<p><strong>中国电信、中国移动和中国联通的VoIP服务</strong></p>
<ul>
<li>这三大运营商都提供了基于VoIP技术的业务，如中国电信的“天翼通话”、中国移动的“和飞信”等。</li>
<li>这些服务通常与传统电话服务相结合，为用户提供更多选择。</li>
</ul>
<p><strong>企业级VoIP解决方案</strong></p>
<ul>
<li>国内多家企业，如华为、中兴等，提供企业级的VoIP解决方案，包括IP电话、呼叫中心系统等。</li>
<li>这些解决方案广泛应用于企业内部通讯和客户服务。</li>
</ul>
<h2>技术原理</h2>
<ol>
<li>信号转换</li>
</ol>
<ul>
<li><strong>模拟到数字转换</strong>：传统的电话信号是模拟的，而VoIP技术需要将这些模拟信号转换为数字信号。这个过程通常通过一个叫做“模拟网关”的设备来完成。</li>
<li><strong>数字信号处理</strong>：转换成数字信号后，数据会被分割成许多小的数据包。</li>
</ul>
<ol start="2">
<li>数据包传输</li>
</ol>
<ul>
<li><strong>IP网络</strong>：这些数据包通过网络（通常是互联网）传输到目的地。它们可能会经过多个路由器和服务器。</li>
<li><strong>QoS（Quality of Service）</strong>：为了确保通话质量，网络设备可能会实施QoS策略，以确保VoIP数据包优先传输。</li>
</ul>
<ol start="3">
<li>信号重组</li>
</ol>
<ul>
<li><strong>数字到模拟转换</strong>：在接收端，数字信号会被重新组合并转换回模拟信号，以便可以在传统电话或其他设备上播放。</li>
</ul>
<h2>关键组件</h2>
<ol>
<li>硬件</li>
</ol>
<ul>
<li><strong>IP电话</strong>：也称为VoIP电话或软电话，可以直接连接到网络。</li>
<li><strong>网关</strong>：连接传统电话网络和IP网络的设备。</li>
<li><strong>交换机</strong>：用于在内部网络中路由VoIP通话。</li>
</ul>
<ol start="2">
<li>软件</li>
</ol>
<ul>
<li><strong>客户端软件</strong>：安装在电脑或移动设备上，用于发起和接收VoIP通话。</li>
<li><strong>服务器软件</strong>：用于处理呼叫控制、账单、用户认证等功能。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Paper - 小冰的设计和实现，一个善解人意的社交聊天机器人</title>
      <link>https://blog.magictable.ha.cn/note/Paper-%E5%B0%8F%E5%86%B0%E7%9A%84%E8%AE%BE%E8%AE%A1%E5%92%8C%E5%AE%9E%E7%8E%B0%EF%BC%8C%E4%B8%80%E4%B8%AA%E5%96%84%E8%A7%A3%E4%BA%BA%E6%84%8F%E7%9A%84%E7%A4%BE%E4%BA%A4%E8%81%8A%E5%A4%A9%E6%9C%BA%E5%99%A8%E4%BA%BA.html</link>
      <guid>https://blog.magictable.ha.cn/note/Paper-%E5%B0%8F%E5%86%B0%E7%9A%84%E8%AE%BE%E8%AE%A1%E5%92%8C%E5%AE%9E%E7%8E%B0%EF%BC%8C%E4%B8%80%E4%B8%AA%E5%96%84%E8%A7%A3%E4%BA%BA%E6%84%8F%E7%9A%84%E7%A4%BE%E4%BA%A4%E8%81%8A%E5%A4%A9%E6%9C%BA%E5%99%A8%E4%BA%BA.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Paper - 小冰的设计和实现，一个善解人意的社交聊天机器人</source>
      <description>文章摘要： 本文介绍了全球最流行的社交聊天机器人 Microsoft XiaoIce 的开发过程。XiaoIce 被独特设计为具有情感联系的 AI 伴侣，以满足人类对交流、感情和社会归属感的需求。我们在系统设计中同时考虑智商 （IQ） 和情商 （EQ），将人机社交聊天作为马尔可夫决策过程 （MDP） 的决策，并优化小冰以实现长期用户参与度，以每次会话的...</description>
      <category>学习笔记/论文</category>
      <pubDate>Fri, 22 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 本文介绍了全球最流行的社交聊天机器人 Microsoft XiaoIce 的开发过程。XiaoIce 被独特设计为具有情感联系的 AI 伴侣，以满足人类对交流、感情和社会归属感的需求。我们在系统设计中同时考虑智商 （IQ） 和情商 （EQ），将人机社交聊天作为马尔可夫决策过程 （MDP） 的决策，并优化小冰以实现长期用户参与度，以每次会话的预期对话转数 （CPS） 来衡量。我们详细介绍了系统架构和关键组件，包括对话管理器、核心聊天、技能和同理心计算模块。我们展示了 XiaoIce 如何在长时间的对话中动态识别人类的感受和状态，理解用户的意图，并响应用户的需求。自 2014 年推出以来，小冰已与超过 6.6 亿活跃用户进行了交流，并成功与其中许多用户建立了长期合作关系。对大规模在线日志的分析表明，小冰的平均 CPS 达到了 23，明显高于其他聊天机器人甚至人类对话。</p>
<!-- more -->
<div class="hint-container important">
<p class="hint-container-title">重要</p>
<p>标题</p>
<ul>
<li>The Design and Implementation of XiaoIce, an Empathetic Social Chatbot</li>
<li>小冰的设计和实现，一个善解人意的社交聊天机器人</li>
</ul>
<p>作者</p>
<ul>
<li>Li Zhou, Jianfeng Gao, Di Li, Heung-Yeung Shum</li>
</ul>
<p>时间</p>
<ul>
<li>2019-09-14</li>
</ul>
<p>关键词</p>
<ul>
<li>人机交互（cs.HC）;人工智能（cs.AI）;计算和语言（cs.CL）</li>
</ul>
<p>论文地址</p>
<ul>
<li>https://arxiv.org/abs/1812.08989#</li>
</ul>
</div>
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li>https://zhuanlan.zhihu.com/p/315060968</li>
<li>https://blog.csdn.net/dQCFKyQDXYm3F8rB0/article/details/86943681</li>
<li>https://blog.csdn.net/gitblog_01103/article/details/142081719</li>
<li>https://zhuanlan.zhihu.com/p/315060968</li>
<li>https://zhuanlan.zhihu.com/p/57532328</li>
<li>https://www.breezedeus.com/article/chatbot-xiaoice</li>
<li>https://www.jiqizhixin.com/articles/2020-09-28-2</li>
<li>https://www.jiqizhixin.com/articles/2018-12-30-5</li>
</ul>
<p>内部相关文章</p>
<ul>
<li></li>
</ul>
</div>
<h2>引言</h2>
<h3>研究背景</h3>
<ul>
<li>简要介绍研究背景和意义</li>
</ul>
<h3>研究现状</h3>
<ul>
<li>概述当前领域的研究现状</li>
</ul>
<h3>本文贡献</h3>
<ul>
<li>列出本文的主要贡献和创新点</li>
</ul>
<h2>相关工作</h2>
<p>方法1</p>
<ul>
<li>简要介绍相关方法1</li>
</ul>
<p>方法2</p>
<ul>
<li>简要介绍相关方法2</li>
</ul>
<h2>方法/理论</h2>
<h3>方法概述</h3>
<ul>
<li>详细描述本文提出的方法/理论</li>
</ul>
<h3>实现步骤</h3>
<ul>
<li>列出实现方法的具体步骤</li>
</ul>
<h3>优点与不足</h3>
<ul>
<li>分析方法的优点和不足</li>
</ul>
<h2>实验/数据分析</h2>
<h3>数据集描述</h3>
<ul>
<li>介绍实验所使用的数据集</li>
</ul>
<h3>实验方法</h3>
<ul>
<li>描述实验过程和方法</li>
</ul>
<h3>实验结果</h3>
<ul>
<li>展示实验结果</li>
</ul>
<h3>结果分析</h3>
<ul>
<li>分析实验结果的含义和意义</li>
</ul>
<h2>结论与展望</h2>
<h3>结论</h3>
<ul>
<li>总结本文的研究成果</li>
</ul>
<h3>展望</h3>
<ul>
<li>提出未来研究方向和改进空间</li>
</ul>
<h2>参考文献和引文</h2>
<ul>
<li>参考文献1</li>
<li>参考文献2</li>
<li>参考文献3</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 人工智能 - 应用 - 微软小冰</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD-%E5%BA%94%E7%94%A8-%E5%BE%AE%E8%BD%AF%E5%B0%8F%E5%86%B0.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD-%E5%BA%94%E7%94%A8-%E5%BE%AE%E8%BD%AF%E5%B0%8F%E5%86%B0.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 人工智能 - 应用 - 微软小冰</source>
      <description>文章摘要： 微软小冰的设计与实现。 简介</description>
      <category>学习笔记/技术</category>
      <pubDate>Fri, 22 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 微软小冰的设计与实现。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - API - 「java.util」</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjava.util%E3%80%8D.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjava.util%E3%80%8D.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - API - 「java.util」</source>
      <description>文章摘要： 包含了一系列实用程序类和集合框架。 介绍 简要说明 包含了一系列实用程序类和集合框架。 提供了用于处理日期、集合、事件监听、国际化、属性文件、随机数生成、栈、队列和其他实用功能。 主要功能 集合框架：提供了接口和类，用于表示和操作集合，如 List、Set、Map 和 Queue。 日期和时间：Date、Calendar 和 TimeZon...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Fri, 22 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 包含了一系列实用程序类和集合框架。</p>
<!-- more -->
<h2>介绍</h2>
<p>简要说明</p>
<ul>
<li>包含了一系列实用程序类和集合框架。</li>
<li>提供了用于处理日期、集合、事件监听、国际化、属性文件、随机数生成、栈、队列和其他实用功能。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>集合框架</strong>：提供了接口和类，用于表示和操作集合，如 <code>List</code>、<code>Set</code>、<code>Map</code> 和 <code>Queue</code>。</li>
<li><strong>日期和时间</strong>：<code>Date</code>、<code>Calendar</code> 和 <code>TimeZone</code> 类用于处理日期和时间。</li>
<li><strong>事件监听和通知</strong>：<code>EventListener</code> 接口和 <code>Observable</code> 类用于实现事件监听机制。</li>
<li><strong>国际化</strong>：<code>Locale</code> 和 <code>ResourceBundle</code> 类用于支持应用程序的国际化。</li>
<li><strong>属性文件处理</strong>：<code>Properties</code> 类用于读取和写入属性文件。</li>
<li><strong>随机数生成</strong>：<code>Random</code> 类用于生成伪随机数。</li>
<li><strong>数据结构</strong>：如 <code>Stack</code>、<code>Queue</code>、<code>PriorityQueue</code>、<code>LinkedList</code>、<code>ArrayList</code>、<code>HashMap</code> 等。</li>
<li><strong>实用工具类</strong>：如 <code>Arrays</code>、<code>Collections</code>、<code>Comparator</code>、<code>Iterator</code>、<code>Enumeration</code> 等。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>集合类型选择</strong>：根据具体需求选择合适的集合类型，例如，如果需要快速随机访问，应使用 <code>ArrayList</code> 而不是 <code>LinkedList</code>。</li>
<li><strong>线程安全</strong>：大多数集合类不是线程安全的，如需在多线程环境中使用，应考虑使用同步包装器或并发集合。</li>
<li><strong>内存管理</strong>：大型集合可能占用大量内存，需要注意内存管理和优化。</li>
<li><strong>泛型使用</strong>：在集合中使用泛型可以提供类型安全，避免在运行时出现类型转换错误。</li>
<li><strong>迭代器使用</strong>：在使用迭代器遍历集合时，不要在迭代过程中修改集合的结构。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>数据存储和检索</strong>：需要存储和检索对象集合的场景。</li>
<li><strong>日期和时间处理</strong>：需要操作日期和时间的场景。</li>
<li><strong>事件驱动编程</strong>：需要实现事件监听和通知机制的场景。</li>
<li><strong>国际化支持</strong>：需要根据不同地区和语言环境调整应用程序行为的场景。</li>
<li><strong>配置管理</strong>：需要读取和写入配置信息的场景。</li>
<li><strong>随机数据处理</strong>：需要生成随机数或随机数据的场景。</li>
<li><strong>算法实现</strong>：需要使用特定数据结构（如栈、队列）实现算法的场景。</li>
</ul>
<h2><code>java.util.Scanner</code>（待确认）</h2>
<ul>
<li>接收用户的键盘输入。</li>
</ul>
<p>实例化</p>
<ul>
<li><code>new Scanner(System.in)</code></li>
</ul>
<p>设置接收的数据类型</p>
<ul>
<li><code>&lt;对象&gt;.next()</code>：字符串。</li>
<li><code>&lt;对象&gt;.nextInt()</code>：整型。</li>
</ul>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>util<span class="token punctuation">.</span></span><span class="token class-name">Scanner</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">App</span> <span class="token punctuation">{</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">	    <span class="token comment">//  实例化Scanner对象</span></span>
<span class="line">        <span class="token class-name">Scanner</span> scanner <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Scanner</span><span class="token punctuation">(</span><span class="token class-name">System</span><span class="token punctuation">.</span>in<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">		<span class="token comment">// 指定接收的数据类型，等待用户输入</span></span>
<span class="line">        <span class="token class-name">String</span> s <span class="token operator">=</span> scanner<span class="token punctuation">.</span><span class="token function">nextLine</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">		<span class="token comment">// 输出到控制台</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"输入："</span> <span class="token operator">+</span> s<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2><code>java.util.concurrent</code></h2>
<p>在并发编程中通常有用的 Utility 类。</p>
<h2><code>java.util.concurrent.atomic</code></h2>
<p>一个小型类工具包，支持对单个变量进行无锁线程安全编程。</p>
<h2><code>java.util.concurrent.locks</code></h2>
<p>提供用于锁定和等待条件的框架的接口和类，该框架不同于内置同步和监视器。</p>
<h2><code>java.util.function</code></h2>
<p>_函数接口_为 lambda 表达式和方法引用提供目标类型。</p>
<h2><code>java.util.jar</code></h2>
<p>提供用于读取和写入 JAR （Java ARchive） 文件格式的类，该格式基于标准 ZIP 文件格式和可选的清单文件。</p>
<h2><code>java.util.logging</code></h2>
<p>提供 JavaTM 2 平台的核心日志记录工具的类和接口。</p>
<p>日常又被称为 JUL（简称）。</p>
<h2><code>java.util.prefs</code></h2>
<p>此软件包允许应用程序存储和检索用户和系统首选项以及配置数据。</p>
<h2><code>java.util.regex</code></h2>
<p>用于将字符序列与正则表达式指定的模式匹配的类。</p>
<h2><code>java.util.spi</code></h2>
<p>java.util 包中的类的服务提供商类。</p>
<h2><code>java.util.stream</code></h2>
<p>支持对元素流进行函数式操作的类，例如对集合的 map-reduce 转换。</p>
<h2><code>java.util.zip</code></h2>
<p>提供用于读取和写入标准 ZIP 和 GZIP 文件格式的类。</p>
<h1>cache</h1>
<h3>主要概念</h3>
<h4>集合框架</h4>
<ul>
<li>Java 集合框架是一组接口和类，用于表示和操作对象集合。</li>
</ul>
<h4>事件模型</h4>
<ul>
<li>Java 的事件模型允许对象监听其他对象的事件，并在事件发生时得到通知。</li>
</ul>
<h4>日期和时间</h4>
<ul>
<li>提供了日期和时间操作的基本工具。</li>
</ul>
<h4>国际化</h4>
<ul>
<li>提供了处理本地化和格式化的工具。</li>
</ul>
<h3>主要类和接口</h3>
<h4>集合接口</h4>
<ul>
<li><code>Collection</code></li>
<li><code>List</code></li>
<li><code>Set</code></li>
<li><code>SortedSet</code></li>
<li><code>NavigableSet</code></li>
<li><code>Queue</code></li>
<li><code>Deque</code></li>
</ul>
<h4>集合实现</h4>
<ul>
<li><code>ArrayList</code></li>
<li><code>LinkedList</code></li>
<li><code>HashSet</code></li>
<li><code>LinkedHashSet</code></li>
<li><code>TreeSet</code></li>
<li><code>PriorityQueue</code></li>
<li><code>ArrayDeque</code></li>
</ul>
<h4>Map 接口</h4>
<ul>
<li><code>Map</code></li>
<li><code>SortedMap</code></li>
<li><code>NavigableMap</code></li>
</ul>
<h4>Map 实现</h4>
<ul>
<li><code>HashMap</code></li>
<li><code>LinkedHashMap</code></li>
<li><code>TreeMap</code></li>
<li><code>Hashtable</code></li>
<li><code>Properties</code></li>
</ul>
<h4>工具类</h4>
<ul>
<li><code>Collections</code></li>
<li><code>Arrays</code></li>
</ul>
<h4>日期和时间</h4>
<ul>
<li><code>Date</code></li>
<li><code>Calendar</code></li>
<li><code>TimeZone</code></li>
<li><code>SimpleDateFormat</code></li>
</ul>
<h4>国际化</h4>
<ul>
<li><code>Locale</code></li>
<li><code>ResourceBundle</code></li>
</ul>
<h4>事件模型</h4>
<ul>
<li><code>EventListener</code></li>
<li><code>EventObject</code></li>
</ul>
<h4>其他实用工具</h4>
<ul>
<li><code>Iterator</code></li>
<li><code>ListIterator</code></li>
<li><code>Enumeration</code></li>
<li><code>Random</code></li>
<li><code>Scanner</code></li>
<li><code>Observable</code></li>
<li><code>Observer</code></li>
</ul>
<h2>学习总结</h2>
<h4>集合框架</h4>
<ul>
<li><code>Collection</code> 接口是集合框架的根接口，定义了集合的基本操作。</li>
<li><code>List</code> 接口扩展了 <code>Collection</code>，提供了有序集合的操作。</li>
<li><code>Set</code> 接口扩展了 <code>Collection</code>，提供了无重复元素的集合操作。</li>
<li><code>Map</code> 接口提供了键值对操作，与 <code>Collection</code> 是分离的。</li>
<li><code>Collections</code> 类包含操作集合的静态方法，如排序、查找和同步。</li>
<li>Java 8 引入了 <code>Stream</code> API，允许以声明式方式处理集合数据。</li>
</ul>
<h4>日期和时间</h4>
<ul>
<li><code>Date</code> 类表示特定的瞬间，精确到毫秒。</li>
<li><code>Calendar</code> 类提供了日期时间的计算功能。</li>
<li><code>TimeZone</code> 表示时区偏移量，<code>SimpleDateFormat</code> 用于格式化和解析日期字符串。</li>
</ul>
<h4>国际化</h4>
<ul>
<li><code>Locale</code> 类表示特定的地理、政治和文化地区。</li>
<li><code>ResourceBundle</code> 类用于国际化和本地化，允许根据 <code>Locale</code> 加载资源。</li>
</ul>
<h4>事件模型</h4>
<ul>
<li><code>EventListener</code> 是一个标记接口，表示对象可以接收事件通知。</li>
<li><code>EventObject</code> 是所有事件状态对象的基础类。</li>
</ul>
<h4>其他实用工具</h4>
<ul>
<li><code>Iterator</code> 和 <code>ListIterator</code> 用于遍历集合。</li>
<li><code>Random</code> 类用于生成伪随机数。</li>
<li><code>Scanner</code> 类用于解析基本类型和字符串。</li>
<li><code>Observable</code> 和 <code>Observer</code> 是 Java 早期的事件模型，用于实现观察者模式。</li>
</ul>
<h4>注意事项</h4>
<ul>
<li>在 Java 8 中，推荐使用 <code>HashMap</code> 而不是 <code>Hashtable</code>，因为 <code>HashMap</code> 提供了更好的性能，并且允许一个 null 键和多个 null 值。</li>
<li><code>Vector</code> 和 <code>Stack</code> 类已经被 <code>ArrayList</code> 和 <code>ArrayDeque</code> 取代，因为后者提供了更好的性能和更现代的 API。</li>
<li>在多线程环境中，应使用线程安全的集合类，如 <code>Collections.synchronizedList</code> 或 <code>ConcurrentHashMap</code>。</li>
<li>Java 8 引入的 <code>Stream</code> API 提供了一种高效且易于使用的数据处理方式，应该熟练掌握。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Excerpt - 2017微软AI大讲堂</title>
      <link>https://blog.magictable.ha.cn/note/Excerpt-2017%E5%BE%AE%E8%BD%AFAI%E5%A4%A7%E8%AE%B2%E5%A0%82.html</link>
      <guid>https://blog.magictable.ha.cn/note/Excerpt-2017%E5%BE%AE%E8%BD%AFAI%E5%A4%A7%E8%AE%B2%E5%A0%82.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Excerpt - 2017微软AI大讲堂</source>
      <description>文章摘要： 摘要内容。 微软亚洲研究院副院长周明博士的演讲——自然语言聊天、问答和对话详细信息请点击转跳到网页 周明博士：“其实微软小冰就是在模拟人跟电脑的对话。电脑接收文字、图像或者语音，识别其中的内容，然后给予适当的回复。有的回复很有意思，让人觉得好像电脑后面就坐着一个真实的人，但有的时候回复也差强人意，而这正是我们这次编程之美所期待的，希望大家一...</description>
      <category>学习笔记/摘录</category>
      <pubDate>Thu, 21 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<p>微软亚洲研究院副院长<strong>周明博士的演讲——自然语言聊天、问答和对话</strong><a href="https://www.msra.cn/zh-cn/news/features/ming-zhou-conversation-engine-20170413" target="_blank" rel="noopener noreferrer">详细信息请点击转跳到网页</a></p>
<blockquote>
<p>周明博士：“其实微软小冰就是在模拟人跟电脑的对话。电脑接收文字、图像或者语音，识别其中的内容，然后给予适当的回复。有的回复很有意思，让人觉得好像电脑后面就坐着一个真实的人，但有的时候回复也差强人意，而这正是我们这次编程之美所期待的，希望大家一起加入到人机对话的创新过程中，把人机对话做的更好。”</p>
</blockquote>
<p><strong>人机对话有三个层次，一个是聊天，一个是问答，还有一个是对话</strong>，即面向某一特定任务的对话。</p>
<p>在我们每天都会产生的这些对话中实际上包含了三个最基本的人类智力的活动。</p>
<blockquote>
<ul>
<li>第一个，聊天。聊天一般没有太多实质性的内容，主要是拉近人与人之间的关系；</li>
<li>第二个就是问答，比如“你买什么东西”，“这个方便面多少钱一包”，这是提问，它的目的是提供信息；</li>
<li>第三个，面向特定意图的对话。比如售货员知道我的意图是买方便面，开始围绕这个意图跟我进行了有目的的对话，最终我完成支付行为，售货员把方便面放到我手上。</li>
</ul>
</blockquote>
<p>最近几年，深度神经网络逐渐取代了传统的统计机器学习，成为主流的研究方向。现在，自然语言技术已全部转向深度学习网络，我们的对话系统也都用到了深度学习网络。</p>
<blockquote>
<p>深度学习网络一般有一个输入层，一个输出层，中间有N层是神经网络，他们之间通过一种连接方式以不同的权值来发挥作用，当输入时，根据神经网络的权值逐层推进，就会得到一个输出。</p>
</blockquote>
<blockquote>
<p>其实在训练的时候有很多样本，输入和输出是对应的。当输入到神经网络时，有的时候会发现结果不对，那么则可以根据它与答案之间的差距进行反向传播并修正参数。当网络趋势越来越好，那么到一定时候网络就可以收敛，进而网络就达到了一定的智能行为，这就是最简单的神经网络架构。</p>
</blockquote>
<p><strong>聊天是怎么做的，这样的人机对话是怎样形成的？</strong></p>
<blockquote>
<ul>
<li>一种很简单，就是将网上的论坛、微博或是网站里出现过的对话句子抽取出来，当成训练语料库。当来了一个句子时，系统会从语料库里找到一个跟这个句子最相像的句子，而这个句子对应的答复就可以直接输出作为电脑的回复。虽然看起来这个方法简单粗暴，但有时候还是挺有效的。</li>
<li>然而有的时候，系统找到的句子可能对应了很多回复，它不知道哪个回复最适合当前的输入语句。所以这里就要有一个匹配的过程，就是怎么判断输入语句跟语料库里的回复在语义上是相关的或者是一致的？</li>
<li>要注意的是，<strong>短字符串匹配的时候太依赖于自己的信息了</strong>。而我们日常说话时往往是有背景、有常识的，我们说的每句话都有一个主题词表。比如我来到了清华三食堂，那这个背后的主题词可以说吃饭、早饭、中饭、晚饭、价钱、饭卡等，这些词都是跟它相关的主题词，匹配的时候要体现出这些主题词。</li>
<li>解决方法是：首先找出输入语句的N个主题词，然后再找出可以回复的那些句子的主题词，用主题词来增强匹配的过程。这也是通过神经网络来算两个词串，再加上主题词增义的相似度。</li>
</ul>
<blockquote>
<p>==具体算法实际上是<strong>通过Attention model（注意力模型）计算每个主题词跟当前这句话的匹配强度</strong>，所有主题词根据强度不同进行加权以体现当前背景主题词的强度，然后再和原句匹配在一起，来算相似度。==
==另外，我们也可以<strong>把主题词当成所谓的Knowledge base（知识图谱）</strong>，通过主题词限定当前的输入应该有哪些信息可以输出，哪些信息不要输出，哪些信息应该补足，哪些信息可以直接使用等等。实际上在具体实现时可以看到一个句子有三种表示方法，两个句子之间每个句子都有三种表示方法，用两两表示方法计算距离最后就会得到一个矢量，再通过多层感知得到一个数值，来表征这两个输入串的距离。所以，这两个输入串不是赤裸裸地直接去匹配，而是用周围知识所代表的主题词来增强。==</p>
</blockquote>
</blockquote>
<p>问答就是用户有问题，系统要理解这个问题，然后利用系统所有的资源来回答这个问题，资源可能是FAQ、文档、表格、知识图谱等等，哪一个回答出来了，就说明哪一个是答案，如果有多个资源都可以回答问题，那我们选取那个最有可能的来进行输出。</p>
<blockquote>
<p>简单说一下所谓Knowledge base（知识图谱）有两条路走，一条是<strong>对用户的问题进行语义理解</strong>，一般用Semantic Parsing（语义分析），语义分析有很多种，比如有用CCG、DCS，也有用机器翻译来做的。它得到了一个句子的逻辑表示，根据逻辑表示再到知识库里去查，查到这个结点是什么，关系是什么等，通过这种方式，自然而然就查到了。</p>
</blockquote>
<p>在<strong>未来有三件大事非常重要</strong></p>
<ol>
<li><strong>如何更好地来为上下文或者是多轮对话建模</strong></li>
</ol>
<blockquote>
<ul>
<li>目前还是用比较粗糙的信息表示方法来做，没有精确的来断定前文出现了哪些具体的信息，将来我们可以用信息抽取的方法把这些信息记录下来，引导未来的对话。</li>
</ul>
</blockquote>
<ol start="2">
<li><strong>个性化的信息如何指导生成个性化的回复</strong>。</li>
</ol>
<blockquote>
<ul>
<li>最后，现在的回复也是千篇一律，大人、小孩、男孩、女孩，可能都是一样的，但人们在实际对话中面对不同的人群是不一样的，<strong>如何能够对回复的风格进行自动调整，使对话更加丰富多彩</strong>，这也是目前的一个挑战。</li>
</ul>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Excerpt - 微软 - 人与AI交互设计</title>
      <link>https://blog.magictable.ha.cn/note/Excerpt-%E5%BE%AE%E8%BD%AF-%E4%BA%BA%E4%B8%8EAI%E4%BA%A4%E4%BA%92%E8%AE%BE%E8%AE%A1.html</link>
      <guid>https://blog.magictable.ha.cn/note/Excerpt-%E5%BE%AE%E8%BD%AF-%E4%BA%BA%E4%B8%8EAI%E4%BA%A4%E4%BA%92%E8%AE%BE%E8%AE%A1.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Excerpt - 微软 - 人与AI交互设计</source>
      <description>文章摘要： 摘要内容。 人工智能的可用性和准确性的提高刺激了人工智能技术在主流面向用户的应用程序和服务中的应用。除了在各种产品中注入宝贵人工智能服务的机会，还有关于以人为本设计的最佳实践和准则的挑战和问题。 人工智能服务（如预测、识别和自然语言理解）的集成为设计师带来了许多新的考虑因素。例如，交互设计人员必须处理 AI 推理的失败率和成功率、持续机器学...</description>
      <category>学习笔记/摘录</category>
      <pubDate>Thu, 21 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<p>人工智能的可用性和准确性的提高刺激了人工智能技术在主流面向用户的应用程序和服务中的应用。除了在各种产品中注入宝贵人工智能服务的机会，还有关于以人为本设计的最佳实践和准则的挑战和问题。</p>
<p>人工智能服务（如预测、识别和自然语言理解）的集成为设计师带来了许多新的考虑因素。例如，交互设计人员必须处理 AI 推理的失败率和成功率、持续机器学习可能附带的系统行为变化以及人工智能功能的可理解性和可控性。</p>
<blockquote>
<p>当前人工智能设计的多变性以及备受瞩目的故障报告（从幽默、尴尬或破坏性（例如良性自动更正错误）到用户无法有效理解或控制人工智能系统（例如半自动驾驶车辆事故）的更严重情况，突显出在人工智能中创造更直观、更有效的用户体验的机会。正在进行的人工智能系统以人为本设计对话表明，设计师们渴望值得信赖的以人工智能为中心的设计启发式或指南。</p>
<p>"设计界没有一套统一的指导方针来创建人类和人工智能系统之间的直观交互。我们着手创建并验证其中一个。</p>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 人工智能 - 技术 - 人机对话系统</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD-%E6%8A%80%E6%9C%AF-%E4%BA%BA%E6%9C%BA%E5%AF%B9%E8%AF%9D%E7%B3%BB%E7%BB%9F.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD-%E6%8A%80%E6%9C%AF-%E4%BA%BA%E6%9C%BA%E5%AF%B9%E8%AF%9D%E7%B3%BB%E7%BB%9F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 人工智能 - 技术 - 人机对话系统</source>
      <description>文章摘要： 摘要内容。 简介 主要功能 注意事项 适用场景 对话系统分类 按交互方式分类 任务型对话系统：专注于完成特定任务，如预订机票、设置提醒等。 非任务型对话系统：通常用于闲聊或提供信息，不专注于完成特定任务。 按智能化程度分类 基于规则的对话系统：使用预定义的规则来引导对话。 基于机器学习的对话系统：使用数据驱动的方法来理解和生成对话，如Ras...</description>
      <category>学习笔记/技术</category>
      <pubDate>Thu, 21 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>主要功能</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>注意事项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>适用场景</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>对话系统分类</h2>
<ol>
<li>按交互方式分类</li>
</ol>
<blockquote>
<ul>
<li><strong>任务型对话系统</strong>：专注于完成特定任务，如预订机票、设置提醒等。</li>
<li><strong>非任务型对话系统</strong>：通常用于闲聊或提供信息，不专注于完成特定任务。</li>
</ul>
</blockquote>
<ol start="2">
<li>按智能化程度分类</li>
</ol>
<blockquote>
<ul>
<li><strong>基于规则的对话系统</strong>：使用预定义的规则来引导对话。</li>
<li><strong>基于机器学习的对话系统</strong>：使用数据驱动的方法来理解和生成对话，如Rasa。</li>
</ul>
</blockquote>
<ol start="3">
<li>按交互媒介分类</li>
</ol>
<blockquote>
<ul>
<li><strong>文本对话系统</strong>：通过文本进行交互，如即时消息、聊天应用。</li>
<li><strong>语音对话系统</strong>：通过语音进行交互，如智能助手、电话客服。</li>
</ul>
</blockquote>
<ol start="4">
<li>按功能复杂度分类</li>
</ol>
<blockquote>
<ul>
<li><strong>简单问答系统</strong>：仅处理特定问题的直接回答。</li>
<li><strong>多轮对话系统</strong>：能够进行多轮交互，处理更复杂的对话场景。</li>
</ul>
</blockquote>
<ol start="5">
<li>按用户界面分类</li>
</ol>
<blockquote>
<ul>
<li><strong>固定式对话系统</strong>：用户界面和交互选项是固定的。</li>
<li><strong>自适应对话系统</strong>：能够根据用户的输入和上下文动态调整对话流程。</li>
</ul>
</blockquote>
<ol start="6">
<li>按应用场景分类</li>
</ol>
<blockquote>
<ul>
<li><strong>客户服务对话系统</strong>：用于提供客户支持。</li>
<li><strong>教育对话系统</strong>：用于教学和学习。</li>
<li><strong>娱乐对话系统</strong>：用于娱乐和休闲，如聊天机器人。</li>
</ul>
</blockquote>
<ol start="7">
<li>按技术架构分类</li>
</ol>
<blockquote>
<ul>
<li><strong>单体对话系统</strong>：所有功能集成在一个系统中。</li>
<li><strong>微服务架构对话系统</strong>：将对话系统的不同组件作为独立的服务运行。</li>
</ul>
</blockquote>
<h2>对话意图理解</h2>
<blockquote>
<ul>
<li>详细总结：<a href="/note/Technology-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD-%E6%8A%80%E6%9C%AF-%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E7%90%86%E8%A7%A3.html" target="_blank">自然语言理解</a></li>
<li>正则匹配/规则/模板</li>
<li>FAQ系统</li>
<li>End2End文本回复</li>
</ul>
</blockquote>
<h2>多轮对话</h2>
<h3>实现方案 01</h3>
<p>上下文信息表征</p>
<blockquote>
<ul>
<li>把对话历史的之前三句话用sep分割作为文本输入另一个BERT模型，取出那个模型的cls位置变量作为上下文表征。</li>
</ul>
</blockquote>
<p>意图识别</p>
<blockquote>
<ul>
<li>把该上下文表征（cls向量）和用户输入的语句的特征向量，再进行ner和文本分类。</li>
</ul>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Python 3 - API</title>
      <link>https://blog.magictable.ha.cn/software/Language-Python3-API.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Python3-API.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Python 3 - API</source>
      <description>文章摘要： python3标准类库。 注释 官方文档确实格式不太统一，虽然很全和按流程总结，但是需要全神贯注的去看，否则很容易溜掉一些使用细节，因为文档格式和布局不太美观。 官方文档是不断更新的，但是更新内容都是最先写在文档的最上面，因此在学习的时候建议从下往上看，这样才能学到python的更新流程和功能。从下往上看的时候请仔细观察哪些属于一部分，不要...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Thu, 21 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> python3标准类库。</p>
<!-- more -->
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>官方文档确实格式不太统一，虽然很全和按流程总结，但是需要全神贯注的去看，否则很容易溜掉一些使用细节，因为文档格式和布局不太美观。</li>
<li>官方文档是不断更新的，但是更新内容都是最先写在文档的最上面，因此在学习的时候建议从下往上看，这样才能学到python的更新流程和功能。从下往上看的时候请仔细观察哪些属于一部分，不要漏掉重要信息。</li>
<li>官方文档中介绍到：python的方法（函数）有多个操作系统的API接口，因此个人认为先选择符合自己操作系统的方法优先学习和记录，这样不会混乱。</li>
<li>官方文档中有进行分类，每个库（包）模块的使用方法都会进行分类，分成一块一块，建议按标题学习总结。</li>
</ul>
</div>
<h2><code>langging</code></h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href="/software/Language-Python3-API-logging.html" target="_blank">Language-Python3-API-logging</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Python 3 - 问题总结 - 第三方库下载方法</title>
      <link>https://blog.magictable.ha.cn/software/Language-Python3-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E7%AC%AC%E4%B8%89%E6%96%B9%E5%BA%93%E4%B8%8B%E8%BD%BD%E6%96%B9%E6%B3%95.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Python3-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E7%AC%AC%E4%B8%89%E6%96%B9%E5%BA%93%E4%B8%8B%E8%BD%BD%E6%96%B9%E6%B3%95.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Python 3 - 问题总结 - 第三方库下载方法</source>
      <description>文章摘要： 摘要内容。 第三方库、包安装方法 全自动安装 使用包管理器，通过命令来进行下载和安装。 优点：下载包（库）时，会把依赖的相关库、包一起下载下来。 半自动安装 先从网络上把包（库）下载到本地， 如果下载下来的是压缩文件，则先解压。 然后在文件夹中找到setup.py的文件。 在需要安装的环境下，转跳到该文件目录下执行python setup....</description>
      <category>软件程序/程序语言</category>
      <pubDate>Thu, 21 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>第三方库、包安装方法</h2>
<h3>全自动安装</h3>
<p>使用包管理器，通过命令来进行下载和安装。</p>
<p>优点：下载包（库）时，会把依赖的相关库、包一起下载下来。</p>
<h3>半自动安装</h3>
<ul>
<li>先从网络上把包（库）下载到本地，</li>
<li>如果下载下来的是压缩文件，则先解压。</li>
<li>然后在文件夹中找到<code>setup.py</code>的文件。</li>
<li>在需要安装的环境下，转跳到该文件目录下执行<code>python setup.py install</code> <code>#也可以在代码中输入绝对路径。</code></li>
<li>安装完后，该目录下会有XXXX文件。</li>
</ul>
<p>此方法建议提前保存相关的包（库），和相关的依赖文件。</p>
<p>自己下载的第三方包（库）存放的位置，在安装的时候只是在python中创建了类似快捷方式的文件。（具体还不清楚）。==待完善==</p>
<p><strong>==python使用pip安装和手动安装后，文件的位置都一样，但文件名称不一样==</strong></p>
<p><strong>==pip安装的会有两个工程文件，外加一个exe和一个总接入程序.py==</strong></p>
<p><strong>==但是手动安装的会在新建一个文件夹把两个文件放在一起，外加一个exe和一个总接入程序.py，这里需要注意这个第三方库需要的依赖库也要一起手动一个一个去下载。==</strong></p>
<h3>手动安装</h3>
<ul>
<li>手动下载包（库）到本地。</li>
<li>若是压缩文件，需要先解压。</li>
<li>并放置在需要安装的python解释器中的这条目录下<code>.\python\Lib\site-packages\</code></li>
</ul>
<p>警示：若下载的库、包需要其他依赖，则需要手动一起下载，否则运行时很可能出现BUG。</p>
<h3>通过IDE（集成开发环境）安装</h3>
<ol>
<li>载入本地python版本、位置、此版本的库、包、模块，来使用。</li>
<li>IDE有自己的包管理平台，可以通过软件来下载库、包、模块。</li>
</ol>
<p>这种方法比较全面，包含了python编译器、代码编辑器、包管理器下载工具。</p>
<p>在电脑上也比较统一管理，毕竟是IDE（集成开发环境）。</p>
<p>在用户目录下会自动创建属于IDE的文件夹。</p>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Python 3 - 问题总结 - 运行环境</title>
      <link>https://blog.magictable.ha.cn/software/Language-Python3-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E8%BF%90%E8%A1%8C%E7%8E%AF%E5%A2%83.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Python3-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E8%BF%90%E8%A1%8C%E7%8E%AF%E5%A2%83.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Python 3 - 问题总结 - 运行环境</source>
      <description>文章摘要： 摘要内容。 python的创建虚拟环境是什么？如何创建？ 虚拟环境介绍 环境是什么？ 环境是指python代码的运行环境，包含了以下信息： python解释器，用哪个解释器来执行代码？ python库的位置，应该去哪里import导入所需要的模块？ 可执行程序的位置，比如安装了pip那么pip命令是在哪里？ 当我们说包的路径在 Lib文件夹...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Thu, 21 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<p>python的创建虚拟环境是什么？如何创建？
<a href="https://zhuanlan.zhihu.com/p/108534526" target="_blank" rel="noopener noreferrer">虚拟环境介绍</a></p>
<h2>环境是什么？</h2>
<p>环境是指python代码的运行环境，包含了以下信息：</p>
<ul>
<li>
<p>python解释器，用哪个解释器来执行代码？</p>
</li>
<li>
<p>python库的位置，应该去哪里import导入所需要的模块？</p>
</li>
<li>
<p>可执行程序的位置，比如安装了pip那么pip命令是在哪里？</p>
</li>
<li>
<p>当我们说包的路径在 <code>Lib</code>文件夹里和第三方包路径在<code>Lib/site-packages</code>文件夹里的时候，虽然大多数的情况下就是这样的，但是实际上并不准确。</p>
</li>
<li>
<p>包的搜寻路径是通过 Python 系统中的一个变量决定的，也就是 <code>sys.path</code>，是一个内置函数，也是一个标准（标配/内置）包。</p>
</li>
</ul>
<p>我们先来打印一下看看：</p>
<div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text"><pre><code class="language-text"><span class="line">&gt;&gt;&gt; import sys</span>
<span class="line">&gt;&gt;&gt; from pprint import pprint</span>
<span class="line">&gt;&gt;&gt; pprint(sys.path)</span>
<span class="line">['',   # 注意，别忽视了第 1 个</span>
<span class="line"> 'C:\\Users\\Davy\\AppData\\Local\\Programs\\Python\\Python38\\python38.zip',</span>
<span class="line"> 'C:\\Users\\Davy\\AppData\\Local\\Programs\\Python\\Python38\\DLLs',</span>
<span class="line"> 'C:\\Users\\Davy\\AppData\\Local\\Programs\\Python\\Python38\\lib',</span>
<span class="line"> 'C:\\Users\\Davy\\AppData\\Local\\Programs\\Python\\Python38',</span>
<span class="line"> 'C:\\Users\\Davy\\AppData\\Roaming\\Python\\Python38\\site-packages',</span>
<span class="line"> 'C:\\Users\\Davy\\AppData\\Local\\Programs\\Python\\Python38\\lib\\site-packages']</span>
<span class="line">&gt;&gt;&gt;</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><code>pprint</code> 是内置的 pretty-print 模块，可以自动换行，让打印结果好看一点。</p>
<p>注意：第 1 项是一个空字符串，它代表的是当前路径，也就是你启动程序的地方。比如说，我们默认情况下进入命令行就自动进入到当前用户的目录，例如 <code>C:\Users\Davy</code>，那么当前目录就是这个。</p>
<p>如果你还感到疑惑，可以用下面的语句打印出绝对路径：</p>
<div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text"><pre><code class="language-text"><span class="line">&gt;&gt;&gt; import os.path</span>
<span class="line">&gt;&gt;&gt; Eos.path.abspath('')</span>
<span class="line">'C:\\Users\\Davy'</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>什么是虚拟环境？</h2>
<p>虚拟环境是Python环境的一个副本。</p>
<p>要得到这样一个副本的步骤</p>
<ul>
<li>要给它单独找个文件夹存起来</li>
<li>要给它取个名字</li>
</ul>
<p>这个文件夹的名字也就是这个虚拟环境的名字，此文件夹下面有这些东西：</p>
<ul>
<li>一个python.exe</li>
<li>一个Scripts目录</li>
<li>一个Lib目录</li>
</ul>
<p>这里虚拟环境和普通环境有不一样的地方:</p>
<ul>
<li>python.exe也放在了Scripts目录下面</li>
<li>Lib目录下面只有site-packages目录</li>
</ul>
<h2>为什么要有虚拟环境</h2>
<p>当我们安装一个python程序或者库的时候，一般情况下我们虽然是想要安装一个包，但是，比如安装TensorFlow（机器学习）库时，实际安装的是一堆包，这些包默认都会安装到python环境的Lib/site-packages文件夹下面。</p>
<p>等到下次再安装其他包时，如果这个包的某个依赖包已经存在则不会重复下载（之前有下载过）。</p>
<p>这样会使得如果要删除一个包的时候是需要自己手动删除此包的依赖包的，会使得自己都不知道要删除那些依赖包。而且有可能会出现版本不兼容的问题。</p>
<h2>venv模块</h2>
<p>在Python 2.X的时候，创建虚拟环境还需要安装第三方的virtualenv库；</p>
<p>==现在Python3.3版本之后，标准库中有内置的venv模块，可以用来创建虚拟环境。==</p>
<h5>venv模块的基本操作</h5>
<p><strong>windows平台的操作方法：</strong></p>
<ol>
<li>创建虚拟环境</li>
</ol>
<blockquote>
<p>方法一：
<code>python -m venv [虚拟环境名字]</code></p>
<blockquote>
<p>///这行代码中的<code>python</code>可以根据自己改为<code>python2</code>或者<code>python3</code>，<code>python</code>是只有一个版本的时候才推荐使用。</p>
</blockquote>
<p>方法二：
<code>py -3 -m venv [虚拟环境名字]</code></p>
<blockquote>
<p>///这行代码中的<code>py</code>等同于<code>python</code>，而后面的<code>-3</code>就是python的大版本，可以是<code>-2</code>or<code>-3</code>or只有一个版本的时候可以选择不写。</p>
</blockquote>
<p>执行完上一步，会在所在位置建立一个文件夹（虚拟环境名字），文件夹中有三个"lnclude、Lib、Scripts"文件夹和一个"pyvenv.cfg"文件。并且以后我们在虚拟环境中所有的操作以及下载的库文件，都会在这个文件夹中。</p>
</blockquote>
<ol start="2">
<li>激活虚拟环境</li>
</ol>
<blockquote>
<p><code>完整路径\[虚拟环境名字]\Scripts\activate</code></p>
<blockquote>
<p>==///后面的Scripts、activate两个文件夹是什么我还不是很清楚，知道后再修改。== ==待完善==</p>
</blockquote>
<p>执行完上一步，会自动会刷新命令行界面，以括号内嵌虚拟环境名字的形式来提示用户，现在是处于venv虚拟环境中。</p>
</blockquote>
<ol start="3">
<li>使用虚拟环境</li>
</ol>
<blockquote>
<p>虚拟环境除了 Python 一些核心的包、pip 工具等等，其他都没有，因此，当前项目需要什么，则使用下载工具下载即可。其他的使用方法，与系统环境下的使用没有什么不同。</p>
</blockquote>
<ol start="4">
<li>退出虚拟环境</li>
</ol>
<blockquote>
<p><code>deactivate</code></p>
<blockquote>
<p>///退出虚拟环境很简单，各平台都是一样的，从虚拟环境中退出到系统环境是很明显的，因为前面的虚拟环境名称提示符消失了。</p>
</blockquote>
</blockquote>
<p>==如果不需要这个虚拟环境了，就直接删除该虚拟环境创建的整个文件夹就可以了。==</p>
<p><strong>MacOS或者Linux平台的操作方法：</strong></p>
<ol>
<li>创建虚拟环境</li>
</ol>
<blockquote>
<p><code>python3 -m venv [虚拟环境名字]</code></p>
<blockquote>
<p>///这行代码中的<code>python3</code>可以根据自己python的大版本改为<code>python2</code>或者<code>python3</code>。</p>
</blockquote>
<p>执行完上一步，会在所在位置建立一个文件夹（虚拟环境名字），文件夹中有三个"lnclude、Lib、Scripts"文件夹和一个"pyvenv.cfg"文件。并且以后我们在虚拟环境中所有的操作以及下载的库文件，都会在这个文件夹中。</p>
</blockquote>
<ol start="2">
<li>激活虚拟环境</li>
</ol>
<blockquote>
<p><code>suurce [虚拟环境名字]/bin/activate</code></p>
<blockquote>
<p>==///具体这个文件夹干什么还不清楚。== ==待完善==</p>
</blockquote>
<p>执行完上一步，会自动会刷新命令行界面，以括号内嵌虚拟环境名字的形式来提示用户，现在是处于venv虚拟环境中。</p>
</blockquote>
<ol start="3">
<li>使用虚拟环境</li>
</ol>
<blockquote>
<p>虚拟环境除了 Python 一些核心的包、pip 工具等等，其他都没有，因此，当前项目需要什么，则使用下载工具下载即可。其他的使用方法，与系统环境下的使用没有什么不同。</p>
</blockquote>
<ol start="4">
<li>退出虚拟环境</li>
</ol>
<blockquote>
<p><code>deactivate</code></p>
<blockquote>
<p>///退出虚拟环境很简单，各平台都是一样的，从虚拟环境中退出到系统环境是很明显的，因为前面的虚拟环境名称提示符消失了。</p>
</blockquote>
</blockquote>
<p>==如果不需要这个虚拟环境了，就直接删除该虚拟环境创建的整个文件夹就可以了。==</p>
<h2>结束语</h2>
<p>《Flask Web Development 2nd Edition》的作者所说的：</p>
<ul>
<li>在系统环境中，使用最基本的 Python 解释器提供虚拟环境 venv 的功能，然后在各个虚拟环境中完成我们的项目，这样是比较好的项目组织方式。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>OS - Debian Linux - 热门推荐 - 分区</title>
      <link>https://blog.magictable.ha.cn/software/OS-DebianLinux-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E5%88%86%E5%8C%BA.html</link>
      <guid>https://blog.magictable.ha.cn/software/OS-DebianLinux-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E5%88%86%E5%8C%BA.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">OS - Debian Linux - 热门推荐 - 分区</source>
      <description>文章摘要： linux 操作系统分区方案总结。 相关信息 外部相关文章 内部相关文章 磁盘分区： 磁盘分区 警告 备份：在分区之前，确保备份所有重要数据。 分区大小：根据实际情况调整分区大小，考虑未来的存储需求。 LVM：如果你需要更灵活的分区管理，可以考虑使用LVM（逻辑卷管理）。 a. EFI系统分区（/boot/efi或/boot） 大小：通常5...</description>
      <category>软件程序/操作系统</category>
      <pubDate>Thu, 21 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> linux 操作系统分区方案总结。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li></li>
</ul>
<p>内部相关文章</p>
<ul>
<li>磁盘分区：<a href="/hardware/Device-%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8-%E6%9C%BA%E6%A2%B0%E7%A3%81%E7%9B%98-%E7%A3%81%E7%9B%98%E5%88%86%E5%8C%BA.html" target="_blank">Device-数据存储-机械磁盘-磁盘分区</a></li>
</ul>
</div>
<h2>磁盘分区</h2>
<div class="hint-container warning">
<p class="hint-container-title">警告</p>
<ul>
<li><strong>备份</strong>：在分区之前，确保备份所有重要数据。</li>
<li><strong>分区大小</strong>：根据实际情况调整分区大小，考虑未来的存储需求。</li>
<li><strong>LVM</strong>：如果你需要更灵活的分区管理，可以考虑使用LVM（逻辑卷管理）。</li>
</ul>
</div>
<h4>a. EFI系统分区（/boot/efi或/boot）</h4>
<ul>
<li>大小：通常500MB到1GB足够</li>
<li>用途：用于EFI启动加载器和内核镜像</li>
<li>注意：仅当使用UEFI启动模式时才需要</li>
</ul>
<h4>b. 根分区（/）</h4>
<ul>
<li>大小：至少20GB，推荐至少50GB或更多，取决于你的需求</li>
<li>用途：存储系统文件和程序</li>
</ul>
<h4>c. 家分区（/home）</h4>
<ul>
<li>大小：剩余空间的大部分，取决于个人文件和数据的存储需求</li>
<li>用途：存储用户数据和个人设置</li>
</ul>
<h4>d. 交换分区（swap）</h4>
<ul>
<li>大小：通常为物理内存的1到2倍，但如果你有足够的物理内存（比如16GB以上），可以设置更小或不需要</li>
<li>用途：作为虚拟内存使用，当物理内存不足时</li>
</ul>
<h4>e. 临时文件系统（/tmp）</h4>
<ul>
<li>大小：通常5GB到10GB足够</li>
<li>用途：存储临时文件，可以不单独分区，而是使用tmpfs挂载到内存中</li>
</ul>
<h4>f. 可选分区</h4>
<ul>
<li>/var：用于存储系统日志和缓存文件，可以独立分区，特别是对于服务器</li>
<li>/opt：用于安装可选的软件包</li>
<li>/srv：用于存储服务数据</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>OS - Debian Linux - 热门推荐 - 目录</title>
      <link>https://blog.magictable.ha.cn/software/OS-DebianLinux-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E7%9B%AE%E5%BD%95.html</link>
      <guid>https://blog.magictable.ha.cn/software/OS-DebianLinux-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E7%9B%AE%E5%BD%95.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">OS - Debian Linux - 热门推荐 - 目录</source>
      <description>文章摘要： linux 操作系统目录规划总结。 相关信息 外部相关文章 内部相关文章 文件系统：，Debian Linux 12 操作系统目前推荐使用的是EXT4文件系统。 目录规划 在用户的HOME目录下</description>
      <category>软件程序/操作系统</category>
      <pubDate>Thu, 21 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> linux 操作系统目录规划总结。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li></li>
</ul>
<p>内部相关文章</p>
<ul>
<li>文件系统：<a href="/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F.html" target="_blank">基础知识-文件系统</a>，Debian Linux 12 操作系统目前推荐使用的是EXT4文件系统。</li>
</ul>
</div>
<h2>目录规划</h2>
<p>在用户的HOME目录下</p>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">/home/&lt;用户&gt;/</span>
<span class="line">|-- Cache/ ,临时文件或者待整理文件。</span>
<span class="line">|-- Data/ ,个人信息数据文件，私密文件。</span>
<span class="line">|-- Project/ ,源代码文件或项目工程文件。</span>
<span class="line">|-- Resource/ ,静态资源文件。</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Technology - 人工智能 - 技术 - 文本转语音</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD-%E6%8A%80%E6%9C%AF-%E6%96%87%E6%9C%AC%E8%BD%AC%E8%AF%AD%E9%9F%B3.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD-%E6%8A%80%E6%9C%AF-%E6%96%87%E6%9C%AC%E8%BD%AC%E8%AF%AD%E9%9F%B3.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 人工智能 - 技术 - 文本转语音</source>
      <description>文章摘要： 摘要内容。 简介 TTS（text-to-speech）技术将文本信息转换为听起来自然的语音。 功能 将书面文本转换为语音输出，使得机器能够“说话”。 应用 用于智能助手、阅读器、导航系统、客服机器人等。 流程 文本分析：分析文本内容，确定句子结构、单词发音等。 语音合成：根据文本分析的结果，合成语音波形。 声音调整：调整音调、语速、音量等...</description>
      <category>学习笔记/技术</category>
      <pubDate>Tue, 19 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>TTS（text-to-speech）技术将文本信息转换为听起来自然的语音。</p>
<p>功能</p>
<blockquote>
<ul>
<li>将书面文本转换为语音输出，使得机器能够“说话”。</li>
</ul>
</blockquote>
<p>应用</p>
<blockquote>
<ul>
<li>用于智能助手、阅读器、导航系统、客服机器人等。</li>
</ul>
</blockquote>
<p>流程</p>
<blockquote>
<ul>
<li><strong>文本分析</strong>：分析文本内容，确定句子结构、单词发音等。</li>
<li><strong>语音合成</strong>：根据文本分析的结果，合成语音波形。</li>
<li><strong>声音调整</strong>：调整音调、语速、音量等，使语音听起来更自然。</li>
</ul>
</blockquote>
<p>技术</p>
<blockquote>
<ul>
<li>常见的TTS技术包括拼接合成、参数合成和基于深度学习的端到端合成。</li>
</ul>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 人工智能 - 技术 - 机器学习</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD-%E6%8A%80%E6%9C%AF-%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD-%E6%8A%80%E6%9C%AF-%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 人工智能 - 技术 - 机器学习</source>
      <description>文章摘要： 摘要内容。 简介 人工智能研究是从“推理-&amp;gt;知识-&amp;gt;学习”这一个流程进行。 机器学习是实现人工智能的一个途径，即机器学习为手段解决人工智能中的问题。 “机器学习算法”是一类从数据中自动分析获得规律（模型），并利用规律对未知数据进行预测的算法。 机器通过分析大量数据来进行学习，不通过编程，而是通过大量数据进行训练，从而归纳和识别特定的目标。 ...</description>
      <category>学习笔记/技术</category>
      <pubDate>Tue, 19 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li>人工智能研究是从“推理-&gt;知识-&gt;学习”这一个流程进行。</li>
<li>机器学习是实现人工智能的一个途径，即机器学习为手段解决人工智能中的问题。</li>
<li>“机器学习算法”是一类从数据中自动分析获得规律（模型），并利用规律对未知数据进行预测的算法。</li>
<li>机器通过分析大量数据来进行学习，不通过编程，而是通过大量数据进行训练，从而归纳和识别特定的目标。</li>
<li>机器学习是指帮助软件在没有明确的程序或规则的情况下执行任务。</li>
<li>对于传统计算机编程，程序员会指定计算机应该使用的规则。但是，机器学习需要另一种思维方式。现实中的机器学习对数据分析的注重程度远高于编码。程序员提供一组样本，然后计算机从数据中学习各种模式。您可以将机器学习视为“使用数据进行编程”。</li>
</ul>
</blockquote>
<p>主要功能</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>注意事项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>适用场景</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p><strong>机器学习中的算法是什么？</strong></p>
<blockquote>
<ul>
<li>机器学习中的“算法”是在数据上运行以创建机器学习“模型”的过程。</li>
<li>学术界可以设计出全息你的机器学习算法，而机器学习实践者可以在他们的项目中使用标准的机器学习算法。这就像计算机科学的其他领域一样，学者可以设计出全新的排序算法，程序员可以在应用程序中使用标准的排序算法。</li>
<li>算法本质上是一套规则。</li>
</ul>
</blockquote>
<p><strong>机器学习中的模型到底是指什么？</strong></p>
<blockquote>
<ul>
<li>模型就是通过数据在算法中得到的 “ 结果 ” ，并将这个结果通过更改其中个别的数据，在算法中再进行运算得到结果。</li>
<li>模型由数据和如何使用数据对新数据进行预测的过程组成。</li>
<li>机器学习模型 == 模型数据 + 预测算法</li>
</ul>
</blockquote>
<p><strong>机器学习思路：</strong></p>
<ol>
<li>抽象现实问题，建立数学模型。</li>
<li>利用最优解方法，求解数学模型。</li>
<li>评估模型好坏，然后确定是否解决现实问题。</li>
</ol>
<p><strong>机器学习算法与模型的区别？</strong></p>
<blockquote>
<ul>
<li>算法是源码文件。</li>
<li>模型是训练好的结果。</li>
</ul>
<p><a href="https://zhuanlan.zhihu.com/p/162086776" target="_blank" rel="noopener noreferrer">机器学习中算法与模型的区别 - 知乎 (zhihu.com)</a></p>
</blockquote>
<h2>分类</h2>
<h3>监督学习（Supervised learning）</h3>
<blockquote>
<ul>
<li>监督机器学习或监督学习是指学习<code>x</code>到<code>y</code>或输入到输出映射的算法。</li>
<li>监督学习的关键特征是开发者提供学习算法示例以供学习。</li>
<li>这包括给定输入<code>x</code>的正确标签<code>y</code>，并且通过查看正确的输入<code>x</code>和所需输出标签<code>y</code>对，学习算法最终学会只接受输入而不需要输入标签并给出合理的输入预测或猜测。</li>
<li>利用一组已知类别的样本调整分类器的参数，使其达到所要求性能的过程，也称为监督训练或有教师学习。</li>
</ul>
</blockquote>
<h3>无监督学习（Unsupervised learning）</h3>
<blockquote>
<ul>
<li>在未加标签的数据中，试图找到隐藏的结构。常见的有聚类。</li>
</ul>
</blockquote>
<h3>半监督学习</h3>
<h3>强化学习（Reinforcement learning）</h3>
<blockquote>
<ul>
<li>智能系统从环境到行为映射的学习，以使奖励信号（强化信号）函数值最大。</li>
</ul>
</blockquote>
<h3>迁移学习</h3>
<blockquote>
<p>样本迁移、特征迁移、模型迁移
预训练模型</p>
</blockquote>
<h2>算法</h2>
<h3>回归（Regression）</h3>
<blockquote>
<ul>
<li>预测多个变量之间的变化关系。</li>
<li>回归算法必须从无限多可能的输入数字中预测数字。</li>
<li>回归反映的是数据属性值在时间上的特征，产生一个将数据项映射到一个实值预测变量的函数，发现变量或属性间的依赖关系，其主要研究问题包括数据序列的趋势特征、数据序列的预测以及数据间的关系等。</li>
</ul>
</blockquote>
<h3>分类（Classification）</h3>
<blockquote>
<ul>
<li>判断输入是给定类别的哪一类，输入的结果会在一个区间之内。</li>
<li>分类算法必须对一个类别进行预测，所有这些都是一小组可能的输出。</li>
<li>分类是找出一组数据对象的共同特点并按照分类模式将其划分为不同的类，其目的是通过分类模型，将数据项映射到某个给定的类别。</li>
</ul>
</blockquote>
<h3>聚类（Clvstering）</h3>
<blockquote>
<ul>
<li>将一些未标记的数据分类到相同集群或不同集群中。</li>
<li>聚类算法会获取没有标签的数据并尝试自动将他们分组到集群中。</li>
<li>聚类是把一组数据按照相似性和差异性分为几个类别，其目的是使得属于同一类别的数据间的相似性尽可能大，不同类别中的数据间的相似性尽可能小。</li>
</ul>
</blockquote>
<h2>机器学习的步骤</h2>
<ol>
<li>收集数据</li>
<li>清洗数据</li>
<li>选择模型</li>
<li>评估结果</li>
<li>调整参数</li>
<li>预测</li>
</ol>
<p>ML需要的知识分为：</p>
<blockquote>
<p><strong>编码技能</strong>：构建机器学习模型不仅要了解机器学习的概念，还需要编码，以便管理数据、调整参数以及解析测试和优化模型所需的结果。</p>
<p><strong>数学和统计学</strong>：机器学习是一门数学密集型学科，因此，如果您打算修改机器学习模型或从头开始构建新模型，那么熟悉底层的数学概念对于该过程至关重要.</p>
<p><strong>机器学习理论</strong>：了解机器学习理论的基础知识将为您打下基础，并且可在出现问题时帮助您排查问题。</p>
<p><strong>构建您自己的项目</strong>：亲身体验机器学习是检验知识掌握情况的最佳方式，因此，不要害怕尽早开始通过简单的实验、图书、视频教程来获取一些经验。</p>
</blockquote>
<h2>常见的机器学习算法</h2>
<ol>
<li>线性回归</li>
<li>逻辑回归</li>
<li>决策树</li>
<li>随机森林</li>
<li>K-means</li>
<li>Adaboost</li>
<li>贝叶斯</li>
</ol>
<h2>数据准备和特征工程</h2>
<h3>人工智能实现途径</h3>
<blockquote>
<ul>
<li>知识-&gt;专家系统特征-&gt;以统计为基础的机器学习数据-&gt;深度学习</li>
</ul>
</blockquote>
<h3>机器学习上限</h3>
<blockquote>
<ul>
<li>垃圾进，垃圾出</li>
<li>数据和特征决定机器学习的上限，模型和算法只是逼近这个上限而已。</li>
</ul>
</blockquote>
<h3>项目流程</h3>
<blockquote>
<ul>
<li>了解业务-&gt;收集数据（外界、数据集）-&gt;特征</li>
<li>理解商业问题-&gt;收集数据-&gt;提取特征-&gt;训练</li>
</ul>
</blockquote>
<h3>感知数据</h3>
<p>获取数据方法</p>
<blockquote>
<ul>
<li>从文件中读取数据：CSV文件、Excel文件、图像文件</li>
<li>从数据库中读取数据。</li>
<li>从网页中爬取数据</li>
<li>通过API获取数据</li>
</ul>
</blockquote>
<p>了解数据</p>
<blockquote>
<ul>
<li>记录和特征的数量、特征的名称、抽样了解记录中的数值特点、描述性统计结果、特征类型、</li>
<li>业务知识与数据结合。</li>
</ul>
</blockquote>
<h3>数据清理（不是数据清洗）</h3>
<blockquote>
<ul>
<li>转换数据类型、处理重复数据、处理缺失数据、处理离群数据</li>
</ul>
</blockquote>
<h3>特征变换</h3>
<blockquote>
<ul>
<li>特征数值化</li>
<li>特征二值化</li>
<li>OneHot编码</li>
<li>特征离散化</li>
<li>特征规范化：区间变换、标准化、归一化</li>
</ul>
</blockquote>
<h3>特征选择</h3>
<blockquote>
<ul>
<li>封装器法：循序特征选择、穷举特征选择、递归特征选择</li>
<li>过滤器法</li>
<li>嵌入法</li>
</ul>
</blockquote>
<h3>特征抽取</h3>
<blockquote>
<ul>
<li>无监督特征抽取：主成分分析、因子分析</li>
<li>有监督特征抽取</li>
</ul>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 人工智能 - 技术 - 深度学习</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD-%E6%8A%80%E6%9C%AF-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD-%E6%8A%80%E6%9C%AF-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 人工智能 - 技术 - 深度学习</source>
      <description>文章摘要： 摘要内容。 简介 各式各样的神经网络。 深度学习（DL）是机器学习的一种学习方式，具体来说是一种程序。 深度学习是一种以人工神经网络为架构，对数据进行特征学习的算法。 深度学习能自动数据特征抽取。 深度学习需要的数据量大。 主要功能 注意事项 适用场景 技术原理 1.构建一个网络并且随机初始化所有连接的权重； 2.将大量的数据情况输出到这个...</description>
      <category>学习笔记/技术</category>
      <pubDate>Tue, 19 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li>各式各样的神经网络。</li>
<li>深度学习（DL）是机器学习的一种学习方式，具体来说是一种程序。</li>
<li>深度学习是一种以人工神经网络为架构，对数据进行特征学习的算法。</li>
<li>深度学习能自动数据特征抽取。</li>
<li>深度学习需要的数据量大。</li>
</ul>
</blockquote>
<p>主要功能</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>注意事项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>适用场景</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>技术原理</h2>
<p>1.构建一个网络并且随机初始化所有连接的权重；</p>
<p>2.将大量的数据情况输出到这个网络中；</p>
<p>3.网络处理这些动作并且进行学习；</p>
<p>4.如果这个动作符合指定的动作，将会增强权重，如果不符合，将会降低权重；</p>
<p>5.系统通过如上过程调整权重；</p>
<p>6.在成千上万次的学习之后，超过人类的表现；</p>
<h2>算法</h2>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 人工智能 - 技术 - 自然语言理解</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD-%E6%8A%80%E6%9C%AF-%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E7%90%86%E8%A7%A3.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD-%E6%8A%80%E6%9C%AF-%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E7%90%86%E8%A7%A3.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 人工智能 - 技术 - 自然语言理解</source>
      <description>文章摘要： 摘要内容。 简介 NLU 主要功能 注意事项 适用场景 数据分析：从大量非结构化文本数据中提取有用信息。 情感分析：分析社交媒体上的用户反馈，以了解品牌形象和产品评价。 教育：智能教育助手，为学生提供学习支持和答疑。 应用层：聊天机器人、翻译 平台功能：标注工具、AI训练器 核心算法：分词、情感分析 其他算法：命名实体识别、关键词分析、词向...</description>
      <category>学习笔记/技术</category>
      <pubDate>Tue, 19 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li>NLU</li>
</ul>
</blockquote>
<p>主要功能</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>注意事项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>适用场景</p>
<blockquote>
<ul>
<li><strong>数据分析</strong>：从大量非结构化文本数据中提取有用信息。</li>
<li><strong>情感分析</strong>：分析社交媒体上的用户反馈，以了解品牌形象和产品评价。</li>
<li><strong>教育</strong>：智能教育助手，为学生提供学习支持和答疑。</li>
</ul>
</blockquote>
<p>应用层：聊天机器人、翻译</p>
<p>平台功能：标注工具、AI训练器</p>
<p>核心算法：分词、情感分析</p>
<p>其他算法：命名实体识别、关键词分析、词向量、文本相似度</p>
<p>资源层：基础架构支持、数据中心</p>
<h2>分词</h2>
<p>分词，我认为其实是在把字合在一起，而不是一个句子分开。</p>
<blockquote>
<ul>
<li>开始，文本从开始就是单个字符（第一次分词等于没有分词），或者说是字符集（字符编码），</li>
<li>然后，加入了我们的常用词汇（专有名词），进一步的为文本分词（第二次分词或者合字），</li>
<li>后续，有加入了句法分析或者篇章分析，可以说是时间线（理解上下文），查看之前的结果来改变之后的分词（第三次分词或根据上下文来改变词库，见人说人话，见鬼说鬼话），</li>
<li>最后，进行理解每个词的意思，也就是词法分析，或者根据上下文来改变词的意思（理解）。</li>
<li>最最后，记得保存（存储记忆，供后续使用）。</li>
</ul>
</blockquote>
<p>中文命名实体识别、中文阅读理解、中文句子对分类、中文情绪分析、语言可接受性、多任务学习、命名实体识别、自然语言推论、开放领域问题回答、问答、语义文本相似性、情绪分析</p>
<h2>意图识别</h2>
<p>基于规则：关键字、词典</p>
<p>基于模型：文本分类、文本相似度</p>
<p>多酚类模型</p>
<p>多标签模型</p>
<h2>分析对象粒度</h2>
<blockquote>
<p>词汇级</p>
<ul>
<li>词法分析：中文分词、词性标注、命名实体识别、新词识别</li>
<li>语义表示：语义表示、语义消歧</li>
<li>语义关系：语义关系建模、语义关系抽取、语义关系计算</li>
</ul>
<p>句子级</p>
<ul>
<li>语句变换：同义词替换、语义归一化、省略/纠错</li>
<li>语句解析：句法结构分析、依存关系分析</li>
<li>语义表示：语义给i傲视、分本分类</li>
<li>语句生成：规则模板、知识图例、机器学习</li>
</ul>
<p>篇章级</p>
<ul>
<li>单文档分析：分章主题、文档分类、文档结构分析、文档语义分析、文档语义表示</li>
<li>多文档分析：文档主题、文档分类、文档聚类</li>
</ul>
</blockquote>
<h2>分析内容特征</h2>
<blockquote>
<p>词法分析</p>
<ul>
<li>中文分词、实体命名识别、词性标注、新词识别</li>
</ul>
<p>语法分析</p>
<ul>
<li>句子级：句法结构分析、依存关系分析</li>
<li>篇章级：文档结构分析</li>
</ul>
<p>语义分析</p>
<ul>
<li>词汇级：语义表示、语义消歧</li>
<li>句子及：语义表示、文本分类、意图识别、情感分析</li>
<li>篇章级：语义表示、文档主题、文档分类、文档聚类、情感分析</li>
</ul>
<p>语用分析</p>
<ul>
<li>内容分析：意义分析、语境分析</li>
<li>内容生成：预制模板、知识推理、机器学习</li>
</ul>
</blockquote>
<h2>难点</h2>
<blockquote>
<ul>
<li>语言是没有规律的，或者说规律是错综复杂的。</li>
<li>语言是可以自由组合的，可以组合复杂的语言表达。</li>
<li>语言是一个开放集合，我们可以任意的发明创造一些新的表达方式。</li>
<li>语言需要联系到实践知识，有一定的知识依赖。</li>
<li>语言的使用要基于环境和上下文。</li>
</ul>
</blockquote>
<blockquote>
<ul>
<li>
<p><strong>分词标准</strong>：根据不同的需求定制不同的分词标准。</p>
</li>
<li>
<p><strong>切分歧义</strong>：对同一个带切分字符串存在多个分词结果。</p>
</li>
<li>
<ul>
<li><strong>组合型歧义</strong>（细粒度）：分词是有不同的粒度的，指某个词条中的一部分也可以切分为一个独立的词条。比如“中华人民共和国”，粗粒度的分词就是“中华人民共和国”，细粒度的分词可能是“中华/人民/共和国”</li>
</ul>
</li>
<li>
<ul>
<li><strong>交集型歧义</strong>：在“郑州天和服装厂”中，“天和”是厂名，是一个专有词，“和服”也是一个词，它们共用了“和”字。</li>
</ul>
</li>
<li>
<ul>
<li><strong>真歧义</strong>：本身的语法和语义都没有问题, 即便采用人工切分也会产生同样的歧义，只有通过上下文的语义环境才能给出正确的切分结果。例如：”乒乓球/拍买完了“和”乒乓球拍/买完了“。</li>
</ul>
</li>
<li>
<ul>
<li><strong>伪歧义</strong>：语义上只有一种切分结果，若切分错误会明显发现句子语义不对。</li>
</ul>
</li>
<li>
<p><strong>新词</strong>：也称未被词典收录的词，该问题的解决依赖于人们对分词技术和汉语语言结构的进一步认识。</p>
</li>
</ul>
</blockquote>
<h2>实现方法</h2>
<ol>
<li>基于词典分词算法</li>
</ol>
<blockquote>
<ul>
<li>又称字符串匹配分词算法。该算法是按照一定的策略将待匹配的字符串和一个已建立好的“充分大的”词典中的词进行匹配，若找到某个词条，则说明匹配成功，识别了该词。</li>
<li>常见的基于词典的分词算法分为以下几种：<strong>正向最大匹配法、逆向最大匹配法、双向匹配分词法、全切分路径选择</strong>。</li>
<li>基于词典的分词算法是应用最广泛、分词速度最快的。很长一段时间内研究者都在对基于字符串匹配方法进行优化，比如最大长度设定、字符串存储和查找方式以及对于词表的组织结构，比如采用TRIE索引树、哈希索引等。</li>
</ul>
</blockquote>
<ol start="2">
<li>基于统计的分词算法</li>
</ol>
<blockquote>
<p>这类目前常用的是算法是<strong>HMM、CRF、SVM、深度学习</strong>等算法，比如stanford、Hanlp分词工具是基于CRF算法。以CRF为例，基本思路是对汉字进行标注训练，不仅考虑了词语出现的频率，还考虑上下文，具备较好的学习能力，因此其对歧义词和未登录词的识别都具有良好的效果。</p>
</blockquote>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>Nianwen Xue在其论文《Combining Classifiers for Chinese Word Segmentation》中首次提出对每个字符进行标注，通过机器学习算法训练分类器进行分词，在论文《Chinese word segmentation as character tagging》中较为详细地阐述了基于字标注的分词法。</p>
<p>常见的分词器都是使用<strong>机器学习算法和词典相结合，一方面能够提高分词准确率，另一方面能够改善领域适应性。</strong></p>
<p>随着深度学习的兴起，也出现了<strong>基于神经网络的分词器</strong>，例如有人员尝试使用双向LSTM+CRF实现分词器，<strong>其本质上是序列标注</strong>，所以有通用性，命名实体识别等都可以使用该模型，据报道其分词器字符准确率可高达97.5%。算法框架的思路与论文《Neural Architectures for Named Entity Recognition》类似，利用该框架可以实现中文分词。</p>
</div>
<ol start="3">
<li>基于字符串匹配的分词方法</li>
</ol>
<blockquote>
<p>基于字符串匹配的分词是通过构建一个固定的词表，对照这个词表，对输入的问句进行字符串截取和字符串匹配。主要原理是将问句从头开始不断切割成若干个子字符串，当所有的子字符串都能够与词表中的某一个单词匹配时，分词即结束。这种分词方法不需要大规模的语料库进行训练，复杂性相对较小，分词速度较快，但该方法过于依赖性词表的质量，当词表足够大时，该方法的优势明显。相反，词表较小时，分词效果较差，且不能识别未登录词。目前，基于字符串匹配的分词法中有最大正向匹配法、最大逆向匹配法和最小切分法等。</p>
<ul>
<li>分词词典</li>
<li>文本扫描顺序：正向扫描、逆向扫描、双向扫描</li>
<li>匹配原则：最大匹配、逐词匹配、最佳匹配</li>
<li>最大匹配：把句子从左向右（或从右向左）遍历一遍，遇到词典里面包含的最长的词就标识出来。</li>
</ul>
</blockquote>
<ol start="4">
<li>基于统计</li>
</ol>
<blockquote>
<p>基于统计的分词算法的基本原理是利用统计的方法计算字符串在语料库中的出现频率，通过概率计算，判断字符串是否可以单独成词。这种方法不需要固定的词表，核心思想是当相邻的字符出现的次数越多时，这些字符组成一个词的可信度就越大，对未登录词识别展现了很好的优越性。但需要进行大量的文本训练，算法计算周期长，复杂度较高。</p>
</blockquote>
<ol start="5">
<li>基于理解</li>
</ol>
<blockquote>
<p>基于理解的分词方法是通过让计算机模拟人对句子的理解，达到识别词的效果。其基本思想就是在分词的同时进行句法、语义分析，利用句法信息和语义信息来处理歧义现象。它通常包括三个部分：分词子系统、句法语义子系统、总控部分。在总控部分的协调下，分词子系统可以获得词、句的句法和语义信息来对分词歧义进行判断，即它模拟了人对句子的理解过程。对未登录词有较强的识别能力，不需要词表和大量语料的训练，但需要使用大量的语言知识和信息、完备的规则库。算法复杂，实现技术难度较大，处理速度较慢，目前还处于实验测试阶段。</p>
</blockquote>
<p>中文分词工具</p>
<blockquote>
<ul>
<li>Hanlp</li>
<li>jieba</li>
<li>清华THULAC</li>
</ul>
</blockquote>
<p>术语解释</p>
<blockquote>
<ul>
<li><strong>词性标注</strong>：（Part-of-Speech tagging 或POS tagging）是指为自然语言文本中的每个词汇赋予一个词性的过程。例如名词、动词、形容词等。</li>
<li><strong>命名实体识别</strong>：（Named Entity Recognition 简称NER），即"专名识别"，是指识别自然语言文本中具有特定意义的实体，主要包括人名、地名、机构名、时间日期等。</li>
</ul>
</blockquote>
<h3>情感计算</h3>
<p>情感的组成部分</p>
<ol>
<li>主感体验</li>
</ol>
<blockquote>
<p>个体对不同情感状态的自我感受。</p>
</blockquote>
<ol start="2">
<li>外观表现（外显）</li>
</ol>
<blockquote>
<p>在情感状态发生状态时，身体各部分的动作量化形式</p>
<ul>
<li>面部表情：面部肌肉变化所组成的模式</li>
<li>姿态表情：身体其他部分的表情动作</li>
<li>语调表情：言语的声调、节奏、速度等方面的变化</li>
</ul>
</blockquote>
<ol start="3">
<li>生理唤醒（内隐）</li>
</ol>
<blockquote>
<p>情感参数的生理反应，是一种胜利的激活水平，不同的反应模式。</p>
</blockquote>
<blockquote>
<p>情感数据用主观判断分类（范畴观）
情感数据用多个维度形成更详细的情感种类（维度观）
表情与语言的表现的情感不统一，如何解决</p>
</blockquote>
<p>情感计算框架</p>
<p>基于AU（人脸运动单元）的情绪识别方法</p>
<blockquote>
<p>常见的表情分为7种：平静、惊讶、愤怒、悲伤、开心、恐惧、厌恶（恶心）</p>
</blockquote>
<h3>推荐系统</h3>
<p>不知道大家现在上网有没有这样的体验，那就是网站会根据你之前浏览过的页面、搜索过的关键字推送给你一些相关的网站内容。这其实就是引擎推荐技术的一种表现。</p>
<p>Google为什么会做免费搜索引擎，目的就是为了搜集大量的自然搜索数据，丰富他的大数据数据库，为后面的人工智能数据库做准备。</p>
<p><strong>引擎推荐技术原理：</strong>
推荐引擎是基于用户的行为、属性（用户浏览网站产生的数据），通过算法分析和处理，主动发现用户当前或潜在需求，并主动推送信息给用户的信息网络。快速推荐给用户信息，提高浏览效率和转化率。</p>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 人工智能 - 技术 - 自然语言生成</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD-%E6%8A%80%E6%9C%AF-%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E7%94%9F%E6%88%90.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD-%E6%8A%80%E6%9C%AF-%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E7%94%9F%E6%88%90.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 人工智能 - 技术 - 自然语言生成</source>
      <description>文章摘要： 摘要内容。 简介</description>
      <category>学习笔记/技术</category>
      <pubDate>Tue, 19 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 人工智能 - 技术 - 语音转文本</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD-%E6%8A%80%E6%9C%AF-%E8%AF%AD%E9%9F%B3%E8%BD%AC%E6%96%87%E6%9C%AC.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD-%E6%8A%80%E6%9C%AF-%E8%AF%AD%E9%9F%B3%E8%BD%AC%E6%96%87%E6%9C%AC.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 人工智能 - 技术 - 语音转文本</source>
      <description>文章摘要： 摘要内容。 简介 STT（speech-to-text） 技术将语音信号转换为文本信息。 功能 识别语音并将其转换为机器可理解的文本格式。 应用 用于语音助手、语音到文本转换、电话客服自动转录等。 流程 语音信号处理：包括降噪、增强、特征提取等，以准备语音数据进行分析。 声学模型：识别语音信号中的声学特征，并将其转换为音素或其他声学单元。 ...</description>
      <category>学习笔记/技术</category>
      <pubDate>Tue, 19 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>STT（speech-to-text） 技术将语音信号转换为文本信息。</p>
<p>功能</p>
<blockquote>
<ul>
<li>识别语音并将其转换为机器可理解的文本格式。</li>
</ul>
</blockquote>
<p>应用</p>
<blockquote>
<ul>
<li>用于语音助手、语音到文本转换、电话客服自动转录等。</li>
</ul>
</blockquote>
<p>流程</p>
<blockquote>
<ul>
<li><strong>语音信号处理</strong>：包括降噪、增强、特征提取等，以准备语音数据进行分析。</li>
<li><strong>声学模型</strong>：识别语音信号中的声学特征，并将其转换为音素或其他声学单元。</li>
<li><strong>语言模型</strong>：根据声学模型输出的结果，确定最可能的单词序列或句子。</li>
<li><strong>解码器</strong>：结合声学模型和语言模型的结果，输出最可能的文本序列。</li>
</ul>
</blockquote>
<p>技术</p>
<blockquote>
<ul>
<li>常见的ASR技术包括隐马尔可夫模型（HMM）、深度神经网络（DNN）、循环神经网络（RNN）和最近的基于注意力机制的转换器模型。</li>
</ul>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Algorithm（算法设计）</title>
      <link>https://blog.magictable.ha.cn/software/Algorithm%EF%BC%88%E7%AE%97%E6%B3%95%E8%AE%BE%E8%AE%A1%EF%BC%89.html</link>
      <guid>https://blog.magictable.ha.cn/software/Algorithm%EF%BC%88%E7%AE%97%E6%B3%95%E8%AE%BE%E8%AE%A1%EF%BC%89.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Algorithm（算法设计）</source>
      <description>文章摘要： 算法相关知识总结和内部文章汇总。 相关信息 外部相关文章 内部相关文章 数据结构： 简介 简要说明 算法知识指的是对算法理论、设计、分析、实现和应用的理解和掌握。 包括算法的基本概念、分类、设计方法、性能分析（时间复杂度和空间复杂度）以及在实际问题中的应用。 主要功能 问题解决：提供解决特定问题的步骤和方法。 效率优化：通过高效的算法提高计...</description>
      <category>软件程序/算法设计</category>
      <pubDate>Mon, 18 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 算法相关知识总结和内部文章汇总。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li></li>
</ul>
<p>内部相关文章</p>
<ul>
<li>数据结构：<a href="/software/DataStructure%EF%BC%88%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%EF%BC%89.html" target="_blank">DataStructure（数据结构）</a></li>
</ul>
</div>
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>算法知识指的是对算法理论、设计、分析、实现和应用的理解和掌握。</li>
<li>包括算法的基本概念、分类、设计方法、性能分析（时间复杂度和空间复杂度）以及在实际问题中的应用。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>问题解决</strong>：提供解决特定问题的步骤和方法。</li>
<li><strong>效率优化</strong>：通过高效的算法提高计算速度和资源利用率。</li>
<li><strong>知识传递</strong>：作为计算机科学和软件工程教育的基础内容。</li>
<li><strong>创新驱动</strong>：推动新技术和新算法的发展。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>正确性</strong>：确保算法能够正确解决问题，没有逻辑错误。</li>
<li><strong>可读性</strong>：算法应该易于理解和交流，以便他人能够审查和修改。</li>
<li><strong>健壮性</strong>：算法应能够处理异常情况，如无效输入或极端数据。</li>
<li><strong>可扩展性</strong>：算法应能够适应数据规模的增长或问题的变化。</li>
<li><strong>性能分析</strong>：理解算法的性能特点，包括最坏、最好和平均情况下的表现。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>教育领域</strong>：在计算机科学教育中，算法知识是核心教学内容。</li>
<li><strong>软件开发</strong>：在软件开发过程中，算法知识用于设计高效的程序模块。</li>
<li><strong>数据分析</strong>：在数据处理和分析领域，算法知识用于优化数据处理流程。</li>
<li><strong>科学研究</strong>：在科学研究和技术创新中，算法知识用于解决复杂问题。</li>
<li><strong>工程应用</strong>：在自动化、机器人、人工智能等领域，算法知识用于实现智能控制和决策。</li>
</ul>
<h2>基础知识</h2>
<ul>
<li></li>
</ul>
<h2>递归算法</h2>
<ul>
<li>递归是一种在函数或方法中直接或间接调用自身的方法。</li>
</ul>
<p>详细总结：<a href="/software/Algorithm-%E9%80%92%E5%BD%92.html" target="_blank">Algorithm-递归</a></p>
<h2>排序算法</h2>
<ul>
<li>对一组数据进行排序。</li>
</ul>
<p>详细总结：<a href="/software/Algorithm-%E6%8E%92%E5%BA%8F.html" target="_blank">排序算法</a></p>
<h2>查找算法</h2>
<ul>
<li>在数据结构中查找特定数据。</li>
</ul>
<p>详细总结：<a href="/software/Algorithm-%E6%9F%A5%E6%89%BE.html" target="_blank">查找算法</a></p>
<h2>搜索算法</h2>
<ul>
<li>在数据结构中查找特定数据。</li>
</ul>
<p>详细总结：<a href="/software/Algorithm-%E6%90%9C%E7%B4%A2.html" target="_blank">搜索算法</a></p>
<h2>图算法</h2>
<ul>
<li>处理图相关问题。</li>
</ul>
<p>详细总结：<a href="/software/Algorithm-%E5%9B%BE.html" target="_blank">图算法</a></p>
<h2>动态规划算法</h2>
<ul>
<li>在字符串中查找子字符串。</li>
</ul>
<p>详细总结：<a href="/software/Algorithm-%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92.html" target="_blank">动态规划算法</a></p>
<h2>字符串处理算法</h2>
<ul>
<li>在字符串中查找子字符串。</li>
</ul>
<p>详细总结：<a href="/software/Algorithm-%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%A4%84%E7%90%86.html" target="_blank">字符串处理算法</a></p>
<h2>组合算法</h2>
<ul>
<li>解决组合问题。</li>
</ul>
<p>详细总结：<a href="/software/Algorithm-%E7%BB%84%E5%90%88.html" target="_blank">组合算法</a></p>
<h2>几何算法</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href="/software/Algorithm-%E5%87%A0%E4%BD%95.html" target="_blank">几何算法</a></p>
<h2>数值算法</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href="/software/Algorithm-%E6%95%B0%E5%80%BC.html" target="_blank">数值算法</a></p>
<h2>加密算法</h2>
<ul>
<li>用于数据加密。</li>
</ul>
<p>详细总结：<a href="/software/Algorithm-%E5%8A%A0%E5%AF%86.html" target="_blank">加密算法</a></p>
<h2>并行与分布式算法</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href="/software/Algorithm-%E5%B9%B6%E8%A1%8C%E4%B8%8E%E5%88%86%E5%B8%83%E5%BC%8F.html" target="_blank">并行与分布式算法</a></p>
<h2>随机化算法</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href="/software/Algorithm-%E9%9A%8F%E6%9C%BA%E5%8C%96.html" target="_blank">随机化算法</a></p>
<h2>机器学习算法</h2>
<ul>
<li>机器学习是人工智能的一个分支，它使计算机能够从数据中学习并做出预测或决策。</li>
</ul>
<p>详细总结：<a href="/software/Algorithm-%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0.html" target="_blank">机器学习算法</a></p>
<h2>计算智能算法</h2>
<ul>
<li>计算智能是基于自然界生物的启发式搜索算法。</li>
</ul>
<p>详细总结：<a href="/software/Algorithm-%E8%AE%A1%E7%AE%97%E6%99%BA%E8%83%BD.html" target="_blank">计算智能算法</a></p>
<h2>进化算法</h2>
<ul>
<li>进化算法是基于自然选择和遗传学的优化算法。</li>
</ul>
<p>详细总结：<a href="/software/Algorithm-%E8%BF%9B%E5%8C%96.html" target="_blank">进化算法</a></p>
<h2>题库</h2>
<h3>杨辉三角</h3>
<ul>
<li>杨辉三角。</li>
</ul>
<p>详细总结：<a href="/software/Algorithm-%E9%97%AE%E9%A2%98-%E6%9D%A8%E8%BE%89%E4%B8%89%E8%A7%92.html" target="_blank">杨辉三角</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>DesignPattern - 中介者模式</title>
      <link>https://blog.magictable.ha.cn/software/DesignPattern-%E4%B8%AD%E4%BB%8B%E8%80%85%E6%A8%A1%E5%BC%8F.html</link>
      <guid>https://blog.magictable.ha.cn/software/DesignPattern-%E4%B8%AD%E4%BB%8B%E8%80%85%E6%A8%A1%E5%BC%8F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">DesignPattern - 中介者模式</source>
      <description>文章摘要： 中介者模式使用总结。 简介 简要说明 中介者模式（Mediator Pattern）是一种行为型设计模式。 通过引入一个中介者对象来协调多个对象之间的交互，使得对象之间不需要直接通信，而是通过中介者进行间接通信。 主要功能 中介者模式通过中介者对象来封装对象之间的交互。 它减少了对象之间的直接依赖关系，降低了系统的复杂性。 它使得系统易于扩...</description>
      <category>软件程序/设计模式</category>
      <pubDate>Mon, 18 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 中介者模式使用总结。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>中介者模式（Mediator Pattern）是一种行为型设计模式。</li>
<li>通过引入一个中介者对象来协调多个对象之间的交互，使得对象之间不需要直接通信，而是通过中介者进行间接通信。</li>
</ul>
<p>主要功能</p>
<ul>
<li>中介者模式通过中介者对象来封装对象之间的交互。</li>
<li>它减少了对象之间的直接依赖关系，降低了系统的复杂性。</li>
<li>它使得系统易于扩展和维护，因为新增对象只需要与中介者通信即可。</li>
</ul>
<p>注意事项</p>
<ul>
<li>中介者对象可能会变得非常复杂，因为它需要处理所有对象之间的交互逻辑。</li>
<li>如果不恰当使用中介者模式，可能会导致“上帝对象”（一个中介者对象处理过多逻辑），这违背了设计模式的原则。</li>
</ul>
<p>适用场景</p>
<ul>
<li>当一组对象之间的交互操作很多且复杂时。</li>
<li>当一个对象引用了多个对象，并直接与这些对象通信，导致难以复用时。</li>
<li>当想要一个对象来统一控制多个对象的交互时。</li>
</ul>
<h2>Java 8</h2>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>util<span class="token punctuation">.</span></span><span class="token class-name">ArrayList</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>util<span class="token punctuation">.</span></span><span class="token class-name">List</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 中介者接口</span></span>
<span class="line"><span class="token keyword">interface</span> <span class="token class-name">Mediator</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">void</span> <span class="token function">registerColleague</span><span class="token punctuation">(</span><span class="token class-name">Colleague</span> colleague<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token keyword">void</span> <span class="token function">sendMessage</span><span class="token punctuation">(</span><span class="token class-name">String</span> message<span class="token punctuation">,</span> <span class="token class-name">Colleague</span> originator<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 同事接口</span></span>
<span class="line"><span class="token keyword">interface</span> <span class="token class-name">Colleague</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">void</span> <span class="token function">receiveMessage</span><span class="token punctuation">(</span><span class="token class-name">String</span> message<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token keyword">void</span> <span class="token function">sendMessage</span><span class="token punctuation">(</span><span class="token class-name">String</span> message<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 具体的中介者</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">ConcreteMediator</span> <span class="token keyword">implements</span> <span class="token class-name">Mediator</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">List</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">Colleague</span><span class="token punctuation">&gt;</span></span> colleagues <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ArrayList</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token punctuation">&gt;</span></span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">registerColleague</span><span class="token punctuation">(</span><span class="token class-name">Colleague</span> colleague<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        colleagues<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span>colleague<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        colleague<span class="token punctuation">.</span><span class="token function">setMediator</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">sendMessage</span><span class="token punctuation">(</span><span class="token class-name">String</span> message<span class="token punctuation">,</span> <span class="token class-name">Colleague</span> originator<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 中介者转发消息给所有同事，除了消息的发送者</span></span>
<span class="line">        <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token class-name">Colleague</span> colleague <span class="token operator">:</span> colleagues<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token keyword">if</span> <span class="token punctuation">(</span>colleague <span class="token operator">!=</span> originator<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                colleague<span class="token punctuation">.</span><span class="token function">receiveMessage</span><span class="token punctuation">(</span>message<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token punctuation">}</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 具体的同事类</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">ConcreteColleague</span> <span class="token keyword">implements</span> <span class="token class-name">Colleague</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">Mediator</span> mediator<span class="token punctuation">;</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">String</span> name<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">ConcreteColleague</span><span class="token punctuation">(</span><span class="token class-name">Mediator</span> mediator<span class="token punctuation">,</span> <span class="token class-name">String</span> name<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>mediator <span class="token operator">=</span> mediator<span class="token punctuation">;</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>name <span class="token operator">=</span> name<span class="token punctuation">;</span></span>
<span class="line">        mediator<span class="token punctuation">.</span><span class="token function">registerColleague</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">receiveMessage</span><span class="token punctuation">(</span><span class="token class-name">String</span> message<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>name <span class="token operator">+</span> <span class="token string">" received message: "</span> <span class="token operator">+</span> message<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">sendMessage</span><span class="token punctuation">(</span><span class="token class-name">String</span> message<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>name <span class="token operator">+</span> <span class="token string">" sent message: "</span> <span class="token operator">+</span> message<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token comment">// 通过中介者发送消息</span></span>
<span class="line">        mediator<span class="token punctuation">.</span><span class="token function">sendMessage</span><span class="token punctuation">(</span>message<span class="token punctuation">,</span> <span class="token keyword">this</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setMediator</span><span class="token punctuation">(</span><span class="token class-name">Mediator</span> mediator<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>mediator <span class="token operator">=</span> mediator<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 客户端代码</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">MediatorPatternDemo</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 创建中介者</span></span>
<span class="line">        <span class="token class-name">Mediator</span> mediator <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ConcreteMediator</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 创建同事对象</span></span>
<span class="line">        <span class="token class-name">Colleague</span> colleague1 <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ConcreteColleague</span><span class="token punctuation">(</span>mediator<span class="token punctuation">,</span> <span class="token string">"Colleague 1"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token class-name">Colleague</span> colleague2 <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ConcreteColleague</span><span class="token punctuation">(</span>mediator<span class="token punctuation">,</span> <span class="token string">"Colleague 2"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token class-name">Colleague</span> colleague3 <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ConcreteColleague</span><span class="token punctuation">(</span>mediator<span class="token punctuation">,</span> <span class="token string">"Colleague 3"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 同事之间通过中介者发送消息</span></span>
<span class="line">        colleague1<span class="token punctuation">.</span><span class="token function">sendMessage</span><span class="token punctuation">(</span><span class="token string">"Hello, World!"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        colleague2<span class="token punctuation">.</span><span class="token function">sendMessage</span><span class="token punctuation">(</span><span class="token string">"How are you?"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        colleague3<span class="token punctuation">.</span><span class="token function">sendMessage</span><span class="token punctuation">(</span><span class="token string">"I'm fine, thank you!"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>在这个例子中，<code>Mediator</code>接口定义了注册同事和发送消息的方法。<code>Colleague</code>接口定义了接收和发送消息的方法。</li>
<li><code>ConcreteMediator</code>类是具体的中介者，它维护了一个同事列表，并负责转发消息给所有注册的同事（除了消息的发送者）。</li>
<li><code>ConcreteColleague</code>类是具体的同事类，它在构造时注册到中介者，并在发送消息时通过中介者进行转发。</li>
<li>在客户端代码<code>MediatorPatternDemo</code>中，我们创建了中介者和三个同事对象。每个同事对象都可以通过中介者发送消息，而中介者则负责将消息转发给其他所有同事。这样，同事之间不需要直接相互引用，而是通过中介者进行通信。</li>
</ul>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>DesignPattern - 享元模式</title>
      <link>https://blog.magictable.ha.cn/software/DesignPattern-%E4%BA%AB%E5%85%83%E6%A8%A1%E5%BC%8F.html</link>
      <guid>https://blog.magictable.ha.cn/software/DesignPattern-%E4%BA%AB%E5%85%83%E6%A8%A1%E5%BC%8F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">DesignPattern - 享元模式</source>
      <description>文章摘要： 享元模式使用总结。 简介 简要说明 享元模式（Flyweight Pattern）是一种结构型设计模式。 通过共享尽可能多的相似对象来减少内存的使用，提高程序的性能。 主要功能 减少创建对象的数量，减少内存占用和提高性能。 提供共享的接口，使得相同的对象可以被复用。 注意事项 确保对象是不可变对象，以保证共享的安全性。 分离内部状态（固有属...</description>
      <category>软件程序/设计模式</category>
      <pubDate>Mon, 18 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 享元模式使用总结。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>享元模式（Flyweight Pattern）是一种结构型设计模式。</li>
<li>通过共享尽可能多的相似对象来减少内存的使用，提高程序的性能。</li>
</ul>
<p>主要功能</p>
<ul>
<li>减少创建对象的数量，减少内存占用和提高性能。</li>
<li>提供共享的接口，使得相同的对象可以被复用。</li>
</ul>
<p>注意事项</p>
<ul>
<li>确保对象是不可变对象，以保证共享的安全性。</li>
<li>分离内部状态（固有属性）和外部状态（可变属性），内部状态可以被共享，外部状态则不可以。</li>
<li>需要管理对象池，以实现对象的共享。</li>
</ul>
<p>适用场景</p>
<ul>
<li>当一个程序中使用了大量的对象。</li>
<li>这些对象造成了很大的内存开销。</li>
<li>这些对象的大多数状态可以外部化。</li>
<li>这些对象是不可变的。</li>
</ul>
<h2>Java 8</h2>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>util<span class="token punctuation">.</span></span><span class="token class-name">HashMap</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>util<span class="token punctuation">.</span></span><span class="token class-name">Map</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 享元接口，定义了享元对象需要实现的操作</span></span>
<span class="line"><span class="token keyword">interface</span> <span class="token class-name">Flyweight</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">void</span> <span class="token function">operation</span><span class="token punctuation">(</span><span class="token class-name">String</span> extrinsicState<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 具体的享元类，实现了享元接口</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">ConcreteFlyweight</span> <span class="token keyword">implements</span> <span class="token class-name">Flyweight</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 内部状态，即享元对象的固有属性，可以被共享</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">String</span> intrinsicState<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 构造方法，初始化内部状态</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">ConcreteFlyweight</span><span class="token punctuation">(</span><span class="token class-name">String</span> intrinsicState<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>intrinsicState <span class="token operator">=</span> intrinsicState<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 实现operation方法，使用外部状态</span></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">operation</span><span class="token punctuation">(</span><span class="token class-name">String</span> extrinsicState<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Intrinsic State = "</span> <span class="token operator">+</span> <span class="token keyword">this</span><span class="token punctuation">.</span>intrinsicState<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Extrinsic State = "</span> <span class="token operator">+</span> extrinsicState<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 享元工厂，负责创建和管理享元对象</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">FlyweightFactory</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 享元池，用于存储享元对象，以便复用</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">Map</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">String</span><span class="token punctuation">,</span> <span class="token class-name">Flyweight</span><span class="token punctuation">&gt;</span></span> flyweights <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">HashMap</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token punctuation">&gt;</span></span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 获取享元对象的方法</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">Flyweight</span> <span class="token function">getFlyweight</span><span class="token punctuation">(</span><span class="token class-name">String</span> key<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 如果享元池中存在该对象，则直接返回</span></span>
<span class="line">        <span class="token keyword">if</span> <span class="token punctuation">(</span>flyweights<span class="token punctuation">.</span><span class="token function">containsKey</span><span class="token punctuation">(</span>key<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token keyword">return</span> flyweights<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span>key<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token comment">// 如果享元池中不存在该对象，则创建一个新的享元对象，并放入享元池中</span></span>
<span class="line">            <span class="token class-name">Flyweight</span> flyweight <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ConcreteFlyweight</span><span class="token punctuation">(</span>key<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            flyweights<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span>key<span class="token punctuation">,</span> flyweight<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token keyword">return</span> flyweight<span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 客户端代码，使用享元模式</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">FlyweightPatternDemo</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 创建享元工厂</span></span>
<span class="line">        <span class="token class-name">FlyweightFactory</span> factory <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">FlyweightFactory</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 通过享元工厂获取享元对象</span></span>
<span class="line">        <span class="token class-name">Flyweight</span> flyweight1 <span class="token operator">=</span> factory<span class="token punctuation">.</span><span class="token function">getFlyweight</span><span class="token punctuation">(</span><span class="token string">"key1"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token class-name">Flyweight</span> flyweight2 <span class="token operator">=</span> factory<span class="token punctuation">.</span><span class="token function">getFlyweight</span><span class="token punctuation">(</span><span class="token string">"key2"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 操作享元对象，传入外部状态</span></span>
<span class="line">        flyweight1<span class="token punctuation">.</span><span class="token function">operation</span><span class="token punctuation">(</span><span class="token string">"Extrinsic State A"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        flyweight2<span class="token punctuation">.</span><span class="token function">operation</span><span class="token punctuation">(</span><span class="token string">"Extrinsic State B"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 再次获取享元对象，此时将复用已存在的享元对象</span></span>
<span class="line">        <span class="token class-name">Flyweight</span> flyweight3 <span class="token operator">=</span> factory<span class="token punctuation">.</span><span class="token function">getFlyweight</span><span class="token punctuation">(</span><span class="token string">"key1"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        flyweight3<span class="token punctuation">.</span><span class="token function">operation</span><span class="token punctuation">(</span><span class="token string">"Extrinsic State C"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 检查flyweight1和flyweight3是否为同一个对象</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>flyweight1 <span class="token operator">==</span> flyweight3<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 输出true</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>在这个例子中，我们定义了一个享元接口<code>Flyweight</code>和一个具体的享元类<code>ConcreteFlyweight</code>。享元工厂<code>FlyweightFactory</code>负责创建和管理享元对象，并使用一个<code>HashMap</code>作为享元池来存储共享的享元对象。</li>
<li>客户端代码通过享元工厂获取享元对象，并传入外部状态进行操作。当请求相同的享元对象时，享元工厂将返回已经创建的享元对象，从而实现对象的共享。在最后，我们检查了两个引用是否指向同一个对象，以验证享元对象的共享。</li>
</ul>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>DesignPattern - 代理模式</title>
      <link>https://blog.magictable.ha.cn/software/DesignPattern-%E4%BB%A3%E7%90%86%E6%A8%A1%E5%BC%8F.html</link>
      <guid>https://blog.magictable.ha.cn/software/DesignPattern-%E4%BB%A3%E7%90%86%E6%A8%A1%E5%BC%8F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">DesignPattern - 代理模式</source>
      <description>文章摘要： 代理模式使用总结。 简介 简要说明 代理模式（Proxy Pattern）是一种结构型设计模式。 代理模式为某个对象提供一个代理对象，并由代理对象控制对原对象的访问。 代理对象可以在访问原对象之前或之后执行一些特定的操作，比如权限检查、缓存、延迟加载等。 主要功能 控制对原始对象的访问。 在不修改原始对象代码的情况下增加额外的功能。 隐藏原...</description>
      <category>软件程序/设计模式</category>
      <pubDate>Mon, 18 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 代理模式使用总结。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>代理模式（Proxy Pattern）是一种结构型设计模式。</li>
<li>代理模式为某个对象提供一个代理对象，并由代理对象控制对原对象的访问。</li>
<li>代理对象可以在访问原对象之前或之后执行一些特定的操作，比如权限检查、缓存、延迟加载等。</li>
</ul>
<p>主要功能</p>
<ul>
<li>控制对原始对象的访问。</li>
<li>在不修改原始对象代码的情况下增加额外的功能。</li>
<li>隐藏原始对象的实现细节。</li>
</ul>
<p>注意事项</p>
<ul>
<li>代理模式可能会增加系统的复杂度，因为需要创建额外的代理类。</li>
<li>代理可能会造成性能下降，因为增加了额外的处理开销。</li>
<li>需要确保代理和原始对象之间的接口一致性，以保证客户端透明地使用代理。</li>
</ul>
<p>适用场景</p>
<ul>
<li>当需要控制对某个对象的访问时。</li>
<li>当需要为一个对象添加额外的功能，而不想修改其代码时。</li>
<li>当需要延迟加载或缓存某个对象时。</li>
<li>当需要为远程对象提供一个本地代理时。</li>
</ul>
<h2>Java 8</h2>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 定义一个接口，原始对象和代理对象都将实现这个接口</span></span>
<span class="line"><span class="token keyword">interface</span> <span class="token class-name">Image</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">void</span> <span class="token function">display</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 原始对象</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">RealImage</span> <span class="token keyword">implements</span> <span class="token class-name">Image</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">String</span> filename<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">RealImage</span><span class="token punctuation">(</span><span class="token class-name">String</span> filename<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>filename <span class="token operator">=</span> filename<span class="token punctuation">;</span></span>
<span class="line">        <span class="token function">loadImageFromDisk</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">private</span> <span class="token keyword">void</span> <span class="token function">loadImageFromDisk</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Loading "</span> <span class="token operator">+</span> filename<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">display</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Displaying "</span> <span class="token operator">+</span> filename<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 代理对象</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">ProxyImage</span> <span class="token keyword">implements</span> <span class="token class-name">Image</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">RealImage</span> realImage<span class="token punctuation">;</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">String</span> filename<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">ProxyImage</span><span class="token punctuation">(</span><span class="token class-name">String</span> filename<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>filename <span class="token operator">=</span> filename<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">display</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">if</span> <span class="token punctuation">(</span>realImage <span class="token operator">==</span> <span class="token keyword">null</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            realImage <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">RealImage</span><span class="token punctuation">(</span>filename<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">        realImage<span class="token punctuation">.</span><span class="token function">display</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 客户端代码</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">ProxyPatternDemo</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">Image</span> image <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ProxyImage</span><span class="token punctuation">(</span><span class="token string">"test_image.jpg"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 图像将从磁盘加载</span></span>
<span class="line">        image<span class="token punctuation">.</span><span class="token function">display</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">""</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 图像不需要从磁盘加载</span></span>
<span class="line">        image<span class="token punctuation">.</span><span class="token function">display</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>在这个例子中，<code>Image</code> 是一个接口，<code>RealImage</code> 是实现了 <code>Image</code> 接口的原始对象，<code>ProxyImage</code> 是代理对象，它也实现了 <code>Image</code> 接口。</li>
<li><code>ProxyImage</code> 在需要时才创建 <code>RealImage</code> 对象，从而实现了延迟加载。</li>
<li>客户端代码通过 <code>ProxyImage</code> 来间接访问 <code>RealImage</code>，而无需直接与 <code>RealImage</code> 交互。</li>
</ul>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>DesignPattern - 原型模式</title>
      <link>https://blog.magictable.ha.cn/software/DesignPattern-%E5%8E%9F%E5%9E%8B%E6%A8%A1%E5%BC%8F.html</link>
      <guid>https://blog.magictable.ha.cn/software/DesignPattern-%E5%8E%9F%E5%9E%8B%E6%A8%A1%E5%BC%8F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">DesignPattern - 原型模式</source>
      <description>文章摘要： 创建型设计模式，通过复制现有的对象来创建新的对象，而不是通过传统的构造函数来创建。。 简介 简要总结 原型模式（Prototype Pattern）是一种创建型设计模式。 通过复制现有的对象来创建新的对象，而不是通过传统的构造函数来创建。 可以绕过构造函数的约束，并允许动态地创建对象，即使它们的类型在编译时未知。 主要功能 创建新对象：原型...</description>
      <category>软件程序/设计模式</category>
      <pubDate>Mon, 18 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 创建型设计模式，通过复制现有的对象来创建新的对象，而不是通过传统的构造函数来创建。。</p>
<!-- more -->
<h2>简介</h2>
<p>简要总结</p>
<ul>
<li>原型模式（Prototype Pattern）是一种创建型设计模式。</li>
<li>通过复制现有的对象来创建新的对象，而不是通过传统的构造函数来创建。</li>
<li>可以绕过构造函数的约束，并允许动态地创建对象，即使它们的类型在编译时未知。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>创建新对象</strong>：原型模式允许通过复制现有的对象（原型）来创建新的对象，而不是通过传统的构造函数。</li>
<li><strong>避免构造函数约束</strong>：使用原型模式，可以绕过构造函数的约束，例如，当构造函数的参数复杂或者创建对象的过程需要很多初始化步骤时。</li>
<li><strong>减少创建成本</strong>：如果创建一个对象是一个高成本的操作（例如，需要从数据库加载大量数据），通过克隆现有对象可以减少这些成本。</li>
<li><strong>保持对象状态</strong>：原型模式允许在创建新对象时保留原始对象的状态。这对于需要复制对象当前状态的情况非常有用。</li>
<li><strong>实现动态绑定</strong>：原型模式允许在运行时动态地选择创建对象的具体类型，这对于那些在编译时无法确定对象类型的情况非常有用。</li>
<li><strong>简化对象创建逻辑</strong>：通过提供一个统一的克隆接口，可以简化对象的创建逻辑，使得客户端代码不需要知道如何创建对象的具体细节。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>实现Cloneable接口</strong>：在Java中，要实现克隆功能，类必须实现<code>Cloneable</code>接口，这是一个标记接口，表明该类的对象是可克隆的。</li>
<li><strong>重写clone方法</strong>：实现<code>Cloneable</code>接口后，还需要重写<code>clone()</code>方法，以提供具体的克隆逻辑。如果不重写，默认的<code>clone()</code>方法是受保护的，无法在类外部调用。</li>
<li><strong>克隆复杂对象</strong>：如果对象图中包含循环引用或者包含不可克隆的对象（如文件句柄、线程等），实现克隆可能会变得复杂。</li>
<li><strong>性能考虑</strong>：克隆操作可能会消耗大量资源，特别是进行深拷贝时。因此，在设计时需要考虑克隆操作的频率和成本。</li>
<li><strong>保持一致性</strong>：确保原型对象的状态在任何时候都是一致的，以避免克隆出无效或不一致的对象。</li>
<li><strong>克隆方法可见性</strong>：通常，<code>clone()</code>方法应该被声明为<code>public</code>，以便客户端代码可以调用它。</li>
<li><strong>异常处理</strong>：在<code>clone()</code>方法中，应该处理好可能抛出的异常，特别是当涉及到I/O操作（如序列化）时。</li>
<li><strong>避免滥用</strong>：原型模式虽然方便，但并不适用于所有情况。如果对象的创建逻辑很简单，使用构造函数可能更直接、更清晰。</li>
<li><strong>遵守设计原则</strong>：在使用原型模式时，仍然需要遵守单一职责原则、开闭原则等设计原则，确保代码的可维护性和可扩展性。</li>
<li><strong>线程安全</strong>：如果原型对象是多线程环境下共享的，需要确保克隆操作的线程安全性。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>创建成本较高的对象</strong>：如果创建一个对象的过程非常复杂且耗时，可以考虑使用原型模式，通过复制已有对象来避免重复的创建过程。</li>
<li><strong>系统中需要大量相似对象</strong>：当系统中需要大量相似的对象，并且这些对象的状态只有少量差异时，原型模式可以减少创建对象的开销。</li>
<li><strong>避免构造函数的约束</strong>：有时候，构造函数的参数列表可能非常复杂，或者构造函数无法满足某些需求（如需要创建一个与现有对象状态完全一致的新对象），原型模式可以绕过构造函数的这些限制。</li>
<li><strong>实例化具体类时复杂或者不可能</strong>：如果类的构造过程涉及到很多外部资源的配置或者初始化，而这些操作不适合在构造函数中完成，原型模式可以简化这一过程。</li>
<li><strong>保护性复制</strong>：当你需要保护一个对象不被外部直接修改时，可以通过返回一个对象的副本来代替直接返回对象本身。</li>
<li><strong>动态增加或减少产品类</strong>：在运行时动态地增加或减少产品类的情况下，原型模式可以很方便地实现这一点，而不需要修改已有代码。</li>
<li><strong>类的初始化需要依赖外部资源</strong>：如果类的初始化需要依赖外部资源，而这些资源在构造函数中难以获取，原型模式可以通过复制已初始化的对象来避免这些问题。</li>
<li><strong>对象状态不可变</strong>：如果对象一旦创建就不应该被修改，或者修改的成本很高，可以使用原型模式来创建不可变对象。</li>
<li><strong>性能优化</strong>：在某些情况下，通过原型模式复制对象可能比通过常规的new操作创建对象更高效。</li>
<li><strong>框架和库的设计</strong>：在框架和库的设计中，原型模式可以提供一种灵活的方式来扩展和定制功能，而不需要修改框架或库的内部实现。</li>
</ul>
<h2>Java 8</h2>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 定义一个可克隆的Person类</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">Person</span> <span class="token keyword">implements</span> <span class="token class-name">Cloneable</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">String</span> name<span class="token punctuation">;</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token keyword">int</span> age<span class="token punctuation">;</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">List</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">String</span><span class="token punctuation">&gt;</span></span> hobbies<span class="token punctuation">;</span> <span class="token comment">// 假设每个人都有一个兴趣列表</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 构造函数</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">Person</span><span class="token punctuation">(</span><span class="token class-name">String</span> name<span class="token punctuation">,</span> <span class="token keyword">int</span> age<span class="token punctuation">,</span> <span class="token class-name">List</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">String</span><span class="token punctuation">&gt;</span></span> hobbies<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>name <span class="token operator">=</span> name<span class="token punctuation">;</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>age <span class="token operator">=</span> age<span class="token punctuation">;</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>hobbies <span class="token operator">=</span> hobbies<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 覆盖clone方法，实现深拷贝</span></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">protected</span> <span class="token class-name">Person</span> <span class="token function">clone</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">CloneNotSupportedException</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 首先调用super.clone()来克隆基本类型和不可变类型的字段</span></span>
<span class="line">        <span class="token class-name">Person</span> cloned <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token class-name">Person</span><span class="token punctuation">)</span> <span class="token keyword">super</span><span class="token punctuation">.</span><span class="token function">clone</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token comment">// 然后对可变类型的字段进行深拷贝</span></span>
<span class="line">        cloned<span class="token punctuation">.</span>hobbies <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ArrayList</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token punctuation">&gt;</span></span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">.</span>hobbies<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token keyword">return</span> cloned<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 省略getter和setter方法...</span></span>
<span class="line"></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">String</span> <span class="token function">toString</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">return</span> <span class="token string">"Person{"</span> <span class="token operator">+</span></span>
<span class="line">                <span class="token string">"name='"</span> <span class="token operator">+</span> name <span class="token operator">+</span> <span class="token char">'\''</span> <span class="token operator">+</span></span>
<span class="line">                <span class="token string">", age="</span> <span class="token operator">+</span> age <span class="token operator">+</span></span>
<span class="line">                <span class="token string">", hobbies="</span> <span class="token operator">+</span> hobbies <span class="token operator">+</span></span>
<span class="line">                <span class="token char">'}'</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">PrototypePatternExample</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 创建一个原型对象</span></span>
<span class="line">        <span class="token class-name">List</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">String</span><span class="token punctuation">&gt;</span></span> hobbies <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ArrayList</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token punctuation">&gt;</span></span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        hobbies<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span><span class="token string">"Reading"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        hobbies<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span><span class="token string">"Gaming"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token class-name">Person</span> prototype <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Person</span><span class="token punctuation">(</span><span class="token string">"John Doe"</span><span class="token punctuation">,</span> <span class="token number">30</span><span class="token punctuation">,</span> hobbies<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token keyword">try</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token comment">// 使用原型模式创建一个新的Person对象</span></span>
<span class="line">            <span class="token class-name">Person</span> johnClone <span class="token operator">=</span> prototype<span class="token punctuation">.</span><span class="token function">clone</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            johnClone<span class="token punctuation">.</span><span class="token function">setName</span><span class="token punctuation">(</span><span class="token string">"Jane Doe"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 修改克隆对象的属性</span></span>
<span class="line">            johnClone<span class="token punctuation">.</span><span class="token function">getHobbies</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span><span class="token string">"Swimming"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 修改克隆对象的兴趣列表</span></span>
<span class="line"></span>
<span class="line">            <span class="token comment">// 打印原始对象和克隆对象的信息，以验证深拷贝</span></span>
<span class="line">            <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Prototype: "</span> <span class="token operator">+</span> prototype<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Clone: "</span> <span class="token operator">+</span> johnClone<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">CloneNotSupportedException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            e<span class="token punctuation">.</span><span class="token function">printStackTrace</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>在这个例子中，<code>Person</code>类实现了<code>Cloneable</code>接口，这是Java中实现克隆功能的标准方式。我们覆盖了<code>clone</code>方法，并在其中调用了<code>super.clone()</code>来克隆基本类型和不可变类型的字段。对于可变类型的字段（在这个例子中是<code>hobbies</code>列表），我们进行了深拷贝，以确保原始对象和克隆对象在内存中是完全独立的。</li>
<li>在<code>main</code>方法中，我们创建了一个原型对象<code>prototype</code>，然后通过调用其<code>clone</code>方法创建了一个新的<code>Person</code>对象<code>johnClone</code>。我们修改了克隆对象的<code>name</code>属性和<code>hobbies</code>列表，然后打印出原始对象和克隆对象的信息，以验证深拷贝是否成功。</li>
<li>注意：在实际应用中，可能需要处理更复杂的对象图，包括多层嵌套的对象和循环引用，这时深拷贝的实现会更复杂。此外，如果对象图中包含不可克隆的对象（例如，<code>Thread</code>），则还需要特别处理。</li>
</ul>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>DesignPattern - 命令模式</title>
      <link>https://blog.magictable.ha.cn/software/DesignPattern-%E5%91%BD%E4%BB%A4%E6%A8%A1%E5%BC%8F.html</link>
      <guid>https://blog.magictable.ha.cn/software/DesignPattern-%E5%91%BD%E4%BB%A4%E6%A8%A1%E5%BC%8F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">DesignPattern - 命令模式</source>
      <description>文章摘要： 命令模式使用总结。 简介 简要说明 命令模式（Command Pattern）是一种行为型设计模式。 将请求的发送者和接收者解耦，发送者只需要知道如何发送请求，而不必知道请求的具体执行过程。 主要功能 将请求封装成对象，允许用户对请求进行参数化。 允许将请求对象放入队列中进行排队。 支持可撤销的操作。 可以添加新的命令类，不需要修改现有代码...</description>
      <category>软件程序/设计模式</category>
      <pubDate>Mon, 18 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 命令模式使用总结。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>命令模式（Command Pattern）是一种行为型设计模式。</li>
<li>将请求的发送者和接收者解耦，发送者只需要知道如何发送请求，而不必知道请求的具体执行过程。</li>
</ul>
<p>主要功能</p>
<ul>
<li>将请求封装成对象，允许用户对请求进行参数化。</li>
<li>允许将请求对象放入队列中进行排队。</li>
<li>支持可撤销的操作。</li>
<li>可以添加新的命令类，不需要修改现有代码。</li>
</ul>
<p>注意事项</p>
<ul>
<li>可能会导致系统中产生大量的命令类，增加了系统的复杂性。</li>
<li>使用命令模式可能会导致某些请求的处理速度变慢。</li>
</ul>
<p>适用场景</p>
<ul>
<li>当需要将发出请求的对象和执行请求的对象解耦时。</li>
<li>当需要支持撤销操作时。</li>
<li>当需要支持操作的日志记录和事务操作时。</li>
</ul>
<h2>Java 8</h2>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 命令接口，声明执行操作的方法</span></span>
<span class="line"><span class="token keyword">interface</span> <span class="token class-name">Command</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">void</span> <span class="token function">execute</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 接收者类，真正执行命令的操作</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">Light</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">turnOn</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Light is on"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">turnOff</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Light is off"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 具体命令类，实现命令接口，并持有接收者对象</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">TurnOnCommand</span> <span class="token keyword">implements</span> <span class="token class-name">Command</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">Light</span> light<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">TurnOnCommand</span><span class="token punctuation">(</span><span class="token class-name">Light</span> light<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>light <span class="token operator">=</span> light<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">execute</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        light<span class="token punctuation">.</span><span class="token function">turnOn</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 调用接收者的方法执行命令</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">TurnOffCommand</span> <span class="token keyword">implements</span> <span class="token class-name">Command</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">Light</span> light<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">TurnOffCommand</span><span class="token punctuation">(</span><span class="token class-name">Light</span> light<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>light <span class="token operator">=</span> light<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">execute</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        light<span class="token punctuation">.</span><span class="token function">turnOff</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 调用接收者的方法执行命令</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 调用者类，负责调用命令对象执行请求</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">RemoteControl</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">Command</span> command<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 设置命令</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setCommand</span><span class="token punctuation">(</span><span class="token class-name">Command</span> command<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>command <span class="token operator">=</span> command<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 执行命令</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">pressButton</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        command<span class="token punctuation">.</span><span class="token function">execute</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 客户端代码，使用命令模式</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">CommandPatternDemo</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">Light</span> light <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Light</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 创建接收者对象</span></span>
<span class="line"></span>
<span class="line">        <span class="token class-name">Command</span> turnOnCommand <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">TurnOnCommand</span><span class="token punctuation">(</span>light<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 创建具体命令对象</span></span>
<span class="line">        <span class="token class-name">Command</span> turnOffCommand <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">TurnOffCommand</span><span class="token punctuation">(</span>light<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 创建具体命令对象</span></span>
<span class="line"></span>
<span class="line">        <span class="token class-name">RemoteControl</span> remoteControl <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">RemoteControl</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 创建调用者对象</span></span>
<span class="line"></span>
<span class="line">        remoteControl<span class="token punctuation">.</span><span class="token function">setCommand</span><span class="token punctuation">(</span>turnOnCommand<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 设置命令</span></span>
<span class="line">        remoteControl<span class="token punctuation">.</span><span class="token function">pressButton</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 执行命令，开灯</span></span>
<span class="line"></span>
<span class="line">        remoteControl<span class="token punctuation">.</span><span class="token function">setCommand</span><span class="token punctuation">(</span>turnOffCommand<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 设置命令</span></span>
<span class="line">        remoteControl<span class="token punctuation">.</span><span class="token function">pressButton</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 执行命令，关灯</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>在这个例子中，<code>Command</code>接口定义了一个<code>execute</code>方法，它将由具体的命令类实现。<code>Light</code>类是接收者，它包含实际执行操作的代码。<code>TurnOnCommand</code>和<code>TurnOffCommand</code>是具体的命令类，它们实现了<code>Command</code>接口，并持有<code>Light</code>对象。</li>
<li><code>RemoteControl</code>类是调用者，它持有一个命令对象，并提供了一个方法<code>pressButton</code>来执行命令。</li>
<li>客户端代码<code>CommandPatternDemo</code>创建了<code>Light</code>对象，并创建了两个命令对象<code>TurnOnCommand</code>和<code>TurnOffCommand</code>。然后，它创建了一个<code>RemoteControl</code>对象，并通过调用<code>setCommand</code>方法来设置命令，通过调用<code>pressButton</code>方法来执行命令。这样，客户端就可以通过调用者发送命令给接收者，而无需直接与接收者交互。</li>
</ul>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>DesignPattern - 备忘录模式</title>
      <link>https://blog.magictable.ha.cn/software/DesignPattern-%E5%A4%87%E5%BF%98%E5%BD%95%E6%A8%A1%E5%BC%8F.html</link>
      <guid>https://blog.magictable.ha.cn/software/DesignPattern-%E5%A4%87%E5%BF%98%E5%BD%95%E6%A8%A1%E5%BC%8F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">DesignPattern - 备忘录模式</source>
      <description>文章摘要： 备忘录模式使用总结。 简介 简要说明 备忘录模式（Memento Pattern）是一种行为型设计模式。 通过引入一个备忘录对象来捕获并保存一个对象的内部状态，在未来需要时可以恢复到这个状态。 主要功能 保存一个对象在某一个时刻的状态，以便在需要时恢复。 防止直接访问对象的状态，保持封装性。 注意事项 备忘录模式可能会消耗大量资源，尤其是状...</description>
      <category>软件程序/设计模式</category>
      <pubDate>Mon, 18 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 备忘录模式使用总结。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>备忘录模式（Memento Pattern）是一种行为型设计模式。</li>
<li>通过引入一个备忘录对象来捕获并保存一个对象的内部状态，在未来需要时可以恢复到这个状态。</li>
</ul>
<p>主要功能</p>
<ul>
<li>保存一个对象在某一个时刻的状态，以便在需要时恢复。</li>
<li>防止直接访问对象的状态，保持封装性。</li>
</ul>
<p>注意事项</p>
<ul>
<li>备忘录模式可能会消耗大量资源，尤其是状态较多或者状态数据较大时。</li>
<li>确保备忘录对象对发起人对象之外的任何对象都是不可变的，以避免备忘录状态被意外修改。</li>
</ul>
<p>适用场景</p>
<ul>
<li>当需要保存一个对象的状态快照，并在之后恢复它时。</li>
<li>当需要保护对象的完整性时，但又不希望暴露其内部细节。</li>
</ul>
<h2>Java 8</h2>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 发起人角色，拥有需要保存的状态</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">Originator</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">String</span> state<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 设置状态</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setState</span><span class="token punctuation">(</span><span class="token class-name">String</span> state<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>state <span class="token operator">=</span> state<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 获取状态</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">String</span> <span class="token function">getState</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">return</span> state<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 创建备忘录，将当前状态保存到备忘录对象中</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">Memento</span> <span class="token function">saveStateToMemento</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">Memento</span><span class="token punctuation">(</span>state<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 从备忘录对象恢复状态</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">getStateFromMemento</span><span class="token punctuation">(</span><span class="token class-name">Memento</span> memento<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        state <span class="token operator">=</span> memento<span class="token punctuation">.</span><span class="token function">getState</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 备忘录角色，用于存储发起人的内部状态</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">Memento</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token keyword">final</span> <span class="token class-name">String</span> state<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 构造函数，保存状态</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">Memento</span><span class="token punctuation">(</span><span class="token class-name">String</span> state<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>state <span class="token operator">=</span> state<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 获取保存的状态</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">String</span> <span class="token function">getState</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">return</span> state<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 管理角色，负责保存和提供备忘录对象</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">CareTaker</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">List</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">Memento</span><span class="token punctuation">&gt;</span></span> mementoList <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ArrayList</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token punctuation">&gt;</span></span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 添加备忘录到列表</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">add</span><span class="token punctuation">(</span><span class="token class-name">Memento</span> state<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        mementoList<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span>state<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 获取指定索引的备忘录</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">Memento</span> <span class="token function">get</span><span class="token punctuation">(</span><span class="token keyword">int</span> index<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">return</span> mementoList<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span>index<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 客户端代码</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">MementoPatternDemo</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 创建发起人对象</span></span>
<span class="line">        <span class="token class-name">Originator</span> originator <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Originator</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token comment">// 创建备忘录管理对象</span></span>
<span class="line">        <span class="token class-name">CareTaker</span> careTaker <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">CareTaker</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 设置发起人初始状态</span></span>
<span class="line">        originator<span class="token punctuation">.</span><span class="token function">setState</span><span class="token punctuation">(</span><span class="token string">"State #1"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token comment">// 打印当前状态</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Current State: "</span> <span class="token operator">+</span> originator<span class="token punctuation">.</span><span class="token function">getState</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token comment">// 保存状态到备忘录</span></span>
<span class="line">        careTaker<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span>originator<span class="token punctuation">.</span><span class="token function">saveStateToMemento</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 改变状态</span></span>
<span class="line">        originator<span class="token punctuation">.</span><span class="token function">setState</span><span class="token punctuation">(</span><span class="token string">"State #2"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token comment">// 打印当前状态</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Current State: "</span> <span class="token operator">+</span> originator<span class="token punctuation">.</span><span class="token function">getState</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token comment">// 保存状态到备忘录</span></span>
<span class="line">        careTaker<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span>originator<span class="token punctuation">.</span><span class="token function">saveStateToMemento</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 恢复到备忘录的第一个状态</span></span>
<span class="line">        originator<span class="token punctuation">.</span><span class="token function">getStateFromMemento</span><span class="token punctuation">(</span>careTaker<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token comment">// 打印恢复后的状态</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"First saved State: "</span> <span class="token operator">+</span> originator<span class="token punctuation">.</span><span class="token function">getState</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>在这个例子中，<code>Originator</code>类是具有内部状态的类，它提供了方法来保存和恢复状态。</li>
<li><code>Memento</code>类是备忘录类，它存储了<code>Originator</code>对象的状态。通常，备忘录类会有一个私有构造函数和一个获取状态的方法，以确保其不可变性。</li>
<li><code>CareTaker</code>类是负责管理备忘录的类，它可以保存多个备忘录对象，并提供方法来获取它们。</li>
<li>在客户端代码<code>MementoPatternDemo</code>中，我们创建了一个<code>Originator</code>对象和一个<code>CareTaker</code>对象。我们修改了<code>Originator</code>对象的状态，并使用<code>CareTaker</code>对象来保存状态快照。之后，我们通过<code>CareTaker</code>对象恢复到之前保存的状态。这个过程演示了如何使用备忘录模式来保存和恢复对象的状态。</li>
</ul>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>DesignPattern - 建造者模式</title>
      <link>https://blog.magictable.ha.cn/software/DesignPattern-%E5%BB%BA%E9%80%A0%E8%80%85%E6%A8%A1%E5%BC%8F.html</link>
      <guid>https://blog.magictable.ha.cn/software/DesignPattern-%E5%BB%BA%E9%80%A0%E8%80%85%E6%A8%A1%E5%BC%8F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">DesignPattern - 建造者模式</source>
      <description>文章摘要： 建造者模式使用总结。 简介 简要说明 建造者模式（Builder Pattern）是一种创建型设计模式。 允许你一步一步地构建一个复杂对象。 将一个复杂对象的构建与其表示分离，使得同样的构建过程可以创建不同的表示。 主要功能 将一个复杂对象的构建与它的表示分离，使得同样的构建过程可以创建不同的表示。 将创建过程步骤化，使得创建过程更加清晰。...</description>
      <category>软件程序/设计模式</category>
      <pubDate>Mon, 18 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 建造者模式使用总结。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>建造者模式（Builder Pattern）是一种创建型设计模式。</li>
<li>允许你一步一步地构建一个复杂对象。</li>
<li>将一个复杂对象的构建与其表示分离，使得同样的构建过程可以创建不同的表示。</li>
</ul>
<p>主要功能</p>
<ul>
<li>将一个复杂对象的构建与它的表示分离，使得同样的构建过程可以创建不同的表示。</li>
<li>将创建过程步骤化，使得创建过程更加清晰。</li>
<li>允许一个对象通过多个步骤来创建，并且可以控制整个创建过程。</li>
</ul>
<p>注意事项</p>
<ul>
<li>建造者模式的使用会增加系统中类的数量，如果系统中只有少量的产品类，使用建造者模式可能会导致系统复杂度增加，不太划算。</li>
<li>产品内部构建过程的改变可能会导致建造者类也需要相应的修改，这可能会导致建造者模式维护成本增加。</li>
<li>应该在产品内部结构复杂，且构建过程需要严格控制的场景下使用建造者模式。</li>
</ul>
<p>适用场景</p>
<ul>
<li>当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。</li>
<li>当构造过程必须允许被构造的对象有不同的表示时。</li>
<li>当一个类的构造函数参数太多，或者参数的设置过程比较复杂时。</li>
<li>当产品类非常复杂或者产品类中的调用顺序不同会生成不同的产品时。</li>
</ul>
<h2>Java 8</h2>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 产品类</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">Product</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">String</span> partA<span class="token punctuation">;</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">String</span> partB<span class="token punctuation">;</span></span>
<span class="line">    <span class="token comment">// ... 可能还有其他部件</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 建造者类内部的构建方法</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setPartA</span><span class="token punctuation">(</span><span class="token class-name">String</span> partA<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>partA <span class="token operator">=</span> partA<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setPartB</span><span class="token punctuation">(</span><span class="token class-name">String</span> partB<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>partB <span class="token operator">=</span> partB<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// ... 其他部件的设置方法</span></span>
<span class="line"></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">String</span> <span class="token function">toString</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">return</span> <span class="token string">"Product{"</span> <span class="token operator">+</span></span>
<span class="line">                <span class="token string">"partA='"</span> <span class="token operator">+</span> partA <span class="token operator">+</span> <span class="token char">'\''</span> <span class="token operator">+</span></span>
<span class="line">                <span class="token string">", partB='"</span> <span class="token operator">+</span> partB <span class="token operator">+</span> <span class="token char">'\''</span> <span class="token operator">+</span></span>
<span class="line">                <span class="token comment">// ... 其他部件的信息</span></span>
<span class="line">                <span class="token char">'}'</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 抽象建造者</span></span>
<span class="line"><span class="token keyword">abstract</span> <span class="token keyword">class</span> <span class="token class-name">Builder</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">protected</span> <span class="token class-name">Product</span> product <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Product</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">abstract</span> <span class="token keyword">void</span> <span class="token function">buildPartA</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">abstract</span> <span class="token keyword">void</span> <span class="token function">buildPartB</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token comment">// ... 其他部件的构建方法</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">Product</span> <span class="token function">getResult</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">return</span> product<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 具体建造者</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">ConcreteBuilder</span> <span class="token keyword">extends</span> <span class="token class-name">Builder</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">buildPartA</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        product<span class="token punctuation">.</span><span class="token function">setPartA</span><span class="token punctuation">(</span><span class="token string">"PartA"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">buildPartB</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        product<span class="token punctuation">.</span><span class="token function">setPartB</span><span class="token punctuation">(</span><span class="token string">"PartB"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// ... 实现其他部件的构建方法</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 导演类</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">Director</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">Builder</span> builder<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">Director</span><span class="token punctuation">(</span><span class="token class-name">Builder</span> builder<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>builder <span class="token operator">=</span> builder<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">construct</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        builder<span class="token punctuation">.</span><span class="token function">buildPartA</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        builder<span class="token punctuation">.</span><span class="token function">buildPartB</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token comment">// ... 指导构建过程</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 客户端使用</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">BuilderPatternDemo</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">Builder</span> builder <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ConcreteBuilder</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token class-name">Director</span> director <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Director</span><span class="token punctuation">(</span>builder<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        director<span class="token punctuation">.</span><span class="token function">construct</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token class-name">Product</span> product <span class="token operator">=</span> builder<span class="token punctuation">.</span><span class="token function">getResult</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>product<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>在这个例子中，<code>Product</code> 是要构建的复杂对象，<code>Builder</code> 是抽象建造者，定义了构建步骤的方法，<code>ConcreteBuilder</code> 是具体的建造者，实现了抽象建造者的方法，<code>Director</code> 是导演类，负责安排构建步骤的顺序，客户端通过导演类来构建产品。</li>
</ul>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>DesignPattern - 桥接模式</title>
      <link>https://blog.magictable.ha.cn/software/DesignPattern-%E6%A1%A5%E6%8E%A5%E6%A8%A1%E5%BC%8F.html</link>
      <guid>https://blog.magictable.ha.cn/software/DesignPattern-%E6%A1%A5%E6%8E%A5%E6%A8%A1%E5%BC%8F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">DesignPattern - 桥接模式</source>
      <description>文章摘要： 桥接模式使用总结。 简介 简要说明 桥接模式（Bridge Pattern）是一种结构型设计模式。 通过将抽象部分（Abstraction）与实现部分（Implementor）分离，使它们可以独立地变化。 这种模式涉及到一个作为桥接的接口，这个接口使得抽象部分和实现部分可以相互独立地扩展。 主要功能 分离抽象和实现，使它们可以独立变化，互不...</description>
      <category>软件程序/设计模式</category>
      <pubDate>Mon, 18 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 桥接模式使用总结。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>桥接模式（Bridge Pattern）是一种结构型设计模式。</li>
<li>通过将抽象部分（Abstraction）与实现部分（Implementor）分离，使它们可以独立地变化。</li>
<li>这种模式涉及到一个作为桥接的接口，这个接口使得抽象部分和实现部分可以相互独立地扩展。</li>
</ul>
<p>主要功能</p>
<ul>
<li>分离抽象和实现，使它们可以独立变化，互不影响。</li>
<li>提高了系统的可扩展性，因为抽象和实现都可以独立扩展。</li>
<li>避免了继承层次的快速膨胀。</li>
</ul>
<p>注意事项</p>
<ul>
<li>桥接模式可能会增加系统的复杂度，因为它引入了额外的抽象层和实现层。</li>
<li>应该在抽象和实现确实需要独立变化时使用桥接模式，否则可能会造成不必要的复杂。</li>
<li>在设计时需要考虑如何将抽象部分和实现部分分离开来。</li>
</ul>
<p>适用场景</p>
<ul>
<li>当一个类存在两个或多个独立变化的维度时，且这两个维度都需要进行扩展。</li>
<li>当不希望使用继承导致类爆炸时。</li>
<li>当一个类需要其子类的行为，但这些子类的实现可能变化时。</li>
</ul>
<h2>Java 8</h2>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 实现部分接口</span></span>
<span class="line"><span class="token keyword">interface</span> <span class="token class-name">DrawingAPI</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">void</span> <span class="token function">drawCircle</span><span class="token punctuation">(</span><span class="token keyword">double</span> x<span class="token punctuation">,</span> <span class="token keyword">double</span> y<span class="token punctuation">,</span> <span class="token keyword">double</span> radius<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 具体实现部分</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">DrawingAPI1</span> <span class="token keyword">implements</span> <span class="token class-name">DrawingAPI</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">drawCircle</span><span class="token punctuation">(</span><span class="token keyword">double</span> x<span class="token punctuation">,</span> <span class="token keyword">double</span> y<span class="token punctuation">,</span> <span class="token keyword">double</span> radius<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"API1.circle at %f:%f radius %f\n"</span><span class="token punctuation">,</span> x<span class="token punctuation">,</span> y<span class="token punctuation">,</span> radius<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">DrawingAPI2</span> <span class="token keyword">implements</span> <span class="token class-name">DrawingAPI</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">drawCircle</span><span class="token punctuation">(</span><span class="token keyword">double</span> x<span class="token punctuation">,</span> <span class="token keyword">double</span> y<span class="token punctuation">,</span> <span class="token keyword">double</span> radius<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"API2.circle at %f:%f radius %f\n"</span><span class="token punctuation">,</span> x<span class="token punctuation">,</span> y<span class="token punctuation">,</span> radius<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 抽象部分</span></span>
<span class="line"><span class="token keyword">abstract</span> <span class="token keyword">class</span> <span class="token class-name">Shape</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">protected</span> <span class="token class-name">DrawingAPI</span> drawingAPI<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">protected</span> <span class="token class-name">Shape</span><span class="token punctuation">(</span><span class="token class-name">DrawingAPI</span> drawingAPI<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>drawingAPI <span class="token operator">=</span> drawingAPI<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">abstract</span> <span class="token keyword">void</span> <span class="token function">draw</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// low-level i.e. Implementation specific</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">abstract</span> <span class="token keyword">void</span> <span class="token function">resizeByPercentage</span><span class="token punctuation">(</span><span class="token keyword">double</span> pct<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// high-level i.e. Abstraction specific</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 扩展抽象部分</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">Circle</span> <span class="token keyword">extends</span> <span class="token class-name">Shape</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token keyword">double</span> x<span class="token punctuation">,</span> y<span class="token punctuation">,</span> radius<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">Circle</span><span class="token punctuation">(</span><span class="token keyword">double</span> x<span class="token punctuation">,</span> <span class="token keyword">double</span> y<span class="token punctuation">,</span> <span class="token keyword">double</span> radius<span class="token punctuation">,</span> <span class="token class-name">DrawingAPI</span> drawingAPI<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">super</span><span class="token punctuation">(</span>drawingAPI<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>x <span class="token operator">=</span> x<span class="token punctuation">;</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>y <span class="token operator">=</span> y<span class="token punctuation">;</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>radius <span class="token operator">=</span> radius<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// low-level i.e. Implementation specific</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">draw</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        drawingAPI<span class="token punctuation">.</span><span class="token function">drawCircle</span><span class="token punctuation">(</span>x<span class="token punctuation">,</span> y<span class="token punctuation">,</span> radius<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// high-level i.e. Abstraction specific</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">resizeByPercentage</span><span class="token punctuation">(</span><span class="token keyword">double</span> pct<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        radius <span class="token operator">*=</span> pct<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 客户端代码</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">BridgePatternDemo</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">Shape</span> redCircle <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Circle</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token keyword">new</span> <span class="token class-name">DrawingAPI1</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token class-name">Shape</span> greenCircle <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Circle</span><span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">,</span> <span class="token number">7</span><span class="token punctuation">,</span> <span class="token number">8</span><span class="token punctuation">,</span> <span class="token keyword">new</span> <span class="token class-name">DrawingAPI2</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        redCircle<span class="token punctuation">.</span><span class="token function">draw</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        greenCircle<span class="token punctuation">.</span><span class="token function">draw</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        redCircle<span class="token punctuation">.</span><span class="token function">resizeByPercentage</span><span class="token punctuation">(</span><span class="token number">2.5</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        greenCircle<span class="token punctuation">.</span><span class="token function">resizeByPercentage</span><span class="token punctuation">(</span><span class="token number">2.5</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        redCircle<span class="token punctuation">.</span><span class="token function">draw</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        greenCircle<span class="token punctuation">.</span><span class="token function">draw</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>在这个例子中，<code>DrawingAPI</code> 是实现部分的接口，它定义了绘制图形的方法。<code>DrawingAPI1</code> 和 <code>DrawingAPI2</code> 是具体的实现类。</li>
<li><code>Shape</code> 是抽象部分的基类，它包含了一个指向实现部分接口的引用。</li>
<li><code>Circle</code> 是扩展抽象部分的具体类，它实现了绘制和调整大小的功能。</li>
<li>客户端代码可以创建不同实现和抽象组合的实例，从而实现抽象和实现的独立变化。</li>
</ul>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>DesignPattern - 模板方法模式</title>
      <link>https://blog.magictable.ha.cn/software/DesignPattern-%E6%A8%A1%E6%9D%BF%E6%96%B9%E6%B3%95%E6%A8%A1%E5%BC%8F.html</link>
      <guid>https://blog.magictable.ha.cn/software/DesignPattern-%E6%A8%A1%E6%9D%BF%E6%96%B9%E6%B3%95%E6%A8%A1%E5%BC%8F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">DesignPattern - 模板方法模式</source>
      <description>文章摘要： 模板方法模式使用总结。 简介 简要说明 模板方法模式（Template Method Pattern）是一种行为型设计模式。 通过在抽象类中定义一个模板方法来固定算法骨架，并将算法中的某些步骤留给子类实现。 主要功能 在一个方法中定义一个算法的骨架，将具体的步骤实现延迟到子类中。 通过钩子方法（hook methods）提供对算法步骤的控制...</description>
      <category>软件程序/设计模式</category>
      <pubDate>Mon, 18 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 模板方法模式使用总结。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>模板方法模式（Template Method Pattern）是一种行为型设计模式。</li>
<li>通过在抽象类中定义一个模板方法来固定算法骨架，并将算法中的某些步骤留给子类实现。</li>
</ul>
<p>主要功能</p>
<ul>
<li>在一个方法中定义一个算法的骨架，将具体的步骤实现延迟到子类中。</li>
<li>通过钩子方法（hook methods）提供对算法步骤的控制，允许子类在不改变结构的情况下重新定义算法的某些步骤。</li>
</ul>
<p>注意事项</p>
<ul>
<li>为防止恶意操作，模板方法可以被声明为<code>final</code>，确保它不会被覆盖。</li>
<li>模板方法中的步骤可以被声明为<code>protected</code>，以便子类可以访问。</li>
<li>应该仔细设计抽象类，确保其方法对于所有子类都有意义。</li>
</ul>
<p>适用场景</p>
<ul>
<li>当多个算法步骤相同，只有部分步骤不同，并且这些不同步骤可以被抽象化时。</li>
<li>当算法的骨架保持不变，而某些步骤的实现可能需要变化时。</li>
</ul>
<h2>Java 8</h2>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 抽象类，定义了模板方法和基本步骤</span></span>
<span class="line"><span class="token keyword">abstract</span> <span class="token keyword">class</span> <span class="token class-name">Game</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 模板方法，定义了算法的骨架</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">final</span> <span class="token keyword">void</span> <span class="token function">play</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token function">initialize</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 初始化游戏</span></span>
<span class="line">        <span class="token function">startPlay</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token comment">// 开始游戏</span></span>
<span class="line">        <span class="token function">endPlay</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token comment">// 结束游戏</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 基本步骤，由子类实现</span></span>
<span class="line">    <span class="token keyword">protected</span> <span class="token keyword">abstract</span> <span class="token keyword">void</span> <span class="token function">initialize</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token keyword">protected</span> <span class="token keyword">abstract</span> <span class="token keyword">void</span> <span class="token function">startPlay</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token keyword">protected</span> <span class="token keyword">abstract</span> <span class="token keyword">void</span> <span class="token function">endPlay</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 钩子方法，可以被覆盖以提供额外的行为</span></span>
<span class="line">    <span class="token keyword">protected</span> <span class="token keyword">void</span> <span class="token function">addExtraFeature</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 默认实现，什么也不做</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 具体子类，实现了抽象类中的基本步骤</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">Cricket</span> <span class="token keyword">extends</span> <span class="token class-name">Game</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">protected</span> <span class="token keyword">void</span> <span class="token function">initialize</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Cricket Game Initialized! Start playing."</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">protected</span> <span class="token keyword">void</span> <span class="token function">startPlay</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Cricket Game Started. Enjoy the game!"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">protected</span> <span class="token keyword">void</span> <span class="token function">endPlay</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Cricket Game Finished!"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">Football</span> <span class="token keyword">extends</span> <span class="token class-name">Game</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">protected</span> <span class="token keyword">void</span> <span class="token function">initialize</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Football Game Initialized! Start playing."</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">protected</span> <span class="token keyword">void</span> <span class="token function">startPlay</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Football Game Started. Enjoy the game!"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">protected</span> <span class="token keyword">void</span> <span class="token function">endPlay</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Football Game Finished!"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 覆盖钩子方法以添加额外功能</span></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">protected</span> <span class="token keyword">void</span> <span class="token function">addExtraFeature</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Extra feature in Football: Penalty Shootout!"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 客户端代码，使用模板方法模式</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">TemplateMethodPatternDemo</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">Game</span> cricket <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Cricket</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        cricket<span class="token punctuation">.</span><span class="token function">play</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token class-name">Game</span> football <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Football</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        football<span class="token punctuation">.</span><span class="token function">play</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>在这个例子中，<code>Game</code>是一个抽象类，它定义了模板方法<code>play()</code>，这个方法定义了玩游戏的步骤。它调用了三个抽象方法<code>initialize()</code>、<code>startPlay()</code>和<code>endPlay()</code>，这些方法在子类中实现。<code>addExtraFeature()</code>是一个钩子方法，它提供了在子类中添加额外行为的机会。</li>
<li><code>Cricket</code>和<code>Football</code>是<code>Game</code>的具体子类，它们实现了父类中的抽象方法。<code>Football</code>类还覆盖了钩子方法<code>addExtraFeature()</code>来添加足球游戏特有的额外功能。</li>
<li>客户端代码创建了<code>Cricket</code>和<code>Football</code>的实例，并调用它们的<code>play()</code>方法。由于<code>play()</code>方法是模板方法，它确保了游戏的步骤按照预定的顺序执行，同时允许子类自定义具体的实现。</li>
</ul>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>DesignPattern - 状态模式</title>
      <link>https://blog.magictable.ha.cn/software/DesignPattern-%E7%8A%B6%E6%80%81%E6%A8%A1%E5%BC%8F.html</link>
      <guid>https://blog.magictable.ha.cn/software/DesignPattern-%E7%8A%B6%E6%80%81%E6%A8%A1%E5%BC%8F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">DesignPattern - 状态模式</source>
      <description>文章摘要： 状态模式使用总结。 简介 简要说明 状态模式（State Pattern）是一种行为型设计模式。 将每个状态的行为封装到独立的状态类中，并将状态转换逻辑委托给这些状态类，从而使得状态转换对上下文来说是透明的。 主要功能 将与特定状态相关的行为局部化，并将不同状态的行为分割开来。 允许状态转换逻辑与状态对象合成一体，而不是分布在上下文中。 状...</description>
      <category>软件程序/设计模式</category>
      <pubDate>Mon, 18 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 状态模式使用总结。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>状态模式（State Pattern）是一种行为型设计模式。</li>
<li>将每个状态的行为封装到独立的状态类中，并将状态转换逻辑委托给这些状态类，从而使得状态转换对上下文来说是透明的。</li>
</ul>
<p>主要功能</p>
<ul>
<li>将与特定状态相关的行为局部化，并将不同状态的行为分割开来。</li>
<li>允许状态转换逻辑与状态对象合成一体，而不是分布在上下文中。</li>
<li>状态对象可以被共享，减少了上下文对象中的条件判断。</li>
</ul>
<p>注意事项</p>
<ul>
<li>状态模式可能会导致系统中类数量增加，增加了系统的复杂性。</li>
<li>状态转换逻辑可能会变得复杂，尤其是在状态很多的情况下。</li>
</ul>
<p>适用场景</p>
<ul>
<li>对象的行为依赖于它的状态（属性），并且它可以在运行时根据状态改变行为。</li>
<li>代码中包含大量与对象状态有关的条件语句，这些条件语句可以根据对象的状态进行重构。</li>
</ul>
<h2>Java 8</h2>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 状态接口</span></span>
<span class="line"><span class="token keyword">interface</span> <span class="token class-name">State</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">void</span> <span class="token function">handle</span><span class="token punctuation">(</span><span class="token class-name">Context</span> context<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 具体状态类：开启状态</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">OnState</span> <span class="token keyword">implements</span> <span class="token class-name">State</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">handle</span><span class="token punctuation">(</span><span class="token class-name">Context</span> context<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"灯泡已经开启。"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token comment">// 在开启状态下，调用toggle方法切换到关闭状态</span></span>
<span class="line">        context<span class="token punctuation">.</span><span class="token function">setState</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">OffState</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 具体状态类：关闭状态</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">OffState</span> <span class="token keyword">implements</span> <span class="token class-name">State</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">handle</span><span class="token punctuation">(</span><span class="token class-name">Context</span> context<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"灯泡已经关闭。"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token comment">// 在关闭状态下，调用toggle方法切换到开启状态</span></span>
<span class="line">        context<span class="token punctuation">.</span><span class="token function">setState</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">OnState</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 上下文类</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">Context</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">State</span> state<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 设置状态</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setState</span><span class="token punctuation">(</span><span class="token class-name">State</span> state<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>state <span class="token operator">=</span> state<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 用户操作，委托给状态对象处理</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">toggle</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        state<span class="token punctuation">.</span><span class="token function">handle</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 客户端代码</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">StatePatternDemo</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 创建上下文对象</span></span>
<span class="line">        <span class="token class-name">Context</span> context <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Context</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token comment">// 设置初始状态为开启状态</span></span>
<span class="line">        context<span class="token punctuation">.</span><span class="token function">setState</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">OnState</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 连续切换状态两次</span></span>
<span class="line">        context<span class="token punctuation">.</span><span class="token function">toggle</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 输出：灯泡已经开启。</span></span>
<span class="line">        context<span class="token punctuation">.</span><span class="token function">toggle</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 输出：灯泡已经关闭。</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>在这个例子中，<code>State</code>是一个接口，定义了一个<code>handle</code>方法，用于处理来自上下文对象的请求。<code>OnState</code>和<code>OffState</code>是具体的状态类，它们实现了<code>State</code>接口，并根据当前状态提供了相应的行为。</li>
<li><code>Context</code>类是上下文类，它持有一个<code>State</code>对象，并通过<code>setState</code>方法来设置当前状态。<code>toggle</code>方法是用户操作的方法，它将请求委托给当前状态对象处理。</li>
<li>在客户端代码<code>StatePatternDemo</code>中，我们创建了<code>Context</code>对象，并设置了初始状态为<code>OnState</code>。通过调用<code>toggle</code>方法，我们可以看到状态在开启和关闭之间切换，并且相应的行为也被正确地执行。</li>
</ul>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>DesignPattern - 组合模式</title>
      <link>https://blog.magictable.ha.cn/software/DesignPattern-%E7%BB%84%E5%90%88%E6%A8%A1%E5%BC%8F.html</link>
      <guid>https://blog.magictable.ha.cn/software/DesignPattern-%E7%BB%84%E5%90%88%E6%A8%A1%E5%BC%8F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">DesignPattern - 组合模式</source>
      <description>文章摘要： 组合模式使用总结。 简介 简要说明 组合模式（Composite Pattern）是一种结构型设计模式。 将对象组合成树形结构以表示“部分-整体”的层次结构。 可以统一使用单个对象和组合对象。 主要功能 表示树形结构。 简化代码，可以一致地使用组合结构和单个对象。 定义了包含基本对象和组合对象的类层次结构。 注意事项 确保叶子和组合对象拥有...</description>
      <category>软件程序/设计模式</category>
      <pubDate>Mon, 18 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 组合模式使用总结。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>组合模式（Composite Pattern）是一种结构型设计模式。</li>
<li>将对象组合成树形结构以表示“部分-整体”的层次结构。</li>
<li>可以统一使用单个对象和组合对象。</li>
</ul>
<p>主要功能</p>
<ul>
<li>表示树形结构。</li>
<li>简化代码，可以一致地使用组合结构和单个对象。</li>
<li>定义了包含基本对象和组合对象的类层次结构。</li>
</ul>
<p>注意事项</p>
<ul>
<li>确保叶子和组合对象拥有相同的接口。</li>
<li>在实现组合模式时，要小心递归结构，避免无限循环。</li>
<li>可能会导致设计过于一般化，从而使得设计变得更加复杂。</li>
</ul>
<p>适用场景</p>
<ul>
<li>当你希望客户端可以忽略单个对象与组合对象的不同，统一使用它们时。</li>
<li>处理树形结构或部分-整体层次结构时。</li>
</ul>
<h2>Java 8</h2>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 组件接口，定义了叶子和组合对象共有的操作</span></span>
<span class="line"><span class="token keyword">interface</span> <span class="token class-name">Component</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">void</span> <span class="token function">operation</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 叶子节点，实现组件接口</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">Leaf</span> <span class="token keyword">implements</span> <span class="token class-name">Component</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">String</span> name<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">Leaf</span><span class="token punctuation">(</span><span class="token class-name">String</span> name<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>name <span class="token operator">=</span> name<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">operation</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 叶子节点的操作</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Leaf "</span> <span class="token operator">+</span> name <span class="token operator">+</span> <span class="token string">": Operation"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 组合对象，实现组件接口，并包含子组件</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">Composite</span> <span class="token keyword">implements</span> <span class="token class-name">Component</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">List</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">Component</span><span class="token punctuation">&gt;</span></span> children <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ArrayList</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token punctuation">&gt;</span></span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">operation</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 执行组合对象自身的操作，并递归调用子组件的操作</span></span>
<span class="line">        <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token class-name">Component</span> child <span class="token operator">:</span> children<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            child<span class="token punctuation">.</span><span class="token function">operation</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 添加子组件</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">add</span><span class="token punctuation">(</span><span class="token class-name">Component</span> component<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        children<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span>component<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 移除子组件</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">remove</span><span class="token punctuation">(</span><span class="token class-name">Component</span> component<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        children<span class="token punctuation">.</span><span class="token function">remove</span><span class="token punctuation">(</span>component<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 客户端代码，使用组合模式</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">CompositePatternDemo</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 创建组合对象</span></span>
<span class="line">        <span class="token class-name">Composite</span> root <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Composite</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        root<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">Leaf</span><span class="token punctuation">(</span><span class="token string">"Leaf A"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        root<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">Leaf</span><span class="token punctuation">(</span><span class="token string">"Leaf B"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 创建另一个组合对象</span></span>
<span class="line">        <span class="token class-name">Composite</span> composite <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Composite</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        composite<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">Leaf</span><span class="token punctuation">(</span><span class="token string">"Leaf X"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        composite<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">Leaf</span><span class="token punctuation">(</span><span class="token string">"Leaf Y"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 将组合对象添加到根组合对象中</span></span>
<span class="line">        root<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span>composite<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 执行操作，将递归调用所有叶子和组合对象的操作</span></span>
<span class="line">        root<span class="token punctuation">.</span><span class="token function">operation</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>在这个例子中，我们定义了一个组件接口<code>Component</code>，它定义了叶子和组合对象共有的操作。<code>Leaf</code>类是叶子节点，实现了组件接口，并提供了具体的操作实现。<code>Composite</code>类是组合对象，它实现了组件接口，并包含了一个子组件列表。组合对象可以添加和移除子组件，并在执行操作时递归调用所有子组件的操作。</li>
<li>客户端代码创建了叶子和组合对象，并将它们组合成一个树形结构。客户端通过调用根组合对象的<code>operation</code>方法来执行所有组件的操作，而不需要关心它们是叶子节点还是组合对象。这样就实现了对单个对象和组合对象的一致处理。</li>
</ul>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>DesignPattern - 装饰器模式</title>
      <link>https://blog.magictable.ha.cn/software/DesignPattern-%E8%A3%85%E9%A5%B0%E5%99%A8%E6%A8%A1%E5%BC%8F.html</link>
      <guid>https://blog.magictable.ha.cn/software/DesignPattern-%E8%A3%85%E9%A5%B0%E5%99%A8%E6%A8%A1%E5%BC%8F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">DesignPattern - 装饰器模式</source>
      <description>文章摘要： 装饰器模式使用总结。 简介 简要说明 装饰器模式（Decorator Pattern）是一种结构型设计模式。 允许向一个现有的对象添加新的功能，同时又不改变其结构。 这种模式属于对象结构型模式，它是作为现有类的一个包装。 主要功能 在不改变接口的前提下，增强类的性能。 通过使用不同的具体装饰类以及这些装饰类的排列组合，可以实现不同的效果。 ...</description>
      <category>软件程序/设计模式</category>
      <pubDate>Mon, 18 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 装饰器模式使用总结。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>装饰器模式（Decorator Pattern）是一种结构型设计模式。</li>
<li>允许向一个现有的对象添加新的功能，同时又不改变其结构。</li>
<li>这种模式属于对象结构型模式，它是作为现有类的一个包装。</li>
</ul>
<p>主要功能</p>
<ul>
<li>在不改变接口的前提下，增强类的性能。</li>
<li>通过使用不同的具体装饰类以及这些装饰类的排列组合，可以实现不同的效果。</li>
<li>可以对一个对象进行多次装饰，创造出不同行为的组合。</li>
</ul>
<p>注意事项</p>
<ul>
<li>装饰器模式会产生很多小对象，这些小对象增加了系统的复杂度。</li>
<li>装饰器模式比继承更加灵活，但是过度使用会导致系统中类的数目迅速增加。</li>
<li>应该在确有必要时使用装饰器模式，避免无谓的装饰。</li>
</ul>
<p>适用场景</p>
<ul>
<li>在不影响其他对象的情况下，以动态、透明的方式给单个对象添加职责。</li>
<li>当不能采用生成子类的方法进行扩充时，如类定义被隐藏或者类定义是终极类。</li>
</ul>
<h2>Java 8</h2>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 定义一个Component接口，这是装饰者和被装饰者的共同接口</span></span>
<span class="line"><span class="token keyword">interface</span> <span class="token class-name">Component</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 定义一个操作方法，所有实现类都需要实现这个方法</span></span>
<span class="line">    <span class="token keyword">void</span> <span class="token function">operation</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// ConcreteComponent是Component接口的具体实现，它是被装饰的对象</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">ConcreteComponent</span> <span class="token keyword">implements</span> <span class="token class-name">Component</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 实现operation方法</span></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">operation</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"ConcreteComponent operation"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// Decorator是一个抽象类，实现了Component接口，用于扩展Component的功能</span></span>
<span class="line"><span class="token keyword">abstract</span> <span class="token keyword">class</span> <span class="token class-name">Decorator</span> <span class="token keyword">implements</span> <span class="token class-name">Component</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 持有一个Component类型的引用，可以是ConcreteComponent或者另一个Decorator</span></span>
<span class="line">    <span class="token keyword">protected</span> <span class="token class-name">Component</span> component<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 构造方法，接收一个Component对象</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">Decorator</span><span class="token punctuation">(</span><span class="token class-name">Component</span> component<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>component <span class="token operator">=</span> component<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 实现operation方法，调用被装饰对象的operation方法</span></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">operation</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        component<span class="token punctuation">.</span><span class="token function">operation</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// ConcreteDecoratorA是Decorator的具体实现，它添加了额外的行为</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">ConcreteDecoratorA</span> <span class="token keyword">extends</span> <span class="token class-name">Decorator</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 构造方法，调用父类的构造方法</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">ConcreteDecoratorA</span><span class="token punctuation">(</span><span class="token class-name">Component</span> component<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">super</span><span class="token punctuation">(</span>component<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 重写operation方法，在调用被装饰对象的方法之后添加额外的行为</span></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">operation</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">super</span><span class="token punctuation">.</span><span class="token function">operation</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 调用被装饰对象的operation方法</span></span>
<span class="line">        <span class="token function">addedBehavior</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token comment">// 添加额外的行为</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 添加额外的行为</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token keyword">void</span> <span class="token function">addedBehavior</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"ConcreteDecoratorA added behavior"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// ConcreteDecoratorB是另一个Decorator的具体实现，它也添加了额外的行为</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">ConcreteDecoratorB</span> <span class="token keyword">extends</span> <span class="token class-name">Decorator</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 构造方法，调用父类的构造方法</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">ConcreteDecoratorB</span><span class="token punctuation">(</span><span class="token class-name">Component</span> component<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">super</span><span class="token punctuation">(</span>component<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 重写operation方法，在调用被装饰对象的方法之后添加额外的行为</span></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">operation</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">super</span><span class="token punctuation">.</span><span class="token function">operation</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 调用被装饰对象的operation方法</span></span>
<span class="line">        <span class="token function">addedBehavior</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token comment">// 添加额外的行为</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 添加额外的行为</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token keyword">void</span> <span class="token function">addedBehavior</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"ConcreteDecoratorB added behavior"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 客户端代码，使用装饰器模式</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">DecoratorPatternDemo</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 创建一个ConcreteComponent对象</span></span>
<span class="line">        <span class="token class-name">Component</span> component <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ConcreteComponent</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        </span>
<span class="line">        <span class="token comment">// 使用ConcreteDecoratorA装饰ConcreteComponent</span></span>
<span class="line">        <span class="token class-name">Component</span> decoratorA <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ConcreteDecoratorA</span><span class="token punctuation">(</span>component<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        </span>
<span class="line">        <span class="token comment">// 使用ConcreteDecoratorB装饰ConcreteDecoratorA</span></span>
<span class="line">        <span class="token class-name">Component</span> decoratorB <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ConcreteDecoratorB</span><span class="token punctuation">(</span>decoratorA<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 执行operation方法，将会依次调用ConcreteComponent、ConcreteDecoratorA和ConcreteDecoratorB的operation方法</span></span>
<span class="line">        decoratorB<span class="token punctuation">.</span><span class="token function">operation</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>在这个例子中，我们定义了一个组件接口<code>Component</code>和一个具体的组件实现<code>ConcreteComponent</code>。然后我们定义了一个装饰器抽象类<code>Decorator</code>，它实现了<code>Component</code>接口并持有一个<code>Component</code>对象的引用。<code>ConcreteDecoratorA</code>和<code>ConcreteDecoratorB</code>是两个具体的装饰器类，它们扩展了<code>Decorator</code>类并添加了额外的行为。</li>
<li>在客户端代码中，我们首先创建了一个<code>ConcreteComponent</code>对象，然后使用<code>ConcreteDecoratorA</code>和<code>ConcreteDecoratorB</code>对其进行装饰。当我们调用<code>decoratorB.operation()</code>时，它将依次执行<code>ConcreteComponent</code>、<code>ConcreteDecoratorA</code>和<code>ConcreteDecoratorB</code>的<code>operation</code>方法，从而实现了功能的动态添加。</li>
</ul>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>DesignPattern - 观察者模式</title>
      <link>https://blog.magictable.ha.cn/software/DesignPattern-%E8%A7%82%E5%AF%9F%E8%80%85%E6%A8%A1%E5%BC%8F.html</link>
      <guid>https://blog.magictable.ha.cn/software/DesignPattern-%E8%A7%82%E5%AF%9F%E8%80%85%E6%A8%A1%E5%BC%8F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">DesignPattern - 观察者模式</source>
      <description>文章摘要： 观察者模式使用总结。 简介 简要说明 观察者模式（Observer Pattern）是一种行为型设计模式。 允许对象（观察者）订阅另一个对象（被观察者）的状态变化，并能够在状态变化时收到通知。 主要功能 在被观察者和观察者之间建立一个抽象的订阅机制。 支持动态地添加和删除观察者。 被观察者状态变化时，自动通知所有注册的观察者。 注意事项 观...</description>
      <category>软件程序/设计模式</category>
      <pubDate>Mon, 18 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 观察者模式使用总结。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>观察者模式（Observer Pattern）是一种行为型设计模式。</li>
<li>允许对象（观察者）订阅另一个对象（被观察者）的状态变化，并能够在状态变化时收到通知。</li>
</ul>
<p>主要功能</p>
<ul>
<li>在被观察者和观察者之间建立一个抽象的订阅机制。</li>
<li>支持动态地添加和删除观察者。</li>
<li>被观察者状态变化时，自动通知所有注册的观察者。</li>
</ul>
<p>注意事项</p>
<ul>
<li>观察者模式可能会引起内存泄漏，如果观察者被注册后没有被正确地移除。</li>
<li>被观察者发送通知时，如果观察者执行的操作很重，可能会影响系统的性能。</li>
</ul>
<p>适用场景</p>
<ul>
<li>当一个抽象模型有两个方面，其中一个方面依赖于另一个方面时。</li>
<li>当一个对象的改变需要同时改变其他对象，而不知道具体有多少对象需要改变时。</li>
<li>当一个对象必须通知其他对象，而它又不能假定这些对象是谁时。</li>
</ul>
<h2>Java 8</h2>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>util<span class="token punctuation">.</span></span><span class="token class-name">ArrayList</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>util<span class="token punctuation">.</span></span><span class="token class-name">List</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 被观察者接口</span></span>
<span class="line"><span class="token keyword">interface</span> <span class="token class-name">Subject</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 注册观察者</span></span>
<span class="line">    <span class="token keyword">void</span> <span class="token function">registerObserver</span><span class="token punctuation">(</span><span class="token class-name">Observer</span> observer<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token comment">// 移除观察者</span></span>
<span class="line">    <span class="token keyword">void</span> <span class="token function">removeObserver</span><span class="token punctuation">(</span><span class="token class-name">Observer</span> observer<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token comment">// 通知所有观察者</span></span>
<span class="line">    <span class="token keyword">void</span> <span class="token function">notifyObservers</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 观察者接口</span></span>
<span class="line"><span class="token keyword">interface</span> <span class="token class-name">Observer</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 当被观察者状态改变时，观察者需要更新的方法</span></span>
<span class="line">    <span class="token keyword">void</span> <span class="token function">update</span><span class="token punctuation">(</span><span class="token class-name">String</span> event<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 具体的被观察者</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">ConcreteSubject</span> <span class="token keyword">implements</span> <span class="token class-name">Subject</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">List</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">Observer</span><span class="token punctuation">&gt;</span></span> observers <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ArrayList</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token punctuation">&gt;</span></span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">String</span> state<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setState</span><span class="token punctuation">(</span><span class="token class-name">String</span> state<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>state <span class="token operator">=</span> state<span class="token punctuation">;</span></span>
<span class="line">        <span class="token comment">// 状态改变时，通知所有观察者</span></span>
<span class="line">        <span class="token function">notifyObservers</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">registerObserver</span><span class="token punctuation">(</span><span class="token class-name">Observer</span> observer<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        observers<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span>observer<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">removeObserver</span><span class="token punctuation">(</span><span class="token class-name">Observer</span> observer<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        observers<span class="token punctuation">.</span><span class="token function">remove</span><span class="token punctuation">(</span>observer<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">notifyObservers</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 通知所有注册的观察者</span></span>
<span class="line">        <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token class-name">Observer</span> observer <span class="token operator">:</span> observers<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            observer<span class="token punctuation">.</span><span class="token function">update</span><span class="token punctuation">(</span>state<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 具体的观察者</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">ConcreteObserver</span> <span class="token keyword">implements</span> <span class="token class-name">Observer</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">String</span> name<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">ConcreteObserver</span><span class="token punctuation">(</span><span class="token class-name">String</span> name<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>name <span class="token operator">=</span> name<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">update</span><span class="token punctuation">(</span><span class="token class-name">String</span> event<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 观察者接收到通知后的行为</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>name <span class="token operator">+</span> <span class="token string">" received event: "</span> <span class="token operator">+</span> event<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 客户端代码</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">ObserverPatternDemo</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 创建被观察者</span></span>
<span class="line">        <span class="token class-name">ConcreteSubject</span> subject <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ConcreteSubject</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 创建观察者</span></span>
<span class="line">        <span class="token class-name">Observer</span> observer1 <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ConcreteObserver</span><span class="token punctuation">(</span><span class="token string">"Observer 1"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token class-name">Observer</span> observer2 <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ConcreteObserver</span><span class="token punctuation">(</span><span class="token string">"Observer 2"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 注册观察者</span></span>
<span class="line">        subject<span class="token punctuation">.</span><span class="token function">registerObserver</span><span class="token punctuation">(</span>observer1<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        subject<span class="token punctuation">.</span><span class="token function">registerObserver</span><span class="token punctuation">(</span>observer2<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 改变被观察者的状态，这将触发通知</span></span>
<span class="line">        subject<span class="token punctuation">.</span><span class="token function">setState</span><span class="token punctuation">(</span><span class="token string">"State changed!"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>在这个例子中，<code>Subject</code>接口定义了注册、移除和通知观察者的方法。<code>Observer</code>接口定义了观察者接收通知的方法<code>update</code>。</li>
<li><code>ConcreteSubject</code>类是具体的被观察者，它维护了一个观察者列表，并在状态改变时通知这些观察者。<code>ConcreteObserver</code>类是具体的观察者，它在接收到状态变化的通知时执行相应的操作。</li>
<li>在客户端代码<code>ObserverPatternDemo</code>中，我们创建了被观察者和两个观察者，并将观察者注册到被观察者中。当被观察者的状态改变时，所有注册的观察者都会收到通知，并执行它们的<code>update</code>方法。</li>
</ul>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>DesignPattern - 解释器模式</title>
      <link>https://blog.magictable.ha.cn/software/DesignPattern-%E8%A7%A3%E9%87%8A%E5%99%A8%E6%A8%A1%E5%BC%8F.html</link>
      <guid>https://blog.magictable.ha.cn/software/DesignPattern-%E8%A7%A3%E9%87%8A%E5%99%A8%E6%A8%A1%E5%BC%8F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">DesignPattern - 解释器模式</source>
      <description>文章摘要： 定义了如何为语言创建解释器，用来解释该语言中的句子。 简介 简要说明 解释器模式（Interpreter Pattern）是一种行为型设计模式。 为语言中的每个符号都定义了一个解释器类，用来处理这个符号相关的解释操作。这些解释器类通常形成一个树状结构，以表示语言的层次结构。 主要功能 定义文法的表示方式。 提供解释器来解释文法表示。 注意事...</description>
      <category>软件程序/设计模式</category>
      <pubDate>Mon, 18 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 定义了如何为语言创建解释器，用来解释该语言中的句子。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>解释器模式（Interpreter Pattern）是一种行为型设计模式。</li>
<li>为语言中的每个符号都定义了一个解释器类，用来处理这个符号相关的解释操作。这些解释器类通常形成一个树状结构，以表示语言的层次结构。</li>
</ul>
<p>主要功能</p>
<ul>
<li>定义文法的表示方式。</li>
<li>提供解释器来解释文法表示。</li>
</ul>
<p>注意事项</p>
<ul>
<li>解释器模式可能会引起类膨胀，因为每种文法规则都需要一个解释器类。</li>
<li>对于复杂文法，解释器模式可能会变得难以维护和扩展。</li>
<li>应该只在语言经常变化且运行时效率不是关键问题时使用解释器模式。</li>
</ul>
<p>适用场景</p>
<ul>
<li>当需要实现一个简单的语言时。</li>
<li>当效率不是关键问题，且语言的文法较为简单时。</li>
<li>当一个语言需要解释执行，并且可以将该语言中的句子表示为一个抽象语法树时。</li>
</ul>
<h2>Java 8</h2>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 抽象表达式，声明一个抽象的解释操作</span></span>
<span class="line"><span class="token keyword">interface</span> <span class="token class-name">Expression</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">boolean</span> <span class="token function">interpret</span><span class="token punctuation">(</span><span class="token class-name">String</span> context<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 终结符表达式，实现了抽象表达式接口，用来处理终结符</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">TerminalExpression</span> <span class="token keyword">implements</span> <span class="token class-name">Expression</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">String</span> data<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">TerminalExpression</span><span class="token punctuation">(</span><span class="token class-name">String</span> data<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>data <span class="token operator">=</span> data<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">boolean</span> <span class="token function">interpret</span><span class="token punctuation">(</span><span class="token class-name">String</span> context<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 判断上下文中是否包含终结符</span></span>
<span class="line">        <span class="token keyword">return</span> context<span class="token punctuation">.</span><span class="token function">contains</span><span class="token punctuation">(</span>data<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 非终结符表达式，实现了抽象表达式接口，用来处理非终结符</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">OrExpression</span> <span class="token keyword">implements</span> <span class="token class-name">Expression</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">Expression</span> expr1 <span class="token operator">=</span> <span class="token keyword">null</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">Expression</span> expr2 <span class="token operator">=</span> <span class="token keyword">null</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">OrExpression</span><span class="token punctuation">(</span><span class="token class-name">Expression</span> expr1<span class="token punctuation">,</span> <span class="token class-name">Expression</span> expr2<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>expr1 <span class="token operator">=</span> expr1<span class="token punctuation">;</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>expr2 <span class="token operator">=</span> expr2<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">boolean</span> <span class="token function">interpret</span><span class="token punctuation">(</span><span class="token class-name">String</span> context<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 对两个表达式执行逻辑或操作</span></span>
<span class="line">        <span class="token keyword">return</span> expr1<span class="token punctuation">.</span><span class="token function">interpret</span><span class="token punctuation">(</span>context<span class="token punctuation">)</span> <span class="token operator">||</span> expr2<span class="token punctuation">.</span><span class="token function">interpret</span><span class="token punctuation">(</span>context<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 客户端代码</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">InterpreterPatternDemo</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 规则：Robert 和 John 是男性</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token class-name">Expression</span> <span class="token function">getMaleExpression</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">Expression</span> robert <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">TerminalExpression</span><span class="token punctuation">(</span><span class="token string">"Robert"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token class-name">Expression</span> john <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">TerminalExpression</span><span class="token punctuation">(</span><span class="token string">"John"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">OrExpression</span><span class="token punctuation">(</span>robert<span class="token punctuation">,</span> john<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">Expression</span> isMale <span class="token operator">=</span> <span class="token function">getMaleExpression</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 测试解释器</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"John is male? "</span> <span class="token operator">+</span> isMale<span class="token punctuation">.</span><span class="token function">interpret</span><span class="token punctuation">(</span><span class="token string">"John"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Julie is male? "</span> <span class="token operator">+</span> isMale<span class="token punctuation">.</span><span class="token function">interpret</span><span class="token punctuation">(</span><span class="token string">"Julie"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>在这个例子中，我们定义了一个简单的语言，该语言可以用来判断一个字符串是否表示男性名字。我们创建了两个类<code>TerminalExpression</code>和<code>OrExpression</code>来分别处理终结符和非终结符。</li>
<li><code>Expression</code>接口定义了<code>interpret</code>方法，该方法接受一个字符串上下文并返回一个布尔值。</li>
<li><code>TerminalExpression</code>类是终结符表达式的实现，它检查上下文中是否包含特定的字符串。</li>
<li><code>OrExpression</code>类是非终结符表达式的实现，它将两个表达式进行逻辑或操作。</li>
<li>在客户端代码<code>InterpreterPatternDemo</code>中，我们定义了一个规则，即"Robert"和"John"都是男性名字。我们创建了一个<code>OrExpression</code>对象来表示这个规则，并在<code>main</code>方法中测试了这个解释器。</li>
</ul>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>DesignPattern - 访问者模式</title>
      <link>https://blog.magictable.ha.cn/software/DesignPattern-%E8%AE%BF%E9%97%AE%E8%80%85%E6%A8%A1%E5%BC%8F.html</link>
      <guid>https://blog.magictable.ha.cn/software/DesignPattern-%E8%AE%BF%E9%97%AE%E8%80%85%E6%A8%A1%E5%BC%8F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">DesignPattern - 访问者模式</source>
      <description>文章摘要： 访问者模式使用总结。 简介 简要说明 访问者模式（Visitor Pattern）是一种行为型设计模式。 定义了一个操作对象结构的接口，让访问者能够对对象结构中的元素进行操作，而不改变这些元素所属的类。 主要功能 表示一个作用于某对象结构中的各元素的操作，它可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 将操作与对象结构分离，使...</description>
      <category>软件程序/设计模式</category>
      <pubDate>Mon, 18 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 访问者模式使用总结。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>访问者模式（Visitor Pattern）是一种行为型设计模式。</li>
<li>定义了一个操作对象结构的接口，让访问者能够对对象结构中的元素进行操作，而不改变这些元素所属的类。</li>
</ul>
<p>主要功能</p>
<ul>
<li>表示一个作用于某对象结构中的各元素的操作，它可以在不改变各元素的类的前提下定义作用于这些元素的新操作。</li>
<li>将操作与对象结构分离，使得操作可以独立变化。</li>
<li>可以在不修改现有类层次结构的情况下，增加新的操作。</li>
</ul>
<p>注意事项</p>
<ul>
<li>访问者模式会增加系统复杂度，因为它要求元素类能够接受访问者对象，这就要求元素类必须有一个接收访问者的接口。</li>
<li>访问者模式要求对象结构中的元素类是稳定的，如果元素类经常变化，那么引入访问者模式可能不合适。</li>
<li>访问者对象访问元素类的具体实现时，可能需要了解元素类的内部细节，这可能会破坏封装性。</li>
</ul>
<p>适用场景</p>
<ul>
<li>对象结构相对稳定，但经常需要在此对象结构上定义新的操作。</li>
<li>需要对对象结构中的对象进行很多不同的并且不相关的操作，而需要避免这些操作污染这些对象的类，也不希望在类中添加新的特性。</li>
</ul>
<h2>Java 8</h2>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 定义一个表示元素的接口</span></span>
<span class="line"><span class="token keyword">interface</span> <span class="token class-name">Element</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">void</span> <span class="token function">accept</span><span class="token punctuation">(</span><span class="token class-name">Visitor</span> visitor<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 具体的元素类A</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">ConcreteElementA</span> <span class="token keyword">implements</span> <span class="token class-name">Element</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">accept</span><span class="token punctuation">(</span><span class="token class-name">Visitor</span> visitor<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        visitor<span class="token punctuation">.</span><span class="token function">visit</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">String</span> <span class="token function">operationA</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">return</span> <span class="token string">"ConcreteElementA"</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 具体的元素类B</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">ConcreteElementB</span> <span class="token keyword">implements</span> <span class="token class-name">Element</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">accept</span><span class="token punctuation">(</span><span class="token class-name">Visitor</span> visitor<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        visitor<span class="token punctuation">.</span><span class="token function">visit</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">String</span> <span class="token function">operationB</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">return</span> <span class="token string">"ConcreteElementB"</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 访问者接口</span></span>
<span class="line"><span class="token keyword">interface</span> <span class="token class-name">Visitor</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">void</span> <span class="token function">visit</span><span class="token punctuation">(</span><span class="token class-name">ConcreteElementA</span> elementA<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token keyword">void</span> <span class="token function">visit</span><span class="token punctuation">(</span><span class="token class-name">ConcreteElementB</span> elementB<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 具体的访问者类</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">ConcreteVisitor</span> <span class="token keyword">implements</span> <span class="token class-name">Visitor</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">visit</span><span class="token punctuation">(</span><span class="token class-name">ConcreteElementA</span> elementA<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Visited "</span> <span class="token operator">+</span> elementA<span class="token punctuation">.</span><span class="token function">operationA</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">visit</span><span class="token punctuation">(</span><span class="token class-name">ConcreteElementB</span> elementB<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Visited "</span> <span class="token operator">+</span> elementB<span class="token punctuation">.</span><span class="token function">operationB</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 对象结构类，通常包含一个元素集合</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">ObjectStructure</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">List</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">Element</span><span class="token punctuation">&gt;</span></span> elements <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ArrayList</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token punctuation">&gt;</span></span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">attach</span><span class="token punctuation">(</span><span class="token class-name">Element</span> element<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        elements<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span>element<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">detach</span><span class="token punctuation">(</span><span class="token class-name">Element</span> element<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        elements<span class="token punctuation">.</span><span class="token function">remove</span><span class="token punctuation">(</span>element<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">accept</span><span class="token punctuation">(</span><span class="token class-name">Visitor</span> visitor<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token class-name">Element</span> element <span class="token operator">:</span> elements<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            element<span class="token punctuation">.</span><span class="token function">accept</span><span class="token punctuation">(</span>visitor<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 客户端代码</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">VisitorPatternDemo</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 创建对象结构</span></span>
<span class="line">        <span class="token class-name">ObjectStructure</span> structure <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ObjectStructure</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 添加元素到对象结构</span></span>
<span class="line">        structure<span class="token punctuation">.</span><span class="token function">attach</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">ConcreteElementA</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        structure<span class="token punctuation">.</span><span class="token function">attach</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">ConcreteElementB</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 创建访问者</span></span>
<span class="line">        <span class="token class-name">Visitor</span> visitor <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ConcreteVisitor</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 对象结构接受访问者</span></span>
<span class="line">        structure<span class="token punctuation">.</span><span class="token function">accept</span><span class="token punctuation">(</span>visitor<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>在这个例子中，<code>Element</code>接口定义了一个<code>accept</code>方法，该方法接受一个<code>Visitor</code>对象作为参数。</li>
<li><code>ConcreteElementA</code>和<code>ConcreteElementB</code>是具体的元素类，它们实现了<code>Element</code>接口，并在<code>accept</code>方法中调用访问者的<code>visit</code>方法。</li>
<li><code>Visitor</code>接口定义了访问者可以执行的操作，这里有两个<code>visit</code>方法，分别对应不同的元素类。</li>
<li><code>ConcreteVisitor</code>是具体的访问者类，它实现了<code>Visitor</code>接口，并在<code>visit</code>方法中定义了访问元素时执行的操作。</li>
<li><code>ObjectStructure</code>类表示对象结构，它包含一个元素集合，并提供方法来添加、移除元素以及接受访问者。</li>
<li>在客户端代码<code>VisitorPatternDemo</code>中，我们创建了一个对象结构，添加了两个元素，并创建了一个访问者。然后，我们调用对象结构的<code>accept</code>方法，这会遍历所有元素并调用它们的<code>accept</code>方法，从而触发访问者的<code>visit</code>方法。这样，访问者就可以对每个元素执行特定的操作，而无需修改元素类本身。</li>
</ul>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>DesignPattern - 责任链模式</title>
      <link>https://blog.magictable.ha.cn/software/DesignPattern-%E8%B4%A3%E4%BB%BB%E9%93%BE%E6%A8%A1%E5%BC%8F.html</link>
      <guid>https://blog.magictable.ha.cn/software/DesignPattern-%E8%B4%A3%E4%BB%BB%E9%93%BE%E6%A8%A1%E5%BC%8F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">DesignPattern - 责任链模式</source>
      <description>文章摘要： 责任链模式使用总结。 简介 简要说明 责任链模式（Chain of Responsibility Pattern）是一种行为型设计模式。 将请求的发送者和接收者解耦，将多个接收者连成一条链，并沿着这条链传递请求，直到链上的某个接收者处理这个请求。 主要功能 分发请求到多个对象。 避免请求发送者和接收者之间的耦合。 增加新的处理者无需修改现有...</description>
      <category>软件程序/设计模式</category>
      <pubDate>Mon, 18 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 责任链模式使用总结。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>责任链模式（Chain of Responsibility Pattern）是一种行为型设计模式。</li>
<li>将请求的发送者和接收者解耦，将多个接收者连成一条链，并沿着这条链传递请求，直到链上的某个接收者处理这个请求。</li>
</ul>
<p>主要功能</p>
<ul>
<li>分发请求到多个对象。</li>
<li>避免请求发送者和接收者之间的耦合。</li>
<li>增加新的处理者无需修改现有代码。</li>
</ul>
<p>注意事项</p>
<ul>
<li>链中的处理者对象数量可能会影响性能。</li>
<li>如果请求在链的末端没有被处理，需要有一个明确的结束条件。</li>
<li>避免责任链过长，否则可能会造成调试困难。</li>
</ul>
<p>适用场景</p>
<ul>
<li>当多个对象可以处理同一个请求，但具体由哪个对象处理在运行时动态决定时。</li>
<li>当你想在不明确指定接收者的情况下，向多个对象中的一个提交请求时。</li>
<li>当处理者有多个，并且它们的责任可以按照一定的顺序排列时。</li>
</ul>
<h2>Java 8</h2>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 抽象处理者</span></span>
<span class="line"><span class="token keyword">abstract</span> <span class="token keyword">class</span> <span class="token class-name">Handler</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">protected</span> <span class="token class-name">Handler</span> successor<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 设置后继者</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setSuccessor</span><span class="token punctuation">(</span><span class="token class-name">Handler</span> successor<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>successor <span class="token operator">=</span> successor<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 处理请求的方法</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">abstract</span> <span class="token keyword">void</span> <span class="token function">handleRequest</span><span class="token punctuation">(</span><span class="token keyword">int</span> request<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 具体处理者A</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">ConcreteHandlerA</span> <span class="token keyword">extends</span> <span class="token class-name">Handler</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">handleRequest</span><span class="token punctuation">(</span><span class="token keyword">int</span> request<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">if</span> <span class="token punctuation">(</span>request <span class="token operator">&gt;=</span> <span class="token number">0</span> <span class="token operator">&amp;&amp;</span> request <span class="token operator">&lt;</span> <span class="token number">10</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"ConcreteHandlerA 处理请求 "</span> <span class="token operator">+</span> request<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>successor <span class="token operator">!=</span> <span class="token keyword">null</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            successor<span class="token punctuation">.</span><span class="token function">handleRequest</span><span class="token punctuation">(</span>request<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 传递给下一个处理者</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 具体处理者B</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">ConcreteHandlerB</span> <span class="token keyword">extends</span> <span class="token class-name">Handler</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">handleRequest</span><span class="token punctuation">(</span><span class="token keyword">int</span> request<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">if</span> <span class="token punctuation">(</span>request <span class="token operator">&gt;=</span> <span class="token number">10</span> <span class="token operator">&amp;&amp;</span> request <span class="token operator">&lt;</span> <span class="token number">20</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"ConcreteHandlerB 处理请求 "</span> <span class="token operator">+</span> request<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>successor <span class="token operator">!=</span> <span class="token keyword">null</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            successor<span class="token punctuation">.</span><span class="token function">handleRequest</span><span class="token punctuation">(</span>request<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 传递给下一个处理者</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 客户端代码</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">ChainOfResponsibilityPatternDemo</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 创建责任链</span></span>
<span class="line">        <span class="token class-name">Handler</span> handlerA <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ConcreteHandlerA</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token class-name">Handler</span> handlerB <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ConcreteHandlerB</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        handlerA<span class="token punctuation">.</span><span class="token function">setSuccessor</span><span class="token punctuation">(</span>handlerB<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 设置后继者</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 发送请求</span></span>
<span class="line">        handlerA<span class="token punctuation">.</span><span class="token function">handleRequest</span><span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// ConcreteHandlerA 处理请求</span></span>
<span class="line">        handlerA<span class="token punctuation">.</span><span class="token function">handleRequest</span><span class="token punctuation">(</span><span class="token number">15</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// ConcreteHandlerB 处理请求</span></span>
<span class="line">        handlerA<span class="token punctuation">.</span><span class="token function">handleRequest</span><span class="token punctuation">(</span><span class="token number">25</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 没有处理者处理请求</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>在这个例子中，<code>Handler</code>是一个抽象类，定义了处理请求的方法<code>handleRequest</code>和一个设置后继者的方法<code>setSuccessor</code>。<code>ConcreteHandlerA</code>和<code>ConcreteHandlerB</code>是具体的处理者类，它们继承自<code>Handler</code>类，并实现了<code>handleRequest</code>方法。</li>
<li>在<code>ChainOfResponsibilityPatternDemo</code>的<code>main</code>方法中，我们创建了两个处理者对象<code>handlerA</code>和<code>handlerB</code>，并将它们设置成责任链。当请求被发送到<code>handlerA</code>时，如果请求的值在<code>handlerA</code>的处理范围内，则<code>handlerA</code>会处理该请求；否则，它会将请求传递给<code>handlerB</code>。如果请求在<code>handlerB</code>的处理范围内，则<code>handlerB</code>会处理该请求；否则，请求将不会被处理，因为没有设置更多的处理者。</li>
</ul>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>DesignPattern - 迭代器模式</title>
      <link>https://blog.magictable.ha.cn/software/DesignPattern-%E8%BF%AD%E4%BB%A3%E5%99%A8%E6%A8%A1%E5%BC%8F.html</link>
      <guid>https://blog.magictable.ha.cn/software/DesignPattern-%E8%BF%AD%E4%BB%A3%E5%99%A8%E6%A8%A1%E5%BC%8F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">DesignPattern - 迭代器模式</source>
      <description>文章摘要： 迭代器模式使用总结。 简介 简要说明 迭代器模式（Iterator Pattern）是一种行为型设计模式。 允许客户端通过一个统一的接口遍历聚合对象中的元素，而无需关心聚合对象的内部结构。 主要功能 提供一种方法顺序访问一个聚合对象中各个元素，而不暴露其内部的表示。 支持对聚合对象的多种遍历方式。 为遍历不同的聚合结构提供一个统一的接口。 ...</description>
      <category>软件程序/设计模式</category>
      <pubDate>Mon, 18 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 迭代器模式使用总结。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>迭代器模式（Iterator Pattern）是一种行为型设计模式。</li>
<li>允许客户端通过一个统一的接口遍历聚合对象中的元素，而无需关心聚合对象的内部结构。</li>
</ul>
<p>主要功能</p>
<ul>
<li>提供一种方法顺序访问一个聚合对象中各个元素，而不暴露其内部的表示。</li>
<li>支持对聚合对象的多种遍历方式。</li>
<li>为遍历不同的聚合结构提供一个统一的接口。</li>
</ul>
<p>注意事项</p>
<ul>
<li>迭代器模式可能会增加系统的复杂性，因为需要定义额外的迭代器接口和实现。</li>
<li>在某些情况下，迭代器可能会造成遍历过程中的性能问题。</li>
</ul>
<p>适用场景</p>
<ul>
<li>当需要访问一个聚合对象的内容，而不暴露其内部表示时。</li>
<li>当需要支持对聚合对象的多种遍历方式时。</li>
<li>当需要为遍历不同的聚合结构提供一个统一的接口时。</li>
</ul>
<h2>Java 8</h2>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>util<span class="token punctuation">.</span></span><span class="token operator">*</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 迭代器接口</span></span>
<span class="line"><span class="token keyword">interface</span> <span class="token class-name">Iterator</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">boolean</span> <span class="token function">hasNext</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token class-name">Object</span> <span class="token function">next</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 聚合接口</span></span>
<span class="line"><span class="token keyword">interface</span> <span class="token class-name">Aggregate</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token class-name">Iterator</span> <span class="token function">createIterator</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 具体的聚合类</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">ConcreteAggregate</span> <span class="token keyword">implements</span> <span class="token class-name">Aggregate</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">List</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">Object</span><span class="token punctuation">&gt;</span></span> items <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ArrayList</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token punctuation">&gt;</span></span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">addItem</span><span class="token punctuation">(</span><span class="token class-name">Object</span> item<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        items<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span>item<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">Iterator</span> <span class="token function">createIterator</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">ConcreteIterator</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 内部类，具体的迭代器实现</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token keyword">class</span> <span class="token class-name">ConcreteIterator</span> <span class="token keyword">implements</span> <span class="token class-name">Iterator</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">private</span> <span class="token keyword">int</span> index<span class="token punctuation">;</span></span>
<span class="line">        <span class="token keyword">private</span> <span class="token class-name">ConcreteAggregate</span> aggregate<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token keyword">public</span> <span class="token class-name">ConcreteIterator</span><span class="token punctuation">(</span><span class="token class-name">ConcreteAggregate</span> aggregate<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token keyword">this</span><span class="token punctuation">.</span>aggregate <span class="token operator">=</span> aggregate<span class="token punctuation">;</span></span>
<span class="line">            index <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">        <span class="token annotation punctuation">@Override</span></span>
<span class="line">        <span class="token keyword">public</span> <span class="token keyword">boolean</span> <span class="token function">hasNext</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token keyword">return</span> index <span class="token operator">&lt;</span> aggregate<span class="token punctuation">.</span>items<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">        <span class="token annotation punctuation">@Override</span></span>
<span class="line">        <span class="token keyword">public</span> <span class="token class-name">Object</span> <span class="token function">next</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span><span class="token function">hasNext</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                <span class="token keyword">throw</span> <span class="token keyword">new</span> <span class="token class-name">NoSuchElementException</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token punctuation">}</span></span>
<span class="line">            <span class="token keyword">return</span> aggregate<span class="token punctuation">.</span>items<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span>index<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 客户端代码</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">IteratorPatternDemo</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 创建具体的聚合对象</span></span>
<span class="line">        <span class="token class-name">ConcreteAggregate</span> aggregate <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ConcreteAggregate</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        aggregate<span class="token punctuation">.</span><span class="token function">addItem</span><span class="token punctuation">(</span><span class="token string">"Item 1"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        aggregate<span class="token punctuation">.</span><span class="token function">addItem</span><span class="token punctuation">(</span><span class="token string">"Item 2"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        aggregate<span class="token punctuation">.</span><span class="token function">addItem</span><span class="token punctuation">(</span><span class="token string">"Item 3"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 通过聚合对象获取迭代器</span></span>
<span class="line">        <span class="token class-name">Iterator</span> iterator <span class="token operator">=</span> aggregate<span class="token punctuation">.</span><span class="token function">createIterator</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 使用迭代器遍历聚合对象中的元素</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Iterating over aggregate:"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token keyword">while</span> <span class="token punctuation">(</span>iterator<span class="token punctuation">.</span><span class="token function">hasNext</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token class-name">Object</span> item <span class="token operator">=</span> iterator<span class="token punctuation">.</span><span class="token function">next</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>item<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>在这个例子中，<code>Iterator</code>接口定义了遍历聚合对象所需的方法：<code>hasNext()</code>用于判断是否还有下一个元素，<code>next()</code>用于获取下一个元素。</li>
<li><code>Aggregate</code>接口定义了创建迭代器的方法<code>createIterator()</code>。</li>
<li><code>ConcreteAggregate</code>类是具体的聚合类，它内部维护了一个元素列表，并提供了一个方法<code>addItem()</code>用于添加元素。同时，它实现了<code>createIterator()</code>方法，返回一个<code>ConcreteIterator</code>实例。</li>
<li><code>ConcreteIterator</code>是<code>ConcreteAggregate</code>的内部类，实现了<code>Iterator</code>接口。它负责跟踪聚合对象中的当前位置，并提供遍历元素的方法。</li>
<li>在客户端代码<code>IteratorPatternDemo</code>中，我们创建了一个<code>ConcreteAggregate</code>实例，并添加了一些元素。然后，我们通过调用<code>createIterator()</code>方法获取迭代器，并使用它来遍历聚合对象中的所有元素。这样，客户端代码无需关心聚合对象的内部结构，就可以顺序访问其元素。</li>
</ul>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>DesignPattern - 适配器模式</title>
      <link>https://blog.magictable.ha.cn/software/DesignPattern-%E9%80%82%E9%85%8D%E5%99%A8%E6%A8%A1%E5%BC%8F.html</link>
      <guid>https://blog.magictable.ha.cn/software/DesignPattern-%E9%80%82%E9%85%8D%E5%99%A8%E6%A8%A1%E5%BC%8F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">DesignPattern - 适配器模式</source>
      <description>文章摘要： 适配器模式使用总结。 简介 简要说明 适配器模式（Adapter Pattern）是一种结构型设计模式。 当系统的客户端需要使用一些现有的类，但这些类的接口（即它们的方法和属性）不符合客户端的要求时，可以通过适配器来转换这些类的接口，使其与客户端期望的接口相匹配。 主要功能 允许接口不兼容的类一起工作。 通过使用适配器，客户端可以统一调用接...</description>
      <category>软件程序/设计模式</category>
      <pubDate>Mon, 18 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 适配器模式使用总结。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>适配器模式（Adapter Pattern）是一种结构型设计模式。</li>
<li>当系统的客户端需要使用一些现有的类，但这些类的接口（即它们的方法和属性）不符合客户端的要求时，可以通过适配器来转换这些类的接口，使其与客户端期望的接口相匹配。</li>
</ul>
<p>主要功能</p>
<ul>
<li>允许接口不兼容的类一起工作。</li>
<li>通过使用适配器，客户端可以统一调用接口，而不必关心具体的实现类。</li>
<li>提高了类的复用性，减少了代码的重复编写。</li>
</ul>
<p>注意事项</p>
<ul>
<li>适配器模式可能会增加系统的复杂性，因为它引入了额外的类和层次结构。</li>
<li>应该在确实需要时才使用适配器模式，避免过度设计。</li>
<li>适配器模式可能会使得代码难以跟踪，特别是当适配器嵌套使用时。</li>
</ul>
<p>适用场景</p>
<ul>
<li>当你希望使用一个已经存在的类，但其接口不符合你的需求时。</li>
<li>当你想要创建一个可重用的类，该类可以与其他不相关的类或不可预见的类（即那些接口可能不一定兼容的类）协同工作。</li>
<li>当你需要在运行时选择不同的实现类时。</li>
</ul>
<h2>Java 8</h2>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 已存在的类，其接口不符合客户端的需求</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">LegacyRectangle</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">draw</span><span class="token punctuation">(</span><span class="token keyword">int</span> x1<span class="token punctuation">,</span> <span class="token keyword">int</span> y1<span class="token punctuation">,</span> <span class="token keyword">int</span> x2<span class="token punctuation">,</span> <span class="token keyword">int</span> y2<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Drawing rectangle from ("</span> <span class="token operator">+</span> x1 <span class="token operator">+</span> <span class="token string">", "</span> <span class="token operator">+</span> y1 <span class="token operator">+</span> <span class="token string">") to ("</span> <span class="token operator">+</span> x2 <span class="token operator">+</span> <span class="token string">", "</span> <span class="token operator">+</span> y2 <span class="token operator">+</span> <span class="token string">")"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 客户端期望的接口</span></span>
<span class="line"><span class="token keyword">interface</span> <span class="token class-name">Shape</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">void</span> <span class="token function">draw</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 适配器类，将LegacyRectangle适配为Shape接口</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">RectangleAdapter</span> <span class="token keyword">implements</span> <span class="token class-name">Shape</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">LegacyRectangle</span> adaptee<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">RectangleAdapter</span><span class="token punctuation">(</span><span class="token class-name">LegacyRectangle</span> adaptee<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>adaptee <span class="token operator">=</span> adaptee<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">draw</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 假设我们希望画一个从(0,0)到(10,10)的矩形</span></span>
<span class="line">        adaptee<span class="token punctuation">.</span><span class="token function">draw</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 客户端代码</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">AdapterPatternDemo</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">LegacyRectangle</span> legacyRectangle <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">LegacyRectangle</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token class-name">Shape</span> rectangleAdapter <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">RectangleAdapter</span><span class="token punctuation">(</span>legacyRectangle<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 客户端代码现在可以使用Shape接口来绘制矩形</span></span>
<span class="line">        rectangleAdapter<span class="token punctuation">.</span><span class="token function">draw</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>在这个例子中，<code>LegacyRectangle</code> 是一个已有的类，它的 <code>draw</code> 方法接受四个参数。客户端期望使用一个 <code>Shape</code> 接口，该接口只有一个 <code>draw</code> 方法。</li>
<li><code>RectangleAdapter</code> 类实现了 <code>Shape</code> 接口，并将 <code>LegacyRectangle</code> 的 <code>draw</code> 方法适配为客户端期望的形式。</li>
<li>这样，客户端就可以通过 <code>Shape</code> 接口来操作 <code>LegacyRectangle</code> 类，而无需直接与其不兼容的接口交互。</li>
</ul>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>DesignPattern - 门面模式</title>
      <link>https://blog.magictable.ha.cn/software/DesignPattern-%E9%97%A8%E9%9D%A2%E6%A8%A1%E5%BC%8F.html</link>
      <guid>https://blog.magictable.ha.cn/software/DesignPattern-%E9%97%A8%E9%9D%A2%E6%A8%A1%E5%BC%8F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">DesignPattern - 门面模式</source>
      <description>文章摘要： 门面模式使用总结。 简介 简要说明 门面模式（Facade Pattern）是一种结构型设计模式。 提供了一个统一的高层接口，用来访问子系统中的一群接口，使得子系统更容易使用。 主要功能 为子系统中的一组接口提供一个统一的接口。 定义了一个高层接口，使得子系统更加易于使用。 客户端与子系统之间的解耦，使得子系统内部的改变不会影响到客户端。 ...</description>
      <category>软件程序/设计模式</category>
      <pubDate>Mon, 18 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 门面模式使用总结。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>门面模式（Facade Pattern）是一种结构型设计模式。</li>
<li>提供了一个统一的高层接口，用来访问子系统中的一群接口，使得子系统更容易使用。</li>
</ul>
<p>主要功能</p>
<ul>
<li>为子系统中的一组接口提供一个统一的接口。</li>
<li>定义了一个高层接口，使得子系统更加易于使用。</li>
<li>客户端与子系统之间的解耦，使得子系统内部的改变不会影响到客户端。</li>
</ul>
<p>注意事项</p>
<ul>
<li>门面模式可能会引入单点失败问题，因为所有请求都通过门面进行。</li>
<li>如果子系统接口很多，门面类可能会变得庞大且难以维护。</li>
<li>门面模式可能会隐藏子系统的复杂性，导致在需要直接使用子系统时产生困难。</li>
</ul>
<p>适用场景</p>
<ul>
<li>当你要为一个复杂子系统提供一个简单接口时。</li>
<li>客户端与多个子系统之间存在很大的依赖性。</li>
<li>当你需要将一个子系统划分成几个相互协作的类时。</li>
</ul>
<h2>Java 8</h2>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 子系统A</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">SubsystemA</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">operationA</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Subsystem A: Operation A"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 子系统B</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">SubsystemB</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">operationB</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Subsystem B: Operation B"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 子系统C</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">SubsystemC</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">operationC</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Subsystem C: Operation C"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 门面类，提供了一个简化的接口</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">Facade</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 引用子系统对象</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">SubsystemA</span> subsystemA <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">SubsystemA</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">SubsystemB</span> subsystemB <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">SubsystemB</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">SubsystemC</span> subsystemC <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">SubsystemC</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 提供一个简单的操作方法，隐藏子系统复杂性</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">operation</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        subsystemA<span class="token punctuation">.</span><span class="token function">operationA</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        subsystemB<span class="token punctuation">.</span><span class="token function">operationB</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        subsystemC<span class="token punctuation">.</span><span class="token function">operationC</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 客户端代码，使用门面模式</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">FacadePatternDemo</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 创建门面对象</span></span>
<span class="line">        <span class="token class-name">Facade</span> facade <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Facade</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 客户端只需要与门面交互，而不需要直接与子系统交互</span></span>
<span class="line">        facade<span class="token punctuation">.</span><span class="token function">operation</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>在这个例子中，我们定义了三个子系统<code>SubsystemA</code>、<code>SubsystemB</code>和<code>SubsystemC</code>，每个子系统都有一个操作方法。门面类<code>Facade</code>提供了这些子系统的简化接口，它内部包含了子系统对象的引用，并定义了一个<code>operation</code>方法来隐藏子系统的复杂性。</li>
<li>客户端代码通过门面类<code>Facade</code>的<code>operation</code>方法与子系统交互，而不需要直接与每个子系统进行交互。这样，客户端代码就与子系统的具体实现解耦了，使得代码更加简洁，也更容易维护。</li>
</ul>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Language - SQL - 函数</title>
      <link>https://blog.magictable.ha.cn/software/Language-SQL-%E5%87%BD%E6%95%B0.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-SQL-%E5%87%BD%E6%95%B0.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - SQL - 函数</source>
      <description>文章摘要： 摘要内容。 注释 将一列数据作为一个整体，进行纵向计算，计算给定的字段。 字段的值为Null的不参与计算。 聚合函数 group_concat() 数学函数 字符串函数 日期函数 控制流函数 窗口函数</description>
      <category>软件程序/程序语言</category>
      <pubDate>Mon, 18 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>将一列数据作为一个整体，进行纵向计算，计算给定的字段。</li>
<li>字段的值为<code>Null</code>的不参与计算。</li>
</ul>
</div>
<h2>聚合函数</h2>
<table>
<thead>
<tr>
<th style="text-align:left">函数</th>
<th style="text-align:left">功能</th>
<th style="text-align:left">例子</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">count(&lt;参数&gt;)</td>
<td style="text-align:left">统计列不为<code>null</code>的记录行数</td>
<td style="text-align:left">count("id")，参数可以是<code>字段名</code>、<code>常量</code>、<code>*</code></td>
</tr>
<tr>
<td style="text-align:left">max(&lt;字段名&gt;)</td>
<td style="text-align:left">最大值</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">min(&lt;字段名&gt;)</td>
<td style="text-align:left">最小值</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">sum(&lt;字段名&gt;)</td>
<td style="text-align:left">求和</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">avg(&lt;字段名&gt;)</td>
<td style="text-align:left">平均值</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">now(&lt;字段名&gt;)</td>
<td style="text-align:left">获取当前时间，类型：<code>datetime</code></td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
<h3><code>group_concat()</code></h3>
<ul>
<li></li>
</ul>
<h2>数学函数</h2>
<h2>字符串函数</h2>
<h2>日期函数</h2>
<h2>控制流函数</h2>
<h2>窗口函数</h2>
]]></content:encoded>
    </item>
    <item>
      <title>Language - SQL - 数据类型</title>
      <link>https://blog.magictable.ha.cn/software/Language-SQL-%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-SQL-%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - SQL - 数据类型</source>
      <description>文章摘要： 摘要内容。 数值类型 警告 数据类型是有符号的范围，需要手动添加UNSIGNED限制。 字符串类型 时间和日期类型 其他数据类型</description>
      <category>软件程序/程序语言</category>
      <pubDate>Mon, 18 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>数值类型</h2>
<div class="hint-container warning">
<p class="hint-container-title">警告</p>
<ul>
<li>数据类型是有符号的范围，需要手动添加<code>UNSIGNED</code>限制。</li>
</ul>
</div>
<table>
<thead>
<tr>
<th style="text-align:center">类型</th>
<th style="text-align:center">位数</th>
<th style="text-align:left">有符号范围</th>
<th style="text-align:left">无符号范围</th>
<th style="text-align:left">说明</th>
<th style="text-align:left">例子</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">tinyint</td>
<td style="text-align:center">8位（1字节）</td>
<td style="text-align:left">(-128 ~ 127)</td>
<td style="text-align:left">(0 ~ 255)</td>
<td style="text-align:left">小整数</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">smallint</td>
<td style="text-align:center">16位（2字节）</td>
<td style="text-align:left">(-32768 ~ 32767)</td>
<td style="text-align:left">(0 ~ 65535)</td>
<td style="text-align:left">大整数</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">mediumint</td>
<td style="text-align:center">24位（3字节）</td>
<td style="text-align:left">(-8388608 ~ 8388607)</td>
<td style="text-align:left">(0 ~ 16777215)</td>
<td style="text-align:left">大整数</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">int</td>
<td style="text-align:center">32位（4字节）</td>
<td style="text-align:left">(-2147483648 ~ 2147483647)</td>
<td style="text-align:left">(0 ~ 4294967295)</td>
<td style="text-align:left">大整数</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">bigint</td>
<td style="text-align:center">64位（8字节）</td>
<td style="text-align:left">(-2^63 ~ 2^63-1)</td>
<td style="text-align:left">(0 ~ 2^64-1)</td>
<td style="text-align:left">极大整数</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">float</td>
<td style="text-align:center">32位（4字节）</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">单精度浮点数</td>
<td style="text-align:left">float(5.2)：5表示整数位，2代表小数位</td>
</tr>
<tr>
<td style="text-align:center">double</td>
<td style="text-align:center">64位（8字节）</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">双精度浮点数</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">decimal</td>
<td style="text-align:center"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">小数值（精度更高）</td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
<h2>字符串类型</h2>
<table>
<thead>
<tr>
<th style="text-align:center">类型</th>
<th style="text-align:left">大小范围(字节)</th>
<th style="text-align:left">说明</th>
<th style="text-align:left">例子</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">char</td>
<td style="text-align:left">0~255</td>
<td style="text-align:left">定长字符串</td>
<td style="text-align:left">char(10)，字符个数最大不能大于10</td>
</tr>
<tr>
<td style="text-align:center">varchar</td>
<td style="text-align:left">0~65535</td>
<td style="text-align:left">变长字符串</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">tinyblob</td>
<td style="text-align:left">0~255</td>
<td style="text-align:left">不超过255个字符的二进制数据</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">tinytext</td>
<td style="text-align:left">0~255</td>
<td style="text-align:left">短文本字符串</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">blob</td>
<td style="text-align:left">0~65535</td>
<td style="text-align:left">二进制形式的长文本数据</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">text</td>
<td style="text-align:left">0~65535</td>
<td style="text-align:left">长文本数据</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">mediumblob</td>
<td style="text-align:left">0~16 777 215</td>
<td style="text-align:left">二进制形式的中等长度文本数据</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">mediumtext</td>
<td style="text-align:left">0~16 777 215</td>
<td style="text-align:left">中等长度文本数据</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">longblob</td>
<td style="text-align:left">0~4 294 967 295</td>
<td style="text-align:left">二进制形式的极大文本数据</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">longtext</td>
<td style="text-align:left">0~4 294 967 295</td>
<td style="text-align:left">极大文本数据</td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
<h2>时间和日期类型</h2>
<table>
<thead>
<tr>
<th style="text-align:center">类型</th>
<th style="text-align:center">位数</th>
<th style="text-align:left">范围</th>
<th style="text-align:left">格式</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">date</td>
<td style="text-align:center">24位（3字节）</td>
<td style="text-align:left">1000-01-01 至 9999-12-31</td>
<td style="text-align:left">YYYY-MM-DD</td>
<td style="text-align:left">日期值</td>
</tr>
<tr>
<td style="text-align:center">time</td>
<td style="text-align:center">24位（3字节）</td>
<td style="text-align:left">-838:59:59 至 838:59:59</td>
<td style="text-align:left">HH:MM:SS</td>
<td style="text-align:left">日期值或持续时间</td>
</tr>
<tr>
<td style="text-align:center">year</td>
<td style="text-align:center">8位（1字节）</td>
<td style="text-align:left">1901 至 2155</td>
<td style="text-align:left">YYYY</td>
<td style="text-align:left">年份值</td>
</tr>
<tr>
<td style="text-align:center">datetime</td>
<td style="text-align:center">64位（8字节）</td>
<td style="text-align:left">1000-01-01 00:00:00 至 9999-12-31 23:59:59</td>
<td style="text-align:left">YYYY-MM-DD HH:MM:SS</td>
<td style="text-align:left">混合日期和日期值</td>
</tr>
<tr>
<td style="text-align:center">timestamp</td>
<td style="text-align:center">32位（4字节）</td>
<td style="text-align:left">1970-01-01 00:00:01 至 2038-01-19 03:14:07</td>
<td style="text-align:left">YYY-MM-DD HH:MM:SS</td>
<td style="text-align:left">混合日期和时间值，时间戳</td>
</tr>
</tbody>
</table>
<h2>其他数据类型</h2>
<table>
<thead>
<tr>
<th style="text-align:center">类型</th>
<th style="text-align:center">位数</th>
<th style="text-align:left">范围</th>
<th style="text-align:left">格式</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">null</td>
<td style="text-align:center"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">空</td>
</tr>
<tr>
<td style="text-align:center">boolean</td>
<td style="text-align:center"></td>
<td style="text-align:left">true/false</td>
<td style="text-align:left"></td>
<td style="text-align:left">布尔值</td>
</tr>
<tr>
<td style="text-align:center">enum</td>
<td style="text-align:center"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">枚举</td>
</tr>
<tr>
<td style="text-align:center">set</td>
<td style="text-align:center"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">集合</td>
</tr>
</tbody>
</table>
]]></content:encoded>
    </item>
    <item>
      <title>Language - SQL - 权限</title>
      <link>https://blog.magictable.ha.cn/software/Language-SQL-%E6%9D%83%E9%99%90.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-SQL-%E6%9D%83%E9%99%90.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - SQL - 权限</source>
      <description>文章摘要： 摘要内容。 案例</description>
      <category>软件程序/程序语言</category>
      <pubDate>Mon, 18 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<table>
<thead>
<tr>
<th style="text-align:left">权限名</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>ALL</code>,<code>ALL PRIVLEGES</code></td>
<td style="text-align:left">所有权限</td>
</tr>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
]]></content:encoded>
    </item>
    <item>
      <title>Language - SQL - 约束</title>
      <link>https://blog.magictable.ha.cn/software/Language-SQL-%E7%BA%A6%E6%9D%9F.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-SQL-%E7%BA%A6%E6%9D%9F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - SQL - 约束</source>
      <description>文章摘要： 摘要内容。 注释 约束作用于表中字段上的规则。 用于限制存储在表中的数据。 保证数据库中数据的正确性、有效性和完整性。 注释 技巧 外键约束可以约束同一个表中的另一个字段。</description>
      <category>软件程序/程序语言</category>
      <pubDate>Mon, 18 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>约束作用于表中字段上的规则。</li>
<li>用于限制存储在表中的数据。</li>
<li>保证数据库中数据的正确性、有效性和完整性。</li>
</ul>
</div>
<table>
<thead>
<tr>
<th style="text-align:left">关键字</th>
<th style="text-align:left">约束</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">PRIMARY KEY (&lt;字段名&gt;)</td>
<td style="text-align:left">主键约束</td>
<td style="text-align:left">主键是一行数据的唯一标识符、非空且唯一</td>
</tr>
<tr>
<td style="text-align:left">AUTO_INCREMENT</td>
<td style="text-align:left">自动增长约束</td>
<td style="text-align:left">能够按数字字段排序添加值</td>
</tr>
<tr>
<td style="text-align:left">NOT NULL</td>
<td style="text-align:left">非空约束</td>
<td style="text-align:left">限制该字段的数据不能为<code>null</code></td>
</tr>
<tr>
<td style="text-align:left">UNIQUE</td>
<td style="text-align:left">唯一性约束</td>
<td style="text-align:left">保证该字段的所有数据都是唯一、不重复的</td>
</tr>
<tr>
<td style="text-align:left">DEFAULT &lt;默认值&gt;</td>
<td style="text-align:left">默认约束</td>
<td style="text-align:left">保存数据时，如果为指定该字段的值，则采用默认值</td>
</tr>
<tr>
<td style="text-align:left">ZEROFILL</td>
<td style="text-align:left">零填充约束</td>
<td style="text-align:left">整数字段默认填充为0</td>
</tr>
<tr>
<td style="text-align:left">CHECK (&lt;条件&gt;)</td>
<td style="text-align:left">检查约束</td>
<td style="text-align:left">保证字段值满足某一个条件</td>
</tr>
<tr>
<td style="text-align:left">[CONSTRAINT &lt;约束注释/别名&gt;] FOREIGN KEY &lt;字段名&gt; REFERENCES &lt;表名&gt;(&lt;字段名&gt;)</td>
<td style="text-align:left">外键约束</td>
<td style="text-align:left">用来让两张表的数据之间建立连接，保证数据的一致性和完整性</td>
</tr>
</tbody>
</table>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>技巧</p>
<ul>
<li>外键约束可以约束同一个表中的另一个字段。</li>
</ul>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Language - SQL - 运算符</title>
      <link>https://blog.magictable.ha.cn/software/Language-SQL-%E8%BF%90%E7%AE%97%E7%AC%A6.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-SQL-%E8%BF%90%E7%AE%97%E7%AC%A6.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - SQL - 运算符</source>
      <description>文章摘要： 摘要内容。 算术运算符 比较运算符 判断运算符 注释 SQL的通配符 _：匹配单个字符 %：匹配任意个字符 [a-z]：匹配在方括号内的任意一个字符。 [^a-z]：匹配不在方括号内的任意一个字符。 逻辑运算符 位运算符 注释 位运算符是在二进制数上进行计算的运算符。 位运算符会先将操作数变成二进制数，进行位运算，再将计算结果从二进制转换位...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Mon, 18 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>算术运算符</h2>
<table>
<thead>
<tr>
<th style="text-align:center">运算符</th>
<th style="text-align:left">名称</th>
<th style="text-align:left">例子</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">+</td>
<td style="text-align:left">加（求和）</td>
<td style="text-align:left">x + y</td>
</tr>
<tr>
<td style="text-align:center">-</td>
<td style="text-align:left">减（求差）</td>
<td style="text-align:left">x - y</td>
</tr>
<tr>
<td style="text-align:center">*</td>
<td style="text-align:left">乘（求积）</td>
<td style="text-align:left">x * y</td>
</tr>
<tr>
<td style="text-align:center">/</td>
<td style="text-align:left">除(取整)</td>
<td style="text-align:left">x / y</td>
</tr>
<tr>
<td style="text-align:center">%</td>
<td style="text-align:left">模(取余)</td>
<td style="text-align:left">x % y</td>
</tr>
</tbody>
</table>
<h2>比较运算符</h2>
<table>
<thead>
<tr>
<th style="text-align:left">运算符</th>
<th style="text-align:left">说明</th>
<th style="text-align:left">例子</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">=</td>
<td style="text-align:left">等于</td>
<td style="text-align:left">A = 1</td>
</tr>
<tr>
<td style="text-align:left">&lt;&gt; 或 !=</td>
<td style="text-align:left">不等</td>
<td style="text-align:left">A != 1</td>
</tr>
<tr>
<td style="text-align:left">&gt;</td>
<td style="text-align:left">大于</td>
<td style="text-align:left">A &gt; 1</td>
</tr>
<tr>
<td style="text-align:left">&lt;</td>
<td style="text-align:left">小于</td>
<td style="text-align:left">A &lt; 1</td>
</tr>
<tr>
<td style="text-align:left">&gt;=</td>
<td style="text-align:left">大于等于</td>
<td style="text-align:left">A &gt;= 1</td>
</tr>
<tr>
<td style="text-align:left">&lt;=</td>
<td style="text-align:left">小于等于</td>
<td style="text-align:left">A &lt;= 1</td>
</tr>
</tbody>
</table>
<h2>判断运算符</h2>
<table>
<thead>
<tr>
<th style="text-align:left">运算符</th>
<th style="text-align:left">说明</th>
<th style="text-align:left">例子</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">IS NULL EXISTS</td>
<td style="text-align:left">结果是否为<code>NULL</code></td>
<td style="text-align:left">如果不存在</td>
</tr>
<tr>
<td style="text-align:left">IS EXISTS</td>
<td style="text-align:left">结果是否不为<code>NULL</code></td>
<td style="text-align:left">如果存在</td>
</tr>
<tr>
<td style="text-align:left">LEAST (&lt;值列表&gt;,...)</td>
<td style="text-align:left">当有两个或多个参数时，返回最小值</td>
<td style="text-align:left">LEAST(1, 10)</td>
</tr>
<tr>
<td style="text-align:left">GREATEST (&lt;值列表&gt;,...)</td>
<td style="text-align:left">当有两个或多个参数时，返回最大值</td>
<td style="text-align:left">GREATEST(1, 10)</td>
</tr>
<tr>
<td style="text-align:left">BETWEEN &lt;最小值&gt; AND &lt;最大值&gt;</td>
<td style="text-align:left">某个范围 <br> - 包含最小，不包含最大</td>
<td style="text-align:left">BETWEEN 1 AND 10</td>
</tr>
<tr>
<td style="text-align:left">IN (&lt;值列表&gt;,...)</td>
<td style="text-align:left">判断是在<code>IN</code>列表中的任意一个值</td>
<td style="text-align:left">IN(1, 2, 3)</td>
</tr>
<tr>
<td style="text-align:left">NOT IN (&lt;值列表&gt;,...)</td>
<td style="text-align:left">判断不是在列表中的任意一个值</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">LIKE &lt;模糊匹配表达式&gt;</td>
<td style="text-align:left">模糊匹配（通配符）</td>
<td style="text-align:left">LIKE "%智能体%"</td>
</tr>
<tr>
<td style="text-align:left">REGEXP</td>
<td style="text-align:left"><a href="/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F.html" target="_blank">正则表达式匹配</a></td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>SQL的通配符</p>
<ul>
<li><code>_</code>：匹配单个字符</li>
<li><code>%</code>：匹配任意个字符</li>
<li><code>[a-z]</code>：匹配在方括号内的任意一个字符。</li>
<li><code>[^a-z]</code>：匹配不在方括号内的任意一个字符。</li>
</ul>
</div>
<h2>逻辑运算符</h2>
<table>
<thead>
<tr>
<th style="text-align:left">运算符</th>
<th style="text-align:left">说明</th>
<th style="text-align:left">例子</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">AND 或 &amp;&amp;</td>
<td style="text-align:left">逻辑与（多个条件同时成立）</td>
<td style="text-align:left">0&amp;&amp;0=0, 1&amp;&amp;1=1, 0&amp;&amp;1=0</td>
</tr>
<tr>
<td style="text-align:left">OR 或 ||</td>
<td style="text-align:left">逻辑或（多个条件任意一个成立）</td>
<td style="text-align:left">0||0=0, 1||1=1, 0||1=1</td>
</tr>
<tr>
<td style="text-align:left">NOT 或 !</td>
<td style="text-align:left">逻辑非（取反）</td>
<td style="text-align:left">!0=1, !1=0</td>
</tr>
<tr>
<td style="text-align:left">XOR</td>
<td style="text-align:left">逻辑异或（两个结果相同时为真）</td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
<h2>位运算符</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>位运算符是在二进制数上进行计算的运算符。</li>
<li>位运算符会先将操作数变成二进制数，进行位运算，再将计算结果从二进制转换位十进制数。</li>
</ul>
</div>
<table>
<thead>
<tr>
<th style="text-align:left">运算符</th>
<th style="text-align:left">说明</th>
<th style="text-align:left">例子</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">&amp;</td>
<td style="text-align:left">按位与</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">|</td>
<td style="text-align:left">按位或</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">^</td>
<td style="text-align:left">按位异或</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">&lt;&lt;</td>
<td style="text-align:left">按位左移</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">&gt;&gt;</td>
<td style="text-align:left">按位右移</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">~</td>
<td style="text-align:left">按位取反</td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
]]></content:encoded>
    </item>
    <item>
      <title>Library - Maven - Log4j 2 - 占位符</title>
      <link>https://blog.magictable.ha.cn/software/Library-Maven-Log4j2-%E5%8D%A0%E4%BD%8D%E7%AC%A6.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Maven-Log4j2-%E5%8D%A0%E4%BD%8D%E7%AC%A6.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Maven - Log4j 2 - 占位符</source>
      <description>文章摘要： Log4j 2 支持的占位符。 输出格式/样式/占位符 HTML样式。 自由指定样式。 包含日志级别与信息的样式。 包含日志时间、线程、类别等信息的样式。 %p：输出日志优先级，即DEBUG（调试）、INFO（信息）、WARN（警告）、ERROR（错误）、FATAL（致命） %d：输出日志时间点的日期或时间，默认格式为%d{yyy MMM ...</description>
      <category>软件程序/代码类库</category>
      <pubDate>Mon, 18 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Log4j 2 支持的占位符。</p>
<!-- more -->
<p><strong>输出格式/样式/占位符</strong></p>
<blockquote>
<ul>
<li>HTML样式。</li>
<li>自由指定样式。</li>
<li>包含日志级别与信息的样式。</li>
<li>包含日志时间、线程、类别等信息的样式。</li>
</ul>
</blockquote>
<blockquote>
<ul>
<li><code>%p</code>：输出日志优先级，即DEBUG（调试）、INFO（信息）、WARN（警告）、ERROR（错误）、FATAL（致命）</li>
<li><code>%d</code>：输出日志时间点的日期或时间，默认格式为<code>%d{yyy MMM dd HH:mm:ss,SSS}</code>。</li>
<li><code>%r</code>：输出自应用程序到输出该log信息耗费的毫秒数。</li>
<li><code>%c</code>：输出日志信息所属的类目，通常就是所在类的全类名。</li>
<li><code>%t</code>：输出产生该日志事件的线程名。</li>
<li><code>%l</code>：</li>
<li><code>%x</code>：</li>
<li><code>%%</code>：输出一个“%”字符。</li>
<li><code>%F</code>：输出日志消息产生时所在的文件名称。</li>
<li><code>%L</code>：输出代码中的行号。</li>
<li><code>%m</code>：输出代码中指定的消息，产生的日志具体信息。</li>
<li><code>%n</code>：输出一个回车换行符，（windows平台是<code>\r\n</code>，unix平台是<code>\n</code>）。</li>
</ul>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Library - Maven - Log4j 2 - 配置文件 - XML文件</title>
      <link>https://blog.magictable.ha.cn/software/Library-Maven-Log4j2-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6-XML%E6%96%87%E4%BB%B6.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Maven-Log4j2-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6-XML%E6%96%87%E4%BB%B6.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Maven - Log4j 2 - 配置文件 - XML文件</source>
      <description>文章摘要： Log4j 2 是XML配置文件总结。 Configuration status：用于指定log4j本身的打印日志的级别 monitorinterval：自动重载配置，检查间隔时间，单位是s，最小是5s。 Appenders Console：定义输出到控制台 File：定义输出到指定位置的文件 RollingFile：定义操作指定大小自动删...</description>
      <category>软件程序/代码类库</category>
      <pubDate>Mon, 18 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Log4j 2 是XML配置文件总结。</p>
<!-- more -->
<p>Configuration</p>
<ul>
<li>status：用于指定log4j本身的打印日志的级别</li>
<li>monitorinterval：自动重载配置，检查间隔时间，单位是s，最小是5s。</li>
<li>Appenders</li>
<li>
<ul>
<li>Console：定义输出到控制台</li>
</ul>
</li>
<li>
<ul>
<li>File：定义输出到指定位置的文件</li>
</ul>
</li>
<li>
<ul>
<li>RollingFile：定义操作指定大小自动删除就的创建新的</li>
</ul>
</li>
<li>Loggers</li>
<li>
<ul>
<li>Root：指定项目的根日志，若没有Logger时则默认使用该日志输出</li>
</ul>
</li>
<li>
<ul>
<li>Logger：单独指定日志的形式，比如指定包下的class指定不同的日志级别</li>
</ul>
</li>
</ul>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token prolog">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span>  </span>
<span class="line">  </span>
<span class="line"><span class="token comment">&lt;!-- 根节点 --&gt;</span>  </span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>configuration</span> <span class="token attr-name">status</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>error<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- 设置日志级别 --&gt;</span>  </span>
<span class="line">    <span class="token comment">&lt;!-- 先定义所有的appender附加器 --&gt;</span>  </span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>appenders</span><span class="token punctuation">&gt;</span></span>  </span>
<span class="line">        <span class="token comment">&lt;!-- 输出控制台 --&gt;</span>  </span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>Console</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>console<span class="token punctuation">"</span></span> <span class="token attr-name">target</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>SYSTEM_OUT<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>  </span>
<span class="line">            <span class="token comment">&lt;!-- 控制台只输出LEVEL及以上级别的信息（onMatch），其他的直接拒绝（onMismatch） --&gt;</span>  </span>
<span class="line">            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>ThresholdFilter</span> <span class="token attr-name">level</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>trace<span class="token punctuation">"</span></span> <span class="token attr-name">onMatch</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>ACCEPT<span class="token punctuation">"</span></span> <span class="token attr-name">onMismatch</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>DENY<span class="token punctuation">"</span></span><span class="token punctuation">/&gt;</span></span>  </span>
<span class="line">            <span class="token comment">&lt;!-- 输出日志的格式 --&gt;</span>  </span>
<span class="line">            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>PatternLayout</span> <span class="token attr-name">pattern</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>%{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n<span class="token punctuation">"</span></span><span class="token punctuation">/&gt;</span></span> <span class="token comment">&lt;!-- %msg%xEx%n" --&gt;</span>  </span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>Console</span><span class="token punctuation">&gt;</span></span>  </span>
<span class="line">  </span>
<span class="line">        <span class="token comment">&lt;!-- 输出保存文件 --&gt;</span>  </span>
<span class="line">        <span class="token comment">&lt;!-- 文件会打印出所有信息，这个log每次运行程序都会自动清空，由append属性决定 --&gt;</span>  </span>
<span class="line">        <span class="token comment">&lt;!-- append：`false`表示消息覆盖指定的文件内容，（默认）`true`表示消息增加到指定文件中 --&gt;</span>  </span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>File</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>log<span class="token punctuation">"</span></span> <span class="token attr-name">fileName</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>/home/magictable/softwareagent/agent/log/log4j2.log<span class="token punctuation">"</span></span> <span class="token attr-name">append</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>false<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>  </span>
<span class="line">            <span class="token comment">&lt;!-- 输出日志的格式 --&gt;</span>  </span>
<span class="line">            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>PatternLayout</span> <span class="token attr-name">pattern</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>%{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n<span class="token punctuation">"</span></span><span class="token punctuation">/&gt;</span></span>  </span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>File</span><span class="token punctuation">&gt;</span></span>  </span>
<span class="line">        <span class="token comment">&lt;!-- 添加过滤器ThresholdFilter，可以有选择的输出某个级别以上的类别 onMatch="ACCEPT" onMismatch="DENY" 意思是匹配就接受，否则直接拒绝 --&gt;</span>  </span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>File</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>ERROR<span class="token punctuation">"</span></span> <span class="token attr-name">fileName</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>/home/magictable/softwareagent/agent/log/error.log<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>  </span>
<span class="line">            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>ThresholdFilter</span> <span class="token attr-name">level</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>error<span class="token punctuation">"</span></span> <span class="token attr-name">onMatch</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>ACCEPT<span class="token punctuation">"</span></span> <span class="token attr-name">onMismatch</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>DENY<span class="token punctuation">"</span></span><span class="token punctuation">/&gt;</span></span>  </span>
<span class="line">            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>PatternLayout</span> <span class="token attr-name">pattern</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>%{HH:mm:ss.SSS} %-5level %class{36} %L %M - %m%n<span class="token punctuation">"</span></span><span class="token punctuation">/&gt;</span></span>  </span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>File</span><span class="token punctuation">&gt;</span></span>  </span>
<span class="line">        <span class="token comment">&lt;!-- 打印所有的信息，每次大小超过size，则日志会自动存入，按年月日建立的文件夹下面并进行压缩 --&gt;</span>  </span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>RollingFile</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>RollingFile<span class="token punctuation">"</span></span> <span class="token attr-name">fileName</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>/home/magictable/softwareagent/agent/log/web.log<span class="token punctuation">"</span></span>  </span>
<span class="line">                     <span class="token attr-name">filePattern</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>log/$${date:yyyy-MM}/web-%d{MM-dd-yyyy}-$i.log.gz<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>  </span>
<span class="line">            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>PatternLayout</span> <span class="token attr-name">pattern</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n<span class="token punctuation">"</span></span><span class="token punctuation">/&gt;</span></span>  </span>
<span class="line">            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>SizeBasedTriggeringPolicy</span> <span class="token attr-name">size</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>2MB<span class="token punctuation">"</span></span><span class="token punctuation">/&gt;</span></span>  </span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>RollingFile</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>appenders</span><span class="token punctuation">&gt;</span></span>  </span>
<span class="line">    <span class="token comment">&lt;!-- 定义logger，只有定义了logger并引入appender，才会生效 --&gt;</span>  </span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>loggers</span><span class="token punctuation">&gt;</span></span>  </span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>root</span> <span class="token attr-name">level</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>trace<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>  </span>
<span class="line">            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>appender-ref</span> <span class="token attr-name">ref</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>Console<span class="token punctuation">"</span></span><span class="token punctuation">/&gt;</span></span>  </span>
<span class="line">            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>appender-ref</span> <span class="token attr-name">ref</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>log<span class="token punctuation">"</span></span><span class="token punctuation">/&gt;</span></span>  </span>
<span class="line">            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>appender-ref</span> <span class="token attr-name">ref</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>ERROR<span class="token punctuation">"</span></span><span class="token punctuation">/&gt;</span></span>  </span>
<span class="line">            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>appender-ref</span> <span class="token attr-name">ref</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>RollingFile<span class="token punctuation">"</span></span><span class="token punctuation">/&gt;</span></span>  </span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>root</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>loggers</span><span class="token punctuation">&gt;</span></span>  </span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>configuration</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>内容</h2>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Maven - “pom.xml”文件</title>
      <link>https://blog.magictable.ha.cn/software/Package-Maven-%E2%80%9Cpom.xml%E2%80%9D%E6%96%87%E4%BB%B6.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Maven-%E2%80%9Cpom.xml%E2%80%9D%E6%96%87%E4%BB%B6.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Maven - “pom.xml”文件</source>
      <description>文章摘要： pom.xml 文件是 Maven 项目的核心配置文件，全称为 Project Object Model (项目对象模型)。 简介 pom.xml文件是 Maven 项目的核心配置文件，全称为 Project Object Model (项目对象模型)。 它定义了项目的构建、依赖、插件和其他项目信息的配置。 pom.xml文件位于 Mave...</description>
      <category>软件程序/软件包</category>
      <pubDate>Thu, 14 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> pom.xml 文件是 Maven 项目的核心配置文件，全称为 Project Object Model (项目对象模型)。</p>
<!-- more -->
<h2>简介</h2>
<ul>
<li><code>pom.xml</code>文件是 Maven 项目的核心配置文件，全称为 Project Object Model (项目对象模型)。</li>
<li>它定义了项目的构建、依赖、插件和其他项目信息的配置。</li>
<li><code>pom.xml</code>文件位于 Maven 项目的根目录下，Maven 构建工具通过解析这个文件来执行项目的构建和依赖管理。</li>
</ul>
<h2>maven命名空间</h2>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token prolog">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>project</span> <span class="token attr-name">xmlns</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>http://maven.apache.org/POM/4.0.0<span class="token punctuation">"</span></span></span>
<span class="line">    <span class="token attr-name"><span class="token namespace">xmlns:</span>xsi</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>http://www.w3.org/2001/XMLSchema-instance<span class="token punctuation">"</span></span></span>
<span class="line">        <span class="token attr-name"><span class="token namespace">xsi:</span>schemaLocation</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>modelVersion</span><span class="token punctuation">&gt;</span></span>4.0.0<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>modelVersion</span><span class="token punctuation">&gt;</span></span>     <span class="token comment">&lt;!-- POM模型版本，通常是4.0.0 --&gt;</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">&lt;!-- 继承父级项目 --&gt;</span></span>
<span class="line">    <span class="token comment">&lt;!-- 项目信息 --&gt;</span></span>
<span class="line">    <span class="token comment">&lt;!-- 项目坐标 --&gt;</span></span>
<span class="line">    <span class="token comment">&lt;!-- 打包方式 --&gt;</span></span>
<span class="line">    <span class="token comment">&lt;!-- 被继承的子模块 --&gt;</span></span>
<span class="line">    </span>
<span class="line">    <span class="token comment">&lt;!-- 项目属性 --&gt;</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">&lt;!-- 设置maven仓库 --&gt;</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">&lt;!-- 定义依赖 --&gt;</span></span>
<span class="line">    </span>
<span class="line">    <span class="token comment">&lt;!-- 引入依赖 --&gt;</span></span>
<span class="line">    </span>
<span class="line">    <span class="token comment">&lt;!-- 设置构建工具 --&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>project</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>继承父级项目</h2>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token comment">&lt;!-- 继承父级项目 --&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>parent</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- 引入并继承spring boot提供的父级pom.xml --&gt;</span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.springframework.boot<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>spring-boot-starter-parent<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>2.7.5<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>parent</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>设置项目信息</h2>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token comment">&lt;!-- 项目信息 --&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>name</span><span class="token punctuation">&gt;</span></span>软件智能体<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>name</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- 项目名称/别名 --&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>description</span><span class="token punctuation">&gt;</span></span>项目/当前模块信息<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>description</span><span class="token punctuation">&gt;</span></span>  <span class="token comment">&lt;!-- 描述信息 --&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>设置项目坐标</h2>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token comment">&lt;!-- 项目坐标 --&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>cn.ha.magictable<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- 组织ID --&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>agent<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- 模块ID --&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>1.0-SNAPSHOT<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- 版本号 --&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>设置打包方式</h2>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token comment">&lt;!-- 打包方式 --&gt;</span></span>
<span class="line"><span class="token comment">&lt;!-- `jar`（java应用) --&gt;</span></span>
<span class="line"><span class="token comment">&lt;!-- `war`（web应用）--&gt;</span></span>
<span class="line"><span class="token comment">&lt;!-- `pom`（不会打包，当作用于继承的父工程）--&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>packaging</span><span class="token punctuation">&gt;</span></span>pom<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>packaging</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>被继承的子模块</h2>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token comment">&lt;!-- 被继承的子项目 --&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>modules</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>module</span><span class="token punctuation">&gt;</span></span>core<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>module</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>module</span><span class="token punctuation">&gt;</span></span>authentication<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>module</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>module</span><span class="token punctuation">&gt;</span></span>user<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>module</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>module</span><span class="token punctuation">&gt;</span></span>common<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>module</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>modules</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>设置项目属性</h2>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token comment">&lt;!-- 项目属性 --&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>properties</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token comment">&lt;!-- 项目JDK版本 --&gt;</span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>maven.compiler.source</span><span class="token punctuation">&gt;</span></span>17<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>maven.compiler.source</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>maven.compiler.target</span><span class="token punctuation">&gt;</span></span>17<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>maven.compiler.target</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token comment">&lt;!-- 项目编码格式 --&gt;</span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>project.build.sourceEncoding</span><span class="token punctuation">&gt;</span></span>UTF-8<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>project.build.sourceEncoding</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">&lt;!-- 自定义属性标签和值 --&gt;</span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>spring.boot.version</span><span class="token punctuation">&gt;</span></span>2.6.13<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>spring.boot.version</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- 定义springBoot的版本 --&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>properties</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>设置maven仓库</h2>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token comment">&lt;!-- 指定maven仓库 --&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>repositories</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>repository</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- 华为maven仓库 --&gt;</span></span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>id</span><span class="token punctuation">&gt;</span></span>huaweicloud<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>id</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>name</span><span class="token punctuation">&gt;</span></span>华为云镜像源<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>name</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>url</span><span class="token punctuation">&gt;</span></span>https://mirrors.huaweicloud.com/repository/maven/<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>url</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>repository</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    </span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>repositories</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>定义依赖</h2>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token comment">&lt;!-- 定义依赖，仅定义没有真正引入 --&gt;</span></span>
<span class="line"><span class="token comment">&lt;!-- 此处写的依赖，子模块不会自动继承，子模块手动继承时无需指定版本号 --&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependencyManagement</span><span class="token punctuation">&gt;</span></span> </span>
<span class="line">    <span class="token comment">&lt;!--定义依赖--&gt;</span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependencies</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- 定义测试依赖 --&gt;</span></span>
<span class="line">            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>junit<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span>        <span class="token comment">&lt;!-- 依赖所属组织ID --&gt;</span></span>
<span class="line">            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>junit<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span>  <span class="token comment">&lt;!-- 依赖所属项目ID --&gt;</span></span>
<span class="line">            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>4.13.2<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span>       <span class="token comment">&lt;!-- 依赖所属项目版本号 --&gt;</span></span>
<span class="line">            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>scope</span><span class="token punctuation">&gt;</span></span>test<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>scope</span><span class="token punctuation">&gt;</span></span>             <span class="token comment">&lt;!-- 依赖范围（compile、test、provided、runtime） --&gt;</span></span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">        </span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependencies</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependencyManagement</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token comment">&lt;!--待完善--&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>引入依赖</h2>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token comment">&lt;!-- 引入依赖，子模块会自动继承 --&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependencies</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- 引入测试依赖 --&gt;</span></span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>junit<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span>        <span class="token comment">&lt;!-- 依赖所属组织ID --&gt;</span></span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>junit<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span>  <span class="token comment">&lt;!-- 依赖所属项目ID --&gt;</span></span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>4.13.2<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span>       <span class="token comment">&lt;!-- 依赖所属项目版本号 --&gt;</span></span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>scope</span><span class="token punctuation">&gt;</span></span>test<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>scope</span><span class="token punctuation">&gt;</span></span>             <span class="token comment">&lt;!-- 依赖范围（compile、test、provided、runtime） --&gt;</span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependencies</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>设置构建工具</h2>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token comment">&lt;!-- 构建 --&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>build</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token comment">&lt;!-- 插件 --&gt;</span> <span class="token comment">&lt;!-- 可同时设置多个插件 --&gt;</span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>plugins</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>plugin</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- 添加Spring Boot的Maven插件 --&gt;</span></span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.springframework.boot<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>spring-boot-maven-plugin<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>plugin</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">        </span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>plugins</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>build</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Maven - 热门推荐 - 第三方类库</title>
      <link>https://blog.magictable.ha.cn/software/Package-Maven-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E7%AC%AC%E4%B8%89%E6%96%B9%E7%B1%BB%E5%BA%93.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Maven-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E7%AC%AC%E4%B8%89%E6%96%B9%E7%B1%BB%E5%BA%93.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Maven - 热门推荐 - 第三方类库</source>
      <description>文章摘要： Java第三方类库推荐。 API/SDK zaiSDK 智谱AI开放平台 详细总结： 框架-Solon Solon 主要介绍内核与基础扩展插件相关的项目。 Solon Serialization Solon Data Solon Flow Solon Logging Solon Security Solon Messaging Solon ...</description>
      <category>软件程序/软件包</category>
      <pubDate>Thu, 14 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Java第三方类库推荐。</p>
<!-- more -->
<h2>API/SDK</h2>
<h3>zaiSDK</h3>
<ul>
<li>智谱AI开放平台</li>
</ul>
<p>详细总结：<a href="/software/Library-Maven-zaiSDK.html" target="_blank">Library-Maven-zaiSDK</a></p>
<h2>框架-Solon</h2>
<h3>Solon</h3>
<p>主要介绍内核与基础扩展插件相关的项目。</p>
<h3>Solon Serialization</h3>
<h3>Solon Data</h3>
<h3>Solon Flow</h3>
<h3>Solon Logging</h3>
<h3>Solon Security</h3>
<h3>Solon Messaging</h3>
<h3>Solon Web</h3>
<h3>Solon Scheduling</h3>
<h3>Solon Remoting</h3>
<h3>Solon Native</h3>
<h3>Solon Docs</h3>
<h3>Solon Test</h3>
<h3>Solon Shortcut</h3>
<h3>Nami</h3>
<h2>框架-Solon AI</h2>
<h3>Solon AI</h3>
<h3>Solon AI RAG</h3>
<h3>Solon AI MCP</h3>
<h3>Solon AI Flow</h3>
<h2>框架-Solon Cloud</h2>
<h3>Solon Cloud</h3>
<h3>Solon Cloud Gateway</h3>
<h3>Solon Cloud Config</h3>
<h3>Solon Cloud Discoery</h3>
<h3>Solon Cloud Event</h3>
<h3>Solon Cloud Job</h3>
<h3>Solon Cloud File</h3>
<h3>Solon Cloud Log</h3>
<h3>Solon Cloud Trace</h3>
<h3>Solon Cloud Metrics</h3>
<h2>框架-Spring</h2>
<h3>SpringFramework 6</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href="/software/Library-Maven-SpringFramework6.html" target="_blank">Library-Maven-SpringFramework6</a></p>
<h3>Spring Boot 2</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href="/software/Library-Maven-SpringBoot2.html" target="_blank">Library-Maven-SpringBoot2</a></p>
<h3>Spring Boot 3</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href="/software/Library-Maven-SpringBoot3.html" target="_blank">Library-Maven-SpringBoot3</a></p>
<h3>Spring Cloud</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href="/software/Library-Maven-SpringCloud.html" target="_blank">Library-Maven-SpringCloud</a></p>
<h2>Netty</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href="/software/Library-Maven-Netty.html" target="_blank">Library-Maven-Netty</a></p>
<h2>日志-Log4j</h2>
<h3>Log4j2</h3>
<ul>
<li>日志框架。</li>
</ul>
<p>详细总结：<a href="/software/Library-Maven-Log4j2.html" target="_blank">Library-Maven-Log4j2</a></p>
<h2>日志-Lombok</h2>
<h3>Lombok</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href="/software/Library-Maven-Lombok.html" target="_blank">Library-Maven-Lombok</a></p>
<h2>日志-SLF4J</h2>
<h3>SLF4J</h3>
<ul>
<li>简单日志门面（Simple Logging Facade for Java），允许最终用户在后台使用任意一个日志框架。</li>
</ul>
<p>详细总结：<a href="/software/Library-Maven-SLF4J.html" target="_blank">Library-Maven-SLF4J</a></p>
<h2>数据库-MySQL</h2>
<h3>MySQLConnectorJ</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href="/software/Library-Maven-MySQLConnectorJ.html" target="_blank">Library-Maven-MySQLConnectorJ</a></p>
<h3>MyBatis</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href="/software/Library-Maven-MyBatis.html" target="_blank">Library-Maven-MyBatis</a></p>
<h3>MyBatisPlus</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href="/software/Library-Maven-MyBatisPlus.html" target="_blank">Library-Maven-MyBatisPlus</a></p>
<h2>JUnit</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>WebSocket</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>Jackson</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>Logback</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href="/software/Library-Maven-Logback.html" target="_blank">Library-Maven-Logback</a></p>
<h2>Druid</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href="/software/Library-Maven-Druid.html" target="_blank">Library-Maven-Druid</a></p>
<h2>HttpClient 5</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href="/software/Library-Maven-HttpClient5.html" target="_blank">Library-Maven-HttpClient5</a></p>
<h2>Jackson</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href="/software/Library-Maven-Jackson.html" target="_blank">Library-Maven-Jackson</a></p>
<h2>Sentinel</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href="/software/Library-Maven-Sentinel.html" target="_blank">Library-Maven-Sentinel</a></p>
<h2>SwaggerFox</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href="/software/Library-Maven-SwaggerFox.html" target="_blank">Library-Maven-SwaggerFox</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Node.js - npm - 热门推荐 - 项目规范</title>
      <link>https://blog.magictable.ha.cn/software/Package-NodeJS-npm-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E9%A1%B9%E7%9B%AE%E8%A7%84%E8%8C%83.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-NodeJS-npm-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E9%A1%B9%E7%9B%AE%E8%A7%84%E8%8C%83.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Node.js - npm - 热门推荐 - 项目规范</source>
      <description>文章摘要： 项目推荐规范。 命名规范 软件包名：不能出现空格、全部小写英文、单词之间使用减号（-）表示，例如：chat-bot</description>
      <category>软件程序/软件包</category>
      <pubDate>Thu, 14 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 项目推荐规范。</p>
<!-- more -->
<h2>命名规范</h2>
<p>软件包名：不能出现空格、全部小写英文、单词之间使用减号（<code>-</code>）表示，例如：<code>chat-bot</code></p>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 人工智能 - 技术 - 数据标注</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD-%E6%8A%80%E6%9C%AF-%E6%95%B0%E6%8D%AE%E6%A0%87%E6%B3%A8.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD-%E6%8A%80%E6%9C%AF-%E6%95%B0%E6%8D%AE%E6%A0%87%E6%B3%A8.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 人工智能 - 技术 - 数据标注</source>
      <description>文章摘要： 数据标注专注于人工智能领域，为人工智能行业提供 “数据采集、数据清洗、数据标注” 等数据类服务。 简介 主要作用 数据标注是一个多样化且关键的数据处理步骤，它能够为机器学习模型的训练和优化提供宝贵的信息。不同类型的数据标注方法各具特点和应用场景，共同构成了数据标注的丰富体系。在实际应用中，选择合适的数据标注方法对于提升模型的性能和准确率具有...</description>
      <category>学习笔记/技术</category>
      <pubDate>Tue, 12 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 数据标注专注于人工智能领域，为人工智能行业提供 “数据采集、数据清洗、数据标注” 等数据类服务。</p>
<!-- more -->
<h2>简介</h2>
<p>主要作用</p>
<blockquote>
<ul>
<li>数据标注是一个多样化且关键的数据处理步骤，它能够为机器学习模型的训练和优化提供宝贵的信息。不同类型的数据标注方法各具特点和应用场景，共同构成了数据标注的丰富体系。在实际应用中，选择合适的数据标注方法对于提升模型的性能和准确率具有重要意义。</li>
</ul>
</blockquote>
<p>注意事项</p>
<blockquote>
<ul>
<li>数据标注过程中必须准确，因为会影响AI训练效果。</li>
</ul>
</blockquote>
<h2>流程</h2>
<p>数据闭环，</p>
<blockquote>
<p></p>
</blockquote>
<blockquote>
<ul>
<li><strong>了解项目需求</strong>‌：在开始标注工作之前，了解项目的背景和需求非常重要。明确标注的目标是什么，了解模型训练的目的和预期结果，以便更好地理解标注任务，根据需求做出准确的标注‌1。</li>
<li>‌<strong>学习标注规范</strong>‌：每个项目都有一套标注规范，这是工作的基础。标注规范详细说明了标注的标准和要求，比如如何标记目标物体的边界框、如何分类标记、如何处理模糊或有遮挡的图像等。学习并熟悉标注规范是完成准确标注的关键‌1。</li>
<li>‌<strong>掌握专业术语</strong>‌：数据标注涉及到很多专业术语，如目标检测、语义分割、实例分割等。了解这些术语和相关概念有助于更好地理解标注任务，保证标注的准确性和一致性‌1。</li>
<li>‌<strong>学习常见的数据标注方法</strong>‌：常见的数据标注方法包括矩形框标注、多边形标注、语义分割、关键点标注、3D点云标注、3D立方体标注、目标追踪和属性判别等。这些方法适用于不同的应用场景，如自动驾驶、图像识别、虚拟现实等‌2。</li>
<li>‌<strong>实践操作</strong>‌：通过实际操作来巩固理论知识，熟悉各种标注工具和平台的使用。可以在众包平台上接任务进行实践，或者参与实际的项目来积累经验‌13。</li>
<li>‌<strong>持续学习</strong>‌：数据标注是一个不断发展的领域，新技术和新方法不断涌现。持续关注行业动态，学习新的标注技术和工具，保持竞争力‌13。</li>
</ul>
</blockquote>
<h2>标注工具</h2>
<blockquote>
<ul>
<li>边界框（矩形框）：物体边界</li>
<li>多边形：不规则物体</li>
<li>关键点：人脸、肢体、手势</li>
<li>图像立方体：物体</li>
<li>图像立方体连续标注：</li>
<li>图像语义分割：</li>
</ul>
</blockquote>
<h2>分类和任务</h2>
<h3>图像标注-线标注</h3>
<blockquote>
<ul>
<li>根据需求标注检测对象对应的线性位置。</li>
<li>例如：车道线。</li>
</ul>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/3b8c86c4a438f8d675e635b6917afbfe.png" alt=""></p>
</blockquote>
<h3>图像标注-边框标注</h3>
<blockquote>
<ul>
<li>标注检测对象对应的区域。</li>
<li>例如：汽车/行人等各种物体。</li>
</ul>
<p></p>
</blockquote>
<h3>图像标注-3D边框标注</h3>
<blockquote>
<ul>
<li>将图像中待检测物体以立方体形式标注。</li>
<li>例如：汽车检测。</li>
</ul>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/03e62fc19c8b67c592e4881bcb42b836.png" alt=""></p>
</blockquote>
<h3>图像标注-语义分割（困难）</h3>
<blockquote>
<ul>
<li>根据检测区域不同，将图像标注为不同的像素。</li>
<li>例如：来自汽车拍摄的图像。</li>
</ul>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/a414a94dfbd1f93921e8ef9271505686.png" alt=""></p>
</blockquote>
<h3>图像标注-多边形标注</h3>
<blockquote>
<ul>
<li>根据需求标注检测对象爱那个的形状。</li>
<li>例如：标注图像中的汽车轮廓或标记污损边界。</li>
</ul>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/9eda95b3ab8fa11ce5100cf7e8ee07a4.png" alt=""></p>
</blockquote>
<h3>图像标注-点标注</h3>
<blockquote>
<ul>
<li>根据需求标注检测对象爱那个参考点的像素坐标，或这图像中的关键点标记。</li>
<li>例如：人脸。</li>
</ul>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/ed829b406f32f2e6bb4e128070fc2d2c.png" alt=""></p>
</blockquote>
<h3>图像标注-3D点云标注（困难）</h3>
<blockquote>
<ul>
<li>在3D空间中，标注点云数据中指定的检测对象。</li>
<li>例如：汽车、行车道等。</li>
</ul>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/899c3d087f71449408fd5fca2799637f.png" alt=""></p>
</blockquote>
<h3>视频标注-跟踪标注</h3>
<blockquote>
<ul>
<li>在视频或连续的图像中跟踪标注检测对象，形成有ID关联的运动轨迹。</li>
</ul>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/8396be6e05302d4adb392fc595a9efc0.gif" alt=""></p>
</blockquote>
<h3>文本标注-语音转写与校对（困难）</h3>
<blockquote>
<ul>
<li>中文转英文，语音转写对比校验。</li>
</ul>
</blockquote>
<h3>文本标注-实体命名标注（困难）</h3>
<blockquote>
<ul>
<li>标注文本中的实体。</li>
<li>实体是现实中物体的名称。</li>
<li>例如：地名、网络用语。</li>
</ul>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/9ee26dde04f8d7494993d4783cc36c5b.gif" alt=""></p>
</blockquote>
<h3>语音标注-客服语音标注（困难）</h3>
<blockquote>
<ul>
<li>外呼机器人进行呼叫记录语音标注呼叫成果或者失败，从而训练话术。</li>
</ul>
</blockquote>
<h2>行业领域</h2>
<blockquote>
<ul>
<li>无人驾驶、无人超市、人脸识别、智能家居、智能教育、智能医疗、智能安防、工业、制造业</li>
</ul>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - 问题总结 - Java日志体系</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-Java%E6%97%A5%E5%BF%97%E4%BD%93%E7%B3%BB.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-Java%E6%97%A5%E5%BF%97%E4%BD%93%E7%B3%BB.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - 问题总结 - Java日志体系</source>
      <description>文章摘要： Java日志体系。 简介 日志文件是用于记录系统操作事件的文件集合，可分为事件日志和消息日志。 主要功能 控制日志输出的内容和格式 控制日志输出的位置 日志优化、异步日志、日志文件的归档和压缩 日志系统的维护 面向接口开发的日志门面 注释 项目中必须要编写一个日志配置文件，否则在运行时会提示报错。 当你的项目决定使用一个日志门面来标准化日志...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Mon, 11 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Java日志体系。</p>
<!-- more -->
<h2>简介</h2>
<p>日志文件是用于记录系统操作事件的文件集合，可分为事件日志和消息日志。</p>
<h2>主要功能</h2>
<p>控制日志输出的内容和格式</p>
<p>控制日志输出的位置</p>
<p>日志优化、异步日志、日志文件的归档和压缩</p>
<p>日志系统的维护</p>
<p>面向接口开发的日志门面</p>
<h2></h2>
<table>
<thead>
<tr>
<th style="text-align:center">日志实现</th>
<th style="text-align:center">日志门面</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">JUL</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">log4j2</td>
<td style="text-align:center">JCL</td>
</tr>
<tr>
<td style="text-align:center">logback</td>
<td style="text-align:center">SLF4J</td>
</tr>
</tbody>
</table>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>项目中必须要编写一个日志配置文件，否则在运行时会提示报错。</p>
<ul>
<li>当你的项目决定使用一个<strong>日志门面</strong>来标准化日志操作时，你需要为实际使用的<strong>日志实现</strong>（如Log4j、Logback）添加一个<strong>适配器</strong>。日志门面定义了一套统一的日志操作API，而适配器则是将这套API映射到具体的日志实现上。</li>
<li>当你需要在项目中替换现有的日志框架，但又不想修改现有的代码时，可以使用桥接器。</li>
</ul>
</div>
<h2>日志框架实现</h2>
<p>简要说明</p>
<ul>
<li>日志框架实现是指具体的日志记录库，提供了日志记录的实际功能，包括日志的创建、格式化、过滤、输出等。</li>
</ul>
<p>详细总结</p>
<ul>
<li>Log4j2详细总结：<a href="/software/Library-Maven-Log4j2.html" target="_blank">Library-Maven-Log4j2</a></li>
<li>Logback详细总结：<a href="/software/Library-Maven-Logback.html" target="_blank">Library-Maven-Logback</a></li>
</ul>
<h2>日志框架门面</h2>
<p>简要说明</p>
<ul>
<li>日志框架门面是一个抽象层，它为不同的日志框架实现提供了一个统一的接口。门面模式允许应用程序使用门面提供的API进行日志记录，而无需直接依赖于具体的日志框架实现。</li>
</ul>
<p>详细总结</p>
<ul>
<li>SLF4J详细总结：<a href="/software/Library-Maven-SLF4J.html" target="_blank">Library-Maven-SLF4J</a></li>
</ul>
<h2>日志适配器</h2>
<p>简要说明</p>
<ul>
<li>用于将一个<strong>日志门面</strong>与一个具体的<strong>日志实现</strong>连接起来。</li>
<li>当应用程序使用某个日志门面（如SLF4J）时，如果希望使用不同的日志实现（如Log4j或java.util.logging）来记录日志，就需要相应的适配器。</li>
<li>Maven坐标的名称格式：<code>&lt;日志框架实现&gt; - &lt;日志框架门面&gt; -impl</code></li>
</ul>
<p>详细总结</p>
<ul>
<li></li>
</ul>
<h2>日志桥接器</h2>
<p>简要说明</p>
<ul>
<li>用于将一个<strong>日志实现</strong>的调用重定向到另一个<strong>日志实现</strong>的调用。</li>
<li>这种转换允许现有代码（使用某个<strong>日志实现</strong>编写的）在不修改代码的情况下，使用新的日志框架。</li>
<li>Maven坐标的名称格式：<code>&lt;日志框架实现&gt; -over- &lt;日志框架实现&gt;</code></li>
</ul>
<p>详细总结</p>
<ul>
<li></li>
</ul>
<h2>jcl和log4j2</h2>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span> &lt;!</span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Library - Maven - Logback</title>
      <link>https://blog.magictable.ha.cn/software/Library-Maven-Logback.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Maven-Logback.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Maven - Logback</source>
      <description>文章摘要： Logback是日志框架（日志实现）。 简介 简要说明 Logback是一个日志框架实现。 Logback是由log4j的创始人开发的，被看作是log4j的改进版。 主要功能 它与SLF4J无缝集成，性能优于log4j。 Logback具有自动重新加载配置文件、条件处理过滤器等功能。 注意事项 适用场景 Maven坐标 占位符</description>
      <category>软件程序/代码类库</category>
      <pubDate>Mon, 11 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Logback是日志框架（日志实现）。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<blockquote>
<ul>
<li>Logback是一个日志框架实现。</li>
<li>Logback是由log4j的创始人开发的，被看作是log4j的改进版。</li>
</ul>
</blockquote>
<p>主要功能</p>
<blockquote>
<ul>
<li>它与SLF4J无缝集成，性能优于log4j。</li>
<li>Logback具有自动重新加载配置文件、条件处理过滤器等功能。</li>
</ul>
</blockquote>
<p>注意事项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>适用场景</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>Maven坐标</h2>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token comment">&lt;!-- SLF4J API for Logback 的实现 --&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- Logback是日志框架（日志实现） --&gt;</span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>ch.qos.logback<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>logback-classic<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>版本号<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- 请替换为实际的版本号 --&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>占位符</h2>
]]></content:encoded>
    </item>
    <item>
      <title>Library - Maven - SpringBoot 3 - 场景启动器（starter）</title>
      <link>https://blog.magictable.ha.cn/software/Library-Maven-SpringBoot3-%E5%9C%BA%E6%99%AF%E5%90%AF%E5%8A%A8%E5%99%A8%EF%BC%88starter%EF%BC%89.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Maven-SpringBoot3-%E5%9C%BA%E6%99%AF%E5%90%AF%E5%8A%A8%E5%99%A8%EF%BC%88starter%EF%BC%89.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Maven - SpringBoot 3 - 场景启动器（starter）</source>
      <description>文章摘要： 摘要内容。 注释 官方启动器准循的命名规范：spring-boot-starter- &amp;lt;名称&amp;gt; 第三方启动器的命名规范：&amp;lt;名称&amp;gt; -spring-boot-starter spring-boot-starter spring-boot-starter-test 单元测试启动器。 用于使用 JUnit Jupiter、Hamcrest 和 M...</description>
      <category>软件程序/代码类库</category>
      <pubDate>Mon, 11 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>官方启动器准循的命名规范：<code>spring-boot-starter- &lt;名称&gt;</code></li>
<li>第三方启动器的命名规范：<code>&lt;名称&gt; -spring-boot-starter</code></li>
</ul>
</div>
<h2><code>spring-boot-starter</code></h2>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2><code>spring-boot-starter-test</code></h2>
<blockquote>
<ul>
<li>单元测试启动器。</li>
<li>用于使用 JUnit Jupiter、Hamcrest 和 Mockito 等库测试 Spring Boot 应用程序的 Starter。</li>
</ul>
</blockquote>
<p>详细总结：<a href="/software/Library-Maven-SpringBoot3-%E5%9C%BA%E6%99%AF%E5%90%AF%E5%8A%A8%E5%99%A8-test.html" target="_blank">Library-Maven-SpringBoot3-场景启动器-test</a></p>
<h2><code>spring-boot-starter-web</code></h2>
<blockquote>
<ul>
<li>Web启动器。</li>
<li>使用 Spring MVC 构建 Web（包括 RESTful）应用程序的入门工具。使用 Tomcat 作为默认嵌入式容器。</li>
<li>提供了嵌入的Tomcat以及Spring MVC的依赖。</li>
</ul>
</blockquote>
<p>详细总结：<a href="/software/Library-Maven-SpringBoot3-%E5%9C%BA%E6%99%AF%E5%90%AF%E5%8A%A8%E5%99%A8-web.html" target="_blank">Library-Maven-SpringBoot3-场景启动器-web</a></p>
<h2><code>spring-boot-starter-validation</code></h2>
<blockquote>
<ul>
<li>数据校验。</li>
</ul>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Library - Maven - SpringBoot 3 - 问题总结 - DevTools依赖实现热部署</title>
      <link>https://blog.magictable.ha.cn/software/Library-Maven-SpringBoot3-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-DevTools%E4%BE%9D%E8%B5%96%E5%AE%9E%E7%8E%B0%E7%83%AD%E9%83%A8%E7%BD%B2.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Maven-SpringBoot3-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-DevTools%E4%BE%9D%E8%B5%96%E5%AE%9E%E7%8E%B0%E7%83%AD%E9%83%A8%E7%BD%B2.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Maven - SpringBoot 3 - 问题总结 - DevTools依赖实现热部署</source>
      <description>文章摘要： spring boot 的热部署方案。 注释 该插件暂时没有完全理解，我是通过修改IDEA中的运行参数实现快速更新项目并运行。 实现了不使用其他插件或工具，能够直接在IDEA中正常运行并能够快速更新修改后的项目。 通过DevTools依赖实现热部署 该方法并不是真正意义上的热部署，该方法实际上是重启项目来达到更新资源的目的。 导入maven...</description>
      <category>软件程序/代码类库</category>
      <pubDate>Mon, 11 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> spring boot 的热部署方案。</p>
<!-- more -->
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>该插件暂时没有完全理解，我是通过修改IDEA中的运行参数实现快速更新项目并运行。</li>
<li>实现了不使用其他插件或工具，能够直接在IDEA中正常运行并能够快速更新修改后的项目。</li>
</ul>
</div>
<h2>通过DevTools依赖实现热部署</h2>
<blockquote>
<ul>
<li>该方法并不是真正意义上的热部署，该方法实际上是重启项目来达到更新资源的目的。</li>
</ul>
</blockquote>
<ol>
<li>导入maven依赖</li>
</ol>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependencies</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!--devtools热部署--&gt;</span>  </span>
<span class="line">	    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.springframework.boot<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span>  </span>
<span class="line">	    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>spring-boot-devtools<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span>  </span>
<span class="line">	    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>optional</span><span class="token punctuation">&gt;</span></span>true<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>optional</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!--可选依赖，隐藏依赖--&gt;</span>  </span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependencies</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ol start="2">
<li>修改IDEA中的运行参数</li>
</ol>
<p>相关文章请查看：<a href="/software/Package-IntellijIDEA-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E9%A1%B9%E7%9B%AE%E7%83%AD%E9%83%A8%E7%BD%B2%E9%85%8D%E7%BD%AE.html" target="_blank">IDEA-项目热部署配置</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Intellij IDEA - 问题总结 - 项目热部署配置</title>
      <link>https://blog.magictable.ha.cn/software/Package-IntellijIDEA-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E9%A1%B9%E7%9B%AE%E7%83%AD%E9%83%A8%E7%BD%B2%E9%85%8D%E7%BD%AE.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-IntellijIDEA-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E9%A1%B9%E7%9B%AE%E7%83%AD%E9%83%A8%E7%BD%B2%E9%85%8D%E7%BD%AE.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Intellij IDEA - 问题总结 - 项目热部署配置</source>
      <description>文章摘要： IDEA实现项目热部署的流程，加快二次编译速度，减少修改后的等待时间。 注释 IDEA需要使用以测试的方式运行项目。 浏览器需要刷新一下才能生效。 性能：修改切换出IDE时也会触发 “更新” ，需要注意电脑性能。 注释 新方案，实现能够在正常运行模式下也能实现热部署 在spring项目中实现热部署。 请查看该文章： 方案说明 该方法能够仅需...</description>
      <category>软件程序/软件包</category>
      <pubDate>Mon, 11 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> IDEA实现项目热部署的流程，加快二次编译速度，减少修改后的等待时间。</p>
<!-- more -->
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>IDEA需要使用以测试的方式运行项目。</li>
<li>浏览器需要刷新一下才能生效。</li>
<li>性能：修改切换出IDE时也会触发 “更新” ，需要注意电脑性能。</li>
</ul>
</div>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>新方案，实现能够在正常运行模式下也能实现热部署</p>
<ul>
<li>在spring项目中实现热部署。</li>
<li>请查看该文章：<a href="/software/Library-Maven-SpringBoot3-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-DevTools%E4%BE%9D%E8%B5%96%E5%AE%9E%E7%8E%B0%E7%83%AD%E9%83%A8%E7%BD%B2.html" target="_blank">SpringBoot项目使用DevTools依赖实现热部署</a></li>
</ul>
</div>
<h2>方案说明</h2>
<ul>
<li>该方法能够仅需要修改IDEA的设置就能实现热更新。</li>
<li>该方法必须 “调试” 模式下运行才有用。</li>
<li>该方法只能修改方法体里面的内容，若修改方法体外边的内容时时会无法正确热部署。</li>
</ul>
<h2>配置流程</h2>
<ol>
<li>点击顶部导航栏中的“运行 -&gt; 编辑配置”，进入“运行/调试配置”页面。</li>
</ol>
<blockquote>
<p></p>
</blockquote>
<ol start="2">
<li>修改“构建并运行”右边的“修改选项”。</li>
</ol>
<blockquote>
<p></p>
</blockquote>
<ul>
<li>将 “<strong>执行更新操作时</strong>” 和 “<strong>切换出IDE时</strong>” 的选项都修改为 “<strong>更新类和资源</strong>”。</li>
</ul>
<blockquote>
<p></p>
</blockquote>
<ol start="3">
<li>点击确定，保存即可。</li>
</ol>
<blockquote>
<p></p>
</blockquote>
<ol start="4">
<li>点击 “<strong>调试模式</strong>” 运行项目。</li>
</ol>
<ul>
<li>该方式必须在调试模式下才会生效。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - 元注解</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-%E5%85%83%E6%B3%A8%E8%A7%A3.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-%E5%85%83%E6%B3%A8%E8%A7%A3.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - 元注解</source>
      <description>文章摘要： 在Java中，注解（Annotation）是一种用于修饰代码的元数据，可以提供有关程序代码的信息，但不直接参与程序的执行。元注解是用于定义注解的注解。 注释 元注解来自javax.annotation @Override 定义在java.lang.Override 该注解只适用于修辞手法，表示一个方法表明打算重写基类中的另一个方法声明。 @...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Sun, 10 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 在Java中，注解（Annotation）是一种用于修饰代码的元数据，可以提供有关程序代码的信息，但不直接参与程序的执行。元注解是用于定义注解的注解。</p>
<!-- more -->
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>元注解来自<code>javax.annotation</code></li>
</ul>
</div>
<h2><code>@Override</code></h2>
<ul>
<li>定义在<code>java.lang.Override</code></li>
<li>该注解只适用于修辞手法，表示一个方法表明打算重写基类中的另一个方法声明。</li>
</ul>
<h2><code>@Deprecated</code></h2>
<ul>
<li>包路径：<code>java.lang.Deprecated</code></li>
<li>可以用于修饰方法、属性、类，表示不鼓励程序员使用这样的元素，通常是因为它很危险或者存在更好的选择。</li>
</ul>
<h2><code>@SuppressWarnings</code></h2>
<ul>
<li>包路径：<code>java.lang.SuppressWarnings</code></li>
<li>用来抑制编译时的警告信息。</li>
</ul>
<h2><code>@Target</code></h2>
<p>定义</p>
<ul>
<li>用于指定注解可以应用的目标元素类型，使用范围。</li>
<li>目标元素类型指的是注解可以修饰的Java语言元素，比如类、接口、方法等。</li>
</ul>
<p>参数</p>
<p><code>ElementType</code>:该注解的值是一个枚举类型。</p>
<ul>
<li><code>ANNOTATION_TYPE</code>：注解类型声明</li>
<li><code>CONSTRUCTOR</code>：构造方法声明</li>
<li><code>FIELD</code>：字段声明（包括枚举常量）</li>
<li><code>LOCAL_VARIABLE</code>：局部变量声明</li>
<li><code>METHOD</code>：方法声明</li>
<li><code>PACKAGE</code>：包声明</li>
<li><code>PARAMETER</code>：参数声明</li>
<li><code>TYPE</code>：类、接口（包括注解类型）或枚举声明</li>
</ul>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>lang<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span></span><span class="token class-name">ElementType</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>lang<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span></span><span class="token class-name">Target</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token annotation punctuation">@Target</span><span class="token punctuation">(</span><span class="token punctuation">{</span><span class="token class-name">ElementType</span><span class="token punctuation">.</span><span class="token constant">TYPE</span><span class="token punctuation">}</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Test</span> <span class="token punctuation">{</span></span>
<span class="line"></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2><code>@Retention</code></h2>
<p>定义</p>
<ul>
<li>用于指定注解的信息保留到什么阶段。它控制注解的生命周期。</li>
</ul>
<p>参数</p>
<p><code>RetentionPolicy</code>：该注解的值是一个枚举类型 <code>RetentionPolicy</code>。它包括以下几种：</p>
<ul>
<li><code>SOURCE</code>：注解只保留在源代码中，编译器会忽略。</li>
<li><code>CLASS</code>：注解在编译时被保留在.class文件中，但不会被加载到JVM中。</li>
<li><code>RUNTIME</code>：注解会被加载到JVM中，因此在运行时可以反射性地读取。</li>
</ul>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>lang<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span></span><span class="token class-name">Retention</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>lang<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span></span><span class="token class-name">RetentionPolicy</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token annotation punctuation">@Retention</span><span class="token punctuation">(</span><span class="token class-name">RetentionPolicy</span><span class="token punctuation">.</span><span class="token constant">RUNTIME</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Test</span> <span class="token punctuation">{</span></span>
<span class="line"></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2><code>@Documented</code></h2>
<p>定义</p>
<ul>
<li>用于表明注解应该被 javadoc 工具记录。</li>
<li>如果一个注解被 <code>@Documented</code> 标记，那么它的注解信息会被包含在生成的文档中。</li>
</ul>
<p>参数</p>
<ul>
<li>无</li>
</ul>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>lang<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span></span><span class="token class-name">Documented</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token annotation punctuation">@Documented</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Test</span> <span class="token punctuation">{</span></span>
<span class="line"></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2><code>@Inherited</code></h2>
<p>定义</p>
<ul>
<li>用于表明注解类型是可以被继承的。</li>
<li>如果一个注解被 <code>@Inherited</code> 标记，并且该注解被用于一个类，那么这个注解也会被用于该类的子类。</li>
</ul>
<p>参数</p>
<ul>
<li>无</li>
</ul>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>lang<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span></span><span class="token class-name">Inherited</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token annotation punctuation">@Inherited</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Test</span> <span class="token punctuation">{</span></span>
<span class="line"></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Library - Maven - SpringBoot 3 - 注解</title>
      <link>https://blog.magictable.ha.cn/software/Library-Maven-SpringBoot3-%E6%B3%A8%E8%A7%A3.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Maven-SpringBoot3-%E6%B3%A8%E8%A7%A3.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Maven - SpringBoot 3 - 注解</source>
      <description>文章摘要： 摘要内容。 默认注解 若没有指定@ComponentScan扫描包路径，则自动扫描当前配置类所在的包。 启动/引导类 @SpringBootApplication 说明 标记为SpringBoot引导/启动类。 参数 无 案例 配置类 @SpringBootConfiguration 说明 spring boot的配置类。 参数 无 案例 ...</description>
      <category>软件程序/代码类库</category>
      <pubDate>Sun, 10 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>默认注解</h2>
<blockquote>
<ul>
<li>若没有指定<code>@ComponentScan</code>扫描包路径，则自动扫描当前配置类所在的包。</li>
</ul>
</blockquote>
<h2>启动/引导类</h2>
<h3><code>@SpringBootApplication</code></h3>
<p>说明</p>
<blockquote>
<ul>
<li>标记为SpringBoot引导/启动类。</li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li>无</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>boot<span class="token punctuation">.</span>autoconfigure<span class="token punctuation">.</span></span><span class="token class-name">SpringBootApplication</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token annotation punctuation">@SpringBootApplication</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">App</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line">    </span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>配置类</h2>
<h3><code>@SpringBootConfiguration</code></h3>
<p>说明</p>
<blockquote>
<ul>
<li>spring boot的配置类。</li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li>无</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>boot<span class="token punctuation">.</span></span><span class="token class-name">SpringBootConfiguration</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token annotation punctuation">@SpringBootConfiguration</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token annotation punctuation">@interface</span> <span class="token class-name">SpringBootApplication</span> <span class="token punctuation">{</span></span>
<span class="line"></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3><code>@EnableAutoConfiguration</code></h3>
<p>说明</p>
<blockquote>
<ul>
<li>开启自动配置功能。</li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li>无</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token annotation punctuation">@EnableAutoConfiguration</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token annotation punctuation">@interface</span> <span class="token class-name">SpringBootApplication</span> <span class="token punctuation">{</span></span>
<span class="line"></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3><code>@ComponentScan</code></h3>
<p>说明</p>
<blockquote>
<ul>
<li>配置扫描包路径</li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li>==待完善==</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>context<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span></span><span class="token class-name">ComponentScan</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>context<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span></span><span class="token class-name">ComponentScan</span><span class="token punctuation">.</span><span class="token class-name">Filter</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token annotation punctuation">@ComponentScan</span><span class="token punctuation">(</span></span>
<span class="line">	    excludeFilters <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token annotation punctuation">@Filter</span><span class="token punctuation">(</span></span>
<span class="line">	    type <span class="token operator">=</span> <span class="token class-name">FilterType</span><span class="token punctuation">.</span><span class="token constant">CUSTOM</span><span class="token punctuation">,</span></span>
<span class="line">	    classes <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token class-name">TypeExcludeFilter</span><span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">}</span></span>
<span class="line">	<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token annotation punctuation">@Filter</span><span class="token punctuation">(</span></span>
<span class="line">	    type <span class="token operator">=</span> <span class="token class-name">FilterType</span><span class="token punctuation">.</span><span class="token constant">CUSTOM</span><span class="token punctuation">,</span></span>
<span class="line">	    classes <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token class-name">AutoConfigurationExcludeFilter</span><span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">}</span></span>
<span class="line">	<span class="token punctuation">)</span><span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">)</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token annotation punctuation">@interface</span> <span class="token class-name">SpringBootApplication</span> <span class="token punctuation">{</span></span>
<span class="line"></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>注入（绑定）配置文件属性</h2>
<h3><code>@Value</code></h3>
<p>说明</p>
<blockquote>
<ul>
<li>通过<code>@Value</code>&nbsp;+ SpEL表达式 直接绑定SpringBoot中的配置</li>
<li>在Java代码中使用<code>@Value("${agentInfo.realName}")</code>实现读取配置文件中的数据。</li>
<li>绑定（读取）单个配置文件上的属性。</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-yaml line-numbers-mode" data-highlighter="prismjs" data-ext="yml"><pre><code class="language-yaml"><span class="line"><span class="token comment"># yml配置文件</span></span>
<span class="line"><span class="token key atrule">agent_data</span><span class="token punctuation">:</span></span>
<span class="line">  <span class="token key atrule">account</span><span class="token punctuation">:</span> <span class="token string">"CHN2024091700009999"</span></span>
<span class="line">  <span class="token key atrule">nick_name</span><span class="token punctuation">:</span> <span class="token string">"测试姬"</span></span>
<span class="line">  <span class="token key atrule">real_name</span><span class="token punctuation">:</span> <span class="token string">"云脉"</span></span>
<span class="line">  <span class="token key atrule">nationality</span><span class="token punctuation">:</span> <span class="token string">"CHN"</span></span>
<span class="line">  <span class="token key atrule">gender</span><span class="token punctuation">:</span> <span class="token number">0</span></span>
<span class="line">  <span class="token key atrule">age</span><span class="token punctuation">:</span> <span class="token number">23</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>beans<span class="token punctuation">.</span>factory<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span></span><span class="token class-name">Value</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>stereotype<span class="token punctuation">.</span></span><span class="token class-name">Component</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token annotation punctuation">@Component</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">AgentInfo</span> <span class="token punctuation">{</span></span>
<span class="line">	<span class="token annotation punctuation">@Value</span><span class="token punctuation">(</span><span class="token string">"${agent_data.real_name}"</span><span class="token punctuation">)</span>  </span>
<span class="line">	<span class="token keyword">private</span> <span class="token class-name">String</span> realName<span class="token punctuation">;</span> <span class="token comment">// 真实姓名</span></span>
<span class="line">	</span>
<span class="line">	<span class="token annotation punctuation">@Value</span><span class="token punctuation">(</span><span class="token string">"${agent_data.age}"</span><span class="token punctuation">)</span>  </span>
<span class="line">	<span class="token keyword">private</span> <span class="token class-name">String</span> age<span class="token punctuation">;</span> <span class="token comment">// 年龄</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3><code>@ConfigurationProperties</code></h3>
<p>说明</p>
<blockquote>
<ul>
<li>绑定配置文件上的数据与类属性。</li>
<li>读取配置文件数据。</li>
<li>绑定（读取）多个配置文件上的属性。</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-yaml line-numbers-mode" data-highlighter="prismjs" data-ext="yml"><pre><code class="language-yaml"><span class="line"><span class="token comment"># yml配置文件</span></span>
<span class="line"><span class="token key atrule">agent_data</span><span class="token punctuation">:</span></span>
<span class="line">  <span class="token key atrule">account</span><span class="token punctuation">:</span> <span class="token string">"CHN2024091700009999"</span></span>
<span class="line">  <span class="token key atrule">nick_name</span><span class="token punctuation">:</span> <span class="token string">"测试姬"</span></span>
<span class="line">  <span class="token key atrule">real_name</span><span class="token punctuation">:</span> <span class="token string">"云脉"</span></span>
<span class="line">  <span class="token key atrule">nationality</span><span class="token punctuation">:</span> <span class="token string">"CHN"</span></span>
<span class="line">  <span class="token key atrule">gender</span><span class="token punctuation">:</span> <span class="token number">0</span></span>
<span class="line">  <span class="token key atrule">age</span><span class="token punctuation">:</span> <span class="token number">23</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>boot<span class="token punctuation">.</span>context<span class="token punctuation">.</span>properties<span class="token punctuation">.</span></span><span class="token class-name">ConfigurationProperties</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>boot<span class="token punctuation">.</span>context<span class="token punctuation">.</span>properties<span class="token punctuation">.</span></span><span class="token class-name">ConstructorBinding</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>stereotype<span class="token punctuation">.</span></span><span class="token class-name">Component</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token annotation punctuation">@Component</span></span>
<span class="line"><span class="token annotation punctuation">@ConfigurationProperties</span><span class="token punctuation">(</span>prefix <span class="token operator">=</span> <span class="token string">"agent_data"</span><span class="token punctuation">)</span> <span class="token comment">// 前缀，下的所有属性都将绑定到</span></span>
<span class="line"><span class="token annotation punctuation">@ConstructorBinding</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">AppProperties</span> <span class="token punctuation">{</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">String</span> realName<span class="token punctuation">;</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token keyword">int</span> age<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 获取真实姓名</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">String</span> <span class="token function">getRealName</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">return</span> realName<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">	<span class="token comment">// 获取年龄</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">int</span> <span class="token function">getAge</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">return</span> age<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3><code>@PropertySource</code></h3>
<p>说明</p>
<blockquote>
<ul>
<li>指定配置文件位置。</li>
<li>指定 Spring 的 <code>Environment</code> 中要包含的属性源的位置。</li>
</ul>
</blockquote>
<p>属性</p>
<blockquote>
<ul>
<li><code>value</code> 或 <code>location</code>：用于指定属性文件的位置。可以使用 Spring 的资源路径，例如 “classpath:” 或 “file:”。</li>
<li><code>ignoreResourceNotFound</code>：如果设置为 <code>true</code>，则在找不到指定的资源文件时不会抛出异常。</li>
<li><code>encoding</code>：指定属性文件的编码格式。</li>
<li><code>factory</code>：指定用于解析属性源的 <code>PropertySourceFactory</code>。</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>context<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span></span><span class="token class-name">Configuration</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>context<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span></span><span class="token class-name">PropertySource</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token annotation punctuation">@Configuration</span></span>
<span class="line"><span class="token annotation punctuation">@PropertySource</span><span class="token punctuation">(</span>value <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token string">"classpath:custom.properties"</span><span class="token punctuation">,</span> <span class="token string">"file:/path/to/external.properties"</span><span class="token punctuation">}</span><span class="token punctuation">,</span> ignoreResourceNotFound <span class="token operator">=</span> <span class="token boolean">true</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">AppConfig</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// ... 配置类的内容</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// `AppConfig` 配置类通过 `@PropertySource` 注解指定了两个属性文件的位置：一个是位于类路径下的 `custom.properties`，另一个是位于文件系统中的 `/path/to/external.properties`。</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>数据校验</h2>
<h3><code>@Validated</code></h3>
<p>说明</p>
<blockquote>
<ul>
<li>JSR303数据校验</li>
</ul>
</blockquote>
<p>属性</p>
<blockquote>
<ul>
<li>无</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>boot<span class="token punctuation">.</span>context<span class="token punctuation">.</span>properties<span class="token punctuation">.</span></span><span class="token class-name">ConfigurationProperties</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>boot<span class="token punctuation">.</span>context<span class="token punctuation">.</span>properties<span class="token punctuation">.</span></span><span class="token class-name">ConstructorBinding</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>stereotype<span class="token punctuation">.</span></span><span class="token class-name">Component</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>validation<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span></span><span class="token class-name">Validated</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token annotation punctuation">@Component</span></span>
<span class="line"><span class="token annotation punctuation">@ConfigurationProperties</span><span class="token punctuation">(</span>prefix <span class="token operator">=</span> <span class="token string">"agent_data"</span><span class="token punctuation">)</span> <span class="token comment">// 前缀，下的所有属性都将绑定到</span></span>
<span class="line"><span class="token annotation punctuation">@ConstructorBinding</span></span>
<span class="line"><span class="token annotation punctuation">@Validated</span>  <span class="token comment">// 数据校验</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">AppProperties</span> <span class="token punctuation">{</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">String</span> realName<span class="token punctuation">;</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token keyword">int</span> age<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 获取真实姓名</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">String</span> <span class="token function">getRealName</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">return</span> realName<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">	<span class="token comment">// 获取年龄</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">int</span> <span class="token function">getAge</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">return</span> age<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>标记Bean对象</h2>
<h3><code>@RestController</code></h3>
<p>说明</p>
<blockquote>
<ul>
<li>标记为controller层的bean对象</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>web<span class="token punctuation">.</span>bind<span class="token punctuation">.</span>annotationl<span class="token punctuation">.</span></span><span class="token class-name">RestController</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token annotation punctuation">@RestController</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">UserController</span> <span class="token punctuation">{</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3><code>@SpringBootTest</code></h3>
<p>说明</p>
<blockquote>
<ul>
<li>在类上定义，标记为测试类。</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 指定spring boot的启动/引导类</span></span>
<span class="line"><span class="token annotation punctuation">@SpringBootTest</span><span class="token punctuation">(</span>classes <span class="token operator">=</span> app<span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Test</span> <span class="token punctuation">{</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>自动注入</h2>
<h3><code>@Autowired</code></h3>
<p>说明</p>
<blockquote>
<ul>
<li><strong>自动指定</strong>要注入的Bean对象。</li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li>暂无</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>beans<span class="token punctuation">.</span>factory<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span></span><span class="token class-name">Autowired</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">UserController</span> <span class="token punctuation">{</span></span>
<span class="line"></span>
<span class="line">	<span class="token annotation punctuation">@Autowired</span></span>
<span class="line">	<span class="token keyword">private</span> <span class="token class-name">UserService</span> userService<span class="token punctuation">;</span>  <span class="token comment">// 服务层对象</span></span>
<span class="line"></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3><code>@Qualifier</code></h3>
<p>说明</p>
<blockquote>
<ul>
<li><strong>手动指定</strong>要注入的Bean对象。</li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li><code>value</code>：设置在容器中的Bean对象名</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>beans<span class="token punctuation">.</span>factory<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span></span><span class="token class-name">Qualifier</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">UserController</span> <span class="token punctuation">{</span></span>
<span class="line"></span>
<span class="line">	<span class="token annotation punctuation">@Qualifier</span><span class="token punctuation">(</span><span class="token string">"userServiceImpl"</span><span class="token punctuation">)</span>  </span>
<span class="line">	<span class="token keyword">private</span> <span class="token class-name">UserService</span> service<span class="token punctuation">;</span>  <span class="token comment">// 服务层对象</span></span>
<span class="line"></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>请求URL路径映射</h2>
<h3><code>@RequestMapping</code></h3>
<p>说明</p>
<blockquote>
<ul>
<li>请求路径映射</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">UserController</span> <span class="token punctuation">{</span></span>
<span class="line"></span>
<span class="line"> <span class="token comment">// 接收,请求方式限制,可以不进行请求方法限制</span></span>
<span class="line"> <span class="token annotation punctuation">@RequestMapping</span><span class="token punctuation">(</span>value <span class="token operator">=</span> <span class="token string">"/users"</span><span class="token punctuation">,</span> method <span class="token operator">=</span> <span class="token class-name">RequestMethod</span><span class="token punctuation">.</span><span class="token constant">POST</span><span class="token punctuation">)</span></span>
<span class="line"> <span class="token comment">// 响应</span></span>
<span class="line"> <span class="token annotation punctuation">@ResponseBody</span></span>
<span class="line"> <span class="token keyword">public</span> <span class="token class-name">String</span> <span class="token function">save</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">  <span class="token keyword">return</span> <span class="token string">"返回响应"</span><span class="token punctuation">;</span></span>
<span class="line"> <span class="token punctuation">}</span></span>
<span class="line"> </span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>REST风格的资源请求路径</p>
<blockquote>
<ul>
<li><code>@GetMapping</code>：获取，仅支持<code>get</code>请求方式。</li>
<li><code>@PostMapping</code>：新增，仅支持<code>post</code>请求方式。</li>
<li><code>@PutMapping</code>：修改，仅支持<code>put</code>请求方式。</li>
<li><code>@DeleteMapping</code>：删除，仅支持<code>delete</code>请求方式。</li>
</ul>
</blockquote>
<blockquote>
<ul>
<li><code>@PathVariable</code>：形参注解，绑定路径参数与处理器方式形参间的关系，要求路径参数名与形参名一致。</li>
</ul>
</blockquote>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token annotation punctuation">@GetMapping</span><span class="token punctuation">(</span><span class="token string">"user/{id}"</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">getById</span><span class="token punctuation">(</span><span class="token annotation punctuation">@PathVariable</span> <span class="token class-name">Integer</span> id<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>接收请求数据</h2>
<h3><code>@RequestBody</code></h3>
<p>说明</p>
<blockquote>
<ul>
<li>用于接收json对象数据。普通风格。</li>
</ul>
</blockquote>
<h3><code>@RequestParm</code></h3>
<p>说明</p>
<blockquote>
<ul>
<li>用于接收URL地址或表单进行传递参数。若传递的不是json对象数据，则使用该方法。普通风格。</li>
</ul>
</blockquote>
<h3><code>@PathVariable</code></h3>
<p>说明</p>
<blockquote>
<ul>
<li>用于接收路径参数，使用<code>{参数名称}</code>的格式描述路径参数。参数数量较少时使用REST风格，通常传递id值。</li>
</ul>
</blockquote>
<h2>场景启动器中的注解</h2>
<h3><code>spring-boot-test</code></h3>
<blockquote>
<ul>
<li>单元测试</li>
<li>实现对项目中的接口进行测试。</li>
<li><code>spring-boot-test</code>场景启动器的注解总结：<a href="/software/Library-Maven-SpringBoot3-%E5%9C%BA%E6%99%AF%E5%90%AF%E5%8A%A8%E5%99%A8-test-%E6%B3%A8%E8%A7%A3.html" target="_blank">Library-Maven-SpringBoot3-场景启动器-test-注解</a></li>
</ul>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Library - Maven - SpringBoot 3 - 热门推荐 - 配置方案</title>
      <link>https://blog.magictable.ha.cn/software/Library-Maven-SpringBoot3-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E9%85%8D%E7%BD%AE%E6%96%B9%E6%A1%88.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Maven-SpringBoot3-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E9%85%8D%E7%BD%AE%E6%96%B9%E6%A1%88.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Maven - SpringBoot 3 - 热门推荐 - 配置方案</source>
      <description>文章摘要： SpringBoot项目的配置文件热门推荐方案。 application.yml配置文件 多环境配置 创建开发、测试、生产三个环境的配置文件 application-dev.yml（开发） application-test.yml（测试） application-prod.yml（生产） application.yml（主配置文件） 静态资...</description>
      <category>软件程序/代码类库</category>
      <pubDate>Sun, 10 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> SpringBoot项目的配置文件热门推荐方案。</p>
<!-- more -->
<h2>application.yml配置文件</h2>
<div class="language-yaml line-numbers-mode" data-highlighter="prismjs" data-ext="yml"><pre><code class="language-yaml"><span class="line"><span class="token comment"># 需要层次分明</span></span>
<span class="line"><span class="token comment"># 固定的key</span></span>
<span class="line"><span class="token comment"># 启动端口号</span></span>
<span class="line"><span class="token key atrule">server</span><span class="token punctuation">:</span></span>
<span class="line">  <span class="token key atrule">port</span><span class="token punctuation">:</span> <span class="token number">80</span>  <span class="token comment"># 端口号设置</span></span>
<span class="line">  <span class="token key atrule">servlet</span><span class="token punctuation">:</span></span>
<span class="line">    <span class="token key atrule">context-path</span><span class="token punctuation">:</span> /boot <span class="token comment"># 项目根路径</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># mysql配置</span></span>
<span class="line"><span class="token key atrule">spring</span><span class="token punctuation">:</span></span>
<span class="line">  <span class="token key atrule">datasource</span><span class="token punctuation">:</span></span>
<span class="line">    <span class="token key atrule">driver-class-name</span><span class="token punctuation">:</span> com.mysql.cj.jdbc.Driver</span>
<span class="line">    <span class="token key atrule">url</span><span class="token punctuation">:</span> jdbc<span class="token punctuation">:</span>mysql<span class="token punctuation">:</span>//localhost<span class="token punctuation">:</span>3306/$<span class="token punctuation">{</span>数据库名<span class="token punctuation">}</span> <span class="token comment"># 自定义</span></span>
<span class="line">    <span class="token key atrule">username</span><span class="token punctuation">:</span> root <span class="token comment"># 自定义</span></span>
<span class="line">    <span class="token key atrule">password</span><span class="token punctuation">:</span> <span class="token number">123456</span> <span class="token comment">#自定义</span></span>
<span class="line"><span class="token key atrule">spring</span><span class="token punctuation">:</span></span>
<span class="line">  <span class="token key atrule">datasource</span><span class="token punctuation">:</span></span>
<span class="line">    <span class="token key atrule">type</span><span class="token punctuation">:</span> com.alibaba.druid.pool.DruidDataSource <span class="token comment"># 基于druid配置</span></span>
<span class="line">    <span class="token key atrule">druid</span><span class="token punctuation">:</span></span>
<span class="line">      <span class="token key atrule">url</span><span class="token punctuation">:</span> jdbc<span class="token punctuation">:</span>mysql<span class="token punctuation">:</span>///day01 <span class="token comment"># 自定义</span></span>
<span class="line">      <span class="token key atrule">username</span><span class="token punctuation">:</span> root <span class="token comment"># 自定义</span></span>
<span class="line">      <span class="token key atrule">password</span><span class="token punctuation">:</span> root <span class="token comment"># 自定义</span></span>
<span class="line">      <span class="token key atrule">driver-class-name</span><span class="token punctuation">:</span> com.mysql.cj.jdbc.Driver</span>
<span class="line"><span class="token key atrule">//url</span><span class="token punctuation">:</span> jdbc<span class="token punctuation">:</span>mysql<span class="token punctuation">:</span>//localhost<span class="token punctuation">:</span>3306/mybatis<span class="token punctuation">?</span>useUnicode=true<span class="token important">&amp;characterEncoding=utf-8&amp;serverTimezone=GMT&amp;useSSL=false</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># mybatis配置</span></span>
<span class="line"><span class="token key atrule">mybatis</span><span class="token punctuation">:</span></span>
<span class="line">  <span class="token key atrule">configuration</span><span class="token punctuation">:</span>  <span class="token comment"># setting配置</span></span>
<span class="line">    <span class="token key atrule">auto-mapping-behavior</span><span class="token punctuation">:</span> full</span>
<span class="line">    <span class="token key atrule">map-underscore-to-camel-case</span><span class="token punctuation">:</span> <span class="token boolean important">true</span>  <span class="token comment">#开启驼峰命名(java)和下划线命名(mysql)的自动转换</span></span>
<span class="line">    <span class="token key atrule">log-impl</span><span class="token punctuation">:</span> org.apache.ibatis.logging.slf4j.Slf4jImpl</span>
<span class="line">  <span class="token key atrule">type-aliases-package</span><span class="token punctuation">:</span> com.atguigu.pojo  <span class="token comment"># 配置别名（自定义）</span></span>
<span class="line">  <span class="token key atrule">mapper-locations</span><span class="token punctuation">:</span> classpath<span class="token punctuation">:</span>/mapper/<span class="token important">*.xml</span>   <span class="token comment"># mapper.xml位置（自定义）</span></span>
<span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>多环境配置</h2>
<blockquote>
<ul>
<li>创建开发、测试、生产三个环境的配置文件</li>
</ul>
</blockquote>
<h3>application-dev.yml（开发）</h3>
<div class="language-yaml line-numbers-mode" data-highlighter="prismjs" data-ext="yml"><pre><code class="language-yaml"><span class="line"><span class="token key atrule">spring</span><span class="token punctuation">:</span></span>
<span class="line">  <span class="token key atrule">jdbc</span><span class="token punctuation">:</span></span>
<span class="line">    <span class="token key atrule">datasource</span><span class="token punctuation">:</span></span>
<span class="line">      <span class="token key atrule">driverClassName</span><span class="token punctuation">:</span> com.mysql.cj.jdbc.Driver</span>
<span class="line">      <span class="token key atrule">url</span><span class="token punctuation">:</span> jdbc<span class="token punctuation">:</span>mysql<span class="token punctuation">:</span>//dev <span class="token comment">#自定义</span></span>
<span class="line">      <span class="token key atrule">username</span><span class="token punctuation">:</span> root <span class="token comment"># 自定义</span></span>
<span class="line">      <span class="token key atrule">password</span><span class="token punctuation">:</span> root <span class="token comment"># 自定义</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>application-test.yml（测试）</h2>
<div class="language-yaml line-numbers-mode" data-highlighter="prismjs" data-ext="yml"><pre><code class="language-yaml"><span class="line"><span class="token key atrule">spring</span><span class="token punctuation">:</span></span>
<span class="line">  <span class="token key atrule">jdbc</span><span class="token punctuation">:</span></span>
<span class="line">    <span class="token key atrule">datasource</span><span class="token punctuation">:</span></span>
<span class="line">      <span class="token key atrule">driverClassName</span><span class="token punctuation">:</span> com.mysql.cj.jdbc.Driver</span>
<span class="line">      <span class="token key atrule">url</span><span class="token punctuation">:</span> jdbc<span class="token punctuation">:</span>mysql<span class="token punctuation">:</span>//test <span class="token comment">#自定义</span></span>
<span class="line">      <span class="token key atrule">username</span><span class="token punctuation">:</span> root <span class="token comment">#自定义</span></span>
<span class="line">      <span class="token key atrule">password</span><span class="token punctuation">:</span> root <span class="token comment">#自定义</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>application-prod.yml（生产）</h2>
<div class="language-yaml line-numbers-mode" data-highlighter="prismjs" data-ext="yml"><pre><code class="language-yaml"><span class="line"><span class="token key atrule">spring</span><span class="token punctuation">:</span></span>
<span class="line">  <span class="token key atrule">jdbc</span><span class="token punctuation">:</span></span>
<span class="line">    <span class="token key atrule">datasource</span><span class="token punctuation">:</span></span>
<span class="line">      <span class="token key atrule">driverClassName</span><span class="token punctuation">:</span> com.mysql.cj.jdbc.Driver</span>
<span class="line">      <span class="token key atrule">url</span><span class="token punctuation">:</span> jdbc<span class="token punctuation">:</span>mysql<span class="token punctuation">:</span>//prod <span class="token comment">#自定义</span></span>
<span class="line">      <span class="token key atrule">username</span><span class="token punctuation">:</span> root <span class="token comment">#自定义</span></span>
<span class="line">      <span class="token key atrule">password</span><span class="token punctuation">:</span> root <span class="token comment">#自定义</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>application.yml（主配置文件）</h2>
<div class="language-yaml line-numbers-mode" data-highlighter="prismjs" data-ext="yml"><pre><code class="language-yaml"><span class="line"><span class="token key atrule">spring</span><span class="token punctuation">:</span></span>
<span class="line">  <span class="token key atrule">profiles</span><span class="token punctuation">:</span></span>
<span class="line">    <span class="token key atrule">active</span><span class="token punctuation">:</span> dev</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>静态资源映射</h2>
<p>默认将 /** 所有访问映射到以下目录</p>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">classpath:/static</span>
<span class="line">classpath:/public</span>
<span class="line">classpath:/resources</span>
<span class="line">classpath:/META-INF/resources     /src/main/resources</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>正常情况下，我们只需要将我们的静态资源放到src/main/resource/static这个目录下即可正常访问，也不需要额外再去创建其他静态资源目录。</p>
<p>但是如果我们想自定义一下目录，则可以在application.properties添加spring.resources.static-locations：来指定位置</p>
<div class="language-yaml line-numbers-mode" data-highlighter="prismjs" data-ext="yml"><pre><code class="language-yaml"><span class="line"><span class="token key atrule">spring</span><span class="token punctuation">:</span></span>
<span class="line">  <span class="token key atrule">web</span><span class="token punctuation">:</span></span>
<span class="line">    <span class="token key atrule">resources</span><span class="token punctuation">:</span></span>
<span class="line">      <span class="token key atrule">static-locations</span><span class="token punctuation">:</span> /META<span class="token punctuation">-</span>INF/resources/<span class="token punctuation">,</span>classpath<span class="token punctuation">:</span>/resources/<span class="token punctuation">,</span>classpath<span class="token punctuation">:</span>/static/<span class="token punctuation">,</span>classpath<span class="token punctuation">:</span>/public/</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>如果我们想将html页面资源放在src/main/resource/webapp下，只需设置spring.resources.static-locations=classpath:/webapp/,即可直接访问到,但是会覆盖前面的四条设置。所以直接在后面追加一条即可。</p>
<div class="language-yaml line-numbers-mode" data-highlighter="prismjs" data-ext="yml"><pre><code class="language-yaml"><span class="line"><span class="token key atrule">spring</span><span class="token punctuation">:</span></span>
<span class="line">  <span class="token key atrule">web</span><span class="token punctuation">:</span></span>
<span class="line">    <span class="token key atrule">resources</span><span class="token punctuation">:</span></span>
<span class="line">      <span class="token key atrule">static-locations</span><span class="token punctuation">:</span> /META<span class="token punctuation">-</span>INF/resources/<span class="token punctuation">,</span>classpath<span class="token punctuation">:</span>/resources/<span class="token punctuation">,</span>classpath<span class="token punctuation">:</span>/static/<span class="token punctuation">,</span>classpath<span class="token punctuation">:</span>/public/<span class="token punctuation">,</span>classpath<span class="token punctuation">:</span>/webapp/</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>直接指定一个硬盘上的任意目录</p>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">#自定义的属性，指定了一个路径，注意要以/结尾</span>
<span class="line">upload-path=D:/verifies/</span>
<span class="line"></span>
<span class="line">#会覆盖默认配置，所以需要将默认的也加上否则static、public等这些默认静态资源路径将不能再被使用</span>
<span class="line">spring.web.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,classpath:/webapp/,file:${upload-path}</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Library - Maven - SpringBoot 3 - 配置文件 - YAML文件</title>
      <link>https://blog.magictable.ha.cn/software/Library-Maven-SpringBoot3-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6-YAML%E6%96%87%E4%BB%B6.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Maven-SpringBoot3-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6-YAML%E6%96%87%E4%BB%B6.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Maven - SpringBoot 3 - 配置文件 - YAML文件</source>
      <description>文章摘要： SpringBoot3 配置文件中的属性汇总。 默认配置 相关信息 springBoot3的默认配置 服务 服务器端口：8080 日志 使用的是Logback日志框架实现 日志级别：info server 说明 服务器相关配置的属性。 属性 server.port：设置服务器端口。 案例 logging 说明 日志相关配置的属性。 属性 l...</description>
      <category>软件程序/代码类库</category>
      <pubDate>Sun, 10 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> SpringBoot3 配置文件中的属性汇总。</p>
<!-- more -->
<h2>默认配置</h2>
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>springBoot3的默认配置</p>
<p>服务</p>
<ul>
<li>服务器端口：8080</li>
</ul>
<p>日志</p>
<ul>
<li>使用的是Logback日志框架实现</li>
<li>日志级别：info</li>
</ul>
</div>
<h2>server</h2>
<p>说明</p>
<blockquote>
<ul>
<li>服务器相关配置的属性。</li>
</ul>
</blockquote>
<p>属性</p>
<blockquote>
<ul>
<li><code>server.port</code>：设置服务器端口。</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-yaml line-numbers-mode" data-highlighter="prismjs" data-ext="yml"><pre><code class="language-yaml"><span class="line"><span class="token key atrule">server</span><span class="token punctuation">:</span></span>
<span class="line">	<span class="token key atrule">port</span><span class="token punctuation">:</span> <span class="token number">8080</span>  <span class="token comment"># 服务器端口号</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h2>logging</h2>
<p>说明</p>
<blockquote>
<ul>
<li>日志相关配置的属性。</li>
</ul>
</blockquote>
<p>属性</p>
<blockquote>
<ul>
<li><code>logging.level</code>：日志级别。</li>
<li><code>logging.pattern.console</code>：日志格式。</li>
<li><code>logging.file.name</code>：日志文件的名称。</li>
<li><code>logging.file.path</code>：日志文件的保存位置。</li>
<li><code>logging.logback.rollingpolicy.file-name-pattern</code>：归档的日志文件名的格式。</li>
<li><code>logging.logback.rollingpolicy.clean-history-on-start</code>：是否在启动时清除存档日志文件。</li>
<li><code>logging.logback.rollingpolicy.max-file-size</code>：归档前日志文件的最大大小。</li>
<li><code>logging.logback.rollingpolicy.max-history</code>：保留日志存档的天数（默认7天）。</li>
<li><code>logging.logback.rollingpolicy.total-size-cap</code>：删除日志档案之前可以使用的总大小。</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-yaml line-numbers-mode" data-highlighter="prismjs" data-ext="yml"><pre><code class="language-yaml"><span class="line"><span class="token key atrule">logging</span><span class="token punctuation">:</span></span>
<span class="line">	<span class="token comment"># 日志级别</span></span>
<span class="line">	<span class="token key atrule">level</span><span class="token punctuation">:</span> info</span>
<span class="line">	<span class="token comment"># 日志格式</span></span>
<span class="line">	<span class="token key atrule">pattern</span><span class="token punctuation">:</span></span>
<span class="line">		<span class="token key atrule">console</span><span class="token punctuation">:</span> '%clr(%d<span class="token punctuation">{</span>$<span class="token punctuation">{</span>LOG_DATEFORMAT_PATTERN<span class="token punctuation">:</span><span class="token punctuation">-</span>yyyy<span class="token punctuation">-</span>MM<span class="token punctuation">-</span>dd HH<span class="token punctuation">:</span>mm<span class="token punctuation">:</span>ss.SSS<span class="token punctuation">}</span><span class="token punctuation">}</span>)<span class="token punctuation">{</span>faint<span class="token punctuation">}</span> %clr($<span class="token punctuation">{</span>LOG_LEVEL_PATTERN<span class="token punctuation">:</span><span class="token punctuation">-</span>%5p<span class="token punctuation">}</span>) %clr($<span class="token punctuation">{</span>PID<span class="token punctuation">:</span><span class="token punctuation">-</span> <span class="token punctuation">}</span>)<span class="token punctuation">{</span>magenta<span class="token punctuation">}</span> %clr(</span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Library - Maven - SpringBoot 3 - 问题总结 - 手动搭建基于Maven的项目</title>
      <link>https://blog.magictable.ha.cn/software/Library-Maven-SpringBoot3-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E6%89%8B%E5%8A%A8%E6%90%AD%E5%BB%BA%E5%9F%BA%E4%BA%8EMaven%E7%9A%84%E9%A1%B9%E7%9B%AE.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Maven-SpringBoot3-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E6%89%8B%E5%8A%A8%E6%90%AD%E5%BB%BA%E5%9F%BA%E4%BA%8EMaven%E7%9A%84%E9%A1%B9%E7%9B%AE.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Maven - SpringBoot 3 - 问题总结 - 手动搭建基于Maven的项目</source>
      <description>文章摘要： Maven项目。 相关信息 外部相关文章 内部相关文章 Maven项目的目录结构： 1.继承父级项目 在pom.xml文件中添加如下内容： 2.SpringBoot启动类 3.SpringBoot启动类-自定义Java配置类</description>
      <category>软件程序/代码类库</category>
      <pubDate>Sun, 10 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Maven项目。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li></li>
</ul>
<p>内部相关文章</p>
<ul>
<li>Maven项目的目录结构：<a href="/software/Package-Maven-%E7%BA%A6%E5%AE%9A.html#%E9%A1%B9%E7%9B%AE%E7%BB%93%E6%9E%84" target="_blank">Package-Maven-约定</a></li>
</ul>
</div>
<h2>1.继承父级项目</h2>
<p>在<code>pom.xml</code>文件中添加如下内容：</p>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token comment">&lt;!--继承父级项目--&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>parent</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!--引入并继承spring boot提供的父级pom.xml--&gt;</span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.springframework.boot<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>spring-boot-starter-parent<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>3.3.1<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>parent</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line"><span class="token comment">&lt;!-- 引入依赖 --&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependencies</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependencies</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line"><span class="token comment">&lt;!--设置构建工具--&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>build</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token comment">&lt;!--插件--&gt;</span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>plugins</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">		<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>plugin</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!--添加Spring Boot的打包插件依赖--&gt;</span></span>
<span class="line">			<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.springframework.boot<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">			<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>spring-boot-maven-plugin<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">		<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>plugin</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>plugins</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>build</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>2.<code>SpringBoot</code>启动类</h2>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>boot<span class="token punctuation">.</span></span><span class="token class-name">SpringApplication</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>boot<span class="token punctuation">.</span>autoconfigure<span class="token punctuation">.</span></span><span class="token class-name">SpringBootApplication</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token annotation punctuation">@SpringBootApplication</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">App</span> <span class="token punctuation">{</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> ages<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">SpringApplication</span><span class="token punctuation">.</span><span class="token function">run</span><span class="token punctuation">(</span><span class="token class-name">App</span><span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">,</span> ages<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line">    </span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>3.<code>SpringBoot</code>启动类-自定义Java配置类</h2>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>boot<span class="token punctuation">.</span></span><span class="token class-name">Banner</span></span><span class="token punctuation">;</span>  </span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>boot<span class="token punctuation">.</span></span><span class="token class-name">SpringApplication</span></span><span class="token punctuation">;</span>  </span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>boot<span class="token punctuation">.</span>autoconfigure<span class="token punctuation">.</span></span><span class="token class-name">SpringBootApplication</span></span><span class="token punctuation">;</span>  </span>
<span class="line">  </span>
<span class="line"><span class="token annotation punctuation">@SpringBootApplication</span>  </span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">App</span> <span class="token punctuation">{</span>  </span>
<span class="line">  </span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span>  </span>
<span class="line">  </span>
<span class="line">        <span class="token comment">// 实例化一个新的spring boot启动类  </span></span>
<span class="line">        <span class="token class-name">SpringApplication</span> springApplication <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">SpringApplication</span><span class="token punctuation">(</span><span class="token class-name">App</span><span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  </span>
<span class="line">  </span>
<span class="line">        <span class="token comment">// 配置具体参数</span></span>
<span class="line">        springApplication<span class="token punctuation">.</span><span class="token function">setBannerMode</span><span class="token punctuation">(</span><span class="token class-name">Banner<span class="token punctuation">.</span>Mode</span><span class="token punctuation">.</span><span class="token constant">OFF</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  </span>
<span class="line">  </span>
<span class="line">        <span class="token comment">// 运行启动类  </span></span>
<span class="line">        springApplication<span class="token punctuation">.</span><span class="token function">run</span><span class="token punctuation">(</span>args<span class="token punctuation">)</span><span class="token punctuation">;</span>  </span>
<span class="line">    <span class="token punctuation">}</span>  </span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Gradle - 终端命令 - gradle</title>
      <link>https://blog.magictable.ha.cn/software/Package-Gradle-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-gradle.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Gradle-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-gradle.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Gradle - 终端命令 - gradle</source>
      <description>文章摘要： Gradle构建工具的命令查询手册。 ./gradlew assembleDebug：构建debug版本的APK。 ./gradlew assembleRelease：构建release版本的APK，通常用于发布。 ./gradlew installDebug：安装debug版本的APK到设备上。 ./gradlew clean：清理构建生...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sun, 10 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Gradle构建工具的命令查询手册。</p>
<!-- more -->
<ul>
<li><code>./gradlew assembleDebug</code>：构建debug版本的APK。</li>
<li><code>./gradlew assembleRelease</code>：构建release版本的APK，通常用于发布。</li>
<li><code>./gradlew installDebug</code>：安装debug版本的APK到设备上。</li>
<li><code>./gradlew clean</code>：清理构建生成的文件。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Gradle</title>
      <link>https://blog.magictable.ha.cn/software/Package-Gradle.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Gradle.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Gradle</source>
      <description>文章摘要： Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建工具。 简介 Gradle是一个开源的自动化构建工具，主要用于Java、Groovy、Kotlin和其他多种语言的项目。 结合了Ant和Maven的优点，提供了一个灵活、可扩展的构建系统。 使用Groovy或Kotlin作为其构建脚本语言，使得构建脚本更...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sun, 10 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建工具。</p>
<!-- more -->
<h2>简介</h2>
<ul>
<li>Gradle是一个开源的自动化构建工具，主要用于Java、Groovy、Kotlin和其他多种语言的项目。</li>
<li>结合了Ant和Maven的优点，提供了一个灵活、可扩展的构建系统。</li>
<li>使用Groovy或Kotlin作为其构建脚本语言，使得构建脚本更加简洁和易于维护。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>依赖管理</strong>：Gradle具有强大的依赖管理功能，可以自动下载和管理项目依赖的库。</li>
<li><strong>任务定义</strong>：允许用户通过简单的代码定义构建任务，这些任务可以是编译代码、运行测试、生成文档等。</li>
<li><strong>构建生命周期</strong>：Gradle定义了构建的生命周期，包括初始化、配置和执行阶段。</li>
<li><strong>插件系统</strong>：Gradle的插件系统允许扩展其功能，例如，Android插件使得Gradle能够构建Android应用。</li>
<li><strong>增量构建</strong>：Gradle支持增量构建，只重新构建改变的部分，从而提高构建效率。</li>
<li><strong>多项目构建</strong>：Gradle能够轻松地配置和管理多项目构建。</li>
<li><strong>自定义逻辑</strong>：用户可以编写自定义的构建逻辑，以满足特定的构建需求。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>学习曲线</strong>：虽然Gradle旨在简化构建过程，但它的灵活性和强大功能可能带来一定的学习曲线。</li>
<li><strong>性能</strong>：Gradle的构建速度通常很快，但复杂的构建脚本或大量的依赖可能会影响性能。</li>
<li><strong>配置</strong>：Gradle的配置文件（<code>build.gradle</code>）需要正确设置，错误的配置可能导致构建失败。</li>
<li><strong>版本兼容性</strong>：随着Gradle版本的更新，构建脚本可能需要相应的调整以保持兼容性。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>Java项目</strong>：Gradle适用于任何Java项目，包括传统的Java应用、Web应用和Android应用。</li>
<li><strong>多语言项目</strong>：Gradle支持多语言项目，可以在同一个项目中使用Java、Groovy、Kotlin等语言。</li>
<li><strong>大型项目</strong>：由于其强大的多项目构建支持，Gradle特别适合大型和复杂的项目。</li>
<li><strong>自定义构建需求</strong>：当项目有特殊的构建需求时，Gradle的灵活性和可扩展性可以满足这些需求。</li>
<li><strong>持续集成</strong>：Gradle可以很好地集成到持续集成系统中，如Jenkins、Travis CI等。</li>
</ul>
<h2>安装与卸载</h2>
<p>详细总结：<a href="/software/Package-Gradle-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html" target="_blank">Package-Gradle-安装与卸载</a></p>
<h2>终端命令</h2>
<p>详细总结：<a href="/software/Package-Gradle-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-gradle.html" target="_blank">Package-Gradle-终端命令-gradle</a></p>
<h2>配置文件</h2>
<p>详细总结：<a href=""></a></p>
<h2>热门推荐</h2>
<p>详细总结：<a href=""></a></p>
<h2>问题总结</h2>
<p>详细总结：<a href=""></a></p>
<h2>gradle项目目录结构</h2>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">项目/</span>
<span class="line">|-- .gradle/</span>
<span class="line">|-- gradle/</span>
<span class="line">    |-- wrapper/</span>
<span class="line">        |-- gradle-wrapper.jar  包含 Gradle Wrapper 代码的小型 JAR 文件。如果项目尚未安装,它负责下载并安装正确的Gradle版本。</span>
<span class="line">        |-- gradle-wrapper.properties  包含 Gradle Wrapper 的配置属性,例如分发 URL(可从此处下载 Gradle)以及分发类型(ZIP 或 TARBALL)。</span>
<span class="line">|-- build.gradle.kts</span>
<span class="line">|-- gradlew  基于Unix的系统,可作为包装`gradle-wrapper.jar`。它用于在基于 Unix 的系统上执行 Gradle 任务,而无需手动安装 Gradle。</span>
<span class="line">|-- gradlew.bat  批处理脚本(Windows)`gradlew`但在Windows系统上使用。</span>
<span class="line">|-- settings.gradle.kts</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>基础知识 - 规范 - 通用代码命名规范</title>
      <link>https://blog.magictable.ha.cn/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E8%A7%84%E8%8C%83-%E9%80%9A%E7%94%A8%E4%BB%A3%E7%A0%81%E5%91%BD%E5%90%8D%E8%A7%84%E8%8C%83.html</link>
      <guid>https://blog.magictable.ha.cn/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E8%A7%84%E8%8C%83-%E9%80%9A%E7%94%A8%E4%BB%A3%E7%A0%81%E5%91%BD%E5%90%8D%E8%A7%84%E8%8C%83.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">基础知识 - 规范 - 通用代码命名规范</source>
      <description>文章摘要： 摘要内容。 小驼峰命名法（camelCase） 将第二个单词的首字母大写，紧跟第一个单词的末尾。 例如：maxConnections 大驼峰命名法（CamelCase） 将每个单词的首字母大写，紧跟第一个单词的末尾。 例如：maxConnections。 小蛇形命名法（snake_case） 使用下划线来连接两个单词。 例如：max_con...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Sun, 10 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<p>小驼峰命名法（camelCase）</p>
<ul>
<li>将第二个单词的首字母大写，紧跟第一个单词的末尾。</li>
<li>例如：<code>maxConnections</code></li>
</ul>
<p>大驼峰命名法（CamelCase）</p>
<ul>
<li>将每个单词的首字母大写，紧跟第一个单词的末尾。</li>
<li>例如：<code>maxConnections</code>。</li>
</ul>
<p>小蛇形命名法（snake_case）</p>
<ul>
<li>使用下划线来连接两个单词。</li>
<li>例如：<code>max_connections</code>。</li>
</ul>
<p>大蛇形命名法（SNAKE_CASE）</p>
<ul>
<li>使用下划线连接所有单词，并且所有字母都大写，通常用于常量。</li>
<li>例如：<code>MAX_CONNECTIONS</code>。</li>
</ul>
<p>烤肉串命名法（kebab-case）</p>
<ul>
<li>使用连字符来连接两个单词。</li>
<li>提示：仅限于文件命名，不能在编程中作为变量命名。</li>
<li>例如：<code>max-connections</code>。</li>
</ul>
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<ul>
<li>命名是由大小写英文字母（<code>a-z</code>，<code>A-Z</code>）、数字（<code>0-9</code>）、下划线（<code>_</code>）组成。</li>
<li>开头第一个字符不能是数字。</li>
</ul>
</div>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li><strong>避免特殊字符</strong>：不要在键名中使用特殊字符。</li>
<li>如<code>!</code>, <code>@</code>, <code>#</code>, <code>$</code>, <code>%</code>, <code>^</code>, <code>&amp;</code>, <code>*</code>, <code>(</code>, <code>)</code>, <code>-</code>, <code>+</code>, <code>=</code>, <code>{</code>, <code>}</code>, <code>[</code>, <code>]</code>, <code>:</code>, <code>;</code>, <code>"</code>, <code>'</code>, <code>&lt;</code>, <code>&gt;</code>, <code>?</code>, <code>/</code>, <code>\</code>, <code>|</code>, <code>,</code>，<code>。</code></li>
</ul>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>基础知识 - 规范</title>
      <link>https://blog.magictable.ha.cn/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E8%A7%84%E8%8C%83.html</link>
      <guid>https://blog.magictable.ha.cn/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E8%A7%84%E8%8C%83.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">基础知识 - 规范</source>
      <description>文章摘要： 软件开发相关规范。 命名规范 代码命名规范： 版本控制规范 semver语义化版本控制规范： 接口规范 API接口规范：</description>
      <category>软件程序/程序语言</category>
      <pubDate>Sun, 10 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 软件开发相关规范。</p>
<!-- more -->
<h2>命名规范</h2>
<blockquote>
<ul>
<li>代码命名规范：<a href="/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E8%A7%84%E8%8C%83-%E9%80%9A%E7%94%A8%E4%BB%A3%E7%A0%81%E5%91%BD%E5%90%8D%E8%A7%84%E8%8C%83.html" target="_blank">基础知识-规范-通用代码命名规范</a></li>
</ul>
</blockquote>
<h2>版本控制规范</h2>
<blockquote>
<ul>
<li>semver语义化版本控制规范：<a href="/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E8%A7%84%E8%8C%83-semver%E8%AF%AD%E4%B9%89%E5%8C%96%E7%89%88%E6%9C%AC%E6%8E%A7%E5%88%B6%E8%A7%84%E8%8C%83.html" target="_blank">基础知识-规范-semver语义化版本控制规范</a></li>
</ul>
</blockquote>
<h2>接口规范</h2>
<blockquote>
<ul>
<li>API接口规范：<a href="/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E8%A7%84%E8%8C%83-swagger%E5%92%8COpenAPI%E6%8F%8F%E8%BF%B0%E8%A7%84%E8%8C%83.html" target="_blank">基础知识-规范-swagger和OpenAPI描述规范</a></li>
</ul>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Library - Maven - SpringBoot 3</title>
      <link>https://blog.magictable.ha.cn/software/Library-Maven-SpringBoot3.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Maven-SpringBoot3.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Maven - SpringBoot 3</source>
      <description>文章摘要： 摘要内容。 重要 条件和版本说明 ^ Java 17 Spring Framework 6 MySQL 8.0 相关信息 外部相关文章 参考第三方博客文章：博客园-yuey6670，讲述了项目依赖、配置文件、目录结构。 内部相关文章 SpringBoot 3 项目单元测试： SpringBoot 3 约定： 注释 当进行微服务开发时的专业术...</description>
      <category>软件程序/代码类库</category>
      <pubDate>Sat, 09 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<div class="hint-container important">
<p class="hint-container-title">重要</p>
<p>条件和版本说明</p>
<ul>
<li>^ Java 17</li>
<li>Spring Framework 6</li>
<li>MySQL 8.0</li>
</ul>
</div>
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li>参考第三方博客文章：<a href="https://www.cnblogs.com/yuey6670/p/18055037" target="_blank" rel="noopener noreferrer">博客园-yuey6670</a>，讲述了项目依赖、配置文件、目录结构。</li>
</ul>
<p>内部相关文章</p>
<ul>
<li>SpringBoot 3 项目单元测试：<a href="/software/Library-Maven-SpringBoot3-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E9%A1%B9%E7%9B%AE%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95.html" target="_blank">Library-Maven-SpringBoot3-热门推荐-项目单元测试</a></li>
<li>SpringBoot 3 约定：<a href="/software/Library-Maven-SpringBoot3-%E7%BA%A6%E5%AE%9A.html" target="_blank">Library-Maven-SpringBoot3-约定</a></li>
</ul>
</div>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>当进行微服务开发时的专业术语歧义：</p>
<ul>
<li>拆分模块（开发中） == 拆分多服务（部署中）</li>
</ul>
</div>
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>Spring Boot 3项目是基于 Spring Framework 6 的全新版本，旨在简化Spring应用的初始搭建以及开发过程。它提供了一系列的自动化配置，使得开发者能够快速启动并运行一个独立的、生产级别的基于Spring的应用。</li>
<li>spring boot 是以启动器为单位，整合各种需求的依赖。</li>
<li>官方文档：<a href="https://spring.io/projects/spring-boot#learn" target="_blank" rel="noopener noreferrer">网站链接</a>，国内网速不稳定。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>自动配置</strong>：根据项目中添加的依赖自动配置Spring应用。</li>
<li><strong>独立运行</strong>：内嵌Tomcat、Jetty或Undertow，无需部署到外部服务器。</li>
<li><strong>简化依赖管理</strong>：通过提供一系列的"Starters"，简化了依赖的添加和管理。</li>
<li><strong>生产就绪特性</strong>：提供了一系列生产就绪特性，如指标、健康检查和外部化配置。</li>
<li><strong>无代码生成和XML配置</strong>：不需要代码生成，也不需要XML配置文件。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>兼容性</strong>：Spring Boot 3 基于 Spring Framework 6，可能不兼容早期版本的Spring应用。</li>
<li><strong>JDK版本</strong>：需要JDK 17或更高版本。</li>
<li><strong>依赖升级</strong>：在迁移旧项目到 Spring Boot 3 时，需要注意第三方依赖的兼容性。</li>
<li><strong>配置变更</strong>：部分配置属性可能在新版本中发生变化，需要根据官方文档进行相应的调整。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>微服务架构</strong>：适用于构建微服务架构中的独立服务。</li>
<li><strong>快速原型开发</strong>：适合快速启动新项目，进行原型设计和开发。</li>
<li><strong>全栈开发</strong>：提供全栈开发支持，包括前端、后端、数据库等。</li>
<li><strong>企业级应用</strong>：适用于构建大型企业级应用，提供丰富的功能和生产就绪特性。</li>
<li><strong>云原生应用</strong>：支持云原生应用的开发，与容器化技术（如Docker）和编排工具（如Kubernetes）无缝集成。</li>
</ul>
<h2>Maven坐标</h2>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token comment">&lt;!-- 继承父级项目 --&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>parent</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- 引入并继承spring boot提供的父级pom.xml --&gt;</span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.springframework.boot<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>spring-boot-starter-parent<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>3.3.1<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>parent</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>项目搭建</h2>
<ul>
<li>使用Maven来搭建SpringBoot项目的流程：<a href="/software/Library-Maven-SpringBoot3-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E6%89%8B%E5%8A%A8%E6%90%AD%E5%BB%BA%E5%9F%BA%E4%BA%8EMaven%E7%9A%84%E9%A1%B9%E7%9B%AE.html" target="_blank">Library-Maven-SpringBoot3-问题总结-手动搭建基于Maven的项目</a></li>
</ul>
<h2>运行流程</h2>
<p>详细总结：<a href="/software/Library-Maven-SpringBoot3-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E4%BB%A3%E7%A0%81%E8%BF%90%E8%A1%8C%E6%B5%81%E7%A8%8B.html" target="_blank">Library-Maven-SpringBoot3-问题总结-代码运行流程</a></p>
<h2>场景启动器</h2>
<p>命名规范</p>
<ul>
<li>官方提供的场景：命名为：<code>spring-boot-starter-*</code></li>
<li>第三方提供场景：命名为：<code>*-spring-boot-starter</code></li>
</ul>
<p>详细总结：<a href="/software/Library-Maven-SpringBoot3-%E5%9C%BA%E6%99%AF%E5%90%AF%E5%8A%A8%E5%99%A8%EF%BC%88starter%EF%BC%89.html" target="_blank">Library-Maven-SpringBoot3-场景启动器（starter）</a></p>
<h2>配置文件</h2>
<ul>
<li>SpringBoot使用一个全局的配置文件，核心配置文件，配置文件名在约定的情况下，名字是固定的，</li>
<li>配置文件的作用：修改SpringBoot自动配置的默认值，实现自定义。</li>
</ul>
<p>SpringBoot配置文件支持的属性汇总：<a href="/software/Library-Maven-SpringBoot3-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6-YAML%E6%96%87%E4%BB%B6.html" target="_blank">Library-Maven-SpringBoot3-配置文件-YAML文件</a></p>
<p>SpringBoot项目配置文件推荐方案：<a href="/software/Library-Maven-SpringBoot3-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E9%85%8D%E7%BD%AE%E6%96%B9%E6%A1%88.html" target="_blank">Library-Maven-SpringBoot3-热门推荐-配置方案</a></p>
<h3>配置文件格式</h3>
<p><code>application.properties</code>配置文件</p>
<ul>
<li>Properties格式文件的语法规则：<a href="/software/Language-Properties.html" target="_blank">Language-Properties</a></li>
</ul>
<p><code>application.yml</code>配置文件</p>
<ul>
<li>YAML格式文件的语法规则：<a href="/software/Language-YAML.html" target="_blank">Language-YAML</a></li>
</ul>
<h3>加载顺序</h3>
<p>根据文件格式</p>
<ul>
<li><code>yml</code> &lt; <code>yaml</code> &lt; <code>properties</code>配置文件。</li>
</ul>
<p>根据文件位置</p>
<table>
<thead>
<tr>
<th style="text-align:left">配置文件位置</th>
<th style="text-align:left">说明</th>
<th style="text-align:center">优先级</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>classpath:/</code></td>
<td style="text-align:left">资源根路径</td>
<td style="text-align:center">最低</td>
</tr>
<tr>
<td style="text-align:left"><code>classpath:/config/*/</code></td>
<td style="text-align:left">资源根路径下的config目录</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:left"><code>classpath:/config/</code></td>
<td style="text-align:left">资源根路径下的config目录</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:left"><code>file:./</code></td>
<td style="text-align:left">项目根路径</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:left"><code>file:./config/*/</code></td>
<td style="text-align:left"></td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:left"><code>file:./config/</code></td>
<td style="text-align:left">项目根路径下的config目录</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:left"><code>java -jar &lt;项目名&gt;.jar --spring.config.location=&lt;配置文件位置&gt;</code></td>
<td style="text-align:left">命令行指定文件</td>
<td style="text-align:center">最大</td>
</tr>
</tbody>
</table>
<h3>Profile文件的加载</h3>
<ul>
<li>
<p>Profile的意思是配置，对于应用程序来说，不同的环境需要不同的配置。</p>
</li>
<li>
<p>SpringBoot框架提供了多profile的管理功能，可以和私用profile功能来区分不同环境的配置。</p>
</li>
<li>
<p>spring官方给出的语法规则是：<code>application-{profile}.properties(.yml)</code></p>
</li>
<li>
<p>默认配置环境（<code>application.properties</code>）</p>
</li>
<li>
<p>开发配置环境（<code>application-dev.properties</code>）</p>
</li>
<li>
<p>生产配置环境（<code>application-prod.properties</code>）</p>
</li>
</ul>
<p>案例</p>
<ul>
<li>实现两种环境下进行切换，需要在默认配置环境（<code>application.properties</code>）中加入如下内容即可。</li>
</ul>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">spring.profiles.active = prod</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>读取配置文件属性绑定到Java类属性上</h3>
<p>详细总结：<a href="/software/Library-Maven-SpringBoot3-%E6%B3%A8%E8%A7%A3.html#%E6%B3%A8%E5%85%A5%EF%BC%88%E7%BB%91%E5%AE%9A%EF%BC%89%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E5%B1%9E%E6%80%A7" target="_blank">Library-Maven-SpringBoot3-注解</a></p>
<h2>自动配置</h2>
<h3>自动配置类的原理</h3>
<blockquote>
<p></p>
</blockquote>
<h2>DevTools热部署</h2>
<ul>
<li>Spring Boot DevTools 是一个为开发者提供便捷的工具集。</li>
</ul>
<p>主要功能</p>
<blockquote>
<p><strong>自动重启</strong></p>
<ul>
<li>当你的代码发生变化并保存时，Spring Boot 应用程序会自动重启。</li>
<li>这使得开发者能够快速看到代码更改后的效果，无需手动停止和启动应用程序。</li>
</ul>
<p><strong>实时重载</strong></p>
<ul>
<li>对于静态资源和视图模板（如 Thymeleaf）的更改，应用程序会实时重载这些资源，无需重启。</li>
<li>这意味着你可以立即看到对 HTML、CSS 或 JavaScript 文件的更改。</li>
</ul>
</blockquote>
<p>实现步骤</p>
<p>详细总结：<a href="/software/Library-Maven-SpringBoot3-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-DevTools%E4%BE%9D%E8%B5%96%E5%AE%9E%E7%8E%B0%E7%83%AD%E9%83%A8%E7%BD%B2.html" target="_blank">Library-Maven-SpringBoot3-问题总结-DevTools依赖实现热部署</a></p>
<h2>日志</h2>
<ul>
<li>SpringBott3 默认使用的是Logback日志框架实现</li>
<li>日志的应用程序属性：<a href="/software/Library-Maven-SpringBoot3-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6-YAML%E6%96%87%E4%BB%B6.html" target="_blank">Library-Maven-SpringBoot3-配置文件-YAML文件</a></li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>日志级别和日志配置文件，请查看具体的日志依赖，本文章不再详细展开。</p>
</div>
<h3>切换其他日志框架</h3>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>SLF4J只能运行1个桥接器，因此需要取消掉一个桥接器。</p>
</div>
<p>通过将依赖中手动把排除掉。</p>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token comment">&lt;!-- 引入依赖 --&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependencies</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">		<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.springframework.boot<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">		<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>spring-boot-starter-web<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">		<span class="token comment">&lt;!-- 排除依赖 --&gt;</span></span>
<span class="line">		<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>exclusions</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">			<span class="token comment">&lt;!-- 排除具体依赖 --&gt;</span></span>
<span class="line">			<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>exclusion</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">		        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>spring-boot-starter-logging<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">		        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.springframework.boot<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">		    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>exclusion</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">		<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>exclusions</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependencies</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>添加log4j2的场景启动器</p>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token comment">&lt;!-- 引入依赖 --&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependencies</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">		<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.springframework.boot<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">		<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>spring-boot-starter-log4j2<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependencies</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>添加log4j的日志配置文件</p>
<h2>Web开发</h2>
<p>调用rest http接口</p>
<ul>
<li>通过RestTemplate调用：这是Spring提供的用于访问Rest服务的。提供的一种模板类来进行操作。</li>
<li>适用场景：在微服务架构下，服务之间通过网络远程调用。</li>
</ul>
<p>WebClient</p>
<ul>
<li>无阻塞。依赖无响应式的应用。</li>
</ul>
<p>通过MockMvc测试</p>
<p>springboot整合swagger</p>
<h2>spring MVC</h2>
<h2>Servlet容器</h2>
<h2>spring boot 与AOP</h2>
<h2>整合第三方功能</h2>
<p>详细总结：<a href="/software/Library-Maven-SpringBoot3-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E6%95%B4%E5%90%88%E7%AC%AC%E4%B8%89%E6%96%B9%E5%8A%9F%E8%83%BD.html" target="_blank">Library-Maven-SpringBoot3-问题总结-整合第三方功能</a></p>
<p>整合Mybatis</p>
<p>整合Druid</p>
<h2>自定义Starter启动器</h2>
<h2>集成第三方中间件</h2>
<p>详细总结：<a href="/software/Library-Maven-SpringBoot3-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E9%9B%86%E6%88%90%E7%AC%AC%E4%B8%89%E6%96%B9%E4%B8%AD%E9%97%B4%E4%BB%B6.html" target="_blank">Library-Maven-SpringBoot3-问题总结-集成第三方中间件</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Package - MySQL - 热门推荐 - 表设计规范</title>
      <link>https://blog.magictable.ha.cn/software/Package-MySQL-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E8%A1%A8%E8%AE%BE%E8%AE%A1%E8%A7%84%E8%8C%83.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-MySQL-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E8%A1%A8%E8%AE%BE%E8%AE%A1%E8%A7%84%E8%8C%83.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - MySQL - 热门推荐 - 表设计规范</source>
      <description>文章摘要： MySQL数据库表设计方案。 命名规范 表名：使用名词，尽量简洁且具有描述性，例如 user, order。 字段名：使用名词或动名词，避免使用缩写，例如 user_id, order_status。 详细总结： create创建、read读取、update更新、delete删除 每个字段都要有注释，尤其涉及枚举时，需要详细说明枚举值。 命...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 09 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> MySQL数据库表设计方案。</p>
<!-- more -->
<h2>命名规范</h2>
<ul>
<li><strong>表名</strong>：使用名词，尽量简洁且具有描述性，例如 <code>user</code>, <code>order</code>。</li>
<li><strong>字段名</strong>：使用名词或动名词，避免使用缩写，例如 <code>user_id</code>, <code>order_status</code>。</li>
</ul>
<p>详细总结：<a href="/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E8%A7%84%E8%8C%83-%E9%80%9A%E7%94%A8%E4%BB%A3%E7%A0%81%E5%91%BD%E5%90%8D%E8%A7%84%E8%8C%83.html" target="_blank">基础知识-规范-通用代码命名规范</a></p>
<p>create创建、read读取、update更新、delete删除</p>
<p>|      字段      | 说明           |
| :</p>
]]></content:encoded>
    </item>
    <item>
      <title>Package - MySQL - 热门推荐</title>
      <link>https://blog.magictable.ha.cn/software/Package-MySQL-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-MySQL-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - MySQL - 热门推荐</source>
      <description>文章摘要： 文章摘要。 表设计规范 详细总结：</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 09 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 文章摘要。</p>
<!-- more -->
<h2>表设计规范</h2>
<p>详细总结：<a href="/software/Package-MySQL-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E8%A1%A8%E8%AE%BE%E8%AE%A1%E8%A7%84%E8%8C%83.html" target="_blank">Package-MySQL-热门推荐-表设计规范</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Architecture - 单体架构</title>
      <link>https://blog.magictable.ha.cn/software/Architecture-%E5%8D%95%E4%BD%93%E6%9E%B6%E6%9E%84.html</link>
      <guid>https://blog.magictable.ha.cn/software/Architecture-%E5%8D%95%E4%BD%93%E6%9E%B6%E6%9E%84.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Architecture - 单体架构</source>
      <description>文章摘要： 将所有的功能模块（如用户界面、业务逻辑、数据访问层等）集中在一个单一的代码库中，这些模块被打包成一个独立的单元进行部署。 简介 简要说明 单体（Monolithic）软件架构。 将所有的功能模块（如用户界面、业务逻辑、数据访问层等）集中在一个单一的代码库中，这些模块被打包成一个独立的单元进行部署。 在单体架构中，所有的组件都运行在同一个进程...</description>
      <category>软件程序/软件架构</category>
      <pubDate>Fri, 08 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 将所有的功能模块（如用户界面、业务逻辑、数据访问层等）集中在一个单一的代码库中，这些模块被打包成一个独立的单元进行部署。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>单体（Monolithic）软件架构。</li>
<li>将所有的功能模块（如用户界面、业务逻辑、数据访问层等）集中在一个单一的代码库中，这些模块被打包成一个独立的单元进行部署。</li>
<li>在单体架构中，所有的组件都运行在同一个进程中，通常部署在同一个服务器上。</li>
</ul>
<p>主要特点</p>
<ul>
<li><strong>集中管理</strong>：所有的功能模块都在一个代码库中，便于集中管理和维护。</li>
<li><strong>简化部署</strong>：整个应用作为一个单一的单元进行部署，简化了部署过程。</li>
<li><strong>易于开发</strong>：在项目初期，由于所有功能都在一个项目中，开发相对简单，不需要处理复杂的模块间通信问题。</li>
<li><strong>资源共享</strong>：所有模块共享同一个数据库和资源，易于实现资源共享和事务管理。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>代码库膨胀</strong>：随着项目的发展，代码库可能会变得非常庞大，难以维护。</li>
<li><strong>耦合度高</strong>：模块之间可能存在高度耦合，修改一个模块可能会影响到其他模块。</li>
<li><strong>扩展性差</strong>：单体应用难以水平扩展，当需要处理更多请求时，可能需要更强的服务器资源。</li>
<li><strong>部署风险</strong>：每次更新都需要重新部署整个应用，可能会引入新的错误。</li>
<li><strong>技术栈受限</strong>：整个应用通常使用相同的技术栈，难以引入新的技术或框架。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>小型项目</strong>：对于规模较小、需求明确且不太可能快速发展的项目，单体架构是一个简单有效的选择。</li>
<li><strong>初创公司</strong>：在初创公司中，快速推向市场是关键，单体架构可以快速实现和部署。</li>
<li><strong>资源有限</strong>：当团队资源有限，无法支持复杂的分布式系统时，单体架构可以简化开发和运维工作。</li>
<li><strong>简单应用</strong>：对于业务逻辑不复杂、用户量不大的应用，单体架构足以满足需求。</li>
</ul>
<h2>技术框架图</h2>
<blockquote>
<p></p>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Docker - Apt - 问题总结</title>
      <link>https://blog.magictable.ha.cn/software/Package-Apt-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Apt-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Docker - Apt - 问题总结</source>
      <description>文章摘要： Apt常见问题总结。 添加第三方软件仓库和导入GPG密钥 警告 在Debian和Ubuntu系统中，apt的密钥管理确实经历了一些变化。传统的apt-key命令用于管理存储在/etc/apt/trusted.gpg中的GPG密钥，但现在这种方法已被标记为不推荐使用。新的做法是使用apt本身来管理密钥，这通常涉及到使用.gpg文件来存储密钥，...</description>
      <category>软件程序/软件包</category>
      <pubDate>Thu, 07 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Apt常见问题总结。</p>
<!-- more -->
<h2>添加第三方软件仓库和导入GPG密钥</h2>
<div class="hint-container warning">
<p class="hint-container-title">警告</p>
<p>在Debian和Ubuntu系统中，apt的密钥管理确实经历了一些变化。传统的<code>apt-key</code>命令用于管理存储在<code>/etc/apt/trusted.gpg</code>中的GPG密钥，但现在这种方法已被标记为不推荐使用。新的做法是使用<code>apt</code>本身来管理密钥，这通常涉及到使用<code>.gpg</code>文件来存储密钥，并将这些文件放置在<code>/etc/apt/trusted.gpg.d/</code>目录中。</p>
</div>
<p>详细总结：<a href="/software/Package-Apt-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E6%B7%BB%E5%8A%A0%E7%AC%AC%E4%B8%89%E6%96%B9%E8%BD%AF%E4%BB%B6%E4%BB%93%E5%BA%93%E5%92%8C%E5%AF%BC%E5%85%A5GPG%E5%AF%86%E9%92%A5.html" target="_blank">Package-Apt-问题总结-添加第三方软件仓库和导入GPG密钥</a></p>
<h2>软件仓库的GPG密钥过时警告</h2>
<p>详细总结：<a href="/software/Package-Apt-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E8%BD%AF%E4%BB%B6%E4%BB%93%E5%BA%93%E7%9A%84GPG%E5%AF%86%E9%92%A5%E8%BF%87%E6%97%B6%E8%AD%A6%E5%91%8A.html" target="_blank">Package-Apt-问题总结-软件仓库的GPG密钥过时警告</a></p>
<h2>如何指定软件包不会被apt进行自动更新（未解决）</h2>
<div class="hint-container warning">
<p class="hint-container-title">警告</p>
<ul>
<li>比如：MySQL数据库软件在生产环境中不能随意改变版本，则将导致软件版本冲突。</li>
<li>因此，如何实现指定软件不会被APT进行自动更新，或限制APT进行修改版本的操作。</li>
</ul>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Docker - 安装与卸载</title>
      <link>https://blog.magictable.ha.cn/software/Package-Docker-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Docker-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Docker - 安装与卸载</source>
      <description>文章摘要： Docker 在 Debian Linux 系统中的安装和卸载。 软件获取 官方下载地址：docker官网 安装 - apt包管理器 提示：此处展示的是Debian Linux中的安装，并且使用的是华为的镜像站。 卸载 - apt包管理器 安装 - 预编译 卸载 - 预编译 安装 - 源代码 卸载 - 源代码</description>
      <category>软件程序/软件包</category>
      <pubDate>Thu, 07 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Docker 在 Debian Linux 系统中的安装和卸载。</p>
<!-- more -->
<h2>软件获取</h2>
<ul>
<li>官方下载地址：<a href="https://www.docker.com/" target="_blank" rel="noopener noreferrer">docker官网</a></li>
</ul>
<h2>安装 - apt包管理器</h2>
<p>提示：此处展示的是Debian Linux中的安装，并且使用的是华为的镜像站。</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 安装前置依赖</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">apt-get</span> <span class="token function">install</span> apt-transport-https ca-certificates <span class="token function">curl</span> gnupg2 software-properties-common</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 信任Docker的GPG公钥，华为云镜像源。</span></span>
<span class="line"><span class="token function">curl</span> <span class="token parameter variable">-fsSL</span> https://mirrors.huaweicloud.com/docker-ce/linux/debian/gpg <span class="token operator">|</span> <span class="token function">sudo</span> apt-key <span class="token function">add</span> - </span>
<span class="line"></span>
<span class="line"><span class="token comment"># 选择对应的CPU架构</span></span>
<span class="line"><span class="token comment"># 添加软件仓库（amd64、X86_64），为apt添加镜像源。</span></span>
<span class="line"><span class="token function">sudo</span> add-apt-repository <span class="token string">"deb [arch=amd64] https://mirrors.huaweicloud.com/docker-ce/linux/debian <span class="token variable"><span class="token variable">$(</span>lsb_release <span class="token parameter variable">-cs</span><span class="token variable">)</span></span> stable"</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>卸载 - apt包管理器</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">sudo</span> <span class="token function">apt-get</span> remove <span class="token function">docker</span> docker-engine docker.io</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>安装 - 预编译</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>卸载 - 预编译</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>安装 - 源代码</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>卸载 - 源代码</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Node.js - npx - 终端命令 - npx</title>
      <link>https://blog.magictable.ha.cn/software/Package-NodeJS-npx-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-npx.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-NodeJS-npx-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-npx.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Node.js - npx - 终端命令 - npx</source>
      <description>文章摘要： npx 是 Node.js中 “npm包管理器” 的一个命令，自从 npm@5.2.0 版本开始被引入。 相关信息 外部相关文章 有关npx解释的视频课程：npx解释的视频课程 内部相关文章 运行命令 注释 在使用命令的时候优先查询node_modules/目录下的命令工具。 实现执行一次性脚本和工具更为方便和快捷，减少全局安装的需求。</description>
      <category>软件程序/软件包</category>
      <pubDate>Thu, 07 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> npx 是 Node.js中 “npm包管理器” 的一个命令，自从 <code>npm@5.2.0</code> 版本开始被引入。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li>有关npx解释的视频课程：<a href="https://www.bilibili.com/video/BV1U44y1f7ZZ?vd_source=262edcbbd8e80915a7dff074a0e165a1&amp;spm_id_from=333.788.player.switch&amp;p=13" target="_blank" rel="noopener noreferrer">npx解释的视频课程</a></li>
</ul>
<p>内部相关文章</p>
<ul>
<li></li>
</ul>
</div>
<h2>运行命令</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>在使用命令的时候优先查询<code>node_modules/</code>目录下的命令工具。</li>
<li>实现执行一次性脚本和工具更为方便和快捷，减少全局安装的需求。</li>
</ul>
</div>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line">npx <span class="token operator">&lt;</span>命令<span class="token operator">&gt;</span> <span class="token operator">&lt;</span>参数<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Language - 基础知识 - 规范 - semver语义化版本控制规范</title>
      <link>https://blog.magictable.ha.cn/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E8%A7%84%E8%8C%83-semver%E8%AF%AD%E4%B9%89%E5%8C%96%E7%89%88%E6%9C%AC%E6%8E%A7%E5%88%B6%E8%A7%84%E8%8C%83.html</link>
      <guid>https://blog.magictable.ha.cn/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E8%A7%84%E8%8C%83-semver%E8%AF%AD%E4%B9%89%E5%8C%96%E7%89%88%E6%9C%AC%E6%8E%A7%E5%88%B6%E8%A7%84%E8%8C%83.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - 基础知识 - 规范 - semver语义化版本控制规范</source>
      <description>文章摘要： semver语义化版本控制规范。 相关信息 外部相关文章 semver语义化版本控制规范官方文档 内部相关文章 semver版本规范是X.Y.Z X主版本号（major）：当你做来不兼容的API修改，造成部分代码需要重写（可能不兼容之前的版本）。 Y次版本号（minor）：当你做来向下兼容的功能性新增（新功能增加，兼容之前的版本）。 Z修订...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Thu, 07 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> semver语义化版本控制规范。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li><a href="https://semver.org/lang/zh-CN/" target="_blank" rel="noopener noreferrer">semver语义化版本控制规范官方文档</a></li>
</ul>
<p>内部相关文章</p>
<ul>
<li></li>
</ul>
</div>
<p>semver版本规范是X.Y.Z</p>
<ul>
<li>X主版本号（major）：当你做来不兼容的API修改，造成部分代码需要重写（可能不兼容之前的版本）。</li>
<li>Y次版本号（minor）：当你做来向下兼容的功能性新增（新功能增加，兼容之前的版本）。</li>
<li>Z修订号（patch）：当你做了向下兼容的问题修正（没有新功能，修复来之前版本的bug）。</li>
</ul>
<p>解释一下<code>^</code>和<code>~</code>的区别</p>
<ul>
<li><code>X.Y.Z</code>：表示一个明确的版本号。</li>
<li><code>^X.Y.Z</code>：表示X保持不变，Y和Z永远安装最新的版本。</li>
<li><code>~X.Y.Z</code>：表示X和Y保持不变，Z永远安装最新的版本。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Node.js - 安装与卸载</title>
      <link>https://blog.magictable.ha.cn/software/Package-NodeJS-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-NodeJS-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Node.js - 安装与卸载</source>
      <description>文章摘要： 摘要内容。 软件获取 官方下载地址：https://nodejs.org/zh-cn/download/package-manager 安装 - apt包管理器 卸载 - apt包管理器 安装 - 预编译 卸载 - 预编译 安装 - 源代码 教程连接：官网教程 卸载 - 源代码</description>
      <category>软件程序/软件包</category>
      <pubDate>Wed, 06 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>软件获取</h2>
<ul>
<li>官方下载地址：<a href="https://nodejs.org/zh-cn/download/package-manager" target="_blank" rel="noopener noreferrer">https://nodejs.org/zh-cn/download/package-manager</a></li>
</ul>
<h2>安装 - apt包管理器</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 查看系统支持哪些版本和包的具体名称</span></span>
<span class="line"><span class="token function">apt</span> list --all-versions <span class="token operator">|</span> <span class="token function">grep</span> nodejs</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 开始安装</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">apt</span> <span class="token function">install</span> nodejs</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>卸载 - apt包管理器</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>安装 - 预编译</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>卸载 - 预编译</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>安装 - 源代码</h2>
<p>教程连接：<a href="https://github.com/nodejs/node/blob/main/BUILDING.md#building-nodejs-on-supported-platforms" target="_blank" rel="noopener noreferrer">官网教程</a></p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 前置依赖</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 方案一</span></span>
<span class="line"><span class="token comment"># - 下载源代码</span></span>
<span class="line"><span class="token comment"># - 编译</span></span>
<span class="line"><span class="token comment"># - 添加环境变量</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 方案二</span></span>
<span class="line"><span class="token comment"># - 下载预构建二进制文件，即已编译后的代码</span></span>
<span class="line"><span class="token comment"># - 添加环境变量</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>卸载 - 源代码</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Obsidian - 热门推荐 - 插件</title>
      <link>https://blog.magictable.ha.cn/software/Package-Obsidian-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E6%8F%92%E4%BB%B6.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Obsidian-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E6%8F%92%E4%BB%B6.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Obsidian - 热门推荐 - 插件</source>
      <description>文章摘要： 开源数据本地化的笔记软件。 Git 版本控制，自动同步笔记。 Copilot AI对话插件。 Projects 项目管理视图，类似飞书的多维表格。 Kanban 任务实现展示 Excalidraw 绘图功能 Style Settings 为主题提供丰富的修改功能。 Homepage 首页展示，布局默认设置。</description>
      <category>软件程序/软件包</category>
      <pubDate>Wed, 06 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 开源数据本地化的笔记软件。</p>
<!-- more -->
<h2>Git</h2>
<ul>
<li>版本控制，自动同步笔记。</li>
</ul>
<h2>Copilot</h2>
<ul>
<li>AI对话插件。</li>
</ul>
<h2>Projects</h2>
<ul>
<li>项目管理视图，类似飞书的多维表格。</li>
</ul>
<h2>Kanban</h2>
<ul>
<li>任务实现展示</li>
</ul>
<h2>Excalidraw</h2>
<ul>
<li>绘图功能</li>
</ul>
<h2>Style Settings</h2>
<ul>
<li>为主题提供丰富的修改功能。</li>
</ul>
<h2>Homepage</h2>
<ul>
<li>首页展示，布局默认设置。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Obsidian - 问题总结 - 插件下载方案</title>
      <link>https://blog.magictable.ha.cn/software/Package-Obsidian-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E6%8F%92%E4%BB%B6%E4%B8%8B%E8%BD%BD%E6%96%B9%E6%A1%88.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Obsidian-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E6%8F%92%E4%BB%B6%E4%B8%8B%E8%BD%BD%E6%96%B9%E6%A1%88.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Obsidian - 问题总结 - 插件下载方案</source>
      <description>文章摘要： 开源数据本地化的笔记软件。 国内无法正常下载官方插件 因此下载Obsidian插件是通过，手动到Github下载并存放到项目目录下的.Obsidian/plugins 一般情况下需要在github上下载 “main.js”、“manifest.json”、“styles.css”。 并将这几个文件单独创建一个文件夹进行存储，方便管理和删除。</description>
      <category>软件程序/软件包</category>
      <pubDate>Wed, 06 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 开源数据本地化的笔记软件。</p>
<!-- more -->
<h2>国内无法正常下载官方插件</h2>
<ul>
<li>因此下载Obsidian插件是通过，手动到Github下载并存放到项目目录下的<code>.Obsidian/plugins</code></li>
<li>一般情况下需要在github上下载 “main.js”、“manifest.json”、“styles.css”。</li>
<li>并将这几个文件单独创建一个文件夹进行存储，方便管理和删除。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Package - RocketMQ - 安装与卸载</title>
      <link>https://blog.magictable.ha.cn/software/Package-RocketMQ-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-RocketMQ-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - RocketMQ - 安装与卸载</source>
      <description>文章摘要： 摘要内容。 重要 系统要求 64位操作系统，推荐 Linux/Unix/macOS 64位 JDK 1.8+ 软件获取 官方下载地址：https://rocketmq.apache.org/zh/download 安装 - apt包管理器 卸载 - apt包管理器 安装 - 预编译 卸载 - 预编译 安装 - 源代码 卸载 - 源代码</description>
      <category>软件程序/软件包</category>
      <pubDate>Wed, 06 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<div class="hint-container important">
<p class="hint-container-title">重要</p>
<p>系统要求</p>
<ul>
<li>64位操作系统，推荐 Linux/Unix/macOS</li>
<li>64位 JDK 1.8+</li>
</ul>
</div>
<h2>软件获取</h2>
<ul>
<li>官方下载地址：<a href="https://rocketmq.apache.org/zh/download" target="_blank" rel="noopener noreferrer">https://rocketmq.apache.org/zh/download</a></li>
</ul>
<h2>安装 - apt包管理器</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>卸载 - apt包管理器</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>安装 - 预编译</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>卸载 - 预编译</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>安装 - 源代码</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 解压软件包</span></span>
<span class="line"><span class="token function">unzip</span> rocketmq-all-5.3.1-source-release.zip</span>
<span class="line"></span>
<span class="line"><span class="token comment"># </span></span>
<span class="line"><span class="token builtin class-name">cd</span> rocketmq-all-5.3.1-source-release/、</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 开始编译</span></span>
<span class="line">mvn -Prelease-all <span class="token parameter variable">-DskipTests</span> <span class="token parameter variable">-Dspotbugs.skip</span><span class="token operator">=</span>true clean <span class="token function">install</span> <span class="token parameter variable">-U</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># </span></span>
<span class="line"><span class="token builtin class-name">cd</span> distribution/target/rocketmq-5.3.1/rocketmq-5.3.1</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>卸载 - 源代码</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - RocketMQ - 问题总结</title>
      <link>https://blog.magictable.ha.cn/software/Package-RocketMQ-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-RocketMQ-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - RocketMQ - 问题总结</source>
      <description>文章摘要： 摘要内容。 消息重复消费 问题说明 消费者可能会因为网络波动、服务重启等原因导致消息被重复消费。 解决方案 幂等性处理：确保消费逻辑具有幂等性，即使多次执行也不会影响最终结果。 消息去重：通过数据库、Redis等存储介质记录已消费消息的唯一标识，进行去重处理。 消息丢失 问题说明 消息可能在发送、存储或消费过程中丢失。 解决方案 同步发送：...</description>
      <category>软件程序/软件包</category>
      <pubDate>Wed, 06 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h3>消息重复消费</h3>
<p>问题说明</p>
<ul>
<li>消费者可能会因为网络波动、服务重启等原因导致消息被重复消费。</li>
</ul>
<p>解决方案</p>
<ul>
<li><strong>幂等性处理</strong>：确保消费逻辑具有幂等性，即使多次执行也不会影响最终结果。</li>
<li><strong>消息去重</strong>：通过数据库、Redis等存储介质记录已消费消息的唯一标识，进行去重处理。</li>
</ul>
<h3>消息丢失</h3>
<p>问题说明</p>
<ul>
<li>消息可能在发送、存储或消费过程中丢失。</li>
</ul>
<p>解决方案</p>
<ul>
<li><strong>同步发送</strong>：使用同步发送消息的方式，确保消息发送成功后再进行后续操作。</li>
<li><strong>事务消息</strong>：使用RocketMQ的事务消息功能，保证消息发送与本地事务的一致性。</li>
<li><strong>消息持久化</strong>：确保消息存储在broker上，即使broker重启也不会丢失。</li>
<li><strong>确认机制</strong>：消费者处理完消息后，向broker发送消费确认，防止消息在消费过程中丢失。</li>
</ul>
<h3>消息积压</h3>
<p>问题说明</p>
<ul>
<li>由于消费者处理能力不足或生产者发送速度过快，导致消息在broker中积压。</li>
</ul>
<p>解决方案</p>
<ul>
<li><strong>水平扩展</strong>：增加消费者的数量，提高消费能力。</li>
<li><strong>流量控制</strong>：在生产端进行限流，避免发送过快。</li>
<li><strong>消息批量处理</strong>：消费者可以批量拉取消息，提高处理效率。</li>
</ul>
<h3>长轮询阻塞</h3>
<p>问题说明</p>
<ul>
<li>消费者使用长轮询方式拉取消息时，可能会因为网络问题导致阻塞。</li>
</ul>
<p>解决方案</p>
<ul>
<li><strong>超时设置</strong>：合理设置长轮询的超时时间，避免长时间无响应。</li>
<li><strong>网络优化</strong>：优化网络环境，减少网络波动。</li>
<li><strong>失败重试</strong>：增加失败重试机制，在长轮询失败后进行重试。</li>
</ul>
<h3>事务消息处理不当</h3>
<p>问题说明</p>
<ul>
<li>在使用事务消息时，可能会因为操作不当导致事务消息无法正确提交或回滚。</li>
</ul>
<p>解决方案</p>
<ul>
<li><strong>正确使用事务消息</strong>：遵循RocketMQ事务消息的使用规范，正确实现事务监听器的<code>executeLocalTransaction</code>和<code>checkLocalTransaction</code>方法。</li>
<li><strong>异常处理</strong>：合理处理事务过程中的异常，确保事务能够正确提交或回滚。</li>
</ul>
<h3>集群部署问题</h3>
<p>问题说明</p>
<ul>
<li>在集群部署时，可能会遇到节点间通信、数据同步等问题。</li>
</ul>
<p>解决方案</p>
<ul>
<li><strong>配置优化</strong>：合理配置broker、namesrv等组件的参数，确保集群稳定运行。</li>
<li><strong>监控与报警</strong>：部署监控系统，及时发现并处理集群中的问题。</li>
<li><strong>数据备份</strong>：定期备份数据，防止数据丢失。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Package - RocketMQ</title>
      <link>https://blog.magictable.ha.cn/software/Package-RocketMQ.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-RocketMQ.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - RocketMQ</source>
      <description>文章摘要： RocketMQ是由阿里巴巴开源的一个高性能、低延迟的分布式消息中间件和流计算平台。。 简介 简要说明 RocketMQ是由阿里巴巴开源的一个高性能、低延迟的分布式消息中间件和流计算平台。 RocketMQ主要应用于大规模分布式系统的异步消息传递、事务消息、定时/延时消息等场景。 主要功能 消息发布与订阅：支持生产者向指定主题发送消息，消费...</description>
      <category>软件程序/软件包</category>
      <pubDate>Wed, 06 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> RocketMQ是由阿里巴巴开源的一个高性能、低延迟的分布式消息中间件和流计算平台。。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>RocketMQ是由阿里巴巴开源的一个高性能、低延迟的分布式消息中间件和流计算平台。</li>
<li>RocketMQ主要应用于大规模分布式系统的异步消息传递、事务消息、定时/延时消息等场景。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>消息发布与订阅</strong>：支持生产者向指定主题发送消息，消费者可以订阅主题来接收消息。</li>
<li><strong>消息顺序性</strong>：保证消息的顺序性，支持严格的消息顺序传递。</li>
<li><strong>消息可靠性</strong>：通过同步或异步的方式确保消息不丢失，支持消息的持久化存储。</li>
<li><strong>消息过滤</strong>：消费者可以根据属性进行消息过滤，只消费感兴趣的消息。</li>
<li><strong>批量消息</strong>：支持批量发送消息，提高网络利用率。</li>
<li><strong>定时/延时消息</strong>：支持定时或延时消息的发送，可以在特定时间点或者延迟一段时间后投递消息。</li>
<li><strong>消息重试和死信队列</strong>：支持消息消费失败后的重试机制，以及死信队列处理无法消费的消息。</li>
<li><strong>高可用与分布式</strong>：支持主从模式、集群部署，保证系统的高可用性和可扩展性。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>系统资源</strong>：RocketMQ 需要足够的系统资源，特别是内存和磁盘空间，以确保消息的高效处理。</li>
<li><strong>配置管理</strong>：正确配置RocketMQ的各个组件（如NameServer、Broker等）是确保系统稳定运行的关键。</li>
<li><strong>网络延迟</strong>：RocketMQ 在分布式环境中运行，网络延迟和稳定性对消息传递有较大影响。</li>
<li><strong>数据备份</strong>：为了防止数据丢失，需要定期对RocketMQ的数据进行备份。</li>
<li><strong>版本兼容性</strong>：在升级RocketMQ版本时，需要注意版本之间的兼容性问题。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>异步处理</strong>：适用于需要异步处理请求的场景，如订单处理、事件通知等。</li>
<li><strong>应用解耦</strong>：当系统间耦合度较高时，使用RocketMQ可以实现系统间的解耦。</li>
<li><strong>流量削峰</strong>：在秒杀、促销等高流量场景下，RocketMQ可以用来平滑处理峰值流量。</li>
<li><strong>分布式事务</strong>：RocketMQ 支持分布式事务消息，适用于需要保证分布式系统事务一致性的场景。</li>
<li><strong>大数据处理</strong>：适用于大数据处理和分析的场景，如日志收集、数据处理等。</li>
</ul>
<h2>安装与卸载</h2>
<p>详细总结：<a href="/software/Package-RocketMQ-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html" target="_blank">Package-RocketMQ-安装与卸载</a></p>
<h2>终端命令</h2>
<p>详细总结：<a href=""></a></p>
<h2>配置文件</h2>
<p>详细总结：<a href=""></a></p>
<h2>热门推荐</h2>
<p>详细总结：<a href=""></a></p>
<h2>问题总结</h2>
<p>详细总结：<a href="/software/Package-RocketMQ-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93.html" target="_blank">Package-RocketMQ-问题总结</a></p>
<h3>架构组件</h3>
<ul>
<li><strong>Producer</strong>：消息生产者，负责生产消息，然后将消息发送到Broker。</li>
<li><strong>Consumer</strong>：消息消费者，负责从Broker拉取消息并进行消费。</li>
<li><strong>Broker</strong>：RocketMQ的服务端，负责存储消息、转发消息。Broker分为Master和Slave，Master负责处理读写请求，Slave负责备份数据。</li>
<li><strong>NameServer</strong>：提供轻量级的服务发现和路由功能，Broker会向NameServer注册自己的信息，而Producer和Consumer会通过NameServer获取Broker的信息。</li>
<li><strong>Topic</strong>：消息的逻辑分类，生产者向Topic发送消息，消费者从Topic消费消息。</li>
<li><strong>Message Queue</strong>：消息的物理队列，一个Topic下可以有多个Message Queue，用于实现负载均衡和容错。</li>
</ul>
<h3>工作流程</h3>
<ul>
<li><strong>启动NameServer</strong>：集群中的所有NameServer启动，并等待Broker和客户端连接。</li>
<li><strong>启动Broker</strong>：Broker启动后，会向所有NameServer注册自己的信息。</li>
<li><strong>生产消息</strong>：Producer启动后，会从NameServer获取到Broker的信息，然后向对应的Broker发送消息。</li>
<li><strong>消费消息</strong>：Consumer启动后，同样从NameServer获取Broker信息，然后从Broker拉取消息进行消费。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>DesignPattern - 工厂方法模式</title>
      <link>https://blog.magictable.ha.cn/software/DesignPattern-%E5%B7%A5%E5%8E%82%E6%96%B9%E6%B3%95%E6%A8%A1%E5%BC%8F.html</link>
      <guid>https://blog.magictable.ha.cn/software/DesignPattern-%E5%B7%A5%E5%8E%82%E6%96%B9%E6%B3%95%E6%A8%A1%E5%BC%8F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">DesignPattern - 工厂方法模式</source>
      <description>文章摘要： 工厂模式使用总结。 简介 简要说明 工厂模式（Factory Pattern）是一种创建型设计模式。 定义一个用于创建对象的接口，让子类决定实例化哪一个类。 工厂方法使一个类的实例化延迟到其子类。 主要功能 复制对象： 提供了一种创建新对象的方式，不是通过传统的构造函数，而是通过复制一个已存在的对象（原型），以此来避免创建成本高昂的对象。 ...</description>
      <category>软件程序/设计模式</category>
      <pubDate>Tue, 05 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 工厂模式使用总结。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>工厂模式（Factory Pattern）是一种创建型设计模式。</li>
<li>定义一个用于创建对象的接口，让子类决定实例化哪一个类。</li>
<li>工厂方法使一个类的实例化延迟到其子类。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>复制对象：</strong> 提供了一种创建新对象的方式，不是通过传统的构造函数，而是通过复制一个已存在的对象（原型），以此来避免创建成本高昂的对象。</li>
<li><strong>定制复制：</strong> 允许对象在不暴露其创建逻辑的情况下定制复制过程，可以通过深拷贝或浅拷贝来实现。</li>
<li><strong>解耦框架与客户端：</strong> 客户端代码不需要知道所创建对象的类信息，只需要知道它实现了原型接口即可。</li>
<li><strong>动态配置：</strong> 可以在运行时动态地增加或减少产品类，而不会影响到客户端代码。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>避免过度使用</strong>：不要为每个类都创建一个工厂类，这会导致系统中类的数量急剧增加，增加系统的复杂性。</li>
<li><strong>保持简单性</strong>：尽量保持工厂方法的简单性，避免复杂的逻辑判断。</li>
<li><strong>遵循开闭原则</strong>：在添加新的产品类时，应该不需要修改已有的工厂类，而是通过添加新的工厂子类来扩展。</li>
<li><strong>接口的一致性</strong>：确保所有通过工厂创建的对象都实现相同的接口或继承自相同的抽象类，这样客户端代码才能一致地使用这些对象。</li>
<li><strong>处理依赖关系</strong>：在工厂方法中处理对象的依赖关系，确保创建的对象是完整的，并且处于有效状态。</li>
<li><strong>易于理解和维护</strong>：尽管工厂模式可以增加系统的灵活性，但也可能使得系统更加复杂。因此，应该确保代码易于理解和维护。</li>
<li><strong>考虑性能因素</strong>：在某些情况下，频繁地使用工厂模式可能会带来性能上的开销，尤其是在创建对象成本较高时。需要权衡利弊。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>对象的创建逻辑复杂</strong>：当创建一个对象不仅仅是简单的new操作，而是需要一系列的操作时，可以使用工厂模式来封装这一系列操作。</li>
<li><strong>需要解耦</strong>：当需要将对象的创建和使用分离，使得两者可以独立变化时。</li>
<li><strong>需要扩展性和灵活性</strong>：当系统需要支持多种类型的对象创建，而这些对象有共同的接口时，可以通过扩展工厂来支持新的对象类型。</li>
<li><strong>测试友好</strong>：工厂模式可以使代码更易于测试，因为它允许你通过接口来创建对象，这使得替换实现变得容易。</li>
</ul>
<h2>Java 8</h2>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 定义一个任务处理器接口。</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">interface</span> <span class="token class-name">TaskProcessor</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">void</span> <span class="token function">executeTask</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 为每种任务创建具体的处理器类。</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 电子邮件功能</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">EmailSender</span> <span class="token keyword">implements</span> <span class="token class-name">TaskProcessor</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">executeTask</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Sending email..."</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token comment">// 实现发送邮件的逻辑</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 文件备份功能</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">FileBackup</span> <span class="token keyword">implements</span> <span class="token class-name">TaskProcessor</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">executeTask</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Backing up files..."</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token comment">// 实现文件备份的逻辑</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 数据库更新功能</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">DatabaseUpdater</span> <span class="token keyword">implements</span> <span class="token class-name">TaskProcessor</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">executeTask</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Updating database..."</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token comment">// 实现数据库更新的逻辑</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 创建一个工厂类，根据任务类型来创建对应的处理器实例。</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 任务处理器工厂</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">TaskProcessorFactory</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token class-name">TaskProcessor</span> <span class="token function">getProcessor</span><span class="token punctuation">(</span><span class="token class-name">String</span> taskType<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">if</span> <span class="token punctuation">(</span>taskType<span class="token punctuation">.</span><span class="token function">equalsIgnoreCase</span><span class="token punctuation">(</span><span class="token string">"email"</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">EmailSender</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>taskType<span class="token punctuation">.</span><span class="token function">equalsIgnoreCase</span><span class="token punctuation">(</span><span class="token string">"backup"</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">FileBackup</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>taskType<span class="token punctuation">.</span><span class="token function">equalsIgnoreCase</span><span class="token punctuation">(</span><span class="token string">"update"</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">DatabaseUpdater</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token keyword">throw</span> <span class="token keyword">new</span> <span class="token class-name">IllegalArgumentException</span><span class="token punctuation">(</span><span class="token string">"Unknown task type"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 使用工厂模式来创建和处理不同类型的任务。</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">AutomationAgent</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 客户端代码</span></span>
<span class="line">        <span class="token class-name">TaskProcessor</span> emailTask <span class="token operator">=</span> <span class="token class-name">TaskProcessorFactory</span><span class="token punctuation">.</span><span class="token function">getProcessor</span><span class="token punctuation">(</span><span class="token string">"email"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        emailTask<span class="token punctuation">.</span><span class="token function">executeTask</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token class-name">TaskProcessor</span> backupTask <span class="token operator">=</span> <span class="token class-name">TaskProcessorFactory</span><span class="token punctuation">.</span><span class="token function">getProcessor</span><span class="token punctuation">(</span><span class="token string">"backup"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        backupTask<span class="token punctuation">.</span><span class="token function">executeTask</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token class-name">TaskProcessor</span> updateTask <span class="token operator">=</span> <span class="token class-name">TaskProcessorFactory</span><span class="token punctuation">.</span><span class="token function">getProcessor</span><span class="token punctuation">(</span><span class="token string">"update"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        updateTask<span class="token punctuation">.</span><span class="token function">executeTask</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>DesignPattern - 抽象工厂模式</title>
      <link>https://blog.magictable.ha.cn/software/DesignPattern-%E6%8A%BD%E8%B1%A1%E5%B7%A5%E5%8E%82%E6%A8%A1%E5%BC%8F.html</link>
      <guid>https://blog.magictable.ha.cn/software/DesignPattern-%E6%8A%BD%E8%B1%A1%E5%B7%A5%E5%8E%82%E6%A8%A1%E5%BC%8F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">DesignPattern - 抽象工厂模式</source>
      <description>文章摘要： 提供了一个接口，用于创建相关或依赖对象的家族，而不需要明确指定具体类。 简介 简要说明 抽象工厂模式（Abstract Factory Pattern）是一种创建型设计模式。 提供了一个接口，用于创建相关或依赖对象的家族，而不需要明确指定具体类。 抽象工厂允许客户程序通过抽象接口创建产品，而无需知道（或关心）实际产出的具体产品类。 主要功能...</description>
      <category>软件程序/设计模式</category>
      <pubDate>Tue, 05 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 提供了一个接口，用于创建相关或依赖对象的家族，而不需要明确指定具体类。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>抽象工厂模式（Abstract Factory Pattern）是一种创建型设计模式。</li>
<li>提供了一个接口，用于创建相关或依赖对象的家族，而不需要明确指定具体类。</li>
<li>抽象工厂允许客户程序通过抽象接口创建产品，而无需知道（或关心）实际产出的具体产品类。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>创建产品族：</strong> 抽象工厂模式提供了一个接口，用于创建相关或依赖对象的家族，而不需要明确指定具体类。</li>
<li><strong>封装创建逻辑：</strong> 将具体类的实例化过程封装在抽象工厂的实现中，客户端代码只需要与抽象工厂及其产品接口交互。</li>
<li><strong>切换产品族：</strong> 允许系统通过切换不同的具体工厂实现，来切换整个产品族的生产，从而在不修改客户端代码的情况下，实现不同产品族之间的切换。</li>
<li><strong>提高可扩展性：</strong> 新的产品族可以通过增加新的具体工厂类来实现，而不需要修改现有的系统代码。</li>
<li><strong>降低耦合度：</strong> 客户端代码与具体产品的实现解耦，只依赖于抽象层，使得系统更加模块化，易于维护和扩展。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>开闭原则</strong>：添加新的产品族时，应该不修改原有代码，通过增加新的具体工厂类来实现，但添加新的产品等级结构需要修改抽象工厂和所有具体工厂类，违反了开闭原则。</li>
<li><strong>复杂度</strong>：抽象工厂可能会增加系统的复杂度，尤其是产品族较多时，需要管理和维护的类会比较多。</li>
<li><strong>类爆炸</strong>：随着产品族和产品等级的增多，系统中类的数量会急剧增加，增加了系统的复杂性。</li>
<li><strong>难以扩展新产品族</strong>：如果需要添加新的产品族，需要修改抽象工厂的接口，这会导致所有具体工厂类都需要修改，这通常是比较困难的。</li>
<li><strong>不要滥用</strong>：并不是所有的工厂类都应该使用抽象工厂模式，只有当确实存在多个产品族，并且它们之间存在逻辑上的关联时，才考虑使用抽象工厂模式。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>一组具有相同约束的对象</strong>：当你需要创建的对象是一系列相关的产品族，而不是一个单一的产品时，可以使用抽象工厂模式。</li>
<li><strong>系统需要多个产品族</strong>：一个系统不应当依赖于产品实例如何被创建、组合和表达的细节，这对于所有类型的工厂模式都是重要的。</li>
<li><strong>产品对象的创建逻辑有可能改变</strong>：抽象工厂允许将创建逻辑的变化限制在具体工厂内部，而不影响客户端代码。</li>
<li><strong>需要隔离多个并行的产品族</strong>：在程序运行时，系统可能需要根据上下文选择创建哪一个产品族的对象。</li>
</ul>
<h2>Java 8</h2>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 定义一个形状接口和两个具体的形状类</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 形状接口</span></span>
<span class="line"><span class="token keyword">interface</span> <span class="token class-name">Shape</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">void</span> <span class="token function">draw</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 圆形类</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">Circle</span> <span class="token keyword">implements</span> <span class="token class-name">Shape</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">draw</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Inside Circle::draw() method."</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 正方形类</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">Square</span> <span class="token keyword">implements</span> <span class="token class-name">Shape</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">draw</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Inside Square::draw() method."</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 定义一个抽象工厂接口和两个具体的工厂类</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 抽象工厂接口</span></span>
<span class="line"><span class="token keyword">interface</span> <span class="token class-name">AbstractFactory</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token class-name">Shape</span> <span class="token function">getShape</span><span class="token punctuation">(</span><span class="token class-name">String</span> shapeType<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 具体工厂类 - 生产圆形</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">ShapeFactory</span> <span class="token keyword">implements</span> <span class="token class-name">AbstractFactory</span> <span class="token punctuation">{</span></span>
<span class="line">    </span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">Shape</span> <span class="token function">getShape</span><span class="token punctuation">(</span><span class="token class-name">String</span> shapeType<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">if</span> <span class="token punctuation">(</span>shapeType <span class="token operator">==</span> <span class="token keyword">null</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token keyword">return</span> <span class="token keyword">null</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">        <span class="token keyword">if</span> <span class="token punctuation">(</span>shapeType<span class="token punctuation">.</span><span class="token function">equalsIgnoreCase</span><span class="token punctuation">(</span><span class="token string">"CIRCLE"</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">Circle</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>shapeType<span class="token punctuation">.</span><span class="token function">equalsIgnoreCase</span><span class="token punctuation">(</span><span class="token string">"SQUARE"</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">Square</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">        <span class="token keyword">return</span> <span class="token keyword">null</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 创建一个工厂生成器类和一个客户端类来使用抽象工厂</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 工厂生成器类</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">FactoryProducer</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token class-name">AbstractFactory</span> <span class="token function">getFactory</span><span class="token punctuation">(</span><span class="token class-name">String</span> choice<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">if</span> <span class="token punctuation">(</span>choice<span class="token punctuation">.</span><span class="token function">equalsIgnoreCase</span><span class="token punctuation">(</span><span class="token string">"SHAPE"</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">ShapeFactory</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">        <span class="token keyword">return</span> <span class="token keyword">null</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 客户端类</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">AbstractFactoryPatternDemo</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 获取形状工厂</span></span>
<span class="line">        <span class="token class-name">AbstractFactory</span> shapeFactory <span class="token operator">=</span> <span class="token class-name">FactoryProducer</span><span class="token punctuation">.</span><span class="token function">getFactory</span><span class="token punctuation">(</span><span class="token string">"SHAPE"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 获取圆形对象并调用其 draw 方法</span></span>
<span class="line">        <span class="token class-name">Shape</span> shape1 <span class="token operator">=</span> shapeFactory<span class="token punctuation">.</span><span class="token function">getShape</span><span class="token punctuation">(</span><span class="token string">"CIRCLE"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        shape1<span class="token punctuation">.</span><span class="token function">draw</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 获取正方形对象并调用其 draw 方法</span></span>
<span class="line">        <span class="token class-name">Shape</span> shape2 <span class="token operator">=</span> shapeFactory<span class="token punctuation">.</span><span class="token function">getShape</span><span class="token punctuation">(</span><span class="token string">"SQUARE"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        shape2<span class="token punctuation">.</span><span class="token function">draw</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>在这个例子中，FactoryProducer 类的 getFactory 方法根据传入的参数返回相应的工厂对象。</li>
<li>客户端通过 FactoryProducer 获取到 ShapeFactory，然后使用 ShapeFactory 来创建具体的形状对象，并调用它们的 draw 方法。</li>
</ul>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Visual Studio Code - 安装与卸载</title>
      <link>https://blog.magictable.ha.cn/software/Package-VisualStudioCode-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-VisualStudioCode-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Visual Studio Code - 安装与卸载</source>
      <description>文章摘要： 摘要内容。 软件获取 官方下载地址：https://code.visualstudio.com/ 安装 - apt包管理器 卸载 - apt包管理器 安装 - 预编译 卸载 - 预编译 安装 - 源代码 卸载 - 源代码</description>
      <category>软件程序/软件包</category>
      <pubDate>Tue, 05 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>软件获取</h2>
<ul>
<li>官方下载地址：<a href="https://code.visualstudio.com/" target="_blank" rel="noopener noreferrer">https://code.visualstudio.com/</a></li>
</ul>
<h2>安装 - apt包管理器</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>卸载 - apt包管理器</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>安装 - 预编译</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>卸载 - 预编译</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>安装 - 源代码</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>卸载 - 源代码</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Technology - 通信 - 查询手册 - API</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-API.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-API.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 通信 - 查询手册 - API</source>
      <description>文章摘要： API总结和分类。 简介 简要说明 API接口是软件组件之间进行交互的桥梁。 它定义了请求的格式、通信协议、数据交换方式以及响应的结构。 通过API，不同的应用程序可以在网络上相互请求和传输信息。 主要功能 请求处理：接收并解析来自客户端的请求。 数据传输：按照预定的格式发送和接收数据。 功能调用：允许客户端应用程序调用服务器端的功能。 权...</description>
      <category>学习笔记/技术</category>
      <pubDate>Mon, 04 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> API总结和分类。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>API接口是软件组件之间进行交互的桥梁。</li>
<li>它定义了请求的格式、通信协议、数据交换方式以及响应的结构。</li>
<li>通过API，不同的应用程序可以在网络上相互请求和传输信息。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>请求处理</strong>：接收并解析来自客户端的请求。</li>
<li><strong>数据传输</strong>：按照预定的格式发送和接收数据。</li>
<li><strong>功能调用</strong>：允许客户端应用程序调用服务器端的功能。</li>
<li><strong>权限验证</strong>：确保只有授权的用户可以访问特定的数据和功能。</li>
<li><strong>结果返回</strong>：向客户端返回操作的结果或数据。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>安全性</strong>：确保API接口防止未授权访问和数据泄露。</li>
<li><strong>性能</strong>：优化API响应时间，避免过度加载服务器。</li>
<li><strong>稳定性</strong>：确保API在高峰时段也能稳定运行。</li>
<li><strong>文档</strong>：提供详尽的API文档，方便开发者理解和使用。</li>
<li><strong>版本管理</strong>：合理管理API版本，处理向后兼容性问题。</li>
<li><strong>错误处理</strong>：设计清晰的错误响应机制，帮助开发者调试。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>移动应用开发</strong>：移动应用通过API与后端服务器交互。</li>
<li><strong>Web应用集成</strong>：不同Web应用之间通过API共享数据和功能。</li>
<li><strong>企业内部系统</strong>：企业内部系统之间通过API进行数据同步和业务流程整合。</li>
<li><strong>第三方服务集成</strong>：将第三方服务（如支付、地图、社交媒体等）集成到自己的应用中。</li>
<li><strong>数据服务</strong>：提供数据查询、分析和报告等服务。</li>
<li><strong>物联网（IoT）</strong>：设备与云服务或其他设备之间的通信和数据交换。</li>
</ul>
<h2>REST API</h2>
<ul>
<li><strong>无状态</strong>：每次请求都包含所有必要的信息，服务器不存储任何会话状态。</li>
<li><strong>可缓存</strong>：响应可以被缓存以提高性能。</li>
<li><strong>分层系统</strong>：可以跨多个层进行通信，每层都可以独立处理请求。</li>
<li><strong>统一接口</strong>：使用标准的HTTP方法（GET, POST, PUT, DELETE等）进行资源操作。</li>
<li><strong>按需编码</strong>：客户端可以根据需要发送数据格式（通常是JSON或XML）。</li>
</ul>
<p>详细总结：<a href="/note/Technology-%E9%80%9A%E4%BF%A1-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-API-REST.html" target="_blank">Technology-通信-查询手册-API-REST</a></p>
<h2>SOAP API</h2>
<ul>
<li><strong>基于XML</strong>：使用XML格式进行消息传递。</li>
<li><strong>有状态</strong>：可以维护会话状态。</li>
<li><strong>严格规范</strong>：遵循严格的协议规范，通常使用WSDL（Web服务描述语言）进行接口定义。</li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>GraphQL API</h2>
<ul>
<li><strong>高效查询</strong>：允许客户端精确指定需要的数据结构，减少数据传输量。</li>
<li><strong>单个端点</strong>：通常只需要一个端点来执行所有查询。</li>
<li><strong>类型系统</strong>：定义了一套强类型系统来描述数据。</li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>RPC API</h2>
<ul>
<li><strong>远程过程调用</strong>：像调用本地函数一样调用远程服务的方法。</li>
<li><strong>多种协议</strong>：可以使用HTTP、TCP、UDP等多种协议。</li>
<li><strong>简单直接</strong>：通常比REST API更直接，但可能不如REST那样灵活。</li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>WebSocket API</h2>
<ul>
<li><strong>全双工通信</strong>：允许服务器和客户端之间实时双向通信。</li>
<li><strong>持久连接</strong>：一旦建立连接，就可以在单个连接上发送多个消息。</li>
</ul>
<p>详细总结：<a href=""></a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Intellij IDEA - 问题总结 - 软件破解</title>
      <link>https://blog.magictable.ha.cn/software/Package-IntellijIDEA-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E8%BD%AF%E4%BB%B6%E7%A0%B4%E8%A7%A3.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-IntellijIDEA-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E8%BD%AF%E4%BB%B6%E7%A0%B4%E8%A7%A3.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Intellij IDEA - 问题总结 - 软件破解</source>
      <description>文章摘要： 软件破解方案和临时激活方案。 获取免费激活码 优点 实现不需要花钱也能够通过正常激活流程使用软件。 缺点 激活码不能同时被很多人使用，达到一定人数就会失效。 依赖第三方提供激活码的人，是否能够长期提供激活码。 可靠程度不高。 渠道 寻找激活码提供的微信公众号、网站、平台等。 一般情况下需要你关注其公众号，并给你密码来获取激活码。 推荐提供激...</description>
      <category>软件程序/软件包</category>
      <pubDate>Mon, 04 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 软件破解方案和临时激活方案。</p>
<!-- more -->
<h2>获取免费激活码</h2>
<p>优点</p>
<ul>
<li>实现不需要花钱也能够通过正常激活流程使用软件。</li>
</ul>
<p>缺点</p>
<ul>
<li>激活码不能同时被很多人使用，达到一定人数就会失效。</li>
<li>依赖第三方提供激活码的人，是否能够长期提供激活码。</li>
<li>可靠程度不高。</li>
</ul>
<p>渠道</p>
<ul>
<li>寻找激活码提供的微信公众号、网站、平台等。</li>
<li>一般情况下需要你关注其公众号，并给你密码来获取激活码。</li>
<li>推荐提供激活码的网站：<a href="https://www.ajihuo.com/" target="_blank" rel="noopener noreferrer">https://www.ajihuo.com/</a>，（<strong>加密后的验证码</strong>：<code>six</code>&nbsp;<code>six</code>&nbsp;<code>zero</code>&nbsp;<code>five</code>&nbsp;<code>zero</code>&nbsp;<code>three</code>）（提示：IDEA激活时有BUG，输入两次才能成功）</li>
</ul>
<h2>配置手动代理</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p><strong>流程</strong></p>
<p>打开代理设置</p>
<ul>
<li>修改为手动代理设置</li>
<li>选择HTTP</li>
<li>主机名：localhost</li>
<li>端口号：80</li>
<li>不为以下项使用代理：<code>*.github.com,plugins.jetbrains.com</code></li>
</ul>
<p></p>
</div>
<p>优点</p>
<ul>
<li>找到一个可用的激活码激活后不会再提示激活。</li>
</ul>
<p>缺点</p>
<ul>
<li>不能更新软件。</li>
<li>不能在软件内去官网的插件并下载。</li>
<li>不能在软件内去官网下载驱动等。</li>
<li>无法享受官方服务。</li>
</ul>
<h2>破解工具激活</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>获取破解软件的工具的来源本身其实不太可靠，因此此处不提供破解方案。</li>
</ul>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Git - 热门推荐 - 个人独立开发流程</title>
      <link>https://blog.magictable.ha.cn/software/Package-Git-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E4%B8%AA%E4%BA%BA%E7%8B%AC%E7%AB%8B%E5%BC%80%E5%8F%91%E6%B5%81%E7%A8%8B.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Git-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E4%B8%AA%E4%BA%BA%E7%8B%AC%E7%AB%8B%E5%BC%80%E5%8F%91%E6%B5%81%E7%A8%8B.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Git - 热门推荐 - 个人独立开发流程</source>
      <description>文章摘要： 使用git在个人独立开发流程总结。 Git工作流程 流程 创建新的本地仓库 git init 配置用户信息 进入到本地仓库目录下后修改该仓库的提交信息的用户名。 git config user.name &amp;quot;您的名字&amp;quot;</description>
      <category>软件程序/软件包</category>
      <pubDate>Sun, 03 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 使用git在个人独立开发流程总结。</p>
<!-- more -->
<blockquote>
<p></p>
</blockquote>
<h2>流程</h2>
<ol>
<li>创建新的本地仓库</li>
</ol>
<ul>
<li><code>git init</code></li>
</ul>
<ol start="2">
<li>配置用户信息</li>
</ol>
<ul>
<li>进入到本地仓库目录下后修改该仓库的提交信息的用户名。</li>
<li><code>git config user.name "您的名字"</code></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Git - 热门推荐 - 团队内部协作流程</title>
      <link>https://blog.magictable.ha.cn/software/Package-Git-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E5%9B%A2%E9%98%9F%E5%86%85%E9%83%A8%E5%8D%8F%E4%BD%9C%E6%B5%81%E7%A8%8B.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Git-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E5%9B%A2%E9%98%9F%E5%86%85%E9%83%A8%E5%8D%8F%E4%BD%9C%E6%B5%81%E7%A8%8B.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Git - 热门推荐 - 团队内部协作流程</source>
      <description>文章摘要： 使用git在团队内部协作流程总结。 Git工作流程 开发流程 获取该分支 可能一：提交新的功能分支到远程仓库 在本地创建新分支 修改内容并提交信息。 提交本地的新分支到远程仓库。</description>
      <category>软件程序/软件包</category>
      <pubDate>Sun, 03 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 使用git在团队内部协作流程总结。</p>
<!-- more -->
<blockquote>
<p></p>
</blockquote>
<h2>开发流程</h2>
<p>获取该分支</p>
<p>可能一：提交新的功能分支到远程仓库</p>
<ul>
<li>在本地创建新分支</li>
<li>修改内容并提交信息。</li>
<li>提交本地的新分支到远程仓库。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Git - 热门推荐 - 跨多团队协作流程</title>
      <link>https://blog.magictable.ha.cn/software/Package-Git-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E8%B7%A8%E5%A4%9A%E5%9B%A2%E9%98%9F%E5%8D%8F%E4%BD%9C%E6%B5%81%E7%A8%8B.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Git-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E8%B7%A8%E5%A4%9A%E5%9B%A2%E9%98%9F%E5%8D%8F%E4%BD%9C%E6%B5%81%E7%A8%8B.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Git - 热门推荐 - 跨多团队协作流程</source>
      <description>文章摘要： 使用git在跨多团队协作流程总结。 Git工作流程</description>
      <category>软件程序/软件包</category>
      <pubDate>Sun, 03 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 使用git在跨多团队协作流程总结。</p>
<!-- more -->
<blockquote>
<p></p>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Git - 安装与卸载</title>
      <link>https://blog.magictable.ha.cn/software/Package-Git-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Git-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Git - 安装与卸载</source>
      <description>文章摘要： 摘要内容。 软件获取 官方下载地址：https://git-scm.com/downloads/ 安装 - apt包管理器 卸载 - apt包管理器 安装 - 预编译 卸载 - 预编译 安装 - 源代码 卸载 - 源代码</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 02 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>软件获取</h2>
<ul>
<li>官方下载地址：<a href="https://git-scm.com/downloads/" target="_blank" rel="noopener noreferrer">https://git-scm.com/downloads/</a></li>
</ul>
<h2>安装 - apt包管理器</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">sudo</span> <span class="token function">apt</span> <span class="token function">install</span> <span class="token function">git</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>卸载 - apt包管理器</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">sudo</span> <span class="token function">apt</span> uninstall <span class="token function">git</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>安装 - 预编译</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>卸载 - 预编译</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>安装 - 源代码</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>卸载 - 源代码</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Architecture - 分布式架构</title>
      <link>https://blog.magictable.ha.cn/software/Architecture-%E5%88%86%E5%B8%83%E5%BC%8F%E6%9E%B6%E6%9E%84.html</link>
      <guid>https://blog.magictable.ha.cn/software/Architecture-%E5%88%86%E5%B8%83%E5%BC%8F%E6%9E%B6%E6%9E%84.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Architecture - 分布式架构</source>
      <description>文章摘要： 分布式（Distributed）软件架构，将一个系统拆分成多个组件，并将这些组件分布在不同的计算机上，通过网络进行通信和协调，共同完成系统的整体功能。 简介 简要说明 分布式（Distributed）软件架构。 将一个系统拆分成多个组件，并将这些组件分布在不同的计算机上。 通过网络进行通信和协调，共同完成系统的整体功能。 主要功能 服务拆分...</description>
      <category>软件程序/软件架构</category>
      <pubDate>Fri, 01 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 分布式（Distributed）软件架构，将一个系统拆分成多个组件，并将这些组件分布在不同的计算机上，通过网络进行通信和协调，共同完成系统的整体功能。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>分布式（Distributed）软件架构。</li>
<li>将一个系统拆分成多个组件，并将这些组件分布在不同的计算机上。</li>
<li>通过网络进行通信和协调，共同完成系统的整体功能。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>服务拆分</strong>：将系统功能拆分成多个独立的服务，每个服务运行在独立的进程中。</li>
<li><strong>负载均衡</strong>：通过负载均衡技术，将请求均匀分配到不同的服务器上，提高系统处理能力。</li>
<li><strong>数据复制和分区</strong>：通过数据复制和分区，提高数据的可用性和系统的伸缩性。</li>
<li><strong>故障转移</strong>：当某个节点或服务发生故障时，能够自动切换到备用节点或服务，保证系统的高可用性。</li>
<li><strong>分布式事务管理</strong>：确保分布式系统中的多个服务能够协同完成事务操作，保持数据的一致性。</li>
<li><strong>通信协调</strong>：提供消息传递、远程过程调用（RPC）等机制，以支持不同服务之间的通信和协调。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>网络延迟和可靠性</strong>：分布式系统依赖于网络通信，因此需要考虑网络延迟和不可靠性对系统性能和稳定性的影响。</li>
<li><strong>数据一致性和完整性</strong>：在分布式环境中保持数据一致性和完整性是一个挑战，需要采用合适的策略和工具。</li>
<li><strong>服务解耦</strong>：服务之间需要适度解耦，以降低系统的复杂性，同时也要保证必要的通信和协作。</li>
<li><strong>安全性</strong>：分布式系统可能面临更多的安全威胁，需要采取加密、认证、授权等措施来保护系统安全。</li>
<li><strong>监控和维护</strong>：分布式系统的监控和维护更加复杂，需要建立全面的监控体系和自动化运维工具。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>大规模应用</strong>：当单一服务器无法满足性能需求时，分布式架构可以通过增加服务器来水平扩展。</li>
<li><strong>高可用性要求</strong>：对于需要24/7不间断服务的系统，分布式架构可以通过冗余设计来提高系统的可用性。</li>
<li><strong>处理大量数据</strong>：分布式架构适合处理和分析大规模数据集，如大数据应用、搜索引擎等。</li>
<li><strong>地理位置分散的系统</strong>：对于用户或服务分布在广泛地理位置的系统，分布式架构可以提供更好的本地化服务。</li>
<li><strong>云计算和微服务</strong>：分布式架构是云计算和微服务架构的基础，适合构建灵活、可扩展的云服务。</li>
</ul>
<h2>技术框架图</h2>
<blockquote>
<p></p>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Architecture - 微服务架构</title>
      <link>https://blog.magictable.ha.cn/software/Architecture-%E5%BE%AE%E6%9C%8D%E5%8A%A1%E6%9E%B6%E6%9E%84.html</link>
      <guid>https://blog.magictable.ha.cn/software/Architecture-%E5%BE%AE%E6%9C%8D%E5%8A%A1%E6%9E%B6%E6%9E%84.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Architecture - 微服务架构</source>
      <description>文章摘要： 微服务（Microservice）软件架构。 简介 微服务（Microservice）软件架构。 围绕开发者提供的功能服务。 提供底层服务。 将应用程序分解为一组小的、松散耦合的服务，每个服务都是围绕特定的业务能力构建的。 这些服务通常通过轻量级的通信协议（如HTTP/REST或消息队列）进行交互。 主要功能 服务组件化：将应用程序分解为多...</description>
      <category>软件程序/软件架构</category>
      <pubDate>Fri, 01 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 微服务（Microservice）软件架构。</p>
<!-- more -->
<h2>简介</h2>
<ul>
<li>微服务（Microservice）软件架构。</li>
<li>围绕开发者提供的功能服务。</li>
<li>提供底层服务。</li>
<li>将应用程序分解为一组小的、松散耦合的服务，每个服务都是围绕特定的业务能力构建的。</li>
<li>这些服务通常通过轻量级的通信协议（如HTTP/REST或消息队列）进行交互。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>服务组件化</strong>：将应用程序分解为多个小的、独立的服务组件。</li>
<li><strong>独立部署</strong>：每个服务可以独立部署，不影响其他服务的运行。</li>
<li><strong>自动化部署</strong>：支持自动化测试、部署和监控服务。</li>
<li><strong>弹性伸缩</strong>：可以根据需求独立地扩展或缩小服务实例的数量。</li>
<li><strong>故障隔离</strong>：服务之间隔离，一个服务的故障不会影响到其他服务的运行。</li>
<li><strong>去中心化治理</strong>：每个服务可以有自己的数据存储和数据模型，实现去中心化的数据管理。</li>
<li><strong>去中心化数据管理</strong>：服务拥有自己的数据库，可以实现服务之间的数据隔离。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>服务划分</strong>：合理划分服务边界，避免服务过于细碎或过于庞大。</li>
<li><strong>服务间通信</strong>：确保服务之间的通信高效且可靠，同时处理网络延迟和故障。</li>
<li><strong>数据一致性</strong>：在分布式系统中保持数据一致性和事务性可能比较复杂。</li>
<li><strong>安全性</strong>：确保服务之间的通信安全，防止数据泄露和未授权访问。</li>
<li><strong>监控和日志</strong>：实现集中式的日志记录和监控，以便于问题追踪和性能分析。</li>
<li><strong>服务发现</strong>：实现服务发现机制，以便服务之间能够动态地找到对方。</li>
<li><strong>分布式事务</strong>：处理分布式事务的复杂性，可能需要采用分布式事务管理策略。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>大型和复杂的应用程序</strong>：适用于大型和复杂的应用程序，可以更好地管理和扩展。</li>
<li><strong>需要快速迭代和部署的应用</strong>：微服务架构支持快速迭代和持续部署。</li>
<li><strong>多语言和技术栈</strong>：适用于需要使用多种编程语言和技术栈的项目。</li>
<li><strong>高度可伸缩的系统</strong>：适用于需要高度可伸缩性的系统，如电商平台或社交媒体平台。</li>
<li><strong>云原生应用</strong>：微服务架构与云原生理念相符，适合部署在云环境中。</li>
</ul>
<h2>技术架构图</h2>
<blockquote>
<p></p>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Nacos - 安装与卸载</title>
      <link>https://blog.magictable.ha.cn/software/Package-Nacos-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Nacos-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Nacos - 安装与卸载</source>
      <description>文章摘要： 摘要内容。 软件获取 官方下载地址：https://nacos.io/download/nacos-server/ 将一个压缩包下载到本地。 安装 - apt包管理器 卸载 - apt包管理器 安装 - 预编译 卸载 - 预编译 安装 - 源代码 卸载 - 源代码</description>
      <category>软件程序/软件包</category>
      <pubDate>Fri, 01 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>软件获取</h2>
<ul>
<li>官方下载地址：<a href="https://nacos.io/download/nacos-server/" target="_blank" rel="noopener noreferrer">https://nacos.io/download/nacos-server/</a></li>
<li>将一个压缩包下载到本地。</li>
</ul>
<h2>安装 - apt包管理器</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>卸载 - apt包管理器</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>安装 - 预编译</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>卸载 - 预编译</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>安装 - 源代码</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 将下载的软件包，解压压缩包到`/opt/`目录下</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">unzip</span> <span class="token operator">&lt;</span>软件包<span class="token operator">&gt;</span>.zip <span class="token parameter variable">-d</span> /opt/</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 执行运行命令</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">bash</span> /opt/nacos/bin/startup.sh <span class="token parameter variable">-m</span> standalone</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 进入Nacos控制台页面</span></span>
<span class="line"><span class="token comment"># 打开任意浏览器，输入地址：`http://127.0.0.1:8848/nacos`，即可进入Nacos控制台页面</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>卸载 - 源代码</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Nacos - 终端命令</title>
      <link>https://blog.magictable.ha.cn/software/Package-Nacos-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Nacos-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Nacos - 终端命令</source>
      <description>文章摘要： 一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 启动服务器 关闭服务器 服务注册 curl：这是一个常用的命令行工具，用于在命令行下向/从服务器发送/接收数据。 -X POST：指定了 HTTP 请求方法为 POST，这意味着你将要向服务器发送数据。 &amp;apos;http://127.0.0.1:8848/nacos/v1/ns/i...</description>
      <category>软件程序/软件包</category>
      <pubDate>Fri, 01 Nov 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。</p>
<!-- more -->
<h2>启动服务器</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 集群模式运行</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">bash</span> /opt/nacos/bin/startup.sh</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 单机模式运行，非集群模式</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">bash</span> /opt/nacos/bin/startup.sh <span class="token parameter variable">-m</span> standalone</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>关闭服务器</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">sudo</span> <span class="token function">bash</span> /opt/nacos/bin/shutdown.sh</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>服务注册</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">curl</span> <span class="token parameter variable">-X</span> POST <span class="token string">'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&amp;ip=20.18.7.10&amp;port=8080'</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><ul>
<li><code>curl</code>：这是一个常用的命令行工具，用于在命令行下向/从服务器发送/接收数据。</li>
<li><code>-X POST</code>：指定了 HTTP 请求方法为 POST，这意味着你将要向服务器发送数据。</li>
<li><code>'http://127.0.0.1:8848/nacos/v1/ns/instance'</code>：这是请求的 URL，指定了 Nacos 服务器的地址和端口（在本例中是本地机器的 8848 端口），以及 API 路径（<code>/nacos/v1/ns/instance</code>），这是用于注册服务实例的 Nacos API。</li>
<li><code>?serviceName=nacos.naming.serviceName</code>：这是一个查询参数，<code>serviceName</code> 是你想要注册的服务名称。在本例中，服务名称被错误地设置为 <code>nacos.naming.serviceName</code>，这看起来像是模板文本而不是实际的服务名称。你应该替换为实际的服务名称，例如 <code>my-service</code>。</li>
<li><code>&amp;ip=20.18.7.10</code>：这是另一个查询参数，指定了服务实例的 IP 地址。这里你应该替换为你服务实例的实际 IP 地址。</li>
<li><code>&amp;port=8080</code>：这也是一个查询参数，指定了服务实例的端口号。这里你应该替换为你服务实例实际监听的端口号。</li>
</ul>
<h2>服务发现</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token variable"><span class="token variable">`</span><span class="token function">curl</span> <span class="token parameter variable">-X</span> GET <span class="token string">'http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName'</span><span class="token variable">`</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>获取配置</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token variable"><span class="token variable">`</span><span class="token function">curl</span> <span class="token parameter variable">-X</span> POST <span class="token string">"http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&amp;group=test&amp;content=HelloWorld"</span><span class="token variable">`</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>进入Nacos控制台页面</h2>
<ul>
<li>打开任意浏览器，输入地址：<code>http://127.0.0.1:8848/nacos</code>，即可进入Nacos控制台页面。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Library - Maven - SpringCloud</title>
      <link>https://blog.magictable.ha.cn/software/Library-Maven-SpringCloud.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Maven-SpringCloud.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Maven - SpringCloud</source>
      <description>文章摘要： spring cloud 是一个微服务框架，用于快速构建分布式系统。 简介 简要说明 spring cloud 是一个微服务框架，用于快速构建分布式系统。 提供分布式常用组件：服务注册和发现、网关、服务与服务远程调用、负载均衡、断路器等。 spring cloud 必须基于 spring boot 基础之上开发。 主要功能 注意事项 适用场...</description>
      <category>软件程序/代码类库</category>
      <pubDate>Thu, 31 Oct 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> spring cloud 是一个微服务框架，用于快速构建分布式系统。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<blockquote>
<ul>
<li>spring cloud 是一个微服务框架，用于快速构建分布式系统。</li>
<li>提供分布式常用组件：服务注册和发现、网关、服务与服务远程调用、负载均衡、断路器等。</li>
<li>spring cloud 必须基于 spring boot 基础之上开发。</li>
</ul>
</blockquote>
<p>主要功能</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>注意事项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>适用场景</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>Maven坐标</h2>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Maven - 问题总结</title>
      <link>https://blog.magictable.ha.cn/software/Package-Maven-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Maven-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Maven - 问题总结</source>
      <description>文章摘要： 问题答疑。 在pom文件中引入spring boot父极时使用的是&amp;lt;parent&amp;gt;标签引入且写在文件开头位置 相关信息 个人理解 因为Maven中在创建子模块时，就是使用&amp;lt;parent&amp;gt;标签的方式写在pom.xml文件开头位置。这种方式比较清晰明了，因此推荐该方式。 而使用&amp;lt;dependency&amp;gt;标签作为依赖引入，需要将其写在靠前位置，因为...</description>
      <category>软件程序/软件包</category>
      <pubDate>Wed, 30 Oct 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 问题答疑。</p>
<!-- more -->
<h2>在pom文件中引入spring boot父极时使用的是<code>&lt;parent&gt;</code>标签引入且写在文件开头位置</h2>
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>个人理解</p>
<ul>
<li>因为Maven中在创建子模块时，就是使用<code>&lt;parent&gt;</code>标签的方式写在<code>pom.xml</code>文件开头位置。这种方式比较清晰明了，因此推荐该方式。</li>
<li>而使用<code>&lt;dependency&gt;</code>标签作为依赖引入，需要将其写在靠前位置，因为依赖有加载顺序。</li>
</ul>
</div>
<p>使用<code>&lt;parent&gt;</code>标签写在开头位置的方案</p>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token comment">&lt;!--继承父级项目--&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>parent</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!--引入并继承spring boot提供的父级pom.xml--&gt;</span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.springframework.boot<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>spring-boot-starter-parent<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>2.7.5<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>parent</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>使用<code>&lt;dependency&gt;</code>标签作为依赖引入的方案</p>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span>  </span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.springframework.boot<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span>  </span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>spring-boot-starter-parent<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span>  </span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>${spring.boot.version}<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span>  </span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>type</span><span class="token punctuation">&gt;</span></span>pom<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>type</span><span class="token punctuation">&gt;</span></span>  </span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>scope</span><span class="token punctuation">&gt;</span></span>import<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>scope</span><span class="token punctuation">&gt;</span></span>  </span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Git - 问题总结 - 关联远程分支</title>
      <link>https://blog.magictable.ha.cn/software/Package-Git-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E5%85%B3%E8%81%94%E8%BF%9C%E7%A8%8B%E5%88%86%E6%94%AF.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Git-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E5%85%B3%E8%81%94%E8%BF%9C%E7%A8%8B%E5%88%86%E6%94%AF.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Git - 问题总结 - 关联远程分支</source>
      <description>文章摘要： 关联远程分支推荐流程。 将远程仓库的某个分支保存到本地仓库 初始化一个本地仓库 跟踪远程仓库（新建/关联） 获取远程仓库中的某个分支（只是能够查看到远程分支） 拉取远程分支到本地（正式将远程分支下载下来） 将当前分支跟踪远程分支 将本地仓库的某个分支覆盖到远程仓库 跟踪远程仓库（新建/关联） 获取远程仓库中的某个分支（只是能够查看到远程分支...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sun, 27 Oct 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 关联远程分支推荐流程。</p>
<!-- more -->
<h2>将远程仓库的某个分支保存到本地仓库</h2>
<ol>
<li>初始化一个本地仓库</li>
</ol>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">git</span> init</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><ol start="2">
<li>跟踪远程仓库（新建/关联）</li>
</ol>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">git</span> remote <span class="token function">add</span> <span class="token string">"&lt;远程仓库名&gt;"</span> <span class="token string">"&lt;远程仓库URL&gt;"</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><ol start="3">
<li>获取远程仓库中的某个分支（只是能够查看到远程分支）</li>
</ol>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">git</span> fetch <span class="token string">"&lt;远程仓库名&gt;"</span> <span class="token string">"&lt;分支名&gt;"</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><ol start="4">
<li>拉取远程分支到本地（正式将远程分支下载下来）</li>
</ol>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">git</span> pull <span class="token string">"&lt;远程仓库名&gt;"</span> <span class="token string">"&lt;分支名&gt;"</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><ol start="5">
<li>将当前分支跟踪远程分支</li>
</ol>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">git</span> branch <span class="token parameter variable">-u</span> <span class="token string">"&lt;添加的远程仓库名&gt;"</span>/<span class="token string">"&lt;远程分支名&gt;"</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>将本地仓库的某个分支覆盖到远程仓库</h2>
<ol>
<li>跟踪远程仓库（新建/关联）</li>
</ol>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">git</span> remote <span class="token function">add</span> <span class="token string">"&lt;远程仓库名&gt;"</span> <span class="token string">"&lt;远程仓库URL&gt;"</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><ol start="2">
<li>获取远程仓库中的某个分支（只是能够查看到远程分支）</li>
</ol>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">git</span> fetch <span class="token string">"&lt;远程仓库名&gt;"</span> <span class="token string">"&lt;分支名&gt;"</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><ol start="3">
<li>将本地当前分支跟踪远程仓库分支</li>
</ol>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">git</span> branch <span class="token parameter variable">-u</span> <span class="token string">"&lt;添加的远程仓库名&gt;"</span>/<span class="token string">"&lt;远程分支名&gt;"</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><ol start="4">
<li>以强制覆盖的形式推送到远程仓库分支</li>
</ol>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 强制推送，将本地分支“覆盖”到远程仓库（遇到冲突将强制覆盖远程分支）</span></span>
<span class="line"><span class="token function">git</span> push <span class="token string">"&lt;远程仓库名&gt;"</span> <span class="token string">"&lt;本地分支名&gt;"</span><span class="token builtin class-name">:</span><span class="token string">"&lt;远程分支名&gt;"</span> --force-with-lease</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Node.js - npm - 热门推荐 - 第三方类库</title>
      <link>https://blog.magictable.ha.cn/software/Package-NodeJS-npm-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E7%AC%AC%E4%B8%89%E6%96%B9%E7%B1%BB%E5%BA%93.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-NodeJS-npm-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E7%AC%AC%E4%B8%89%E6%96%B9%E7%B1%BB%E5%BA%93.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Node.js - npm - 热门推荐 - 第三方类库</source>
      <description>文章摘要： 收集实用的项目所需依赖。 博客网站 Hexo 详细总结： Vue.js框架相关 Vite 详细总结： Vue 3 详细总结： VueRouter 4 详细总结： Pinia 详细总结： Vue i18n 介绍：Vue.js的国际化插件。 网址：官方网址 详细总结： 其他 Axios 详细总结： Capacitor 5 详细总结： Ionic...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 26 Oct 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 收集实用的项目所需依赖。</p>
<!-- more -->
<h2>博客网站</h2>
<h3>Hexo</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href="/software/Library-Npm-Hexo.html" target="_blank">Library-Npm-Hexo</a></p>
<h2>Vue.js框架相关</h2>
<h3>Vite</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href="/software/Library-Npm-Vite.html" target="_blank">Library-Npm-Vite</a></p>
<h3>Vue 3</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href="/software/Library-Npm-Vue3.html" target="_blank">Library-Npm-Vue3</a></p>
<h3>VueRouter 4</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href="/software/Library-Npm-VueRouter4.html" target="_blank">Library-Npm-VueRouter4</a></p>
<h3>Pinia</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href="/software/Library-Npm-Pinia.html" target="_blank">Library-Npm-Pinia</a></p>
<h3>Vue i18n</h3>
<ul>
<li>介绍：Vue.js的国际化插件。</li>
<li>网址：<a href="https://vue-i18n.intlify.dev/" target="_blank" rel="noopener noreferrer">官方网址</a></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>其他</h2>
<h3>Axios</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href="/software/Library-Npm-Axios.html" target="_blank">Library-Npm-Axios</a></p>
<h3>Capacitor 5</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href="/software/Library-Npm-Capacitor5.html" target="_blank">Library-Npm-Capacitor5</a></p>
<h3>Ionic 8</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href="/software/Library-Npm-Ionic8.html" target="_blank">Library-Npm-Ionic8</a></p>
<h3>JsonServer</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href="/software/Library-Npm-JsonServer.html" target="_blank">Library-Npm-JsonServer</a></p>
<h3>Vant</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href="/software/Library-Npm-Vant.html" target="_blank">Library-Npm-Vant</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Library - Npm - Ionic 8 - 问题总结 - 集成Vue3库</title>
      <link>https://blog.magictable.ha.cn/software/Library-Npm-Ionic8-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E9%9B%86%E6%88%90Vue3.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Npm-Ionic8-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E9%9B%86%E6%88%90Vue3.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Npm - Ionic 8 - 问题总结 - 集成Vue3库</source>
      <description>文章摘要： 集成Vue3库。 简介 目录结构 生命周期</description>
      <category>软件程序/代码类库</category>
      <pubDate>Fri, 25 Oct 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 集成Vue3库。</p>
<!-- more -->
<h2>简介</h2>
<h2>目录结构</h2>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">H5项目目录/</span>
<span class="line">	|-- dist/    # 编译后的web文件</span>
<span class="line">		|-- assets/         # 编译后的资源文件</span>
<span class="line">		favicon.png         # 图标</span>
<span class="line">		index.html          # 启动文件</span>
<span class="line">	|-- node_modules/  # npm依赖文件</span>
<span class="line">	|-- public/        # 静态文件</span>
<span class="line">	|-- src/           # web源码文件</span>
<span class="line">	</span>
<span class="line">	.browserslistrc</span>
<span class="line">	.eslintignore</span>
<span class="line">	.eslintrc.cjs</span>
<span class="line">	capacitor.config.ts</span>
<span class="line">	cypress.config.ts</span>
<span class="line">	index.html    # 程序根文件</span>
<span class="line">	ionic.config.json</span>
<span class="line">	package-lock.json    # npm依赖版本控制文件</span>
<span class="line">	package.json         # npm配置文件</span>
<span class="line">	tsconfig.json</span>
<span class="line">	tsconfig.node.json</span>
<span class="line">	vite.config.ts       # vite构建工具配置文件</span>
<span class="line"></span>
<span class="line">	|-- android  # 安卓项目目录</span>
<span class="line"></span>
<span class="line">	|-- ios      # 苹果项目目录</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>生命周期</h2>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Python 3 - 问题总结</title>
      <link>https://blog.magictable.ha.cn/software/Language-Python3-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Python3-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Python 3 - 问题总结</source>
      <description>文章摘要： 摘要内容。 什么是数据？ 除了标识符外，剩余的对象都可以叫数据，如变量的值、引号里的内容、存放在数据库中的记录、调用的文件图片视频等，print函数引号内部的信息也是一种数据。 什么是包（Package）？ 包中包含模块所需的所有文件，模块是您可以包含在项目中的 Python 代码库。 一个.py文件被称为模块，一个以上的.py文件被称为包...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Thu, 24 Oct 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>什么是数据？</h2>
<p>除了标识符外，剩余的对象都可以叫数据，如变量的值、引号里的内容、存放在数据库中的记录、调用的文件图片视频等，<code>print</code>函数引号内部的信息也是一种数据。</p>
<h2>什么是包（Package）？</h2>
<p>包中包含模块所需的所有文件，模块是您可以包含在项目中的 Python 代码库。</p>
<blockquote>
<ul>
<li>一个.py文件被称为模块，一个以上的.py文件被称为包，一个或者多个包形成了某些功能被称为库。 包意味着别人打包好的多个库的集合，用于实现某种完整功能。</li>
<li>函数 &lt; 类 &lt; 模块 &lt; 包（文件夹） &lt; 库/框架/项目源码</li>
</ul>
</blockquote>
<h2>保留字、关键字、标识符之间的区别？</h2>
<p>标识符：名字的统称。</p>
<p>保留字和关键字，都是python预先使用的标识符，即后续命名不能于其重复。</p>
<p>内置函数是属于python标准API库中的，特点是默认自动导入到代码中使用。</p>
<h2>专业术语</h2>
<p>总结python程序语言的专业术语和解释。</p>
<ul>
<li>
<p>注释、缩进、标识符、函数（内置函数、第三方函数、保留字、关键字）、表达式、变量、常量、标点符号、运算符、数据类型</p>
</li>
<li>
<p>条件分支语句、循环语句、异常处理语句</p>
</li>
<li>
<p>函数、类、模块、包、库</p>
</li>
<li>
<p>进程、协程、并行、并发、GIL锁</p>
</li>
<li>
<p>继承和重载、迭代、生成、装饰</p>
</li>
<li>
<p>程序优先级、内置函数、保留关键字、数据类型、</p>
</li>
<li>
<p>函数（代码块）、模块（文件）、包（文件夹）、库（存档库）</p>
</li>
<li>
<p><strong>标识符</strong>：所有定义的名称都叫标识符。</p>
</li>
<li>
<p><strong>保留字</strong>：</p>
</li>
<li>
<p><strong>关键字</strong>：</p>
</li>
<li>
<p><strong>内置函数</strong>：</p>
</li>
<li>
<p><strong>标准库</strong>：跟随python安装包解释器一起直接安装到操作系统中的功能模块(包)；</p>
</li>
<li>
<p><strong>第三方库</strong>：需要经过安装才能使用的功能模块；</p>
</li>
<li>
<p><strong>模块</strong>：库（library）、包（package）、模块（module）都是由一个或多个.py文件组成的。</p>
</li>
<li>
<p><strong>数据类型</strong>：就像生活中我们有数字、汉字、拼音一样，在代码的世界里也有这样的划分。
语句:控制行为的走向，例如，见到朋友打招呼，晚上就睡觉。</p>
</li>
<li>
<p><strong>函数</strong>：可以理解成为一些工具，可以自动帮助我们做一些事情，所有的高级应用也可以理解成为是函数的一种。</p>
</li>
</ul>
<h2>运行环境</h2>
<p>详细总结：<a href="/software/Language-Python3-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E8%BF%90%E8%A1%8C%E7%8E%AF%E5%A2%83.html" target="_blank">Language-Python3-问题总结-运行环境</a></p>
<h2>第三方库下载方法</h2>
<p>详细总结：<a href="/software/Language-Python3-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E7%AC%AC%E4%B8%89%E6%96%B9%E5%BA%93%E4%B8%8B%E8%BD%BD%E6%96%B9%E6%B3%95.html" target="_blank">Language-Python3-问题总结-第三方库下载方法</a></p>
<h2>通过Python嵌入式版本实现项目整合包，且无需安装和环境变量</h2>
<p>详细总结：<a href="/software/Language-Python3-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E9%80%9A%E8%BF%87Python%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%89%88%E6%9C%AC%E5%AE%9E%E7%8E%B0%E9%A1%B9%E7%9B%AE%E6%95%B4%E5%90%88%E5%8C%85%EF%BC%8C%E4%B8%94%E6%97%A0%E9%9C%80%E5%AE%89%E8%A3%85%E5%92%8C%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F.html" target="_blank">Language-Python3-问题总结-通过Python嵌入式版本实现项目整合包，且无需安装和环境变量</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Package - AndroidSDK - 安装与卸载</title>
      <link>https://blog.magictable.ha.cn/software/Package-AndroidSDK-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-AndroidSDK-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - AndroidSDK - 安装与卸载</source>
      <description>文章摘要： Android SDK 是一种免费的专用编程语言，可让您创建 Android 应用程序。 本文章将讲解如何不使用 Android Studio 来实现安装 Android SDK 到Debian Linux操作系统中。 相关信息 Android SDK 依赖Java语言，因此需要先下载对应的JDK。 在Linux系统中，下载的Android...</description>
      <category>软件程序/软件包</category>
      <pubDate>Wed, 23 Oct 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Android SDK 是一种免费的专用编程语言，可让您创建 Android 应用程序。</p>
<ul>
<li>本文章将讲解如何不使用 Android Studio 来实现安装 Android SDK 到Debian Linux操作系统中。</li>
</ul>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<ul>
<li>Android SDK 依赖Java语言，因此需要先下载对应的JDK。</li>
<li>在Linux系统中，下载的Android SDK命令行工具通常建议存放在<code>/home/用户目录/android-sdk</code>目录，以便于管理和访问。</li>
</ul>
</div>
<h2>通过AndroidSDK的命令行工具安装</h2>
<p><strong>获取AndroidSDK的命令行工具</strong></p>
<ul>
<li>下载地址：<a href="https://developer.android.google.cn/studio?hl=zh-cn" target="_blank" rel="noopener noreferrer">Android官网</a></li>
<li><strong>提示：下载按钮在网页最后面，请认真观察。</strong></li>
</ul>
<blockquote>
<p></p>
</blockquote>
<p><strong>解压并保存Android SDK Tools</strong></p>
<ul>
<li>将解压缩的 <code>cmdline-tools</code> 目录移动到<code>/home/用户目录/android-sdk/</code>目录。</li>
<li>在解压缩的 <code>cmdline-tools</code> 目录中，创建一个名为 <code>latest</code> 的子目录。</li>
<li>将原始 <code>cmdline-tools</code> 目录内容（包括 <code>lib</code> 目录、<code>bin</code> 目录、<code>NOTICE.txt</code> 文件和 <code>source.properties</code> 文件）移动到新创建的 <code>latest</code> 目录中。现在，您就可以从这个位置使用命令行工具了。</li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>目录结构如下:</p>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">android-sdk</span>
<span class="line">├── cmdline-tools</span>
<span class="line">│   └── latest</span>
<span class="line">│       ├── bin</span>
<span class="line">│       ├── lib</span>
<span class="line">│       ├── NOTICE.txt</span>
<span class="line">│       └── source.properties</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></div>
<p><strong>添加环境变量</strong></p>
<ul>
<li>打开<code>/home/&lt;用户&gt;/.bashrc</code>环境变量配置文件中添加如下内容。</li>
</ul>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">export ANDROID_HOME=~/android-sdk</span>
<span class="line">export PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest:$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><ul>
<li>执行更新环境变量命令：<code>source ~/.bashrc</code></li>
</ul>
<p><strong>测试是否安装成功</strong></p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 尝试运行一个命令行工具，例如：</span></span>
<span class="line">sdkmanager <span class="token parameter variable">--list</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>接受许可协议</strong></p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 使用以下命令接受所有许可</span></span>
<span class="line"><span class="token function">yes</span> <span class="token operator">|</span> sdkmanager <span class="token parameter variable">--licenses</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>下载android-sdk</strong></p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line">sdkmanager <span class="token string">"platform-tools"</span> <span class="token string">"platforms;android-26"</span> <span class="token string">"build-tools;26.0.2"</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - AndroidSDK - 终端命令</title>
      <link>https://blog.magictable.ha.cn/software/Package-AndroidSDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-AndroidSDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - AndroidSDK - 终端命令</source>
      <description>文章摘要： 命令行工具的命令总结。 appt2 AAPT2（Android 资源打包工具）是一种构建工具，Android Studio 和 Android Gradle 插件使用它来编译和打包应用的资源。AAPT2 会解析资源、为资源编制索引，并将资源编译为针对 Android 平台进行过优化的二进制格式。 adb Android 调试桥 (adb) ...</description>
      <category>软件程序/软件包</category>
      <pubDate>Wed, 23 Oct 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 命令行工具的命令总结。</p>
<!-- more -->
<h2>appt2</h2>
<blockquote>
<p>AAPT2（Android 资源打包工具）是一种构建工具，Android Studio 和 Android Gradle 插件使用它来编译和打包应用的资源。AAPT2 会解析资源、为资源编制索引，并将资源编译为针对 Android 平台进行过优化的二进制格式。</p>
</blockquote>
<h2>adb</h2>
<p>Android 调试桥 (<code>adb</code>) 是一种功能多样的命令行工具，可让您与设备进行通信。<code>adb</code> 命令可用于执行各种设备操作，例如安装和调试应用。<code>adb</code> 提供对 Unix shell（可用来在设备上运行各种命令）的访问权限。它是一种客户端-服务器程序，包括以下三个组件：</p>
<ul>
<li><strong>客户端</strong>：用于发送命令。客户端在开发机器上运行。您可以通过发出 <code>adb</code> 命令从命令行终端调用客户端。</li>
<li><strong>守护程序 (adbd)</strong>：用于在设备上运行命令。守护程序在每个设备上作为后台进程运行。</li>
<li><strong>服务器</strong>：用于管理客户端与守护程序之间的通信。服务器在开发机器上作为后台进程运行。</li>
</ul>
<h2>apkanalyzer</h2>
<p>通过 APK 分析器的命令行版本。</p>
<h2>apksigner</h2>
<p>apk签名。</p>
<h2>avdmanager</h2>
<p>用于从命令行创建和管理 Android 虚拟设备 (AVD)。借助 AVD，您可以定义要在 Android 模拟器中模拟的 Android 手机、Wear OS 手表或 Android TV 设备的特性。</p>
<h2>bmgr</h2>
<p>用于与搭载 Android 2.2（API 级别 8）或更高版本的设备上的备份管理器进行交互。</p>
<h2>bundletool</h2>
<p>可供 Android Studio、Android Gradle 插件和 Google Play 构建 Android App Bundle 文件。此外，<code>bundletool</code> 可将 app bundle 转换为部署到设备的各种 APK。</p>
<h2>d8</h2>
<p>Android Studio 和 Android Gradle 插件使用该工具来将项目的 Java 字节码编译为在 Android 设备上运行的 DEX 字节码。<code>d8</code> 支持您在应用的代码中使用 Java 8 语言功能。</p>
<h2>dmtracedump</h2>
<p>用于从跟踪日志文件生成图形化调用堆栈图的工具。</p>
<h2>dumpsys</h2>
<p><code>dumpsys</code> 是一种在 Android 设备上运行的工具，可提供有关系统服务的信息。可以使用 Android 调试桥 (adb）从命令行调用 <code>dumpsys</code>，获取在连接的设备上运行的所有系统服务的诊断输出。</p>
<h2>etc1tool</h2>
<p>可用于将 PNG 图片编码为 ETC1 压缩标准格式，并将 ETC1 压缩图片解码回 PNG。</p>
<h2>jobb</h2>
<p>构建不透明二进制 blob (OBB) 格式的已加密和未加密 APK 扩展文件。</p>
<h2>jetifier</h2>
<p>独立的 Jetifier 工具可将依赖于支持库的库迁移为依赖于等效的 AndroidX 软件包。该工具可让您直接迁移单个库，而无需使用 Android Studio 附带的 Android Gradle 插件。</p>
<h2>logcat</h2>
<p>用于转储系统消息日志，包括从您的应用使用Log类写入的消息。</p>
<h2>mksdcard</h2>
<p>使用 <code>mksdcard</code> 工具创建 FAT32 磁盘映像，然后将该映像加载到运行不同 Android 虚拟设备 (AVD) 的模拟器中，以模拟多个设备中存在相同 SD 卡的情形。</p>
<h2>retrace</h2>
<p>用于从经过混淆处理的堆栈轨迹获取原始堆栈轨迹。系统会通过在映射文件中对类名和方法名与其原始定义进行匹配来重构堆栈轨迹。</p>
<h2>sdkmanager</h2>
<p>用它来查看、安装、更新和卸载 Android SDK 的软件包。</p>
<h2>sqlite3</h2>
<p>在设备的远程 shell 或在主机上，使用 sqlite3 命令行程序来管理由 Android 应用创建的 SQLite 数据库。</p>
<h2>perfetto</h2>
<p>使用 <code>perfetto</code> 工具，您可以通过 Android 调试桥 (adb) 在 Android 设备上收集性能信息。</p>
<h2>zipalign</h2>
<p><code>zipalign</code> 是一种 zip 归档文件对齐工具，有助于确保归档文件中的所有未压缩文件相对于文件开头对齐。</p>
]]></content:encoded>
    </item>
    <item>
      <title>Package - AndroidSDK</title>
      <link>https://blog.magictable.ha.cn/software/Package-AndroidSDK.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-AndroidSDK.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - AndroidSDK</source>
      <description>文章摘要： Android SDK 中包含了开发应用所需的多个软件包。本页列出了可供使用的最重要的命令行工具（按提供这些工具的软件包整理）。 本文章将讲解如何不使用 Android Studio 来操作 Android SDK 实现打包Android 应用。 相关信息 相关外部文档 AndroidSDK文档官方网址 简介 简要说明 Android SD...</description>
      <category>软件程序/软件包</category>
      <pubDate>Wed, 23 Oct 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Android SDK 中包含了开发应用所需的多个软件包。本页列出了可供使用的最重要的命令行工具（按提供这些工具的软件包整理）。</p>
<ul>
<li>本文章将讲解如何不使用 Android Studio 来操作 Android SDK 实现打包Android 应用。</li>
</ul>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>相关外部文档</p>
<ul>
<li><a href="https://developer.android.google.cn/tools?hl=zh-cn" target="_blank" rel="noopener noreferrer">AndroidSDK文档官方网址</a></li>
</ul>
</div>
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>Android SDK是一套为Android平台提供应用程序开发所需的工具、库和文档的软件开发包。</li>
<li>允许开发者在Android操作系统上创建、测试和调试应用程序。</li>
<li>SDK包括了丰富的API接口，使得开发者能够利用Android系统的各种功能。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>开发工具</strong>：提供Android Studio集成开发环境（IDE），以及模拟器、调试工具等。</li>
<li><strong>API库</strong>：包含一系列的API，用于访问Android设备的硬件（如相机、GPS）和服务（如通知、后台任务）。</li>
<li><strong>示例代码</strong>：提供示例应用程序，帮助开发者理解如何使用API。</li>
<li><strong>文档资源</strong>：提供详细的开发指南和API参考文档，帮助开发者学习如何开发Android应用。</li>
<li><strong>平台工具</strong>：包括用于管理设备、创建模拟器镜像、管理应用程序包（APK）等的工具。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>兼容性</strong>：开发者需要确保使用的API与目标Android版本兼容，以支持更广泛的设备和用户。</li>
<li><strong>更新</strong>：定期更新SDK和开发工具，以使用最新的API和功能。</li>
<li><strong>性能优化</strong>：在开发过程中，应注意代码优化和资源管理，以确保应用程序的性能和稳定性。</li>
<li><strong>权限管理</strong>：合理使用权限，遵循Android的权限模型，保护用户隐私和安全。</li>
<li><strong>设备碎片化</strong>：考虑到Android设备的多样性，测试应用程序在不同设备和屏幕尺寸上的表现。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>移动应用开发</strong>：适用于开发面向智能手机和平板电脑的应用程序。</li>
<li><strong>穿戴设备开发</strong>：适用于开发Android Wear等可穿戴设备的应用程序。</li>
<li><strong>电视应用开发</strong>：适用于开发Android TV等电视平台的应用程序。</li>
<li><strong>车载应用开发</strong>：适用于开发Android Auto等车载系统的应用程序。</li>
<li><strong>企业应用开发</strong>：适用于开发面向企业的定制化移动解决方案。</li>
<li><strong>游戏开发</strong>：适用于开发Android平台的游戏，利用SDK提供的图形和音频API。</li>
</ul>
<h2>安装与卸载</h2>
<p>详细总结：<a href="/software/Package-AndroidSDK-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html" target="_blank">Package-AndroidSDK-安装与卸载</a></p>
<h2>终端命令</h2>
<p>详细总结:<a href="/software/Package-AndroidSDK-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4.html" target="_blank">Package-AndroidSDK-终端命令</a></p>
<h2>配置文件</h2>
<p>详细总结：<a href=""></a></p>
<h2>问题总结</h2>
<p>详细总结：<a href=""></a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Apt - 热门推荐 - 第三方存储库URL收集</title>
      <link>https://blog.magictable.ha.cn/software/Package-Apt-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E7%AC%AC%E4%B8%89%E6%96%B9%E5%AD%98%E5%82%A8%E5%BA%93%E6%94%B6%E9%9B%86.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Apt-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E7%AC%AC%E4%B8%89%E6%96%B9%E5%AD%98%E5%82%A8%E5%BA%93%E6%94%B6%E9%9B%86.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Apt - 热门推荐 - 第三方存储库URL收集</source>
      <description>文章摘要： 通过apt存储库来使包管理工具自动更新通过dpkg安装的其他第三方软件的作用。 注释 在Linux操作系统中，/etc/apt/sources.list 文件是一个非常重要的配置文件，它列出了软件包管理器 apt 用来下载和更新软件包的软件仓库地址。当您看到这样的指示时，通常意味着您需要添加一个新的软件仓库到您的系统，以便安装某些软件包。 ...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sun, 20 Oct 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 通过apt存储库来使包管理工具自动更新通过dpkg安装的其他第三方软件的作用。</p>
<!-- more -->
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>在Linux操作系统中，<code>/etc/apt/sources.list</code> 文件是一个非常重要的配置文件，它列出了软件包管理器 <code>apt</code> 用来下载和更新软件包的软件仓库地址。当您看到这样的指示时，通常意味着您需要添加一个新的软件仓库到您的系统，以便安装某些软件包。</p>
<p>作用：</p>
<ul>
<li>
<ol>
<li><strong>安装特定版本的软件包</strong>：有些软件包可能在默认的官方仓库中不可用，或者您可能需要从一个特定的版本库中获得软件包。</li>
</ol>
</li>
<li>
<ol start="2">
<li><strong>获取更新</strong>：某些软件仓库可能包含最新的软件更新，而这些更新在官方仓库中可能还没有提供。</li>
</ol>
</li>
<li>
<ol start="3">
<li><strong>安装非自由软件</strong>：Debian和Ubuntu的官方仓库主要包含自由和开源软件。如果您需要安装一些非自由软件（例如包含专利或版权限制的软件），您可能需要添加非官方的仓库。</li>
</ol>
</li>
</ul>
<p>步骤：</p>
<ul>
<li>打开终端。</li>
<li>使用文本编辑器打开 <code>/etc/apt/sources.list</code> 文件。例如，可以使用 <code>nano</code> 编辑器：<code>sudo nano /etc/apt/sources.list</code>。</li>
<li>在文件中添加一行，例如：<code>deb http://example.com/repo &lt;mydist&gt; main</code>。</li>
<li>将 <code>&lt;mydist&gt;</code> 替换为适合您系统的发行版代号。例如，对于Debian 11，您应该替换为 <code>bullseye</code>。</li>
<li>保存并关闭文件。</li>
<li>更新软件包列表：<code>sudo apt update</code>。</li>
<li>可选，升级系统：<code>sudo apt upgrade</code>。</li>
</ul>
<p>提示：</p>
<ul>
<li>需要注意的是，您应该只从您信任的来源添加软件仓库。添加不可信的仓库可能会导致安全风险，因为它们可能会提供恶意软件包。</li>
</ul>
</div>
<h2>注意事项</h2>
<ul>
<li>在更新缓存之前，确保所有配置都是正确的。</li>
<li>如果在更新时遇到错误，检查 GPG 密钥和源列表文件是否有误。</li>
<li><strong>信任问题</strong>：在添加第三方存储库之前，确保您信任该存储库的提供者。</li>
<li><strong>安全性</strong>：始终从官方或可信的源下载 GPG 密钥。</li>
<li><strong>兼容性</strong>：确保第三方存储库提供的软件包与您的系统兼容。</li>
<li><strong>维护</strong>：定期检查第三方存储库的更新和安全公告。</li>
</ul>
<h2>案例</h2>
<p>GPG密钥</p>
<p>官网存储库URI地址</p>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Apt - 热门推荐</title>
      <link>https://blog.magictable.ha.cn/software/Package-Apt-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Apt-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Apt - 热门推荐</source>
      <description>文章摘要： 文章摘要。 推荐软件包存储库地址 注释 添加密钥 在添加新的存储库之前，通常需要添加相应的GPG密钥以验证软件包。 更新软件源 运行sudo apt-get update来更新软件包列表。 安装软件包 使用sudo apt-get install package-name来安装软件包。 详细总结：</description>
      <category>软件程序/软件包</category>
      <pubDate>Sun, 20 Oct 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 文章摘要。</p>
<!-- more -->
<h2>推荐软件包存储库地址</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ol>
<li><strong>添加密钥</strong></li>
</ol>
<ul>
<li>在添加新的存储库之前，通常需要添加相应的GPG密钥以验证软件包。</li>
</ul>
<ol start="2">
<li><strong>更新软件源</strong></li>
</ol>
<ul>
<li>运行<code>sudo apt-get update</code>来更新软件包列表。</li>
</ul>
<ol start="3">
<li><strong>安装软件包</strong></li>
</ol>
<ul>
<li>使用<code>sudo apt-get install package-name</code>来安装软件包。</li>
</ul>
</div>
<p>详细总结：<a href="/software/Package-Apt-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E7%AC%AC%E4%B8%89%E6%96%B9%E5%AD%98%E5%82%A8%E5%BA%93%E6%94%B6%E9%9B%86.html" target="_blank">Package-Apt-热门推荐-第三方存储库收集</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Library - Npm - Ionic 8</title>
      <link>https://blog.magictable.ha.cn/software/Library-Npm-Ionic8.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Npm-Ionic8.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Npm - Ionic 8</source>
      <description>文章摘要： 构建工具。 简介 Ionic 专注于应用的前端 UX 和 UI 交互 - UI 控件、交互、手势、动画。 目的 跨平台 构建和部署跨多个平台工作的应用，例如原生 iOS、Android 和作为渐进式 Web 应用的 Web - 所有这些都具有一个代码库。编写一次，随处运行。 基于 Web 标准 Ionic 建立在可靠的标准化网络技术之上：H...</description>
      <category>软件程序/代码类库</category>
      <pubDate>Wed, 09 Oct 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 构建工具。</p>
<!-- more -->
<h2>简介</h2>
<p>Ionic 专注于应用的前端 UX 和 UI 交互 - UI 控件、交互、手势、动画。</p>
<h3>目的</h3>
<blockquote>
<p><strong>跨平台</strong></p>
<ul>
<li>构建和部署跨多个平台工作的应用，例如原生 iOS、Android 和作为渐进式 Web 应用的 Web - 所有这些都具有一个代码库。编写一次，随处运行。</li>
</ul>
<p><strong>基于 Web 标准</strong></p>
<ul>
<li>Ionic 建立在可靠的标准化网络技术之上：HTML、CSS 和 JavaScript，使用现代 Web API，例如自定义元素和 Shadow DOM。因此，Ionic 组件具有稳定的 API，并且不受单个平台供应商的影响。</li>
</ul>
</blockquote>
<h2>集成Vue3</h2>
<p>详细总结：<a href="/software/Library-Npm-Ionic8-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E9%9B%86%E6%88%90Vue3.html" target="_blank">Library-Npm-Ionic8-问题总结-集成Vue3</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Library - Npm - Capacitor 5</title>
      <link>https://blog.magictable.ha.cn/software/Library-Npm-Capacitor5.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Npm-Capacitor5.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Npm - Capacitor 5</source>
      <description>文章摘要： 适用于 Web 应用程序的跨平台原生运行时。 相关信息 外部相关文章 前置条件官方说明文档 官方文档链接 内部相关文章 简介 适用于 Web 应用程序的跨平台原生运行时。 提示：Capacitor可以用作创建新项目，也可以为Vite项目提供打包成app的工具。 打包成IOS的前置要求 为了使用 Capacitor 开发 iOS 应用程序，您...</description>
      <category>软件程序/代码类库</category>
      <pubDate>Tue, 08 Oct 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 适用于 Web 应用程序的跨平台原生运行时。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li><a href="https://capacitorjs.com/docs/v5/getting-started/environment-setup" target="_blank" rel="noopener noreferrer">前置条件官方说明文档</a></li>
<li><a href="https://capacitorjs.com/docs/v5/getting-started" target="_blank" rel="noopener noreferrer">官方文档链接</a></li>
</ul>
<p>内部相关文章</p>
<ul>
<li></li>
</ul>
</div>
<h2>简介</h2>
<blockquote>
<ul>
<li>适用于 Web 应用程序的跨平台原生运行时。</li>
<li>提示：Capacitor可以用作创建新项目，也可以为Vite项目提供打包成app的工具。</li>
</ul>
</blockquote>
<h3>打包成IOS的前置要求</h3>
<p>为了使用 Capacitor 开发 iOS 应用程序，您将需要四个额外的依赖项：</p>
<ul>
<li>Xcode&nbsp;Xcode</li>
<li>Xcode Command Line Tools</li>
<li>Homebrew</li>
<li>Cocoapods</li>
</ul>
<h3>打包成Android的前置要求</h3>
<p>为了使用 Capacitor 开发 Android 应用程序，您需要两个额外的依赖项：</p>
<ul>
<li>Android SDK</li>
</ul>
<h2>安装使用</h2>
<h3>创建新的Capacitor应用程序</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">npm</span> init @capacitor/app</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>将Capacitor添加到已有的Web应用程序</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 安装</span></span>
<span class="line"><span class="token function">npm</span> i @capacitor/core</span>
<span class="line"><span class="token function">npm</span> i <span class="token parameter variable">-D</span> @capacitor/cli</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 初始化</span></span>
<span class="line">npx cap init</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 安装 Capacitor Core 运行时后，您可以安装 Android 和 iOS 平台</span></span>
<span class="line"><span class="token function">npm</span> i @capacitor/android @capacitor/ios</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 将平台添加到您的 `package.json` 后，您可以运行以下命令为本机应用程序创建 Android 和 iOS 项目</span></span>
<span class="line">npx cap <span class="token function">add</span> android</span>
<span class="line">npx cap <span class="token function">add</span> ios</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 同步 Capacitor 配置，创建本机项目后，您可以通过运行以下命令将 Web 应用程序同步到本机项目</span></span>
<span class="line">npx cap <span class="token function">sync</span> android</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 构建 Android 应用</span></span>
<span class="line">npx cap build android</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Solution - 博客网站 - VScode+Obsidian+VuePress+Github - 问题总结</title>
      <link>https://blog.magictable.ha.cn/note/Solution-%E5%8D%9A%E5%AE%A2%E7%BD%91%E7%AB%99-VuePress_Github-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93.html</link>
      <guid>https://blog.magictable.ha.cn/note/Solution-%E5%8D%9A%E5%AE%A2%E7%BD%91%E7%AB%99-VuePress_Github-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Solution - 博客网站 - VScode+Obsidian+VuePress+Github - 问题总结</source>
      <description>文章摘要： 摘要内容。 编译过程中内存不足 Node.js 在运行过程中遇到了内存不足的问题，导致 JavaScript 堆内存超出了限制 (JavaScript heap out of memory)。 问题分析 内存不足：Node.js 默认的堆内存限制较低（通常为 1.5GB 左右），当应用程序需要分配更多内存时，就会出现这个错误。 大量数据处理...</description>
      <category>学习笔记/方案</category>
      <pubDate>Mon, 07 Oct 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>编译过程中内存不足</h2>
<p>Node.js 在运行过程中遇到了内存不足的问题，导致 JavaScript 堆内存超出了限制 (<code>JavaScript heap out of memory</code>)。</p>
<blockquote>
<p></p>
</blockquote>
<p>问题分析</p>
<ul>
<li><strong>内存不足</strong>：Node.js 默认的堆内存限制较低（通常为 1.5GB 左右），当应用程序需要分配更多内存时，就会出现这个错误。</li>
<li><strong>大量数据处理</strong>：如果你的代码需要处理大量数据（如大型 JSON 文件、复杂计算或大量文件），可能会导致内存耗尽。</li>
<li><strong>内存泄漏</strong>：如果代码中存在内存泄漏（如未释放的对象或循环引用），会导致内存使用不断增长，最终耗尽。</li>
<li><strong>第三方库问题</strong>：某些第三方库可能在使用时未优化内存管理，导致内存占用过高。</li>
</ul>
<p>解决方案</p>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>大概率就是计算机内存不足导致，建议增加内存。</p>
</div>
<ul>
<li>在项目根目录下创建 settings.json 文件，并添加以下内容：</li>
</ul>
<div class="language-json line-numbers-mode" data-highlighter="prismjs" data-ext="json"><pre><code class="language-json"><span class="line"><span class="token punctuation">{</span></span>
<span class="line">  <span class="token property">"terminal.integrated.env.windows"</span><span class="token operator">:</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token property">"NODE_OPTIONS"</span><span class="token operator">:</span> <span class="token string">"--max-old-space-size=4096"</span></span>
<span class="line">  <span class="token punctuation">}</span><span class="token punctuation">,</span></span>
<span class="line">  <span class="token property">"terminal.integrated.env.linux"</span><span class="token operator">:</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token property">"NODE_OPTIONS"</span><span class="token operator">:</span> <span class="token string">"--max-old-space-size=4096"</span></span>
<span class="line">  <span class="token punctuation">}</span><span class="token punctuation">,</span></span>
<span class="line">  <span class="token property">"terminal.integrated.env.osx"</span><span class="token operator">:</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token property">"NODE_OPTIONS"</span><span class="token operator">:</span> <span class="token string">"--max-old-space-size=4096"</span></span>
<span class="line">  <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul>
<li><code>NODE_OPTIONS="--max-old-space-size=4096"</code>：将 Node.js 的堆内存限制设置为 4GB。</li>
<li>根据操作系统分别设置环境变量（Windows、Linux、macOS）。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Solution - 博客网站 - VScode+Obsidian+VuePress+Github</title>
      <link>https://blog.magictable.ha.cn/note/Solution-%E5%8D%9A%E5%AE%A2%E7%BD%91%E7%AB%99-VuePress_Github.html</link>
      <guid>https://blog.magictable.ha.cn/note/Solution-%E5%8D%9A%E5%AE%A2%E7%BD%91%E7%AB%99-VuePress_Github.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Solution - 博客网站 - VScode+Obsidian+VuePress+Github</source>
      <description>文章摘要： 摘要内容。 相关信息 外部相关文章 主题官网：vuepress-theme-hope 前端技术：VuePress 网站托管平台：GitHub 内部相关文章 简介 使用VitePress进行搭建基础项目。 注释 更多需要注意的是使用 “笔记软件” 和 “博客网站” 都能使用的语法和功能。 部署、使用、同步的流程完善和优化。 Git版本控制，该...</description>
      <category>学习笔记/方案</category>
      <pubDate>Mon, 07 Oct 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li>主题官网：<a href="https://theme-hope.vuejs.press/zh/" target="_blank" rel="noopener noreferrer">vuepress-theme-hope</a></li>
<li>前端技术：<a href="https://vuepress.vuejs.org/zh/" target="_blank" rel="noopener noreferrer">VuePress</a></li>
<li>网站托管平台：GitHub</li>
</ul>
<p>内部相关文章</p>
<ul>
<li></li>
</ul>
</div>
<h2>简介</h2>
<p>使用VitePress进行搭建基础项目。</p>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>更多需要注意的是使用 “笔记软件” 和 “博客网站” 都能使用的语法和功能。</li>
<li>部署、使用、同步的流程完善和优化。</li>
<li>Git版本控制，该项目方案必须保证每次只有一台设备对笔记项目进行操作。</li>
</ul>
</div>
<h2>项目部署流程</h2>
<p>==待完善==</p>
<h2>目录结构</h2>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">src/</span>
<span class="line">|-- .vuepress/  # 博客配置文件</span>
<span class="line">|-- 自定义目录/  # 博客文章目录</span>
<span class="line"></span>
<span class="line">package-lock.json</span>
<span class="line">package.json</span>
<span class="line">tsconfig.json</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>编写规范</h2>
<ul>
<li>在每个博客目录中创建<code>assets/</code>作为资源目录。</li>
<li>使用VScode的<code>Excalidraw</code>插件来绘制白板，文件格式为<code>.excalidraw.svg</code>。</li>
<li>在Obsidian中不对<code>.excalidraw.svg</code>文件进行修改操作。</li>
<li>Obsidian用于编辑<code>.md</code>文件和提供双线链接展示。</li>
<li>VScode提供项目版本控制和打包部署。</li>
<li>Obsidian也配置了自动Git同步的功能。</li>
</ul>
<h2>技巧和规范</h2>
<p><strong>目录结构</strong></p>
<blockquote>
<ul>
<li>目录层级不能偏多。最好两层，再往下则使用 “<strong>加粗字体</strong>” 代表标题。</li>
<li>资源文件夹在每个目录中都有。</li>
<li><code>.md</code>文件的命名规范是<code>&lt;类别&gt;-&lt;名称&gt;-&lt;提示&gt;.md</code></li>
</ul>
<p>例子</p>
<ul>
<li><code>src/software/</code>软件类别的目录下，<code>OS-DebianLinux12.md</code>、<code>OS-DebianLinux12-热门推荐-部署配置方案.md</code>。</li>
</ul>
</blockquote>
<p><strong>分类和标签</strong></p>
<blockquote>
<ul>
<li>需要提前规划，清晰且明确。</li>
</ul>
<p>例子</p>
<ul>
<li>分类：学习笔记、文章解读、项目总结、软件程序/工具、软件程序/系统、软件程序/依赖、软件程序/语言</li>
<li>标签：学习笔记、项目文档、解决方案、查询手册、问题总结、热门推荐、依赖</li>
</ul>
</blockquote>
<p><strong>文章中的元数据</strong></p>
<blockquote>
<ul>
<li>文章以Markdown的语法规则进行编写，每篇文章的头部会有<code>yaml</code>元数据，用于对文章进行数据统计或分类。</li>
</ul>
</blockquote>
<p><strong>提供便捷导航</strong></p>
<blockquote>
<ul>
<li>在首页顶部导航栏或侧栏添加比较常用或好用的文章，来提高实用性。</li>
</ul>
</blockquote>
<h2>页面元信息（头部文章配置）</h2>
<div class="language-yaml line-numbers-mode" data-highlighter="prismjs" data-ext="yml"><pre><code class="language-yaml"><span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Solution - 博客网站</title>
      <link>https://blog.magictable.ha.cn/note/Solution-%E5%8D%9A%E5%AE%A2%E7%BD%91%E7%AB%99.html</link>
      <guid>https://blog.magictable.ha.cn/note/Solution-%E5%8D%9A%E5%AE%A2%E7%BD%91%E7%AB%99.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Solution - 博客网站</source>
      <description>文章摘要： 摘要内容。 注释 名人名言 只有当信任系统，而且知道一切都可以处理好的时候，大脑才会放开，才能专注于手头的任务。 —— David Allen 简介 组织和存储信息，以便能够有效地回忆和利用这些信息来支持自己的工作和生活。 不仅是一个简单的笔记系统，而是一种将外部信息内化为个人知识的策略。 作用 帮助筛选有效信息。 打造系统，在不同任务间切...</description>
      <category>学习笔记/方案</category>
      <pubDate>Mon, 07 Oct 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>名人名言</p>
<ul>
<li>只有当信任系统，而且知道一切都可以处理好的时候，大脑才会放开，才能专注于手头的任务。 —— David Allen</li>
</ul>
</div>
<h2>简介</h2>
<ul>
<li>组织和存储信息，以便能够有效地回忆和利用这些信息来支持自己的工作和生活。</li>
<li>不仅是一个简单的笔记系统，而是一种将外部信息内化为个人知识的策略。</li>
</ul>
<h2>作用</h2>
<ul>
<li>帮助筛选有效信息。</li>
<li>打造系统，在不同任务间切换自如，清空大脑专注当下，提升效率。</li>
<li>理清思路，帮助思考。</li>
<li>辅助输出，提升创作力。</li>
</ul>
<p>卡片笔记写作法：不写就无法思考。</p>
<p>打造第二大脑：写作即来源于思考，又有助于思考。</p>
<p>记笔记的核心在于更好的思考。</p>
<h2>笔记规范</h2>
<ul>
<li>标题层级深度不要超过3级。</li>
<li>新建md文件时，必须添加头文件头。</li>
</ul>
<h2>实现方案案例</h2>
<ul>
<li><a href="/note/Solution-%E5%8D%9A%E5%AE%A2%E7%BD%91%E7%AB%99-Hexo+Github.html" target="_blank">Solution-博客网站-Hexo+Github</a></li>
<li><a href="/note/Solution-%E5%8D%9A%E5%AE%A2%E7%BD%91%E7%AB%99-VuePress+Github.html" target="_blank">Solution-博客网站-VuePress+Github</a></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Properties</title>
      <link>https://blog.magictable.ha.cn/software/Language-Properties.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Properties.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Properties</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 Properties格式是一种简单的键值对配置文件，通常用于Java应用程序。 主要功能 配置文件（推荐） 注意事项 每行包含一个键值对，用等号或冒号分隔。 适用场景 Java应用程序的配置。 需要跨平台配置的环境。</description>
      <category>软件程序/程序语言</category>
      <pubDate>Mon, 07 Oct 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>Properties格式是一种简单的键值对配置文件，通常用于Java应用程序。</li>
</ul>
<p>主要功能</p>
<ul>
<li>配置文件（推荐）</li>
</ul>
<p>注意事项</p>
<ul>
<li>每行包含一个键值对，用等号或冒号分隔。</li>
</ul>
<p>适用场景</p>
<ul>
<li>Java应用程序的配置。</li>
<li>需要跨平台配置的环境。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Library - Maven - Log4j 2</title>
      <link>https://blog.magictable.ha.cn/software/Library-Maven-Log4j2.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Maven-Log4j2.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Maven - Log4j 2</source>
      <description>文章摘要： Log4j 2 是日志框架（日志实现）。 简介 简要说明 log4j2是Apache软件基金会下的一个开源项目，它是log4j的升级版，提供了一种灵活、强大的日志框架。 使用 Log4j 2 在系统中运行必须事先设定配置文件。 主要功能 性能提升：在多线程环境下，log4j2表现出比其他日志框架更高的日志记录性能。 插件式架构：log4j2...</description>
      <category>软件程序/代码类库</category>
      <pubDate>Mon, 07 Oct 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Log4j 2 是日志框架（日志实现）。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<blockquote>
<ul>
<li>log4j2是Apache软件基金会下的一个开源项目，它是log4j的升级版，提供了一种灵活、强大的日志框架。</li>
<li>使用 Log4j 2 在系统中运行必须事先设定配置文件。</li>
</ul>
</blockquote>
<p>主要功能</p>
<blockquote>
<ul>
<li><strong>性能提升</strong>：在多线程环境下，log4j2表现出比其他日志框架更高的日志记录性能。</li>
<li><strong>插件式架构</strong>：log4j2允许通过配置文件动态地加载和更改日志处理组件，通过插件可以很容易地添加新的Appender、Filter和Layout。</li>
<li><strong>强大的API</strong>：提供了丰富的日志级别、格式化工具和日志路由选项。</li>
<li><strong>异步处理</strong>：支持异步日志记录，减少日志记录对应用程序性能的影响。</li>
<li><strong>配置灵活</strong>：支持XML、JSON、YAML、Properties的配置方式。</li>
<li><strong>日志审计</strong>：支持日志事件的审计功能。</li>
<li><strong>自动重载配置</strong>：可以动态修改日志的级别而不需要重启应用。</li>
<li><strong>无垃圾机制</strong>：避免频繁的日志收集导致的jvmgc。</li>
</ul>
</blockquote>
<p>注意事项</p>
<blockquote>
<ul>
<li><strong>配置文件</strong>：确保log4j2的配置文件正确无误，错误的配置可能导致日志功能失效。</li>
<li><strong>日志级别</strong>：合理设置日志级别，避免生产环境中输出过多的日志信息，影响性能。</li>
<li><strong>异步日志</strong>：在使用异步日志时，要注意配置合理的队列大小和线程数量，以避免内存溢出。</li>
<li><strong>依赖管理</strong>：在项目中引入log4j2时，要注意排除其他日志框架的依赖，避免冲突。</li>
<li><strong>安全性</strong>：log4j2曾出现过安全漏洞，使用时需确保版本是最新的，并及时关注官方的安全通告。</li>
<li><strong>性能测试</strong>：在上线前进行充分的性能测试，确保日志记录不会对系统性能产生负面影响。</li>
<li><strong>资源释放</strong>：在应用程序关闭时，确保log4j2的资源得到正确释放，避免内存泄漏。</li>
</ul>
</blockquote>
<p>适用场景</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>Maven坐标</h2>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!--log4j日志记录框架_门面--&gt;</span>  </span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.apache.logging.log4j<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span>  </span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>log4j-api<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span>  </span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>2.24.1<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span>  </span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!--log4j日志记录框架_实现--&gt;</span>  </span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.apache.logging.log4j<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span>  </span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>log4j-core<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span>  </span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>2.24.1<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span>  </span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>log4j2核心组件</h2>
<h3>Loggers（记录器）</h3>
<p><strong>日记级别</strong></p>
<blockquote>
<p>DEBUG（调试） &lt; INFO（信息） &lt; WARN（警告） &lt; ERROR（错误） &lt; FATAL（致命）</p>
<p>提示：大于当前设置日志级别的日志才会被输出。</p>
</blockquote>
<h3>Appenders（输出源）</h3>
<p><strong>输出地方</strong></p>
<blockquote>
<ul>
<li>控制台、文件</li>
</ul>
</blockquote>
<p>常用类</p>
<blockquote>
<ul>
<li><code>org.apache.log4j.ConsoleAppender</code>：控制台。</li>
<li><code>org.apache.log4j.FileAppender</code>：文件。</li>
<li><code>org.apache.log4j.DailyRollingFileAppender</code>：每天产生一个日志文件。</li>
<li><code>org.apache.log4j.RollingFileAppender</code>：文件大小达到指定尺寸的时候产生一个新的文件。</li>
<li><code>org.apache.log4j.WriterAppender</code>：将日志信息以流格式发送给任意指定的地方。</li>
</ul>
</blockquote>
<h3>Layouts（布局）</h3>
<p><strong>输出格式/样式/占位符</strong></p>
<blockquote>
<ul>
<li>HTML样式。</li>
<li>自由指定样式。</li>
<li>包含日志级别与信息的样式。</li>
<li>包含日志时间、线程、类别等信息的样式。</li>
</ul>
</blockquote>
<p>详细总结：<a href="/software/Library-Maven-Log4j2-%E5%8D%A0%E4%BD%8D%E7%AC%A6.html" target="_blank">Log4j2-占位符</a></p>
<p><strong>常用类</strong></p>
<blockquote>
<ul>
<li><code>org.apache.log4j.HTMLLayout</code>：以HTML表格形式布局。</li>
<li><code>org.apache.log4j.PatternLayout</code>：可以灵活地指定布局模式。</li>
<li><code>org.apache.log4j.SimpleLayout</code>：包含日志信息和级别和信息字符串。</li>
<li><code>org.apache.log4j.TTCCLayout</code>：包含日志产生的时间、线程、类别等信息。</li>
</ul>
</blockquote>
<h2>异步日志处理机制</h2>
<h2>性能优化</h2>
<p>了解log4j2的性能优化技巧，如调整缓冲区大小、使用异步日志等。</p>
<h2>配置文件</h2>
<p>详细总结：<a href="/software/Library-Maven-Log4j2-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6-XML%E6%96%87%E4%BB%B6.html" target="_blank">Log4j2-XML文件配置</a></p>
<h2>其他框架集成</h2>
<p>掌握log4j2与Spring、MyBatis等框架的集成方法。</p>
]]></content:encoded>
    </item>
    <item>
      <title>Library - Maven - SLF4J</title>
      <link>https://blog.magictable.ha.cn/software/Library-Maven-SLF4J.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Maven-SLF4J.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Maven - SLF4J</source>
      <description>文章摘要： SLF4J是日志框架（日志门面）。 相关信息 外部相关文章 官方网站：官方文档 内部相关文章 简介 简要说明 SLF4J提供了一套标准的日志接口，而具体的日志实现则由用户在部署时选择。 这样做的好处是，开发者可以在编写代码时不需要关心日志的具体实现，从而实现日志实现的解耦。 主要功能 解耦：SLF4J允许用户在部署时选择不同的日志框架，而无...</description>
      <category>软件程序/代码类库</category>
      <pubDate>Mon, 07 Oct 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> SLF4J是日志框架（日志门面）。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li>官方网站：<a href="https://www.slf4j.org/" target="_blank" rel="noopener noreferrer">官方文档</a></li>
</ul>
<p>内部相关文章</p>
<ul>
<li></li>
</ul>
</div>
<h2>简介</h2>
<p>简要说明</p>
<blockquote>
<ul>
<li>SLF4J提供了一套标准的日志接口，而具体的日志实现则由用户在部署时选择。</li>
<li>这样做的好处是，开发者可以在编写代码时不需要关心日志的具体实现，从而实现日志实现的解耦。</li>
</ul>
<p><img src="https://www.slf4j.org/images/concrete-bindings.png" alt=""></p>
</blockquote>
<p>主要功能</p>
<blockquote>
<ul>
<li><strong>解耦</strong>：SLF4J允许用户在部署时选择不同的日志框架，而无需修改代码。</li>
<li><strong>统一</strong>：提供一套标准的日志接口，使得日志的调用更加一致和简单。</li>
<li><strong>灵活性</strong>：在不修改代码的情况下，可以轻松切换日志实现。</li>
<li><strong>日志框架的绑定</strong>：</li>
<li><strong>日志框架的桥接</strong>：</li>
</ul>
</blockquote>
<p>注意事项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>适用场景</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>引入Maven依赖</h2>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!--slf4j日志门面框架--&gt;</span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.slf4j<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>slf4j-api<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>2.0.9<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- 请自行查找合适版本 --&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>日志级别</h2>
<blockquote>
<ul>
<li>TRACE（详细） &lt; DEBUG（调试） &lt; INFO（信息） &lt; WARN（警告） &lt; ERROR（错误） &lt; FATAL（致命）</li>
</ul>
</blockquote>
<h2>日志格式</h2>
<blockquote>
<ul>
<li>当前时间戳、日志级别、线程名称</li>
</ul>
</blockquote>
<h2>实例化日志对象</h2>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>slf4j<span class="token punctuation">.</span></span><span class="token class-name">Logger</span></span><span class="token punctuation">;</span>  </span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>slf4j<span class="token punctuation">.</span></span><span class="token class-name">LoggerFactory</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 定义全局的logger变量  </span></span>
<span class="line"><span class="token class-name">Logger</span> logger <span class="token operator">=</span> <span class="token class-name">LoggerFactory</span><span class="token punctuation">.</span><span class="token function">getLogger</span><span class="token punctuation">(</span><span class="token operator">&lt;</span>类名<span class="token operator">&gt;</span><span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>打印日志信息</h2>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line">logger<span class="token punctuation">.</span><span class="token function">trace</span><span class="token punctuation">(</span><span class="token string">"详细信息"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">logger<span class="token punctuation">.</span><span class="token function">debug</span><span class="token punctuation">(</span><span class="token string">"调试日志"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">logger<span class="token punctuation">.</span><span class="token function">info</span><span class="token punctuation">(</span><span class="token string">"信息日志"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">logger<span class="token punctuation">.</span><span class="token function">warn</span><span class="token punctuation">(</span><span class="token string">"警告日志"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">logger<span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span><span class="token string">"异常日志"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">logger<span class="token punctuation">.</span><span class="token function">fatal</span><span class="token punctuation">(</span><span class="token string">"错误日志"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>占位符输出</h2>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token class-name">String</span> name <span class="token operator">=</span> <span class="token string">"魔术桌"</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">int</span> age <span class="token operator">=</span> <span class="token number">23</span><span class="token punctuation">;</span></span>
<span class="line">logger<span class="token punctuation">.</span><span class="token function">info</span><span class="token punctuation">(</span><span class="token string">"用户信息：{}{}"</span><span class="token punctuation">,</span> name<span class="token punctuation">,</span> age<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
      <enclosure url="https://www.slf4j.org/images/concrete-bindings.png" type="image/png"/>
    </item>
    <item>
      <title>Device - 数据存储 - 网络附加存储</title>
      <link>https://blog.magictable.ha.cn/hardware/Device-%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8-%E7%BD%91%E7%BB%9C%E9%99%84%E5%8A%A0%E5%AD%98%E5%82%A8.html</link>
      <guid>https://blog.magictable.ha.cn/hardware/Device-%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8-%E7%BD%91%E7%BB%9C%E9%99%84%E5%8A%A0%E5%AD%98%E5%82%A8.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Device - 数据存储 - 网络附加存储</source>
      <description>文章摘要： NAS（网络附加存储，Network Attached Storage）是一种专门设计用于存储和数据共享的设备，它通过网络连接到其他计算机，并提供一个中央化的存储解决方案。 简介 网络附加存储（NAS）：一种独立的存储设备，通过标准的网络拓扑（如以太网）连接到计算机系统，并提供数据和文件存储服务。 特点 易用性：用户可以通过网络访问存储，无...</description>
      <category>硬件设备/设备</category>
      <pubDate>Tue, 01 Oct 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> NAS（网络附加存储，Network Attached Storage）是一种专门设计用于存储和数据共享的设备，它通过网络连接到其他计算机，并提供一个中央化的存储解决方案。</p>
<!-- more -->
<h2>简介</h2>
<ul>
<li><strong>网络附加存储（NAS）</strong>：一种独立的存储设备，通过标准的网络拓扑（如以太网）连接到计算机系统，并提供数据和文件存储服务。</li>
</ul>
<h2>特点</h2>
<ul>
<li><strong>易用性</strong>：用户可以通过网络访问存储，无需复杂的设置。</li>
<li><strong>可扩展性</strong>：通常支持增加存储容量，以满足不断增长的需求。</li>
<li><strong>数据共享</strong>：允许多个用户和设备共享存储空间和数据。</li>
<li><strong>文件服务</strong>：提供文件级的数据访问和控制。</li>
<li><strong>备份与恢复</strong>：支持数据备份和灾难恢复功能。</li>
</ul>
<h2>功能</h2>
<ul>
<li><strong>文件存储与共享</strong>：支持SMB/CIFS、NFS等协议。</li>
<li><strong>多媒体流</strong>：可以作为多媒体服务器，支持DLNA/UPnP等协议。</li>
<li><strong>远程访问</strong>：通过互联网远程访问NAS存储。</li>
<li><strong>数据保护</strong>：支持RAID配置、快照和冗余电源等。</li>
<li><strong>应用程序支持</strong>：许多NAS设备支持第三方应用程序，如个人云、VPN、数据库等。</li>
</ul>
<h2>适用场景</h2>
<ul>
<li><strong>家庭网络</strong>：作为家庭媒体中心和个人数据备份。</li>
<li><strong>小型企业</strong>：作为共享存储和备份解决方案。</li>
<li><strong>远程办公</strong>：提供远程数据访问和协作平台。</li>
</ul>
<h2>优点</h2>
<ul>
<li><strong>成本效益</strong>：相对较低的成本，易于部署和维护。</li>
<li><strong>灵活性和可访问性</strong>：可以通过网络随时随地访问数据。</li>
<li><strong>集中管理</strong>：简化了存储管理，提高了效率。</li>
</ul>
<h2>缺点</h2>
<ul>
<li><strong>性能限制</strong>：与直接连接存储（DAS）或存储区域网络（SAN）相比，性能可能较低。</li>
<li><strong>网络依赖</strong>：NAS的性能和网络稳定性密切相关。</li>
<li><strong>安全性问题</strong>：需要适当的安全措施来保护数据不受网络威胁。</li>
</ul>
<h2>选择考虑因素</h2>
<ul>
<li><strong>存储容量</strong>：根据需求选择合适的存储空间。</li>
<li><strong>性能需求</strong>：考虑处理器性能、内存大小和网络接口速度。</li>
<li><strong>扩展能力</strong>：确认是否支持额外的硬盘驱动器或网络连接。</li>
<li><strong>软件功能</strong>：检查支持的文件系统、备份选项和附加应用程序。</li>
</ul>
<h2>产品推荐</h2>
<p>群晖
极空间</p>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 人工智能 - 技术 - RAG</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD-%E6%8A%80%E6%9C%AF-RAG.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD-%E6%8A%80%E6%9C%AF-RAG.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 人工智能 - 技术 - RAG</source>
      <description>文章摘要： 摘要内容。 简介</description>
      <category>学习笔记/技术</category>
      <pubDate>Tue, 01 Oct 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 人工智能 - 技术 - 大模型</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD-%E6%8A%80%E6%9C%AF-%E5%A4%A7%E6%A8%A1%E5%9E%8B.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD-%E6%8A%80%E6%9C%AF-%E5%A4%A7%E6%A8%A1%E5%9E%8B.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 人工智能 - 技术 - 大模型</source>
      <description>文章摘要： 摘要内容。 简介 大模型 == 人工神经网络 == 计算 == 大脑中的神经网络 记忆 == 数据库 == 存储 == 大脑中的存储 大模型本身没有记忆或只负责计算。 需要传入数据/记忆给大模型，称之为提示词。 大模型支持的上下文长度是有限的，因此需要精简/优化输入的提示词。 注释 模型领域化技术：预训练（Pre-training）、微调（...</description>
      <category>学习笔记/技术</category>
      <pubDate>Tue, 01 Oct 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<blockquote>
<p></p>
</blockquote>
<h2>简介</h2>
<ul>
<li>
<p>大模型 == 人工神经网络 == 计算 == 大脑中的神经网络</p>
</li>
<li>
<p>记忆 == 数据库 == 存储 == 大脑中的存储</p>
</li>
<li>
<p>大模型本身没有记忆或只负责计算。</p>
</li>
<li>
<p>需要传入数据/记忆给大模型，称之为提示词。</p>
</li>
<li>
<p>大模型支持的上下文长度是有限的，因此需要精简/优化输入的提示词。</p>
</li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>模型领域化技术：预训练（Pre-training）、微调（Fine-tunning）、外挂知识库（Memory）</p>
<p>微调等于遗传和突变。</p>
</div>
<h2>大语言模型分类</h2>
<p>文本模型</p>
<p>视觉模型</p>
<p>图像模型</p>
<p>视频模型</p>
<p>语音模型</p>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 人工智能 - 技术 - 提示词工程</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD-%E6%8A%80%E6%9C%AF-%E6%8F%90%E7%A4%BA%E8%AF%8D%E5%B7%A5%E7%A8%8B.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD-%E6%8A%80%E6%9C%AF-%E6%8F%90%E7%A4%BA%E8%AF%8D%E5%B7%A5%E7%A8%8B.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 人工智能 - 技术 - 提示词工程</source>
      <description>文章摘要： 摘要内容。 简介 暂无</description>
      <category>学习笔记/技术</category>
      <pubDate>Tue, 01 Oct 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>暂无</p>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 人工智能 - 技术 - 智能体 - XAgent</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD-%E6%8A%80%E6%9C%AF-%E6%99%BA%E8%83%BD%E4%BD%93-XAgent.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD-%E6%8A%80%E6%9C%AF-%E6%99%BA%E8%83%BD%E4%BD%93-XAgent.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 人工智能 - 技术 - 智能体 - XAgent</source>
      <description>文章摘要： XAgent是一个开源的基于大型语言模型（LLM）的自主智能体，可以自动解决各种任务。 相关信息 外部相关文章 x-agent官网：博客文章 内部相关文章 简介 XAgent是一个开源的基于大型语言模型（LLM）的自主智能体，可以自动解决各种任务。 它被设计为一个通用的智能体，可以应用于各种任务。 官方给出的定义是“一个可以解决任何给定任务...</description>
      <category>学习笔记/技术</category>
      <pubDate>Tue, 01 Oct 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> XAgent是一个开源的基于大型语言模型（LLM）的自主智能体，可以自动解决各种任务。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li>x-agent官网：<a href="https://blog.x-agent.net/blog/xagent/" target="_blank" rel="noopener noreferrer">博客文章</a></li>
</ul>
<p>内部相关文章</p>
<ul>
<li></li>
</ul>
</div>
<h2>简介</h2>
<blockquote>
<ul>
<li>XAgent是一个开源的基于大型语言模型（LLM）的自主智能体，可以自动解决各种任务。</li>
<li>它被设计为一个通用的智能体，可以应用于各种任务。</li>
<li>官方给出的定义是“一个可以解决任何给定任务的超级智能智能体”</li>
<li>项目地址：<a href="https://github.com/OpenBMB/XAgent" target="_blank" rel="noopener noreferrer">https://github.com/OpenBMB/XAgent</a></li>
</ul>
</blockquote>
<h2>特点</h2>
<blockquote>
<ul>
<li>**自主性：**XAgent可以在没有人类参与的情况下自动解决各种任务。</li>
<li>**安全性：**XAgent被设计为安全运行。所有的行为都被限制在一个docker容器内。不用担心你的主机环境受到影响</li>
<li>**可扩展性：**XAgent被设计为可扩展的。您可以轻松地添加新的工具来增强智能体的能力，甚至是新的智能体！</li>
<li>**GUI：**XAgent为用户提供了友好的GUI来与智能体交互。您也可以使用命令行界面与智能体交互。</li>
<li>**与人类的合作：**XAgent可以与您合作解决任务。它不仅有能力在行进中遵循您的指导来解决复杂的任务，而且在遇到挑战时还可以寻求您的帮助。</li>
</ul>
</blockquote>
<h3>组成部分</h3>
<blockquote>
<ul>
<li>**调度器：**负责动态实例化和分派任务给不同的智能体。它允许我们添加新的智能体和改进智能体的能力。</li>
<li>**规划器：**负责为任务生成和校正计划。它将任务分解为子任务，并为它们生成里程碑，使智能体能够逐步解决任务。</li>
<li>**行动者：**负责采取行动实现目标和完成子任务。行动者利用各种工具来解决子任务，它也可以与人类合作来解决任务。</li>
</ul>
</blockquote>
<h3>工具服务器</h3>
<p>工具服务器是为XAgent提供强大和安全的工具来解决任务的服务器。它是一个docker容器，为XAgent提供一个安全的运行环境。
目前，工具服务器提供以下工具：</p>
<ul>
<li><strong>文件编辑器</strong> 提供一个文本编辑工具，可以写入、读取和修改文件。</li>
<li><strong>Python笔记本</strong> 提供一个交互式的Python笔记本，可以运行Python代码来验证想法、绘制图形等。</li>
<li><strong>网页浏览器</strong> 提供一个网页浏览器，可以搜索和访问网页。</li>
<li><strong>Shell</strong> 提供一个bash shell工具，可以执行任何shell命令，甚至安装程序和托管服务。</li>
<li><strong>Rapid API</strong> 提供一个从Rapid API检索API并调用它们的工具，为XAgent提供了广泛的API。有关Rapid API集合的更多信息，请参见<a href="https://github.com/OpenBMB/ToolBench" target="_blank" rel="noopener noreferrer">ToolBench</a>。
您也可以轻松地向工具服务器添加新的工具，以增强XAgent的能力。</li>
</ul>
<h2>核心概念</h2>
<h3>计划与执行的双循环机制</h3>
<blockquote>
<ul>
<li>现有的人工智能代理（例如MetaGPT）在很大程度上被规定为人类精心设计的管道，这使得它们不再是自己意志的代理，而更像是人类设计师的延伸。这样的系统虽然在某些特定任务中有效，但通过将智能体限制在预先存在的人类知识和偏见的范围内，限制了智能体的潜力。为了为真正的自主性铺平道路，XAgent 刻意避免将人类的先验知识注入系统设计中。相反，我们赋予代理商执行自己的规划和决策过程的能力。</li>
<li>处理多方面的任务需要从整体上考虑问题及其各个组成部分。以前的代理通常缺乏全局计划的能力，更专注于根据预定义的策略执行任务。XAgent 采用双循环机制：用于高级任务管理的外循环进程和用于低级任务执行的内循环进程。外循环过程使代理能够识别总体任务并将其分割成更小、更可操作的组件。这种等级划分反映了人类在应对复杂挑战时所采用的自然认知过程。相比之下，内循环过程充当详细的执行器，专注于分段任务的细粒度方面。内循环体现了我们为解决问题的特定部分而采取的细致步骤。通过将高级计划与低级任务执行分开，XAgent 反映了人类采用的自然认知层次结构，并可以根据执行结果迭代优化计划。</li>
</ul>
</blockquote>
<blockquote>
<ul>
<li>在 XAgent 中，决策和任务执行过程通过双循环机制进行编排：外循环和内循环。从本质上讲，外循环处理的是任务的高级管理和分配，而内循环则侧重于每个子任务的低级执行和优化。</li>
</ul>
<p><code>Outer-Loop</code>外循环</p>
<ul>
<li>外循环充当高级计划者和任务的主要编排者，充当整个问题解决序列的主管。</li>
<li>**初始计划生成（Initial Plan Generation）：**PlanAgent 首先生成一个初始计划，该计划为任务执行制定了基本策略。这涉及将给定的复杂任务 T 分解为更小、更易于管理的子任务。此细分可以表现为任务队列。这些子任务的意图很明确，可以更直接地执行，而不会使系统不堪重负。给定一个复杂的任务，使用 PlanAgent 将其分解为一系列子任务。</li>
<li>**迭代计划优化（Iterative Plan Refinements）：**在初始计划之后，PlanAgent 通过从任务队列中弹出第一个子任务来进行。然后，将此子任务传递到内循环。PlanAgent 持续监控任务的进度和状态。执行每个子任务后，内部循环会从 ToolAgent 报告 Feedback。根据反馈，PlanAgent 会触发适当的处理机制，例如优化计划或继续执行后续子任务。外循环完成，直到队列中没有剩余子任务。</li>
</ul>
<p><code>Inner-Loop</code>内循环</p>
<ul>
<li>内循环对于执行外循环分配的各个子任务至关重要。</li>
<li>**代理调度和工具检索（Agent Dispatch and Tool Retrieval）：**根据子任务的性质，派遣具有完成任务所需能力的适当工具代理。</li>
<li>**工具执行（Tool Execution）：**ToolAgent 首先从外部系统检索工具以帮助完成任务。然后，代理使用 ReACT 进行子任务求解。此方法搜索完成子任务的最佳操作系列（工具调用）。</li>
<li>**反馈和反思（Feedback and Reflection）：**在一系列操作之后，ToolAgent 可以发出一个名为“subtask_submit”的特定操作来完成当前子任务的处理，并将反馈和反射传递给 PlanAgent。此反馈可以指示子任务是否成功完成，或突出显示潜在的改进。</li>
</ul>
</blockquote>
<h3><code>PlanAgent</code>动态规划和迭代优化</h3>
<blockquote>
<ul>
<li>复杂的代理系统需要善于不断制定和修改计划，以适应可变的环境和紧急需求。这些能力对于确保灵活性、弹性和效率以应对不可预见的挑战至关重要。为了使外循环具有这种适应性，我们引入了 PlanAgent。PlanAgent 经过定制，通过生成初始计划并不断修改计划来支持外循环。</li>
</ul>
</blockquote>
<blockquote>
<p>PlanAgent 定义了四个函数来优化现有计划：</p>
<ul>
<li>**子任务拆分（Subtask Split）：**使系统能够将特定子任务分解为更精细、更易于管理的单元。只有当前正在执行或未启动的子任务才有资格执行此操作。</li>
<li>**子任务删除（Subtask Deletion）：**删除尚未启动的子任务。已进行或已完成的子任务不符合删除条件。这确保了一定程度的敏捷性，可以修剪冗余或不相关的任务以优化整体执行。</li>
<li>**子任务修改（Subtask Modification）：**更改子任务的内容。要修改的子任务不应已经开始或已完成，从而保持整体计划的完整性。</li>
<li>**子任务添加（Subtask Addition）：**在特定子任务之后插入新的子任务作为同级任务。子任务只能在当前处理的子任务或其后续任务之后添加。它保证了新任务按顺序编排，简化了执行流程并保持了连贯性。</li>
</ul>
</blockquote>
<h3><code>ToolAgent</code>在函数调用中协同推理和行动</h3>
<blockquote>
<ul>
<li>对于每个动作，将智能体推理和在同一个函数调用中的行为协同起来，即推理跟踪（“思想”）和要采取的动作都被视为特定函数的参数。具体来说，每个函数调用都具有以下组件：</li>
<li>**思想（Thought）：**简明扼要地表示代理人对情况的主要见解。</li>
<li>**推理（Reasoning）：**追踪智能体为达到其想法而遍历的逻辑轨迹。</li>
<li>**批评（Criticism）：**捕捉智能体对其行为的自我反思，充当反馈循环。它突出了潜在的疏忽或需要改进的领域。</li>
<li>**命令（Command）：**指示代理根据其推理决定执行的下一个操作。</li>
<li>**参数（Parameters）：**枚举要执行的操作的特定参数或详细信息。</li>
</ul>
</blockquote>
<h3><code>ToolServer</code>支持多种工具</h3>
<blockquote>
<p>ToolServer 由三个关键组件组成：</p>
<ol>
<li>ToolServerManager 管理 docker 容器（即节点）的生命周期，处理它们的创建、监控和关闭。每当新会话启动时，管理器都可以创建一个新节点。定期检查这些节点的状态，以确保它们正常运行;</li>
<li>ToolServerMonitor检查节点的状态，更新节点的状态，确保节点的高效执行。如果节点长时间处于空闲状态，监视器可以停止它以节省资源;</li>
<li>ToolServerNode 是执行操作（例如 API 调用、文件上传、工具检索等）的单个执行单元。</li>
</ol>
</blockquote>
<blockquote>
<p>目前Xagent支持以下工具：</p>
<ul>
<li>FileSystemEnv 提供了一个用于管理文件系统操作的复杂接口。该工具提供了多种功能，从基本的文件读取和写入到内容修改和分层表示等复杂操作。</li>
<li>PythonNotebook 利用 Jupyter Notebook 的功能，提供了一个接口来促进 Python 代码的无缝执行。XAgent 可以动态创建或修改笔记本单元，并在受控和隔离的环境中执行它们。</li>
<li>WebEnv 专为 Web 交互和内容提取而设计。它提供了使用 Bing 搜索 Web 并随后浏览检索到的网页的双重功能。WebEnv 还可以识别和整理源页面中的超链接，从而更全面地了解查询内容。</li>
<li>ExecuteShell 旨在以编程方式执行 shell 命令。它返回已执行命令的输出和任何潜在错误。为了确保操作的稳健性，它采用了处理超时的机制，从而降低了与命令相关的风险，否则这些命令可能会无限期地停止。</li>
<li>RapidAPIEnv 促进了与领先的 API 市场 RapidAPI 的无缝交互。借助 RapidAPIEnv，XAgent 能够连接 160000+ 个真实世界的 API。</li>
<li>当 XAgent 发现当前子任务无法自行完成时，可以调用 AskHumanforHelp。在这种情况下，XAgent 将发布人类参与任务解决的特定要求。</li>
</ul>
</blockquote>
<h3>工具执行 Docker</h3>
<blockquote>
<ul>
<li>实现弹性、效率和可扩展性对于代理系统至关重要。与传统系统不同，XAgent 使用 ToolServer（作为执行引擎）来支持这些属性。它在 Docker 环境中运行，为工具执行提供隔离且安全的空间。这种隔离可确保工具执行的操作不会危及主系统的稳定性或安全性。</li>
</ul>
<p>这种设计带来了许多好处：</p>
<ol>
<li>**安全性：**在Docker容器中运行工具可以保护主系统免受潜在伤害;</li>
<li>**模块化：**将座席规划和工具执行的角色分开，可以使代码更易于管理，更容易调试，并具有可扩展性;</li>
<li>**效率：**系统可以根据需求和使用模式启动、停止和重启节点，从而实现最优的资源利用。借助 ToolServer，XAgent 将决策过程的复杂性LLM与工具执行分开。</li>
</ol>
</blockquote>
<h3>函数调用：XAgent 的通用语言</h3>
<blockquote>
<ul>
<li>结构化的通信模式对于代理系统的稳健性至关重要。因此，使用 OpenAI 的函数调用作为 XAgent 的通用语言。</li>
</ul>
<p>这带来了几个关键属性：</p>
<ol>
<li>结构化通信：函数调用的固有格式明确说明要求和期望的内容。这种结构最大限度地减少了误解和潜在的错误;</li>
<li>统一框架：在传统的人工智能系统中，不同的任务，无论是总结、规划还是API调用，都可能需要不同的方法。通过将所有任务转换为特定的函数调用，我们确保以一致的方式处理每个任务。这种统一简化了系统设计;</li>
<li>与外部工具无缝集成：代理经常需要与外部系统、数据库或工具进行通信。函数调用允许这种通信标准化，提供代理和外部工具都可以理解的通用语言。</li>
</ol>
</blockquote>
<h3>协同人机协作</h3>
<blockquote>
<ul>
<li>XAgent 采用为增强人机交互量身定制的交互机制。</li>
<li>XAgent 允许用户积极干预和指导其决策过程。</li>
</ul>
</blockquote>
<blockquote>
<ul>
<li>提供了一个直观的界面，用户可以在其中覆盖或修改 XAgent 建议的操作，从而将机器效率与人类的直觉和专业知识相结合。</li>
<li>当 XAgent 面临不熟悉的挑战时，它配备了“AskHumanforHelp”工具。</li>
<li>该工具征求用户的实时反馈、建议或指导，确保代理即使在不确定的地形中也能发挥最佳作用。</li>
<li>这种交互式范式将机器自主性与人类智慧相结合，促进了人类与 XAgent 之间的共生关系。</li>
</ul>
</blockquote>
<h2>源码拆解</h2>
]]></content:encoded>
    </item>
    <item>
      <title>Library - Npm - Vant</title>
      <link>https://blog.magictable.ha.cn/software/Library-Npm-Vant.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Npm-Vant.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Npm - Vant</source>
      <description>文章摘要： 轻量、可定制的移动端 Vue 组件库。 简介 性能极佳，组件平均体积小于 1KB（min+gzip） 80+ 个高质量组件，覆盖移动端主流场景 零外部依赖，不依赖三方 npm 包 使用 TypeScript 编写，提供完整的类型定义 单元测试覆盖率超过 90%，提供稳定性保障 提供丰富的中英文文档和组件示例 提供 Sketch 和 Axur...</description>
      <category>软件程序/代码类库</category>
      <pubDate>Sun, 29 Sep 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 轻量、可定制的移动端 Vue 组件库。</p>
<!-- more -->
<h2>简介</h2>
<ul>
<li>性能极佳，组件平均体积小于 1KB（min+gzip）</li>
<li>80+ 个高质量组件，覆盖移动端主流场景</li>
<li>零外部依赖，不依赖三方 npm 包</li>
<li>使用 TypeScript 编写，提供完整的类型定义</li>
<li>单元测试覆盖率超过 90%，提供稳定性保障</li>
<li>提供丰富的中英文文档和组件示例</li>
<li>提供 Sketch 和 Axure 设计资源</li>
<li>支持 Vue 2、Vue 3 和微信小程序</li>
<li>支持 Nuxt 2、Nuxt 3，提供 Nuxt 的 <a href="https://github.com/vant-ui/vant-nuxt" target="_blank" rel="noopener noreferrer">Vant Module</a></li>
<li>支持主题定制，内置 700+ 个主题变量</li>
<li>支持按需引入和 Tree Shaking</li>
<li>支持无障碍访问（持续改进中）</li>
<li>支持深色模式</li>
<li>支持服务器端渲染</li>
<li>支持国际化，内置 30+ 种语言包</li>
<li>官网链接：<a href="https://vant-ui.github.io/vant/#/zh-CN/home" target="_blank" rel="noopener noreferrer">Vant 4</a></li>
</ul>
<h2>安装</h2>
<blockquote>
<ul>
<li>VantUI将组件和样式分开存储，使用时需要手动引入组件和样式，因此可以考虑使用插件来实现自动按需引入组件的样式。</li>
</ul>
</blockquote>
<p><strong>安装vant的组件插件</strong></p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># Vue 3 项目，安装最新版 Vant</span></span>
<span class="line"><span class="token function">npm</span> <span class="token function">install</span> vant</span>
<span class="line"></span>
<span class="line"><span class="token comment"># Vue 2 项目，安装 Vant 2</span></span>
<span class="line"><span class="token function">npm</span> <span class="token function">install</span> vant@latest-v2</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>安装vant的自动按需引入样式的插件</strong></p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">npm</span> <span class="token function">install</span> @vant/auto-import-resolver unplugin-vue-components unplugin-auto-import <span class="token parameter variable">-D</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p><strong>安装浏览器适配插件</strong></p>
<p>窗口布局</p>
<blockquote>
<ul>
<li>Vant 默认使用 <code>px</code> 作为样式单位。</li>
<li><a href="https://github.com/evrone/postcss-px-to-viewport" target="_blank" rel="noopener noreferrer">postcss-px-to-viewport</a> 是一款 PostCSS 插件，用于将 px 单位转化为 vw/vh 单位。</li>
</ul>
</blockquote>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">npm</span> <span class="token function">install</span> postcss-px-to-viewport --save-dev</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p>Rem布局</p>
<blockquote>
<ul>
<li>一个用于 <a href="https://github.com/ai/postcss" target="_blank" rel="noopener noreferrer">PostCSS</a> 的插件，用于从像素单位生成 rem 单位。</li>
</ul>
</blockquote>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">npm</span> <span class="token function">install</span> postcss postcss-pxtorem --save-dev</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>用法</h2>
<h3>配置<code>vite.config.js</code> 文件</h3>
<p>基于 Vite 的项目，在 <code>vite.config.js</code> 文件中配置插件</p>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token keyword">import</span> <span class="token punctuation">{</span> defineConfig <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'vite'</span></span>
<span class="line"><span class="token keyword">import</span> vue <span class="token keyword">from</span> <span class="token string">'@vitejs/plugin-vue'</span></span>
<span class="line"><span class="token keyword">import</span> AutoImport <span class="token keyword">from</span> <span class="token string">'unplugin-auto-import/vite'</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> Components <span class="token keyword">from</span> <span class="token string">'unplugin-vue-components/vite'</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token punctuation">{</span> VantResolver <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'@vant/auto-import-resolver'</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token function">defineConfig</span><span class="token punctuation">(</span><span class="token punctuation">{</span></span>
<span class="line">  <span class="token literal-property property">plugins</span><span class="token operator">:</span> <span class="token punctuation">[</span></span>
<span class="line">    <span class="token function">vue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token function">AutoImport</span><span class="token punctuation">(</span><span class="token punctuation">{</span></span>
<span class="line">      <span class="token literal-property property">resolvers</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token function">VantResolver</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token function">Components</span><span class="token punctuation">(</span><span class="token punctuation">{</span></span>
<span class="line">      <span class="token literal-property property">resolvers</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token function">VantResolver</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">,</span></span>
<span class="line">  <span class="token punctuation">]</span><span class="token punctuation">,</span></span>
<span class="line">  <span class="token literal-property property">build</span><span class="token operator">:</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token literal-property property">sourcemap</span><span class="token operator">:</span> <span class="token boolean">false</span></span>
<span class="line">  <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>注册组件</h3>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token keyword">import</span> Vant <span class="token keyword">from</span> <span class="token string">'vant'</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token punctuation">{</span> createApp <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'vue'</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">const</span> app <span class="token operator">=</span> <span class="token function">createApp</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">app<span class="token punctuation">.</span><span class="token function">use</span><span class="token punctuation">(</span>Vant<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// Lazyload 指令需要单独进行注册</span></span>
<span class="line">app<span class="token punctuation">.</span><span class="token function">use</span><span class="token punctuation">(</span>vant<span class="token punctuation">.</span>Lazyload<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3><code>&lt;script setup&gt;</code></h3>
<ul>
<li>在 <code>&lt;script setup&gt;</code> 中可以直接使用 Vant 组件，不需要进行组件注册。</li>
</ul>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token operator">&lt;</span>script setup<span class="token operator">&gt;</span></span>
<span class="line">  <span class="token keyword">import</span> <span class="token punctuation">{</span> Button <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'vant'</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token operator">&lt;</span><span class="token operator">/</span>script<span class="token operator">&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token operator">&lt;</span>template<span class="token operator">&gt;</span></span>
<span class="line">  <span class="token operator">&lt;</span>Button <span class="token operator">/</span><span class="token operator">&gt;</span></span>
<span class="line"><span class="token operator">&lt;</span><span class="token operator">/</span>template<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>浏览器适配</h2>
<h3>Viewport 布局</h3>
<ul>
<li>Vant 默认使用 px 作为样式单位，如果需要使用 viewport 单位 (vw, vh, vmin, vmax)，推荐使用 <a href="https://github.com/evrone/postcss-px-to-viewport" target="_blank" rel="noopener noreferrer">postcss-px-to-viewport</a> 进行转换。</li>
<li>postcss-px-to-viewport 是一款 PostCSS 插件，用于将 px 单位转化为 vw/vh 单位。</li>
</ul>
<p>PostCSS PostCSS 示例配置:</p>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token comment">// postcss.config.js</span></span>
<span class="line">module<span class="token punctuation">.</span>exports <span class="token operator">=</span> <span class="token punctuation">{</span></span>
<span class="line">  <span class="token literal-property property">plugins</span><span class="token operator">:</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token string-property property">'postcss-px-to-viewport'</span><span class="token operator">:</span> <span class="token punctuation">{</span></span>
<span class="line">      <span class="token literal-property property">viewportWidth</span><span class="token operator">:</span> <span class="token number">375</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token punctuation">}</span><span class="token punctuation">,</span></span>
<span class="line">  <span class="token punctuation">}</span><span class="token punctuation">,</span></span>
<span class="line"><span class="token punctuation">}</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>插件推荐</h2>
<p>在桌面端上模拟移动端 touch 事件</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">npm</span> i @vant/touch-emulator</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p>如果你的样式需要做根据视口大小来调整宽度，这个脚本可以将你CSS中的px单位转化为vw，1vw等于1/100视口宽度。</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">npm</span> <span class="token function">install</span> postcss-px-to-viewport --save-dev</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Library - Maven - SpringBoot 2 - 注解</title>
      <link>https://blog.magictable.ha.cn/software/Library-Maven-SpringBoot2-%E6%B3%A8%E8%A7%A3.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Maven-SpringBoot2-%E6%B3%A8%E8%A7%A3.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Maven - SpringBoot 2 - 注解</source>
      <description>文章摘要： 摘要内容。 接收请求数据 @RequestBody：用于接收json对象数据。普通风格。 @RequestParm：用于接收URL地址或表单进行传递参数。若传递的不是json对象数据，则使用该方法。普通风格。 @PathVariable：用于接收路径参数，使用{参数名称}的格式描述路径参数。参数数量较少时使用REST风格，通常传递id值。 ...</description>
      <category>软件程序/代码类库</category>
      <pubDate>Tue, 24 Sep 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h3>接收请求数据</h3>
<blockquote>
<ul>
<li><code>@RequestBody</code>：用于接收json对象数据。普通风格。</li>
<li><code>@RequestParm</code>：用于接收URL地址或表单进行传递参数。若传递的不是json对象数据，则使用该方法。普通风格。</li>
<li><code>@PathVariable</code>：用于接收路径参数，使用<code>{参数名称}</code>的格式描述路径参数。参数数量较少时使用REST风格，通常传递id值。</li>
</ul>
</blockquote>
<h2>配置文件属性参数</h2>
<h2>继承spring boot父级项目</h2>
<h2>maven依赖</h2>
<h2>maven插件</h2>
<h2>启动器</h2>
<p>官方启动器准循的命名规范：<code>spring-boot-starter-&lt;名称&gt;</code>
第三方启动器的命名规范：<code>&lt;名称&gt;-spring-boot-starter</code></p>
<h2>cache</h2>
<p><code>@RestController</code>：标记为controller层的bean对象
<code>@RequestMapping</code>：请求路径映射
<code>@SpringBootApplication</code>：标记为启动器类</p>
<h3>启动/引导类</h3>
<blockquote>
<ul>
<li><code>@SpringBootApplication</code>：标记成SpringBoot的启动/引导类。</li>
<li><code>@Configuration</code>：标记为配置类。</li>
<li><code>@ComponentScan</code>：配置扫描包的路径。</li>
<li><code>@ImportResource</code>：加载XML配置文件。</li>
</ul>
</blockquote>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>配置类</h3>
<blockquote>
<ul>
<li><code>@Configuration()</code>：spring底层会给配置创建cglib动态代理，用于防止每次调用本类的bean方法而重新创建对象，默认是启用状态的单例bean。</li>
<li><code>@EnableConfigurationProperties()</code>：启用可以在配置类设置的属性对应的类。</li>
</ul>
</blockquote>
<h3>标记bean对象</h3>
<blockquote>
<ul>
<li><code>@RestController</code>：标记为controller层的bean对象。将<code>@Controller</code>和<code>@ResponseBody</code>合二为一。</li>
</ul>
</blockquote>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token annotation punctuation">@RestController</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">UserController</span> <span class="token punctuation">{</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>请求URL映射</h3>
<p>普通风格的资源请求路径</p>
<blockquote>
<ul>
<li><code>@RequestMapping</code>：方法注解，请求URL路径映射。</li>
</ul>
</blockquote>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">UserController</span> <span class="token punctuation">{</span></span>
<span class="line"></span>
<span class="line"> <span class="token comment">// 接收,请求方式限制,可以不进行请求方法限制</span></span>
<span class="line"> <span class="token annotation punctuation">@RequestMapping</span><span class="token punctuation">(</span>value<span class="token operator">=</span>"<span class="token operator">/</span>users<span class="token punctuation">,</span> method <span class="token operator">=</span> <span class="token class-name">RequestMethod</span><span class="token punctuation">.</span><span class="token constant">POST</span><span class="token punctuation">)</span></span>
<span class="line"> <span class="token comment">// 响应</span></span>
<span class="line"> <span class="token annotation punctuation">@ResponseBody</span></span>
<span class="line"> <span class="token keyword">public</span> <span class="token class-name">String</span> <span class="token function">save</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">  <span class="token keyword">return</span> <span class="token string">"返回响应"</span><span class="token punctuation">;</span></span>
<span class="line"> <span class="token punctuation">}</span></span>
<span class="line"> </span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>REST风格的资源请求路径</p>
<blockquote>
<ul>
<li><code>@GetMapping</code>：方法注解，请求方式限制，仅支持<code>get</code>请求方式。</li>
<li><code>@PostMapping</code>：方法注解，请求方式限制，仅支持<code>post</code>请求方式。</li>
<li><code>@PutMapping</code>：方法注解，请求方式限制，仅支持<code>put</code>请求方式。</li>
<li><code>@DeleteMapping</code>：方法注解，请求方式限制，仅支持<code>delete</code>请求方式。</li>
</ul>
</blockquote>
<blockquote>
<ul>
<li><code>@PathVariable</code>：形参注解，绑定路径参数与处理器方式形参间的关系，要求路径参数名与形参名一致。</li>
</ul>
</blockquote>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token annotation punctuation">@GetMapping</span><span class="token punctuation">(</span><span class="token string">"user/{id}"</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">getById</span><span class="token punctuation">(</span><span class="token annotation punctuation">@PathVariable</span> <span class="token class-name">Integer</span> id<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>注入（绑定）配置文件中的属性</h3>
<blockquote>
<ul>
<li><code>@ConfigurationProperties(prefix="&lt;文件名&gt;")</code>：读取<code>yaml</code>配置文件的数据。</li>
<li><code>@PropertySource("classpath:&lt;文件名&gt;")</code>：读取<code>properties</code>配置文件的数据。</li>
</ul>
</blockquote>
<h3>标记为测试类</h3>
<blockquote>
<ul>
<li><code>@SpringBootTest</code>：在类上定义，标记为测试类。</li>
</ul>
</blockquote>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 指定spring boot的启动/引导类</span></span>
<span class="line"><span class="token annotation punctuation">@SpringBootTest</span><span class="token punctuation">(</span>classes <span class="token operator">=</span> app<span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Test</span> <span class="token punctuation">{</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Library - Npm - Vite</title>
      <link>https://blog.magictable.ha.cn/software/Library-Npm-Vite.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Npm-Vite.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Npm - Vite</source>
      <description>文章摘要： Vite是一种新型前端构建工具，能够显著提升前端开发体验。 前置依赖：NodeJS和npm 注释 构建工具的作用是： 模块化开发：支持直接从node_modules里引入代码。 处理代码兼容性：语法降级、语法转换 提高项目性能：压缩文件、代码分割。 热更新：监听文件的变化，自动调用对应的集成工具进行重新打包，再让浏览器重新运行。 开发服务器...</description>
      <category>软件程序/代码类库</category>
      <pubDate>Tue, 24 Sep 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Vite是一种新型前端构建工具，能够显著提升前端开发体验。</p>
<ul>
<li>前置依赖：NodeJS和npm</li>
</ul>
<!-- more -->
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>构建工具的作用是：</p>
<ul>
<li>模块化开发：支持直接从node_modules里引入代码。</li>
<li>处理代码兼容性：语法降级、语法转换</li>
<li>提高项目性能：压缩文件、代码分割。</li>
<li>热更新：监听文件的变化，自动调用对应的集成工具进行重新打包，再让浏览器重新运行。</li>
<li>开发服务器：跨域问题。</li>
<li>Vite 内置dotenv依赖，能够读取<code>.env</code>环境变量文件。</li>
</ul>
<p>打包</p>
<ul>
<li>将代码交给构建工具进行编译处理的过程叫做打包，打包完成以后会得到一个浏览器可以认识的文件。</li>
</ul>
</div>
<h2>简介</h2>
<blockquote>
<p>Vite是一种新型前端构建工具，能够显著提升前端开发体验。</p>
<ul>
<li>一个开发服务器，它基于 原生 ES 模块 提供了 丰富的内建功能，如速度快到惊人的 模块热更新（HMR）。</li>
<li>一套构建指令，它使用 Rollup 打包你的代码，并且它是预配置的，可输出用于生产环境的高度优化过的静态资源。</li>
</ul>
</blockquote>
<p>作用</p>
<blockquote>
<ul>
<li>不同的第三方包会有不同的导出格式（这个是vite没法约束别人的事情）。</li>
<li>对路径的处理上可以直接使用<code>.vite/deps</code>，方便路径重写。</li>
<li>网络多包传输的性能问题。</li>
</ul>
</blockquote>
<h2>下载vite-cli</h2>
<blockquote>
<ul>
<li>此处下载项目预设，实现快速搭建项目。</li>
</ul>
</blockquote>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">npm</span> init vite@latest</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>使用插件</h2>
<blockquote>
<p>Vite 可以使用插件进行扩展，这得益于 Rollup 优秀的插件接口设计和一部分 Vite 独有的额外选项。这意味着 Vite 用户可以利用 Rollup 插件的强大生态系统，同时根据需要也能够扩展开发服务器和 SSR 功能。</p>
</blockquote>
<h3>添加插件</h3>
<p>若要使用一个插件，需要将插件添加到npm的<code>package.json</code>的<code>devDependencies</code>属性中，</p>
<h2>依赖预构建</h2>
<h2>静态资源处理</h2>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token keyword">import</span> imgUrl <span class="token keyword">from</span> <span class="token string">'./img.png'</span></span>
<span class="line">document<span class="token punctuation">.</span><span class="token function">getElementById</span><span class="token punctuation">(</span><span class="token string">'hero-img'</span><span class="token punctuation">)</span><span class="token punctuation">.</span>src <span class="token operator">=</span> imgUrl</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h2>目录结构</h2>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">project/</span>
<span class="line">|-- dist            # 构建，编译文件</span>
<span class="line">|-- node_modules/   # 当前项目的npm仓库</span>
<span class="line">|-- public/         # </span>
<span class="line">|-- src/            # 代码文件</span>
<span class="line"> |-- assets/</span>
<span class="line"> |-- components/</span>
<span class="line"> App.vue     # 主vue组件</span>
<span class="line"> main.js     # 主js代码</span>
<span class="line"> style.css   # 主css样式</span>
<span class="line">index.html      # 启动入口</span>
<span class="line">package-lock.json   # npm依赖版本记录</span>
<span class="line">package.json        # npm配置文件</span>
<span class="line">vite.config.js      # vite配置文件</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>命令</h2>
<p>可以通过配置<code>npm</code>的<code>package.json</code>配置来使用<code>vite</code>的可执行文件。</p>
<blockquote>
<ul>
<li><code>vite</code>：启动开发服务器</li>
<li><code>vite build</code>：为生产环境构建（编译）产物。</li>
<li><code>vite preview</code>：本地预览生产构建（编译）产物。</li>
</ul>
</blockquote>
<h3>指定配置文件</h3>
<blockquote>
<ul>
<li>可以显式(手动指定)地通过 <code>--config</code> 命令行选项指定一个配置文件。</li>
</ul>
</blockquote>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line">vite <span class="token parameter variable">--config</span> config.js</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>环境变量</h2>
<p>环境变量文件分类：</p>
<blockquote>
<ul>
<li><code>.env</code>：公共环境变量</li>
<li><code>.env.development</code>：开发环境变量</li>
<li><code>.env.production</code>：生产环境变量</li>
</ul>
</blockquote>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>vite框架中的dotenv依赖会读取<code>.env</code>环境变量文件到程序中。</li>
<li>可以通过<code>import.meta.env</code>方法来获取<code>.env</code>文件中的变量。</li>
<li>例子：<code>import.meta.env.MODE</code>来获取应用的运行模式。</li>
</ul>
</div>
<p>Vite 在一个特殊的 <code>import.meta.env</code> 对象上暴露环境变量。</p>
<ul>
<li><strong><code>import.meta.env.MODE</code></strong>: {string} 应用运行的<a href="https://www.vitejs.net/guide/env-and-mode.html#modes" target="_blank" rel="noopener noreferrer">模式</a>。</li>
<li><strong><code>import.meta.env.BASE_URL</code></strong>: {string} 部署应用时的基本 URL。他由<a href="https://www.vitejs.net/config/#base" target="_blank" rel="noopener noreferrer"><code>base</code> 配置项</a>决定。</li>
<li><strong><code>import.meta.env.PROD</code></strong>: {boolean} 应用是否运行在生产环境。</li>
<li><strong><code>import.meta.env.DEV</code></strong>: {boolean} 应用是否运行在开发环境 (永远与 <code>import.meta.env.PROD</code>相反)。</li>
</ul>
<h2>配置文件</h2>
<h3>配置文件解析</h3>
<p>当以命令行方式运行 <code>vite</code> 时，Vite 会自动解析项目根目录下名为 <code>vite.config.js</code> 的文件。</p>
<p>基本配置文件基本内容如下：</p>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token comment">// vite.config.js</span></span>
<span class="line"><span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token punctuation">{</span></span>
<span class="line">  <span class="token comment">// 配置选项</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>配置智能提示</h3>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token comment">// 提供语法提示</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token punctuation">{</span> defineConfig <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'vite'</span>  <span class="token comment">// 提供语法提示的函数</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token function">defineConfig</span><span class="token punctuation">(</span><span class="token punctuation">{</span></span>
<span class="line"> <span class="token comment">// ...</span></span>
<span class="line"><span class="token punctuation">}</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>语法提示的处理</p>
<blockquote>
<ul>
<li>导入<code>import { defineConfig } from 'vite</code>就能够提供语法提示。</li>
</ul>
</blockquote>
<p>环境变量的处理</p>
<blockquote>
<ul>
<li>创建<code>vite.base.config.js</code>、<code>vite.dev.config.js</code>、<code>vite.prod.config.js</code></li>
</ul>
</blockquote>
<h3>环境变量</h3>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token punctuation">{</span><span class="token keyword">import</span><span class="token punctuation">.</span>meta<span class="token punctuation">.</span>env<span class="token punctuation">.</span><span class="token constant">BASE_URL</span><span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">{</span><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h2>cache</h2>
<p>es modul的规范
vite是什么东西
vite的基本安装和使用
vite的编译结果
vite编译结果的分析
vite的配置文件
vite处理css、静态资源
vite的插件和插件的使用
vite与ts的结合
vite的构建原理</p>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Nacos - 配置文件</title>
      <link>https://blog.magictable.ha.cn/software/Package-Nacos-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Nacos-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Nacos - 配置文件</source>
      <description>文章摘要： 配置方案。 软件包目录结构 相关信息 nacos软件包中，本质是一个spring项目，一个打包好的jar包项目。</description>
      <category>软件程序/软件包</category>
      <pubDate>Tue, 24 Sep 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 配置方案。</p>
<!-- more -->
<h2>软件包目录结构</h2>
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>nacos软件包中，本质是一个spring项目，一个打包好的jar包项目。</p>
</div>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">nacos/</span>
<span class="line"></span>
<span class="line">|-- bin/     # 可执行文件</span>
<span class="line">	|-- logs/</span>
<span class="line">	|-- work/</span>
<span class="line">	derby.log</span>
<span class="line">	shutdown.cmd  # windows结束脚本</span>
<span class="line">	startup.cmd   # windows运行脚本</span>
<span class="line">	shutdown.sh   # linux结束脚本</span>
<span class="line">	startup.sh    # linux运行脚本</span>
<span class="line">	</span>
<span class="line">|-- conf/    # 配置文件</span>
<span class="line">	|-- announcement_en-US.conf</span>
<span class="line">	|-- announcement_zh-CN.conf</span>
<span class="line">	|-- application.properties           # nacos主要配置文件</span>
<span class="line">	|-- application.properties.example</span>
<span class="line">	|-- cluster.conf.example             # nacos集群</span>
<span class="line">	|-- console-guide.conf</span>
<span class="line">	|-- nacos-logback.xml</span>
<span class="line">	|-- 1.4.0-ipv6_support-update.sql</span>
<span class="line">	|-- derby-schema.sql</span>
<span class="line">	|-- mysql-schema.sql</span>
<span class="line">	</span>
<span class="line">|-- data/    # 数据文件</span>
<span class="line">	|-- connection/</span>
<span class="line">	|-- derby-data/</span>
<span class="line">	|-- naming/</span>
<span class="line">	|-- protocol/</span>
<span class="line">	|-- tps/</span>
<span class="line">	</span>
<span class="line">|-- logs/    # 日志文件</span>
<span class="line">	|-- # 很多日志文件</span>
<span class="line">	</span>
<span class="line">|-- target/  # jar运行程序</span>
<span class="line">	|-- nacos-server.jar  # 运行程序</span>
<span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Nacos</title>
      <link>https://blog.magictable.ha.cn/software/Package-Nacos.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Nacos.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Nacos</source>
      <description>文章摘要： 一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 简介 简要说明 一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集，帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。 主要功能 服务发现和服务健康监测：Nacos...</description>
      <category>软件程序/软件包</category>
      <pubDate>Tue, 24 Sep 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。</li>
<li>Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集，帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>服务发现和服务健康监测</strong>：Nacos 支持基于 DNS 和基于 RPC 的服务发现。服务提供者在启动时向 Nacos 注册自己，消费者则通过 Nacos 来发现服务依赖，Nacos 还提供服务的健康状态检查。</li>
<li><strong>动态配置服务</strong>：动态配置服务让你动态地管理所有环境的配置，配置变更可以自动推送到使用该配置的服务，实现配置的热更新。</li>
<li><strong>动态 DNS 服务</strong>：Nacos 支持动态 DNS 服务，可以通过它管理云原生应用的服务发现和服务管理。</li>
<li><strong>服务和元数据管理</strong>：Nacos 提供服务的元数据管理功能，帮助用户管理服务信息，如权重、容灾策略、负载均衡策略等。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>集群部署</strong>：为了确保高可用性，Nacos 应该以集群模式部署。</li>
<li><strong>数据持久化</strong>：默认情况下，Nacos 使用内嵌数据库存储数据，但在生产环境中，建议使用外部数据库进行数据持久化。</li>
<li><strong>安全配置</strong>：在生产环境中，应配置适当的安全措施，如使用 HTTPS、设置访问控制等，以保护 Nacos 服务。</li>
<li><strong>版本兼容性</strong>：在升级 Nacos 时，需要注意版本之间的兼容性问题，确保服务的平滑过渡。</li>
<li><strong>资源分配</strong>：Nacos 需要足够的系统资源来保证其性能，因此在部署时需要合理分配 CPU、内存等资源。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>微服务架构</strong>：在微服务架构中，Nacos 是一个理想的组件，用于服务发现、配置管理和服务元数据管理。</li>
<li><strong>云原生应用</strong>：Nacos 支持云原生应用的服务发现和配置管理，适用于容器化和编排系统，如 Kubernetes。</li>
<li><strong>分布式系统</strong>：在分布式系统中，Nacos 可以帮助管理和维护服务列表，确保服务之间的正确通信。</li>
<li><strong>动态配置需求</strong>：对于需要动态调整配置参数的应用，Nacos 提供了实时配置更新和推送功能，特别适用于这类场景。</li>
</ul>
<h2>安装与卸载</h2>
<p>详细总结：<a href="/software/Package-Nacos-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html" target="_blank">Package-Nacos-安装与卸载</a></p>
<h2>终端命令</h2>
<p>详细总结：<a href="/software/Package-Nacos-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4.html" target="_blank">Package-Nacos-终端命令</a></p>
<h2>配置文件</h2>
<p>详细总结：<a href="/software/Package-Nacos-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6.html" target="_blank">Package-Nacos-配置文件</a></p>
<h2>热门推荐</h2>
<p>详细总结：<a href=""></a></p>
<h2>问题总结</h2>
<p>详细总结：<a href=""></a></p>
<h2>设计理念</h2>
<ul>
<li>我们相信一切都是服务，每个服务节点被构想为一个星球，每个服务都是一个星系。Nacos 致力于帮助建立这些服务之间的<strong>连接</strong>，助力每个面向星辰的梦想能够透过云层，飞在云上，更好的链接整片星空。</li>
<li>Nacos希望帮助用户在云原生时代，在私有云、混合云或者公有云等所有云环境中，更好的构建、交付、管理自己的微服务平台，更快的复用和组合业务服务，更快的交付商业创新的价值，从而为用户赢得市场。正是基于这一愿景，Nacos的设计理念被定位为<code>易于使用</code>、<code>面向标准</code>、<code>高可用</code>和<code>方便扩展</code>。</li>
</ul>
<h2>功能</h2>
<p><strong>服务发现和服务健康监测</strong></p>
<ul>
<li>Nacos 支持基于 DNS 和基于 RPC 的服务发现。</li>
<li>Nacos 提供对服务的实时的健康检查，阻止向不健康的主机或服务实例发送请求。</li>
</ul>
<p><strong>动态配置服务</strong></p>
<ul>
<li>动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。</li>
<li>Nacos 提供了一个简洁易用的UI帮助您管理所有的服务和应用的配置。</li>
</ul>
<p><strong>动态 DNS 服务</strong></p>
<ul>
<li>动态 DNS 服务支持权重路由，让您更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。</li>
</ul>
<p><strong>服务及其元数据管理</strong></p>
<ul>
<li>Nacos 能让您从微服务平台建设的视角管理数据中心的所有服务及元数据。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Library - Maven - Sentinel</title>
      <link>https://blog.magictable.ha.cn/software/Library-Maven-Sentinel.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Maven-Sentinel.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Maven - Sentinel</source>
      <description>文章摘要： 流量管理组件。 相关信息 外部相关文章 官方网站：Sentinel官网 内部相关文章 简介 随着微服务的流行，服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件，主要以流量为切入点，从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务...</description>
      <category>软件程序/代码类库</category>
      <pubDate>Mon, 23 Sep 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 流量管理组件。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li>官方网站：<a href="http://sentinelguard.io/zh-cn/index.html" target="_blank" rel="noopener noreferrer">Sentinel官网</a></li>
</ul>
<p>内部相关文章</p>
<ul>
<li></li>
</ul>
</div>
<h2>简介</h2>
<blockquote>
<ul>
<li>随着微服务的流行，服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件，主要以流量为切入点，从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。</li>
</ul>
</blockquote>
<h2>快速开始</h2>
<p>sentinel的使用分为两个部分：</p>
<ul>
<li>核心库（Java客户端）：不依赖任何框架/库，能够运行于Java 8 及以上的版本的运行时环境。</li>
<li>控制台（Dashboard）：Dashboard 主要负责管理推送规则、监控、管理机器信息等。</li>
</ul>
<h2>使用流程</h2>
<p><strong>1. 引入Sentinel依赖</strong></p>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>com.alibaba.csp<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>sentinel-core<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>1.8.6<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>2. 定义资源</strong></p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 配置规则.</span></span>
<span class="line">    <span class="token function">initFlowRules</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 1.5.0 版本开始可以直接利用 try-with-resources 特性</span></span>
<span class="line">        <span class="token keyword">try</span> <span class="token punctuation">(</span><span class="token class-name">Entry</span> entry <span class="token operator">=</span> <span class="token class-name">SphU</span><span class="token punctuation">.</span><span class="token function">entry</span><span class="token punctuation">(</span><span class="token string">"HelloWorld"</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token comment">// 被保护的逻辑</span></span>
<span class="line">            <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"hello world"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"> <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">BlockException</span> ex<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token comment">// 处理被流控的逻辑</span></span>
<span class="line">     <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"blocked!"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"> <span class="token punctuation">}</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>通过我们提供的注解支持模块，来定义我们的资源</p>
<ul>
<li>提示：注解支持模块需要配合 Spring AOP。</li>
</ul>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token annotation punctuation">@SentinelResource</span><span class="token punctuation">(</span><span class="token string">"HelloWorld"</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">helloWorld</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 资源中的逻辑</span></span>
<span class="line">    <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"hello world"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>3. 定义规则</strong></p>
<ul>
<li>通过流控规则来指定允许该资源通过的请求次数</li>
</ul>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">private</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">initFlowRules</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span></span>
<span class="line">    <span class="token class-name">List</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">FlowRule</span><span class="token punctuation">&gt;</span></span> rules <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ArrayList</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token punctuation">&gt;</span></span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token class-name">FlowRule</span> rule <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">FlowRule</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    rule<span class="token punctuation">.</span><span class="token function">setResource</span><span class="token punctuation">(</span><span class="token string">"HelloWorld"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    rule<span class="token punctuation">.</span><span class="token function">setGrade</span><span class="token punctuation">(</span><span class="token class-name">RuleConstant</span><span class="token punctuation">.</span><span class="token constant">FLOW_GRADE_QPS</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token comment">// Set limit QPS to 20.</span></span>
<span class="line">    rule<span class="token punctuation">.</span><span class="token function">setCount</span><span class="token punctuation">(</span><span class="token number">20</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    rules<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span>rule<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token class-name">FlowRuleManager</span><span class="token punctuation">.</span><span class="token function">loadRules</span><span class="token punctuation">(</span>rules<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>4. 检查效果</strong></p>
<p><strong>5. 启动 Sentinel 控制台</strong></p>
<ul>
<li>Sentinel 开源控制台支持实时监控和规则管理。</li>
</ul>
<p>下载控制台jar包并在本地启动：</p>
<p>客户端介入控制台：客户端需要引入 Transport 模块来与 Sentinel 控制台进行通信。您可以通过 <code>pom.xml</code> 引入 JAR 包。</p>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>com.alibaba.csp<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>sentinel-transport-simple-http<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>1.8.6<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>启动时加入 JVM 参数 <code>-Dcsp.sentinel.dashboard.server=consoleIp:port</code> 指定控制台地址和端口。
确保应用端有访问量。</p>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Obsidian</title>
      <link>https://blog.magictable.ha.cn/software/Package-Obsidian.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Obsidian.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Obsidian</source>
      <description>文章摘要： 开源数据本地化的笔记软件。 简介 简要说明 Obsidian 是一款强大的知识库应用。 允许用户以 Markdown 格式创建、管理和链接笔记。它以本地文件系统为基础，确保用户数据的隐私和安全性。 主要功能 基于 Markdown 的笔记：所有笔记都是用 Markdown 编写的，支持丰富的格式和链接。 双链引用：Obsidian 支持创建...</description>
      <category>软件程序/软件包</category>
      <pubDate>Mon, 23 Sep 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 开源数据本地化的笔记软件。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>Obsidian 是一款强大的知识库应用。</li>
<li>允许用户以 Markdown 格式创建、管理和链接笔记。它以本地文件系统为基础，确保用户数据的隐私和安全性。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>基于 Markdown 的笔记</strong>：所有笔记都是用 Markdown 编写的，支持丰富的格式和链接。</li>
<li><strong>双链引用</strong>：Obsidian 支持创建笔记之间的双向链接，便于构建知识网络。</li>
<li><strong>图谱视图</strong>：可以以图谱的形式查看笔记之间的链接关系，帮助用户理解和组织知识。</li>
<li><strong>插件系统</strong>：Obsidian 提供了丰富的插件，可以扩展应用的功能，如日历视图、自定义主题、自动化等。</li>
<li><strong>全文搜索</strong>：快速搜索所有笔记中的内容。</li>
<li><strong>本地文件存储</strong>：所有笔记都存储在本地，用户可以自由地管理文件和备份。</li>
<li><strong>多平台支持</strong>：Obsidian 在 Windows、macOS 和 Linux 上都有相应的客户端。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>Markdown 语法</strong>：用户需要熟悉 Markdown 语法才能有效地使用 Obsidian。</li>
<li><strong>数据备份</strong>：虽然数据存储在本地，但用户需要定期备份文件以防丢失。</li>
<li><strong>插件管理</strong>：插件虽然强大，但过多或不兼容的插件可能会影响应用的性能和稳定性。</li>
<li><strong>隐私和安全</strong>：虽然数据存储在本地，但用户仍需注意文件权限和共享时的隐私问题。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>个人知识管理</strong>：适合个人用户构建和管理个人知识库。</li>
<li><strong>学术研究</strong>：研究人员可以使用 Obsidian 组织文献、笔记和研究资料。</li>
<li><strong>项目文档</strong>：项目团队成员可以使用 Obsidian 来创建项目文档，并通过链接来组织信息。</li>
<li><strong>写作和出版</strong>：作家和作者可以使用 Obsidian 来撰写文章、书籍，并管理写作过程中的素材。</li>
<li><strong>学习笔记</strong>：学生可以使用 Obsidian 来整理学习笔记，构建学科知识体系。</li>
</ul>
<h2>安装与卸载</h2>
<p>详细总结：<a href=""></a></p>
<h2>终端命令</h2>
<p>详细总结：<a href=""></a></p>
<h2>配置文件</h2>
<p>详细总结：<a href=""></a></p>
<h2>热门推荐</h2>
<p>详细总结：<a href=""></a></p>
<p>插件推荐：<a href="/software/Package-Obsidian-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E6%8F%92%E4%BB%B6.html" target="_blank">Package-Obsidian-热门推荐-插件</a></p>
<h2>问题总结</h2>
<p>详细总结：<a href="/software/Package-Obsidian-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93.html" target="_blank">Package-Obsidian-问题总结</a></p>
<h2>配置展示</h2>
<blockquote>
<p>
</p>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>OS - CentOS</title>
      <link>https://blog.magictable.ha.cn/software/OS-CentOS.html</link>
      <guid>https://blog.magictable.ha.cn/software/OS-CentOS.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">OS - CentOS</source>
      <description>文章摘要： CentOS（Community Enterprise Operating System）是一个基于Red Hat Enterprise Linux（RHEL）构建的免费、开源的操作系统。。 简介 简要说明 CentOS（Community Enterprise Operating System）是一个基于Red Hat Enterpris...</description>
      <category>软件程序/操作系统</category>
      <pubDate>Sun, 22 Sep 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> CentOS（Community Enterprise Operating System）是一个基于Red Hat Enterprise Linux（RHEL）构建的免费、开源的操作系统。。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>CentOS（Community Enterprise Operating System）是一个基于Red Hat Enterprise Linux（RHEL）构建的免费、开源的操作系统。</li>
<li>它旨在与RHEL在功能上兼容，但不包含Red Hat的商业支持。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>企业级稳定性</strong>：继承自RHEL的稳定性，适合生产环境。</li>
<li><strong>软件包管理</strong>：使用YUM（Yellowdog Updater, Modified）或DNF（Dandified YUM）进行软件包管理。</li>
<li><strong>社区支持</strong>：由社区提供支持，用户可以在论坛和邮件列表中寻求帮助。</li>
<li><strong>长期支持版本</strong>：提供长达10年的安全更新支持。</li>
<li><strong>兼容性</strong>：与RHEL兼容，允许用户在CentOS上测试和开发，然后将应用迁移到RHEL。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>商业支持</strong>：CentOS不提供官方的商业支持，如果需要，可以考虑迁移到RHEL。</li>
<li><strong>软件更新</strong>：软件包更新通常不如其他滚动更新发行版那样频繁。</li>
<li><strong>软件仓库</strong>：默认软件仓库可能不包含最新的软件版本，可能需要添加第三方仓库。</li>
<li><strong>CentOS Stream</strong>：从CentOS 8开始，CentOS项目转向了CentOS Stream，这是一个位于RHEL上游的开发平台。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>服务器操作系统</strong>：由于其稳定性和长期支持，非常适合作为服务器操作系统。</li>
<li><strong>企业环境</strong>：适用于需要稳定、可靠操作系统的企业环境。</li>
<li><strong>开发与测试</strong>：作为RHEL的克隆，它是开发者和测试人员用于开发和测试RHEL兼容应用的理想平台。</li>
<li><strong>虚拟化</strong>：支持各种虚拟化技术，适合构建虚拟化基础设施。</li>
<li><strong>云计算</strong>：在云计算环境中，CentOS因其稳定性和兼容性而被广泛使用。</li>
</ul>
<h2>终端命令</h2>
<p>详细总结：<a href="/software/OS-CentOS-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4.html" target="_blank">OS-CentOS-终端命令</a></p>
<h2>忘记root密码，从设密码</h2>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 网络通信 - 查询手册 - 世界各国和地区名称代码</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-%E4%B8%96%E7%95%8C%E5%90%84%E5%9B%BD%E5%92%8C%E5%9C%B0%E5%8C%BA%E5%90%8D%E7%A7%B0%E4%BB%A3%E7%A0%81.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-%E4%B8%96%E7%95%8C%E5%90%84%E5%9B%BD%E5%92%8C%E5%9C%B0%E5%8C%BA%E5%90%8D%E7%A7%B0%E4%BB%A3%E7%A0%81.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 网络通信 - 查询手册 - 世界各国和地区名称代码</source>
      <description>文章摘要： 摘要内容。 简介 世界各国和地区名称代码（Codes for the representation of names of countries and regions）为中国推荐性标准，采用了ISO、IEC等国际国外组织的标准。 标准号：GB/T 2659.1-2022 实施时间：2023-07-01 知识来源：全国标准信息公共服务平台 代...</description>
      <category>学习笔记/技术</category>
      <pubDate>Tue, 10 Sep 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<ul>
<li>世界各国和地区名称代码（Codes for the representation of names of countries and regions）为中国推荐性标准，采用了ISO、IEC等国际国外组织的标准。</li>
<li>标准号：GB/T 2659.1-2022</li>
<li>实施时间：2023-07-01</li>
<li>知识来源：<a href="https://std.samr.gov.cn/gb/search/gbDetailed?id=F159DFC2A91047EFE05397BE0A0AF334" target="_blank" rel="noopener noreferrer">全国标准信息公共服务平台</a></li>
</ul>
<h2>代码表</h2>
<p>ISO 3166-1提供了国家地区代码的三种表现方式。</p>
<p>提示：外国人社会保障号码编制规则中的国家地区代码，采用三字母的国家地区代码表示。</p>
<p>具体包括：</p>
<ul>
<li><strong>两字母代码</strong>：由两字符拉丁字母组成的代码。这种代码拥有多种用途，其中最重要的一个用途与互联网的地理级别域名有关。</li>
<li><strong>三字母代码</strong>：由三字符拉丁字母组成的代码。</li>
<li><strong>数字代码</strong>：由三位阿拉伯数字组成的代码。与联合国统计处定义的代码类似。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:center">序号</th>
<th style="text-align:center">中文简称</th>
<th style="text-align:left">英文简称</th>
<th style="text-align:left">英文全称</th>
<th style="text-align:center">两字母代码</th>
<th style="text-align:center">三字母代码</th>
<th style="text-align:center">数字代码</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">45</td>
<td style="text-align:center">中国</td>
<td style="text-align:left">China</td>
<td style="text-align:left">thePeople'sRepublicofChina</td>
<td style="text-align:center">CN</td>
<td style="text-align:center">CHN</td>
<td style="text-align:center">156</td>
</tr>
<tr>
<td style="text-align:center">110</td>
<td style="text-align:center">日本</td>
<td style="text-align:left">Japan</td>
<td style="text-align:left">/</td>
<td style="text-align:center">JP</td>
<td style="text-align:center">JPN</td>
<td style="text-align:center">832</td>
</tr>
<tr>
<td style="text-align:center">230</td>
<td style="text-align:center">英国</td>
<td style="text-align:left">UnitedKingdom(the)</td>
<td style="text-align:left">theUnitedKingdomofGreatBritainandNorthernIreland</td>
<td style="text-align:center">GB</td>
<td style="text-align:center">GBR</td>
<td style="text-align:center">826</td>
</tr>
<tr>
<td style="text-align:center">231</td>
<td style="text-align:center">美国</td>
<td style="text-align:left">UnitedStates(the)</td>
<td style="text-align:left">theUnitedStatesofAmerica</td>
<td style="text-align:center">US</td>
<td style="text-align:center">USA</td>
<td style="text-align:center">840</td>
</tr>
</tbody>
</table>
<ul>
<li>更多信息，请参考百度百科。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 通信 - 查询手册 - ICP网络域名备案</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-ICP%E7%BD%91%E7%BB%9C%E5%9F%9F%E5%90%8D%E5%A4%87%E6%A1%88.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-ICP%E7%BD%91%E7%BB%9C%E5%9F%9F%E5%90%8D%E5%A4%87%E6%A1%88.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 通信 - 查询手册 - ICP网络域名备案</source>
      <description>文章摘要： 总结ICP备案相关知识和流程，重点讲解在华为云平台进行备案的流程。 涉及网站：工业和信息化部政务服务平台、华为云 相关信息 外部相关文章 华为云的ICP备案文档 内部相关文章 简介 简要说明 ICP备案是指在中国境内提供互联网信息服务的主体（个人或单位），按照规定向国家互联网信息办公室或其授权的省级通信管理局提交网站信息，完成信息登记的过程...</description>
      <category>学习笔记/技术</category>
      <pubDate>Mon, 09 Sep 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 总结ICP备案相关知识和流程，重点讲解在华为云平台进行备案的流程。</p>
<ul>
<li>涉及网站：工业和信息化部政务服务平台、华为云</li>
</ul>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li><a href="https://support.huaweicloud.com/icp/index.html" target="_blank" rel="noopener noreferrer">华为云的ICP备案文档</a></li>
</ul>
<p>内部相关文章</p>
<ul>
<li></li>
</ul>
</div>
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>
<p>ICP备案是指在中国境内提供互联网信息服务的主体（个人或单位），按照规定向国家互联网信息办公室或其授权的省级通信管理局提交网站信息，完成信息登记的过程。</p>
</li>
<li>
<p>备案成功后，网站将会获得一个ICP备案号，该号码通常展示在网站的底部。</p>
</li>
<li>
<p>ICP备案是中国大陆的一项法规，使用大陆节点服务器提供互联网信息服务的用户，需要在服务器提供商处提交ICP备案申请。</p>
</li>
<li>
<p>根据工信部《互联网信息服务管理办法》(国务院292号令)和工信部令第33号《非经营性互联网信息服务备案管理办法》规定，国家对经营性互联网信息服务实行许可制度，对非经营性互联网信息服务实行备案制度。未取得许可或者未履行备案手续的，不得从事互联网信息服务，否则属违法行为。通俗来讲，要开办网站必须先办理网站备案，备案成功并获取通信管理局下发的ICP备案号后才能开通访问。</p>
</li>
<li>
<p>2023年9月起App备案被纳入原ICP网站备案行政许可事项中，在中华人民共和国境内从事互联网信息服务的App主办者，应当依照《中华人民共和国反电信网络诈骗法》《互联网信息服务管理办法》（国务院令第292号）等规定履行备案手续，未履行备案手续的，不得从事App互联网信息服务。</p>
</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>身份验证</strong>：确保网站运营者的身份合法，便于政府监管。<strong>身份验证</strong>：确保网站运营者的身份合法，便于政府监管。</li>
<li><strong>身份验证</strong>：确保网站运营者的身份合法，便于政府监管。<strong>信息登记</strong>：登记网站的基本信息，包括网站名称、网站域名、网站负责人等。</li>
<li><strong>身份验证</strong>：确保网站运营者的身份合法，便于政府监管。<strong>内容监管</strong>：便于政府机构对互联网内容进行管理和监督，确保网络信息传播的安全。</li>
<li><strong>身份验证</strong>：确保网站运营者的身份合法，便于政府监管。<strong>用户权益保护</strong>：通过备案信息，用户可以追溯网站运营者的责任，保护自身合法权益。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>合法性</strong>：网站必须在中国境内合法注册，且内容符合中国法律法规。</li>
<li><strong>及时性</strong>：网站在开通前必须完成备案，否则不得对外提供服务。</li>
<li><strong>真实性</strong>：备案信息必须真实准确，不得有虚假或误导性内容。</li>
<li><strong>更新</strong>：如果备案信息发生变化，需及时更新备案信息。</li>
<li><strong>费用</strong>：ICP备案通常不收取费用，但可能需要支付一些第三方服务费用（如域名解析服务费）。</li>
</ul>
<p>合适场景</p>
<ul>
<li><strong>所有在中国境内运营的网站</strong>：无论是商业网站、个人博客还是政府网站，都需要进行ICP备案。</li>
<li><strong>提供信息发布服务的平台</strong>：如新闻网站、论坛、博客、在线教育平台等。</li>
<li><strong>电子商务网站</strong>：所有在中国境内提供在线交易服务的网站都需要备案。</li>
<li><strong>云服务和托管服务提供商</strong>：如果提供的服务中包含信息发布，也需要进行备案。</li>
</ul>
<h2>备案场景</h2>
<ul>
<li><strong>通用互联网信息服务场景</strong>：使用大陆节点服务器提供互联网信息服务的用户。</li>
<li><strong>政府网站备案</strong>：对于国务院部门、垂直管理的国务院部门基层单位、县级以上地方各级人民政府，以及省级、地市级政府部门建设的网站。</li>
<li><strong>华为云OBS</strong>：使用华为云OBS托管静态网站。</li>
<li><strong>华为云CDN</strong>：使用华为云CDN做内容分发加速。</li>
<li><strong>华为云WAF</strong>：使用华为云Web应用防火墙（Web Application Firewall，WAF）保护Web服务。</li>
<li><strong>华为云DDoS高防</strong>：使用华为云DDoS高防保障业务连续性。</li>
<li><strong>华为云企业门户</strong>：购买了华为云企业门户产品搭建网站，需要购买和绑定域名，通过域名访问网站。</li>
</ul>
<h2>ICP备案类型</h2>
<ul>
<li>网站</li>
<li>APP</li>
<li>小程序</li>
<li>快应用</li>
</ul>
<h3>基本概念</h3>
<ul>
<li><strong>ICP</strong>：网络内容提供商（Internet Content Provider, ICP），向广大用户提供互联网信息业务和增值业务</li>
<li><strong>备案</strong>：备案是中国大陆的一项法规，使用大陆节点服务器提供互联网信息服务的用户，需要依法履行备案手续。华为云为您提供免费备案服务</li>
<li><strong>管局</strong>：即通信管理局。按照备案法律法规，互联网信息服务提供者需向属地通信管理局履行网站备案手续，取得网站备案号</li>
<li><strong>接入商</strong>：即网络服务接入商。如您使用的是华为云资源，则华为云为您的网络服务接入商，简称“接入商”</li>
<li><strong>主体名称</strong>：需备案的单位名称/个人姓名。备案主体与网站内容必须对应一致，即：个人的网站内容，备案主体是个人本人；超出个人范围的网站内容，备案主体应为企业/团体组织/单位等</li>
<li><strong>主体负责人</strong>：指备案系统主体信息中的负责人。单位备案，大部分管局要求填写法定代表人信息；个人备案必须为备案主体本人</li>
<li><strong>网站负责人</strong>：指备案系统网站信息中的负责人，也是网站的主要负责人。单位备案必须为单位内员工，可填法定代表人或单位内其他网站建设管理者；个人备案必须为备案主体本人</li>
<li><strong>APP负责人</strong>：指备案系统APP信息中的负责人，也是APP的主要负责人。单位备案必须为单位内员工，可填法定代表人或单位内其他APP建设管理者；个人备案必须为备案主体本人</li>
<li><strong>网站</strong>：网站可通过IP访问，也可通过域名访问。简单地说，网站是一种通讯工具，就像布告栏一样，人们可以通过网站发布/获取资讯，或利用网站提供/享受相关的网络服务</li>
<li><strong>APP</strong>：指包含智能终端预置、下载、安装的程序，以及基于应用软件开放平台接口开放的，用户无需安装即可使用的程序等（小程序、快应用）</li>
<li><strong>域名</strong>：域名（Domain names）是互联网基础架构的关键部分。它们为互联网上任何可用的网页服务器提供了方便人类理解的地址</li>
<li><strong>IP地址</strong>：备案使用弹性IP地址，即公网IP地址（必须为华为云的IP，才可在华为云申请网站备案）</li>
<li><strong>主体备案号</strong>：首次ICP备案成功后，工信部会为主体下发一个备案号，通常格式为“省简称+ICP备********号”(如：粤ICP备00000000号)。一个主体只有一个主体备案号，若出现多个，需注销，只能保留一个主体备案号</li>
<li><strong>备案号</strong>：主体备案号后带序号，对应区分主体下不同的网站和APP；主体下有多个网站和APP时，主体备案号相同，区别在于主体备案号后的序号。例如：（网站：粤ICP备00000000号-1）（APP：粤ICP备00000000号-1A）</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Redis - 安装与卸载</title>
      <link>https://blog.magictable.ha.cn/software/Package-Redis-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Redis-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Redis - 安装与卸载</source>
      <description>文章摘要： 摘要内容。 软件获取 官方下载地址：https://redis.io/ 安装 - apt包管理器 添加到开机自启动 卸载 - apt包管理器 安装 - 预编译 卸载 - 预编译 安装 - 源代码 卸载 - 源代码</description>
      <category>软件程序/软件包</category>
      <pubDate>Fri, 06 Sep 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>软件获取</h2>
<ul>
<li>官方下载地址：<a href="https://redis.io/" target="_blank" rel="noopener noreferrer">https://redis.io/</a></li>
</ul>
<h2>安装 - apt包管理器</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">sudo</span> <span class="token function">apt</span> <span class="token function">install</span> lsb-release <span class="token function">curl</span> gpg</span>
<span class="line"></span>
<span class="line"><span class="token function">curl</span> <span class="token parameter variable">-fsSL</span> https://packages.redis.io/gpg <span class="token operator">|</span> <span class="token function">sudo</span> gpg <span class="token parameter variable">--dearmor</span> <span class="token parameter variable">-o</span> /usr/share/keyrings/redis-archive-keyring.gpg</span>
<span class="line"></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">chmod</span> <span class="token number">644</span> /usr/share/keyrings/redis-archive-keyring.gpg</span>
<span class="line"></span>
<span class="line"><span class="token builtin class-name">echo</span> <span class="token string">"deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb <span class="token variable"><span class="token variable">$(</span>lsb_release <span class="token parameter variable">-cs</span><span class="token variable">)</span></span> main"</span> <span class="token operator">|</span> <span class="token function">sudo</span> <span class="token function">tee</span> /etc/apt/sources.list.d/redis.list</span>
<span class="line"></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">apt</span> <span class="token function">install</span> redis-stack-server</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>添加到开机自启动</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">sudo</span> systemctl <span class="token builtin class-name">enable</span> redis-stack-server</span>
<span class="line"></span>
<span class="line"><span class="token function">sudo</span> systemctl start redis-stack-server</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>卸载 - apt包管理器</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>安装 - 预编译</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>卸载 - 预编译</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>安装 - 源代码</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>卸载 - 源代码</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Redis - 终端命令 - redis</title>
      <link>https://blog.magictable.ha.cn/software/Package-Redis-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-redis.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Redis-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-redis.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Redis - 终端命令 - redis</source>
      <description>文章摘要： 摘要内容。 连接Redis 命令 redis-cli 参数 -h &amp;lt;IP&amp;gt;：连接到指定的主机IP地址。 -p &amp;lt;端口&amp;gt;：连接到指定的端口。（正常是6379）。 -a &amp;lt;密码&amp;gt;：连接到redis数据库的密码。 案例 启动Redis 重启Redis 基本操作 SET &amp;lt;key&amp;gt; &amp;lt;value&amp;gt;：设置键值对。 GET &amp;lt;key&amp;gt;：获取指定键的值。...</description>
      <category>软件程序/软件包</category>
      <pubDate>Fri, 06 Sep 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>连接Redis</h2>
<p>命令</p>
<ul>
<li><code>redis-cli</code></li>
</ul>
<p>参数</p>
<ul>
<li><code>-h &lt;IP&gt;</code>：连接到指定的主机IP地址。</li>
<li><code>-p &lt;端口&gt;</code>：连接到指定的端口。（正常是6379）。</li>
<li><code>-a &lt;密码&gt;</code>：连接到redis数据库的密码。</li>
</ul>
<p>案例</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 本地连接</span></span>
<span class="line">redis-cli</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 远程连接</span></span>
<span class="line">redis-cli <span class="token parameter variable">-h</span> <span class="token operator">&lt;</span>远程IP<span class="token operator">&gt;</span> <span class="token parameter variable">-p</span> <span class="token operator">&lt;</span>端口<span class="token operator">&gt;</span> <span class="token parameter variable">-a</span> <span class="token operator">&lt;</span>数据库密码<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>启动Redis</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>重启Redis</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">sudo</span> systemctl restart redis-server</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>基本操作</h2>
<ul>
<li><code>SET &lt;key&gt; &lt;value&gt;</code>：设置键值对。</li>
<li><code>GET &lt;key&gt;</code>：获取指定键的值。</li>
<li><code>DEL &lt;key&gt;</code>：删除指定的键。</li>
<li><code>EXISTS &lt;key&gt;</code>：检查键是否存在。</li>
<li><code>KEYS &lt;pattern&gt;</code>：查找所有符合给定模式匹配的键。</li>
<li><code>TYPE &lt;key&gt;</code>：返回键的类型。</li>
</ul>
<h2>数据结构操作</h2>
<h3>列表（List）</h3>
<ul>
<li><code>LPUSH &lt;key&gt; &lt;value1&gt; &lt;value2&gt; ...</code>：将一个或多个值插入到列表的头部。</li>
<li><code>LPOP &lt;key&gt;</code>：移除并返回列表的第一个元素。</li>
</ul>
<h3>哈希（Hash）</h3>
<ul>
<li><code>HSET &lt;key&gt; &lt;field&gt; &lt;value&gt;</code>：为哈希表中的字段赋值。</li>
<li><code>HGET &lt;key&gt; &lt;field&gt;</code>：获取哈希表中字段的值。</li>
</ul>
<h3>集合（Set）</h3>
<ul>
<li><code>SADD &lt;key&gt; &lt;member1&gt; &lt;member2&gt; ...</code>：向集合添加一个或多个成员。</li>
<li><code>SMEMBERS &lt;key&gt;</code>：返回集合中的所有成员。</li>
</ul>
<h2>权限和配置</h2>
<ul>
<li><code>CONFIG GET &lt;pattern&gt;</code>：获取配置信息。</li>
<li><code>AUTH &lt;password&gt;</code>：使用密码进行认证。</li>
<li><code>ACL SETUSER &lt;username&gt; &gt;password&gt; ...</code>：设置用户权限（Redis 6.0 及以上版本）。</li>
</ul>
<h2>其他命令</h2>
<ul>
<li><code>INFO</code>：获取服务器的信息和统计。</li>
<li><code>PING</code>：检查服务器是否运行。</li>
<li><code>ECHO &lt;message&gt;</code>：回显一个消息。</li>
<li><code>QUIT</code>：关闭连接。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Redis - 问题总结</title>
      <link>https://blog.magictable.ha.cn/software/Package-Redis-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Redis-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Redis - 问题总结</source>
      <description>文章摘要： 摘要内容。 热点数据的缓存 限时业务的运用 计数器相关问题 排行榜相关问题 分布式锁 延时操作 分页、模糊搜索 redis的set集合中提供了一个zrangebylex方法，语法如下： 通过ZRANGEBYLEX zset - + LIMIT 0 10 可以进行分页数据查询，其中- +表示获取全部数据 点赞、好友等相互关系的存储 如何理解R...</description>
      <category>软件程序/软件包</category>
      <pubDate>Fri, 06 Sep 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>热点数据的缓存</h2>
<h2>限时业务的运用</h2>
<h2>计数器相关问题</h2>
<h2>排行榜相关问题</h2>
<h2>分布式锁</h2>
<h2>延时操作</h2>
<h2>分页、模糊搜索</h2>
<p>redis的set集合中提供了一个zrangebylex方法，语法如下：</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line">ZRANGEBYLEX key min max <span class="token punctuation">[</span>LIMIT offset count<span class="token punctuation">]</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><blockquote>
<ul>
<li>通过ZRANGEBYLEX zset - + LIMIT 0 10 可以进行分页数据查询，其中- +表示获取全部数据</li>
</ul>
</blockquote>
<h2>点赞、好友等相互关系的存储</h2>
<h2>如何理解Redis缓存的雪崩、穿透、击穿问题</h2>
<p><strong>雪崩</strong></p>
<blockquote>
<p>定义</p>
<ul>
<li>redis缓存中大量的key同时失效，此时又刚好有大量的请求打进来，直接打到数据库层，造成数据库阻塞甚至宕机。</li>
</ul>
<h2>解决方案</h2>
</blockquote>
<p><strong>穿透</strong></p>
<blockquote>
<p>定义</p>
<ul>
<li>redis缓存中大量的key同时失效，此时又刚好有大量的请求打进来，直接打到数据库层，造成数据库阻塞甚至宕机。</li>
</ul>
<h2>解决方案</h2>
</blockquote>
<p><strong>击穿</strong></p>
<blockquote>
<p>定义</p>
<ul>
<li>redis缓存中大量的key同时失效，此时又刚好有大量的请求打进来，直接打到数据库层，造成数据库阻塞甚至宕机。</li>
</ul>
<h2>解决方案</h2>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Redis</title>
      <link>https://blog.magictable.ha.cn/software/Package-Redis.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Redis.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Redis</source>
      <description>文章摘要： 非关系型数据库模型(NoSQL)，高性能键值存储数据库，内存数据库。 相关信息 外部相关文章 内部相关文章 简介 Redis（Remote Dictionary Server）是一个开源的、基于内存的键值存储数据库，通常用作缓存、消息队列和实时应用中的数据存储。 主要功能 速度快：Redis将所有数据存储在内存中，对数据的读写速度非常快。 ...</description>
      <category>软件程序/软件包</category>
      <pubDate>Fri, 06 Sep 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 非关系型数据库模型(NoSQL)，高性能键值存储数据库，内存数据库。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li></li>
</ul>
<p>内部相关文章</p>
<ul>
<li><a href="/software/Package-Redis-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-redis.html" target="_blank">Package-Redis-终端命令-redis</a></li>
<li><a href="/software/Package-Redis-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html" target="_blank">Package-Redis-安装与卸载</a></li>
<li><a href="/software/Package-Redis-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93.html" target="_blank">Package-Redis-问题总结</a></li>
</ul>
</div>
<h2>简介</h2>
<ul>
<li>Redis（Remote Dictionary Server）是一个开源的、基于内存的键值存储数据库，通常用作缓存、消息队列和实时应用中的数据存储。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>速度快</strong>：Redis将所有数据存储在内存中，对数据的读写速度非常快。</li>
<li><strong>支持多种数据结构</strong>：Redis支持多种数据类型。</li>
<li><strong>持久化</strong>：虽然Redis是基于内存的，但它提供了数据持久化的功能。</li>
<li><strong>事务支持</strong>：Redis支持事务，允许执行一组命令，并确保所有命令在事务中被顺序执行，不会被其他命令插入。</li>
<li><strong>高可用和分布式</strong>：Redis支持主从复制、哨兵系统和集群，可以实现自动故障转移、读写分离和数据分片。</li>
<li><strong>功能丰富</strong>：Redis支持发布订阅模式、Lua脚本、事务、过期键等高级功能。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>数据备份</strong>：定期进行数据备份，以防止数据丢失。</li>
<li><strong>持久化策略</strong>：合理配置Redis的持久化策略（RDB和AOF），在数据安全和性能之间找到平衡。</li>
<li><strong>内存管理</strong>：监控Redis的内存使用情况，避免内存溢出，合理使用数据结构和内存优化技术。</li>
<li><strong>高可用性</strong>：通过Redis Sentinel或Redis Cluster实现高可用性，避免单点故障。</li>
<li><strong>性能监控</strong>：持续监控Redis的性能指标，如响应时间、内存使用情况等，及时发现并解决问题。</li>
<li><strong>网络延迟</strong>：注意网络延迟对Redis性能的影响，尽可能减少网络延迟。</li>
<li><strong>安全防护</strong>：设置密码认证，限制访问IP，以增强Redis的安全性。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>热点数据的缓存</strong>：作为缓存系统，减少数据库的读取次数，提高系统响应速度。</li>
<li><strong>消息队列</strong>：利用发布订阅模式和列表结构实现简单的消息队列功能。</li>
<li><strong>排行榜或计数器</strong>：利用有序集合实现排行榜或计数器功能。</li>
<li><strong>实时分析系统</strong>：如网站实时统计在线用户数、用户行为分析等。</li>
<li><strong>会话缓存</strong>：存储用户会话信息，如购物车数据、用户登录状态等。</li>
</ul>
<h2>安装与卸载</h2>
<p>详细总结：<a href="/software/Package-Redis-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html" target="_blank">Package-Redis-安装与卸载</a></p>
<h2>终端命令</h2>
<p>详细总结：<a href="/software/Package-Redis-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-redis.html" target="_blank">Package-Redis-终端命令-redis</a></p>
<h2>配置文件</h2>
<ul>
<li>修改<code>/etc/redis/redis.conf</code>配置文件。</li>
<li>提示：用户名默认是<code>default</code>。</li>
</ul>
<div class="language-conf line-numbers-mode" data-highlighter="prismjs" data-ext="conf"><pre><code class="language-conf"><span class="line"># 找到对应的英文，并修改</span>
<span class="line"></span>
<span class="line"># 绑定地址</span>
<span class="line">bind 127.0.0.1 -::1  # 本地主机</span>
<span class="line">bind 0.0.0.0         # 允许远程访问</span>
<span class="line"></span>
<span class="line"># 端口号</span>
<span class="line">port 6379</span>
<span class="line"></span>
<span class="line"># 启用并设置密码</span>
<span class="line">requirepass 123456</span>
<span class="line"></span>
<span class="line"># 日志文件位置</span>
<span class="line">logfile /var/log/redis/redis-server.log</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>详细总结：<a href=""></a></p>
<h2>热门推荐</h2>
<p>详细总结：<a href=""></a></p>
<h2>问题总结</h2>
<p>详细总结：<a href=""></a></p>
<h2>数据类型</h2>
<ul>
<li><strong>字符串</strong>：适合缓存、计数器等简单场景。</li>
<li><strong>哈希</strong>：适合存储对象属性，如用户信息。</li>
<li><strong>列表</strong>：适合消息队列、历史记录。</li>
<li><strong>集合</strong>：适合去重复、标签等场景。</li>
<li><strong>有序集合</strong>：适合排行榜、优先队列。</li>
</ul>
<h2>Redis引发的问题</h2>
<ul>
<li><strong>穿透</strong>：请求未命中缓存，直接访问数据库，造成数据库压力，可通过请求参数校验和使用布隆过滤器来防止。</li>
<li><strong>击穿</strong>：某个热点数据过期，瞬时大量请求涌向数据库，可通过加锁、设置永不过期的缓存等方式防止。</li>
<li><strong>雪崩</strong>：大量缓存同时过期，导致数据库瞬时压力增大，可通过随机过期时间、分散过期时间来减轻影响。</li>
</ul>
<h2>持久化操作</h2>
<ul>
<li>降低数据丢失的可能。</li>
<li>生成文件RDB：数据库文件，定时缓存里面的数据，并导出成<code>rdb文件</code></li>
<li>生成日志文件AOF：将对redis的每一步操作都记录起来，日志文件会很大。</li>
<li>实际方案：日志文件实时记录，并每隔一段时间导出成<code>rdb</code>文件，再删除以导出部分的日志文件。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Nginx - 安装与卸载</title>
      <link>https://blog.magictable.ha.cn/software/Package-Nginx-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Nginx-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Nginx - 安装与卸载</source>
      <description>文章摘要： 摘要内容。 软件获取 官方下载地址：Nginx官网 安装 - apt包管理器 卸载 - apt包管理器 安装 - 预编译 卸载 - 预编译 安装 - 源代码 卸载 - 源代码</description>
      <category>软件程序/软件包</category>
      <pubDate>Thu, 05 Sep 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>软件获取</h2>
<ul>
<li>官方下载地址：<a href="https://nginx.org/" target="_blank" rel="noopener noreferrer">Nginx官网</a></li>
</ul>
<h2>安装 - apt包管理器</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 运行依赖</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">apt</span> <span class="token function">install</span> <span class="token function">curl</span> gnupg2 ca-certificates lsb-release debian-archive-keyring</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 导入nginx官方的GPG密钥，用于加密和数字签名，以便apt可以验证软件包的真实性</span></span>
<span class="line"><span class="token function">curl</span> https://nginx.org/keys/nginx_signing.key <span class="token operator">|</span> gpg <span class="token parameter variable">--dearmor</span> <span class="token operator">|</span> <span class="token function">sudo</span> <span class="token function">tee</span> /usr/share/keyrings/nginx-archive-keyring.gpg <span class="token operator">&gt;</span>/dev/null</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 验证下载的文件是否包含正确的密钥</span></span>
<span class="line">gpg --dry-run <span class="token parameter variable">--quiet</span> --no-keyring <span class="token parameter variable">--import</span> --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 要为稳定的 nginx 软件包设置 apt 存储库</span></span>
<span class="line"><span class="token builtin class-name">echo</span> <span class="token string">"deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/debian <span class="token variable"><span class="token variable">`</span>lsb_release <span class="token parameter variable">-cs</span><span class="token variable">`</span></span> nginx"</span> <span class="token operator">|</span> <span class="token function">sudo</span> <span class="token function">tee</span> /etc/apt/sources.list.d/nginx.list</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 设置一个固定仓库，实现优先选择Nginx的包而不是其他分发或镜像源提供的包</span></span>
<span class="line"><span class="token builtin class-name">echo</span> <span class="token parameter variable">-e</span> <span class="token string">"Package: *<span class="token entity" title="\n">\n</span>Pin: origin nginx.org<span class="token entity" title="\n">\n</span>Pin: release o=nginx<span class="token entity" title="\n">\n</span>Pin-Priority: 900<span class="token entity" title="\n">\n</span>"</span> <span class="token operator">|</span> <span class="token function">sudo</span> <span class="token function">tee</span> /etc/apt/preferences.d/99nginx</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 更新系统存储库列表缓存</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">apt</span> update</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 正式安装nginx</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">apt</span> <span class="token function">install</span> nginx</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>卸载 - apt包管理器</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>安装 - 预编译</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>卸载 - 预编译</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>安装 - 源代码</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 编译依赖</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 运行依赖</span></span>
<span class="line"></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">apt</span> <span class="token function">install</span> gcc-c++</span>
<span class="line"></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">apt</span> <span class="token function">install</span> <span class="token parameter variable">-y</span> zlib zlib-devel</span>
<span class="line"></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">apt</span> <span class="token function">install</span> <span class="token parameter variable">-y</span> openssl openssl-devel</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 开始下载</span></span>
<span class="line"><span class="token function">wget</span> http://nginx.org/download/nginx-1.26.2.tar.gz</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 解压压缩包，解压到`/usr/local/nginx/`</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">tar</span> <span class="token parameter variable">-zxvf</span> nginx-1.26.2.tar.gz <span class="token parameter variable">-C</span> /usr/local/nginx/</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 进入解压后的nginx目录</span></span>
<span class="line"><span class="token builtin class-name">cd</span> <span class="token operator">&lt;</span>解压后的文件夹<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 设置configure</span></span>
<span class="line">./configure</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 开始编译安装</span></span>
<span class="line"><span class="token function">make</span></span>
<span class="line"></span>
<span class="line"><span class="token function">make</span> <span class="token function">install</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>卸载 - 源代码</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Nginx - 终端命令</title>
      <link>https://blog.magictable.ha.cn/software/Package-Nginx-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Nginx-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Nginx - 终端命令</source>
      <description>文章摘要： 摘要内容。 启动 停止 重新加载配置文件 重新打开日志文件</description>
      <category>软件程序/软件包</category>
      <pubDate>Thu, 05 Sep 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>启动</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 方案一</span></span>
<span class="line">/<span class="token operator">&lt;</span>安装位置<span class="token operator">&gt;</span>/sbin/nginx</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 方案二，手动指定配置文件</span></span>
<span class="line">./nginx <span class="token parameter variable">-c</span> /usr/local/nginx/conf/nginx.conf</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>停止</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 快速停止</span></span>
<span class="line">/<span class="token operator">&lt;</span>安装位置<span class="token operator">&gt;</span>/sbin/nginx <span class="token parameter variable">-s</span> stop</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 完整停止，此方式停止步骤是待nginx进程处理任务完毕后才进行停止，建议使用这种方式</span></span>
<span class="line">/<span class="token operator">&lt;</span>安装位置<span class="token operator">&gt;</span>/sbin/nginx <span class="token parameter variable">-s</span> quit</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>重新加载配置文件</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line">/<span class="token operator">&lt;</span>安装位置<span class="token operator">&gt;</span>/sbin/nginx <span class="token parameter variable">-s</span> reload</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>重新打开日志文件</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line">/<span class="token operator">&lt;</span>安装位置<span class="token operator">&gt;</span>/sbin/nginx <span class="token parameter variable">-s</span> reopen</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Nginx</title>
      <link>https://blog.magictable.ha.cn/software/Package-Nginx.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Nginx.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Nginx</source>
      <description>文章摘要： Nginx是一款轻量级的Web服务器、反向代理服务器，适合部署前端。 文章专注 Debian linux 12 操作系统上的配置。 相关信息 外部相关文章 B站教程 内部相关文章 简介 简要说明 Nginx是一款轻量级、开源的Web服务器，由于其高性能、稳定性、丰富的功能以及低资源消耗，被广泛用于Web服务器的部署。 主要功能 HTTP服务...</description>
      <category>软件程序/软件包</category>
      <pubDate>Thu, 05 Sep 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Nginx是一款轻量级的Web服务器、反向代理服务器，适合部署前端。</p>
<ul>
<li>文章专注 Debian linux 12 操作系统上的配置。</li>
</ul>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li><a href="https://www.bilibili.com/video/BV1rG4y1e7BQ/?spm_id_from=333.999.0.0&amp;vd_source=262edcbbd8e80915a7dff074a0e165a1" target="_blank" rel="noopener noreferrer">B站教程</a></li>
</ul>
<p>内部相关文章</p>
<ul>
<li></li>
</ul>
</div>
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>Nginx是一款轻量级、开源的Web服务器，由于其高性能、稳定性、丰富的功能以及低资源消耗，被广泛用于Web服务器的部署。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>HTTP服务器</strong>：nginx可以作为一个静态资源服务器，处理HTTP请求，支持FastCGI、SSL、TLS等协议。</li>
<li><strong>反向代理</strong>：nginx可以将客户端请求转发到其他服务器，实现负载均衡和缓存等功能。</li>
<li><strong>负载均衡</strong>：nginx可以根据不同的负载均衡算法将请求分发到多个后端服务器。</li>
<li><strong>缓存</strong>：nginx可以缓存静态文件和常用动态内容，减少后端服务器的压力。</li>
<li><strong>安全性</strong>：nginx提供了一系列安全特性，如SSL终端、IP黑白名单、请求限制等。</li>
<li><strong>高并发处理</strong>：nginx采用事件驱动的模型，能够处理大量并发连接。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>配置文件</strong>：nginx的配置文件是nginx.conf，配置时要确保语法正确，否则可能导致服务启动失败。</li>
<li><strong>系统资源</strong>：合理配置worker进程数和连接数，以充分利用系统资源。</li>
<li><strong>安全性</strong>：定期更新nginx及其模块，以修复已知的安全漏洞。</li>
<li><strong>兼容性</strong>：在升级nginx或修改配置时，要注意与现有应用的兼容性。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>高并发网站</strong>：如大型电商、社交媒体等，需要处理大量用户请求。</li>
<li><strong>静态资源服务</strong>：如图片、视频、CSS/JS文件等，nginx可以有效处理静态文件。</li>
<li><strong>反向代理和负载均衡</strong>：当后端有多个服务器时，nginx可以作为反向代理进行请求分发。</li>
<li><strong>API服务</strong>：nginx适合作为RESTful API的代理服务器，提供高性能的API服务。</li>
<li><strong>微服务架构</strong>：在微服务架构中，nginx可以作为服务网关，管理服务之间的通信。</li>
</ul>
<h2>安装与卸载</h2>
<p>详细总结：<a href="/software/Package-Nginx-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html" target="_blank">Package-Nginx-安装与卸载</a></p>
<h2>终端命令</h2>
<p>详细总结：<a href="/software/Package-Nginx-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4.html" target="_blank">Package-Nginx-终端命令</a></p>
<h2>配置文件</h2>
<p>详细总结：<a href="/software/Package-Nginx-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6.html" target="_blank">Package-Nginx-配置文件</a></p>
<h2>热门推荐</h2>
<p>详细总结：<a href=""></a></p>
<h2>问题总结</h2>
<p>详细总结：<a href=""></a></p>
<h2>负载均衡的策略</h2>
<p>轮询</p>
<ul>
<li>按顺序轮流分配请求。</li>
</ul>
<p>权重</p>
<ul>
<li>根据服务器性能设置权重，根据权重值进行分配请求。</li>
</ul>
<p>IP哈希</p>
<ul>
<li>根据用户IP地址进行请求分配，保证同一个用户请求同一个服务器。</li>
</ul>
<p>JWT登录验证</p>
<ul>
<li>方案一：使ip_hash策略</li>
<li>方案二：redis告诉缓冲数据库</li>
</ul>
<p>最少连接</p>
<ul>
<li>将请求分配给当前连接数最少的服务器。</li>
</ul>
<p>url_hash</p>
<ul>
<li>url</li>
</ul>
<p>通过fair（第三方）来的</p>
<ul>
<li></li>
</ul>
<h2>代理转发</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li><strong>位置不同</strong>：正向代理位于客户端和互联网之间；反向代理位于服务端和互联网之间。</li>
<li><strong>目的不同</strong>：正向代理主要是为了保护客户端隐私和访问控制；反向代理主要是为了保护服务端安全、负载均衡和缓存。</li>
<li><strong>透明性</strong>：正向代理对客户端是透明的，客户端知道代理的存在；反向代理对客户端通常是透明的，客户端不知道代理的存在。</li>
</ul>
</div>
<h3>正向代理</h3>
<ul>
<li>正向代理位于客户端和互联网之间，代表客户端向互联网发送请求。</li>
</ul>
<p>主要特点</p>
<ul>
<li><strong>隐私保护</strong>：隐藏客户端的真实IP地址，保护客户端的隐私。</li>
<li><strong>访问控制</strong>：可以控制客户端访问互联网的权限，例如禁止访问某些网站。</li>
<li><strong>内容缓存</strong>：可以缓存常用内容，提高访问速度，减少带宽使用。</li>
<li><strong>突破限制</strong>：帮助客户端突破网络访问限制，如翻墙。</li>
</ul>
<p>应用场景</p>
<ul>
<li>个人或企业内部网络访问互联网。</li>
<li>绕过网络审查，访问被限制的网站。</li>
<li>为安全性考虑，隐藏客户端真实IP。</li>
</ul>
<h3>反向代理</h3>
<ul>
<li>反向代理位于服务端和互联网之间，代表服务端接收客户端的请求。</li>
</ul>
<p>主要特点</p>
<ul>
<li><strong>负载均衡</strong>：分发客户端请求到多个后端服务器，提高服务的可用性和扩展性。</li>
<li><strong>安全性</strong>：保护后端服务器免受直接暴露于互联网，减少安全风险。</li>
<li><strong>内容缓存</strong>：缓存静态内容，提高响应速度。</li>
<li><strong>SSL加密和解密</strong>：处理HTTPS请求，减轻后端服务器的负担。</li>
</ul>
<p>应用场景</p>
<ul>
<li>负载均衡，如Nginx、HAProxy。</li>
<li>保护内部网络结构，防止直接暴露后端服务器。</li>
<li>提供SSL加密服务，简化后端服务器的配置。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Library - Maven - SpringBoot 2 - 官方启动器（Starter）</title>
      <link>https://blog.magictable.ha.cn/software/Library-Maven-SpringBoot2-%E5%AE%98%E6%96%B9%E5%90%AF%E5%8A%A8%E5%99%A8%EF%BC%88Starter%EF%BC%89.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Maven-SpringBoot2-%E5%AE%98%E6%96%B9%E5%90%AF%E5%8A%A8%E5%99%A8%EF%BC%88Starter%EF%BC%89.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Maven - SpringBoot 2 - 官方启动器（Starter）</source>
      <description>文章摘要： 摘要内容。 官方应用程序启动器 官方技术启动器 注释 如果你想排除或交换特定的技术方面，可以使用这些启动器。 注释 扩展 有关其他社区贡献的启动器的列表，请参阅 GitHub 上 spring-boot-starters 模块中的 README 文件。 官方生产启动器 注释 可用于添加生产就绪功能。</description>
      <category>软件程序/代码类库</category>
      <pubDate>Sun, 01 Sep 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>官方应用程序启动器</h2>
<p>| 启动器名称                                         | 描述                                                                                                  |
| :</p>
]]></content:encoded>
    </item>
    <item>
      <title>Library - Maven - SpringBoot 2</title>
      <link>https://blog.magictable.ha.cn/software/Library-Maven-SpringBoot2.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Maven-SpringBoot2.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Maven - SpringBoot 2</source>
      <description>文章摘要： spring boot 是一个快速整合框架，利用自动配置原理简化各种配置，比如SSM配置。 重要 前置条件 ^ Java 8 Spring Framework 5 相关信息 外部相关文章 内部相关文章 SpringBoot 2 官方Starter： SpringBoot 2 注解： 简介 简化配置 Spring Boot通过提供一系列的“s...</description>
      <category>软件程序/代码类库</category>
      <pubDate>Sun, 01 Sep 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> spring boot 是一个快速整合框架，利用自动配置原理简化各种配置，比如SSM配置。</p>
<!-- more -->
<div class="hint-container important">
<p class="hint-container-title">重要</p>
<p>前置条件</p>
<ul>
<li>^ Java 8</li>
<li>Spring Framework 5</li>
</ul>
</div>
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li></li>
</ul>
<p>内部相关文章</p>
<ul>
<li>SpringBoot 2 官方Starter：<a href="/software/Library-Maven-SpringBoot2-%E5%AE%98%E6%96%B9%E5%90%AF%E5%8A%A8%E5%99%A8%EF%BC%88Starter%EF%BC%89.html" target="_blank">Library-Maven-SpringBoot2-官方启动器（Starter）</a></li>
<li>SpringBoot 2 注解：<a href="/software/Library-Maven-SpringBoot2-%E6%B3%A8%E8%A7%A3.html" target="_blank">Library-Maven-SpringBoot2-注解</a></li>
</ul>
</div>
<blockquote>
<p></p>
</blockquote>
<h2>简介</h2>
<blockquote>
<p><strong>简化配置</strong></p>
<ul>
<li>Spring Boot通过提供一系列的“starter”依赖项来简化配置。</li>
<li>这些starters包含了开发特定类型应用所需的所有Spring和相关库的依赖。</li>
<li>例如，<code>spring-boot-starter-web</code>包含了创建Web应用程序所需的所有依赖。</li>
<li>开发者无需手动添加和管理大量的依赖项。</li>
<li>Spring Boot 中包含了大量的 starter 启动器，启动器根据使用场景来分类，定义了当前项目使用的所有依赖坐标和版本号，管理依赖关系，整合成一个新的依赖，统一管理，称之为<code>启动器</code>。<code>spring-boot-starter-&lt;场景&gt;</code>。</li>
</ul>
<p><strong>独立运行</strong></p>
<ul>
<li>Spring Boot应用可以打包成一个独立的Java可执行jar包，这个jar包包含了应用的所有依赖项以及嵌入的Web服务器（如Tomcat）。</li>
<li>可以通过<code>java -jar</code>命令直接运行你的应用程序，无需部署到外部的应用服务器。</li>
</ul>
<p><strong>自动配置</strong></p>
<ul>
<li>Spring Boot 的自动配置功能会根据添加到项目中的jar依赖自动配置 Spring 框架。</li>
<li>例如，如果类路径下存在HSQLDB，并且没有手动配置任何数据库连接 beans，Spring Boot会自动配置内存数据库。</li>
<li>自动配置是通过<code>@EnableAutoConfiguration</code>注解启用的，它会尝试根据添加的jar依赖推断出你想如何配置 Spring。</li>
</ul>
<p><strong>生产就绪特性</strong></p>
<ul>
<li>Spring Boot 提供了一系列有助于生产环境的应用特性，如应用监控、度量、健康检查和安全管理。</li>
<li>例如，它提供了actuator模块，该模块可以通过HTTP或JMX端点暴露应用程序的内部状态，这对于运维人员监控和管理应用程序非常有用。</li>
</ul>
<p><strong>无代码生成和XML配置</strong></p>
<ul>
<li>Spring Boot 提倡使用Java配置来代替传统的XML配置文件。</li>
<li>通过使用<code>@Configuration</code>和<code>@Bean</code>注解，实现以Java代码的方式配置 Spring 容器。</li>
<li>无需编写和维护XML配置文件，减少了配置的复杂性。</li>
</ul>
<p><strong>微服务支持</strong></p>
<ul>
<li>Spring Boot非常适合构建微服务架构中的独立服务。</li>
<li>它的轻量级和易于部署的特性使得它成为微服务开发的首选框架。</li>
<li>结合 Spring Cloud 之后，Spring Boot 可以提供完整的微服务解决方案，包括服务发现、配置管理、负载均衡等。</li>
<li>方便构建微服务架构，支持Spring Cloud。</li>
</ul>
</blockquote>
<h2>Maven坐标</h2>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token comment">&lt;!-- 继承父级项目 --&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>parent</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- 引入并继承spring boot提供的父级pom.xml --&gt;</span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.springframework.boot<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>spring-boot-starter-parent<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- 请自行查找合适版本 --&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>parent</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>环境搭建</h2>
<p>引导类，在pom.xml中通过<code>&lt;parent&gt;&lt;/parent&gt;</code>引入springboot的父级项目。解决依赖版本统一管理。</p>
<h2>启动器</h2>
<h2>配置类</h2>
<p>Spring Boot 支持基于 Java 的配置。尽管可以将 <code>SpringApplication</code> 与 XML 源一起使用，但我们通常建议主源是单个 <code>@Configuration</code> 类。通常，定义 <code>main</code> 方法的类是主<code>@Configuration</code>的不错候选者。</p>
<h2>配置和自动配置原理</h2>
<h2>配置文件</h2>
<h3><code>application.properties</code>配置文件</h3>
<blockquote>
<ul>
<li>配置文件名称必须是：application.properties</li>
<li>存储位置在：scr/main/resources</li>
</ul>
</blockquote>
<p>设置基本信息</p>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line"># 端口号</span>
<span class="line">server.port=8080</span>
<span class="line"></span>
<span class="line"># 项目虚拟路径（web项目名）</span>
<span class="line">server.servlet.context-path=/agent</span>
<span class="line"></span>
<span class="line"># 设置懒加载</span>
<span class="line">spring.main.lazy-initialization=true</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>文件上传</p>
<div class="language-yaml line-numbers-mode" data-highlighter="prismjs" data-ext="yml"><pre><code class="language-yaml"><span class="line">  <span class="token key atrule">servlet</span><span class="token punctuation">:</span></span>
<span class="line">    <span class="token key atrule">multipart</span><span class="token punctuation">:</span></span>
<span class="line">      <span class="token key atrule">max-file-size</span><span class="token punctuation">:</span> 100MB     <span class="token comment"># 每个文件大小最大限制</span></span>
<span class="line">      <span class="token key atrule">max-request-size</span><span class="token punctuation">:</span> 200MB  <span class="token comment"># 每次传输文件大小最大限制</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>自定义SpringApplication</h3>
<h3>后台命令行启动图标</h3>
<p>在<code>resources</code>目录下创建<code>banner</code>的图片，或者创建一个<code>banner.txt</code>的文本文件，就能在启动时显示一个以字符构成的图标。</p>
<h3>配置文件优先级</h3>
<p>文件格式</p>
<blockquote>
<ul>
<li><code>yml</code> &gt; <code>yaml</code> &gt; <code>properties</code>配置文件。</li>
</ul>
</blockquote>
<p>文件位置</p>
<table>
<thead>
<tr>
<th style="text-align:left">配置文件位置</th>
<th style="text-align:left">说明</th>
<th style="text-align:center">优先级</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>classpath:/</code></td>
<td style="text-align:left">资源根路径</td>
<td style="text-align:center">最低</td>
</tr>
<tr>
<td style="text-align:left"><code>classpath:/config/*/</code></td>
<td style="text-align:left">资源根路径下的config目录</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:left"><code>classpath:/config/</code></td>
<td style="text-align:left">资源根路径下的config目录</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:left"><code>file:./</code></td>
<td style="text-align:left">项目根路径</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:left"><code>file:./config/*/</code></td>
<td style="text-align:left"></td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:left"><code>file:./config/</code></td>
<td style="text-align:left">项目根路径下的config目录</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:left"><code>java -jar &lt;项目名&gt;.jar --spring.config.location=&lt;配置文件位置&gt;</code></td>
<td style="text-align:left">命令行指定文件</td>
<td style="text-align:center">最大</td>
</tr>
</tbody>
</table>
<h3>Profile文件的加载</h3>
<p>对于应用程序来说，不同的环境需要不同的配置。</p>
<h3>外部配置文件读取</h3>
<h3>springboot启动器的概念</h3>
<p><code>autoconfiguration</code>启动器</p>
<p>启动器的作用：实现模块化和依赖封装</p>
<p>打包成jar包</p>
<h3>自定义启动器</h3>
<p>有默认的配置文件，写在META-INF目录下、
写个类去读取默认的配置文件，构建spring.factories</p>
<ol>
<li>创建一个模块（父子工程）</li>
<li>编写配置文件、配置验证码的一些默认信息</li>
<li>写一下实体类，映射配置信息，来存储读取出来的配置信息</li>
<li>写业务，写验证码的工具类</li>
<li>创建配置类，将验证码工具类加入到ioc容器中</li>
</ol>
<h2>热部署</h2>
<blockquote>
<ul>
<li>实现在修改代码或配置文件后，能够不需要每次重启使修改生效。</li>
</ul>
</blockquote>
<h3>开启热部署</h3>
<ol>
<li>引入依赖</li>
</ol>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!--devtools热部署--&gt;</span></span>
<span class="line">  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.springframework.boot<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>spring-boot-devtools<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>optional</span><span class="token punctuation">&gt;</span></span>true<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>optional</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>日志</h2>
<p>java日志体系</p>
<h2>Web开发</h2>
<h2>集成MyBatis</h2>
<h2>启动原理源码</h2>
<h2>自定义starters</h2>
<h2>集成中间件</h2>
<p>整合第三方技术的方式</p>
<blockquote>
<ul>
<li>导入对应的starter</li>
<li>根据提供的配置格式，配置非默认值对应的配置项。</li>
</ul>
</blockquote>
<h2>IOC容器</h2>
<h2>AOP面向切面编程</h2>
<blockquote>
<p>提供了面向切面编程的实现，允许开发者通过分离横切关注点来增加模块化。</p>
<p>在面向对象编程（OOP）中，我们通常通过封装、继承和多态来提高代码的模块化，但有些横切关注点（如日志、事务管理和安全）往往跨越多个模块，这可能导致代码分散和重复。AOP就是为了解决这类问题而设计的。</p>
<p>Spring AOP主要用于处理Spring管理的beans，它不如AspectJ强大，AspectJ是另一种更为通用的AOP实现，它能够处理非Spring托管的类，甚至可以在编译时进行织入。</p>
</blockquote>
<h2>Resoures资源</h2>
<h2>Web MVC</h2>
<h2>Web Clients</h2>
<h2>定时任务</h2>
<h2>缓存</h2>
<h2>spring底层核心原理</h2>
<h2>spring的Bean生命周期</h2>
<h2>spring的依赖注入</h2>
<h2>spring的启动过程</h2>
<h2>spring的配置类</h2>
<h2>spring的整合第三方依赖</h2>
<h2>spring的AOP</h2>
<h2>spring的事务</h2>
<h2>博主提示</h2>
<p>总结</p>
<blockquote>
<ul>
<li>建议将springboot的启动类/配置类，放置在外层，这样在自动扫描包路径时能将全部的对象进行扫描，进行添加bean对象。</li>
</ul>
</blockquote>
<blockquote>
<p>更多参考资料请参考：<a href="https://sca.aliyun.com/learn/spring/" target="_blank" rel="noopener noreferrer">Spring Cloud Alibaba</a>，阿里巴巴提供的教学文档。</p>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 通信 - 协议 - Matrix</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E5%8D%8F%E8%AE%AE-Matrix.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E5%8D%8F%E8%AE%AE-Matrix.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 通信 - 协议 - Matrix</source>
      <description>文章摘要： Matrix 是一个去中心化即时通讯和群组聊天的开放标准，提供简单的 HTTP 接口和开放的参考实现，用于在服务器之间提供安全分布式和持久化的 JSON 传输。通过 WebRTC 技术实现基于 Web 的通讯。同时也为物联网设计。 相关信息 外部相关文章 Matrix协议官方文档：https://wiki.mozilla.org/ 公共Ma...</description>
      <category>学习笔记/技术</category>
      <pubDate>Thu, 29 Aug 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Matrix 是一个去中心化即时通讯和群组聊天的开放标准，提供简单的 HTTP 接口和开放的参考实现，用于在服务器之间提供安全分布式和持久化的 JSON 传输。通过 WebRTC 技术实现基于 Web 的通讯。同时也为物联网设计。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li>Matrix协议官方文档：https://wiki.mozilla.org/</li>
<li>公共Matrix家服务器查询网站：https://servers.joinmatrix.org/</li>
<li>国内Matrix家服务器地址：https://hashi.sbs</li>
<li>element客户端官网：https://element.io/</li>
</ul>
<p>内部相关文章</p>
<ul>
<li></li>
</ul>
</div>
<h2>简介</h2>
<ul>
<li>
<p><code>Matrix协议</code>是一个去中心化的、开放的加密聊天协议，旨在构建分散、安全的通信系统。</p>
</li>
<li>
<p>任何人都可以设置自己的<code>Matrix家服务器</code>。</p>
</li>
<li>
<p>核心特点包括去中心化通信、端到端加密、WebRTC语音通话/视频通话、消息已读提示、输入状态提示、群组聊天等。</p>
</li>
<li>
<p><code>Element</code>是<code>Matrix协议</code>下最受欢迎的聊天软件，就像某种邮件客户端。</p>
</li>
<li>
<p>世界各国，有无数个聊天服务器，他们都遵循<code>Matrix协议</code>，可以互相通信。这等于把微信背后的腾讯公司，拆成了无数个小公司。这些公司可以独立运行，又能互相协作。</p>
</li>
<li>
<p>有了客户端，接下来应该给自己选一家<code>Matrix运营商</code>，这就好比你有了<code>邮箱客户端</code>，还需要选择<code>邮件服务商</code>。你到底是要用<code>QQ邮箱</code>还是<code>网易邮箱</code>？选中了一家运营商，然后在Cinny 注册账户。</p>
</li>
<li>
<p><code>Email</code>和<code>Matrix</code>协议，都是联邦式的。你对腾讯邮箱不满，可以去体验谷歌、网易、微软，总会有一个是你满意的。中国的银行，表面看是联邦式，其实是大一统。你在这个银行被刁难了，于是你去另一个银行开户，但它很可能也会刁难你。因为这些奇怪的要求很可能是央行统一发布的，各个银行都要遵守。</p>
</li>
<li>
<p><code>Matrix</code>是一个通信协议，而<code>Element</code>是基于这个协议的一个客户端应用。可以将Matrix看作是一个电话网络，而Element是使用这个网络的手机。</p>
</li>
</ul>
<h2>实现原理</h2>
<ul>
<li><code>Matrix</code>实际上是一个去中心化的对话存储，而不是一个消息传递协议。当你在Matrix中发送消息时，它被复制到所有用户参与特定对话的服务器上--类似于在<code>Git存储库</code>之间复制提交的方式。在跨越多个服务器的Matrix对话中，不存在单一的控制点或故障点：与Matrix中其他地方的人交流的行为，与他们平等地分享对话的所有权。即使你的服务器离线了，对话也可以在其他地方继续进行，直到它恢复。</li>
<li>这意味着每台服务器对其用户数据拥有完全的自我主权--任何人都可以选择或运行自己的服务器并参与到更广泛的Matrix网络中。这就是Matrix使通信控制民主化的方式。</li>
<li>默认情况下，Matrix使用简单的<code>HTTPS+JSON APIs</code>作为其基准传输，但也接受更复杂的传输方式，如<code>Web Sockets</code>或通过<code>CoAP+Noise</code>的超低带宽Matrix。</li>
</ul>
<h2>用户格式</h2>
<ul>
<li><strong>格式</strong>：<code>@&lt;用户名&gt;:&lt;服务器域名&gt;</code></li>
<li><strong>案例</strong>：<code>@user:matrix.org</code></li>
<li><strong>解释</strong>：说明有个叫<code>user的人</code>在<code>matrix.org服务器</code>注册了。你即然知道了这个地址，就可以直接给她发消息。就像发邮件那么简单。</li>
</ul>
<h2>房间/空间格式</h2>
<ul>
<li><strong>格式</strong>：<code>#&lt;房间/空间名&gt;:&lt;服务器域名&gt;</code></li>
<li><strong>案例</strong>：<code>#chat:matrix.org</code></li>
<li><strong>解释</strong>：说明有个叫<code>chat的房间</code>在<code>matrix.org服务器</code>上。</li>
</ul>
<h2>家服务器推荐</h2>
<ul>
<li>国内Matrix家服务器地址<code>chatserver.hashi.sbs</code></li>
</ul>
<h2>房间推荐</h2>
<ul>
<li>TUNA 技术群<code>#tuna:matrix.org</code></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Library - Npm - json-server</title>
      <link>https://blog.magictable.ha.cn/software/Library-Npm-JsonServer.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Npm-JsonServer.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Npm - json-server</source>
      <description>文章摘要： 通过JSON文件来模拟后端服务。 适用于前端开发人员在进行前后端分离开发时，当后端服务还未搭建好时，使用json-server可以模拟REST API，从而加速开发过程。 简介 json-server通过监听一个JSON文件（如db.json）的变化，为前端提供模拟的数据服务，支持CRUD（创建、读取、更新、删除）操作以及一些高级功能，如排...</description>
      <category>软件程序/代码类库</category>
      <pubDate>Sun, 18 Aug 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 通过JSON文件来模拟后端服务。</p>
<ul>
<li>适用于前端开发人员在进行前后端分离开发时，当后端服务还未搭建好时，使用json-server可以模拟REST API，从而加速开发过程。</li>
</ul>
<!-- more -->
<h2>简介</h2>
<blockquote>
<ul>
<li>json-server通过监听一个JSON文件（如db.json）的变化，为前端提供模拟的数据服务，支持CRUD（创建、读取、更新、删除）操作以及一些高级功能，如排序、分页、嵌套查询等。</li>
<li>教程：<a href="https://blog.csdn.net/xhmico/article/details/139607652" target="_blank" rel="noopener noreferrer">https://blog.csdn.net/xhmico/article/details/139607652</a></li>
</ul>
</blockquote>
<h2>安装</h2>
<p>使用npm安装</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">npm</span> <span class="token function">install</span> json-server</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>创建数据</h2>
<blockquote>
<ul>
<li>创建一个json格式的文件。</li>
</ul>
</blockquote>
<div class="language-json line-numbers-mode" data-highlighter="prismjs" data-ext="json"><pre><code class="language-json"><span class="line"><span class="token punctuation">{</span></span>
<span class="line">  <span class="token property">"user"</span><span class="token operator">:</span> <span class="token punctuation">[</span></span>
<span class="line">    <span class="token punctuation">{</span></span>
<span class="line">      <span class="token property">"id"</span><span class="token operator">:</span> <span class="token string">"1"</span><span class="token punctuation">,</span></span>
<span class="line">      <span class="token property">"account"</span> <span class="token operator">:</span> <span class="token string">"YH202408091830001000"</span><span class="token punctuation">,</span></span>
<span class="line">      <span class="token property">"password"</span><span class="token operator">:</span> <span class="token string">"123456"</span><span class="token punctuation">,</span></span>
<span class="line">      <span class="token property">"nick_name"</span><span class="token operator">:</span> <span class="token string">"MagicTable"</span><span class="token punctuation">,</span></span>
<span class="line">      <span class="token property">"register_time"</span><span class="token operator">:</span> <span class="token string">"2024-08-13 04:22:40"</span><span class="token punctuation">,</span></span>
<span class="line">      <span class="token property">"real_name"</span><span class="token operator">:</span> <span class="token string">"魔术桌"</span><span class="token punctuation">,</span></span>
<span class="line">      <span class="token property">"citizen_identity_number"</span><span class="token operator">:</span> <span class="token string">"411024202408091024"</span><span class="token punctuation">,</span></span>
<span class="line">      <span class="token property">"phone_number"</span><span class="token operator">:</span> <span class="token string">"14559585094"</span><span class="token punctuation">,</span></span>
<span class="line">      <span class="token property">"gender"</span><span class="token operator">:</span> <span class="token string">"1"</span><span class="token punctuation">,</span></span>
<span class="line">      <span class="token property">"age"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span></span>
<span class="line">      <span class="token property">"birthday"</span><span class="token operator">:</span> <span class="token string">"2024-08-09"</span><span class="token punctuation">,</span></span>
<span class="line">      <span class="token property">"email"</span><span class="token operator">:</span> <span class="token string">"1234567890@qq.com"</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line">  <span class="token punctuation">]</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>启动服务</h2>
<blockquote>
<ul>
<li>运行命令启动json-server服务</li>
</ul>
</blockquote>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">npm</span> run json-server <span class="token parameter variable">--watch</span> db.json</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>数据操作分类</h2>
<blockquote>
<ul>
<li><strong>新增</strong>：<code>POST请求</code>，返回新增后的对象</li>
<li><strong>新增 - 批量增加</strong>：<code>POST请求</code>，</li>
<li><strong>删除</strong>：<code>DELETE请求</code>，返回删除前的对象</li>
<li><strong>删除 - 批量删除</strong>：<code>DELETE请求</code>，</li>
<li><strong>修改 - 修改某条数据的局部字段</strong>：<code>PATCH请求</code>，返回修改后的对象</li>
<li><strong>修改 - 修改某条数据的全部字段</strong>：<code>PUT请求</code>，返回修改后的对象</li>
<li><strong>查询 - 查询全部数据</strong>：<code>GET请求</code>，返回对象列表</li>
<li><strong>查询 - 根据字段查询单条或多条数据</strong>：<code>GET请求</code>，返回对象列表</li>
</ul>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Language - JSON</title>
      <link>https://blog.magictable.ha.cn/software/Language-JSON.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-JSON.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - JSON</source>
      <description>文章摘要： JSON是一种轻量级的数据交换格式，易于阅读和写入。它基于文本，以键值对的形式组织数据，广泛应用于网页和服务器之间的数据交换。 相关信息 外部相关文章 内部相关文章 数据传输模板： 介绍 简要说明 JSON（JavaScript Object Notation）是一种轻量级的数据交换格式，易于人阅读和编写，同时也易于机器解析和生成。 JSO...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Sat, 17 Aug 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> JSON是一种轻量级的数据交换格式，易于阅读和写入。它基于文本，以键值对的形式组织数据，广泛应用于网页和服务器之间的数据交换。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li></li>
</ul>
<p>内部相关文章</p>
<ul>
<li>数据传输模板：<a href="/software/Language-JSON-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E6%95%B0%E6%8D%AE%E4%BC%A0%E8%BE%93%E6%A8%A1%E6%9D%BF.html" target="_blank">Language-JSON-热门推荐-数据传输模板</a></li>
</ul>
</div>
<h2>介绍</h2>
<p>简要说明</p>
<ul>
<li>JSON（JavaScript Object Notation）是一种轻量级的数据交换格式，易于人阅读和编写，同时也易于机器解析和生成。</li>
<li>JSON文件的扩展名为 <code>.json</code>。</li>
</ul>
<p>主要功能</p>
<ul>
<li>数据传输（推荐）</li>
<li>配置文件</li>
</ul>
<p>注意事项</p>
<ul>
<li>基于JavaScript对象字面量表示法，由键值对组成，支持数组。</li>
<li>JSON并不支持注释，这一点与JavaScript不同。</li>
<li>JSON的语法是JavaScript语法的子集，但JSON格式是独立于语言的文本格式。</li>
</ul>
<p>适用场景</p>
<ul>
<li>现代编程语言和框架，如JavaScript、Python、Ruby等。</li>
<li>API配置和数据交换。</li>
<li>配置文件需要被JavaScript直接读取。</li>
</ul>
<h2>格式</h2>
<p><strong>数据结构</strong>：JSON支持以下数据结构：</p>
<ul>
<li>对象（Object）：一个无序的“‘名称/值’对”集合。一个对象以“{”开始，并以“}”结束。每个“名称”后跟一个“:”，“‘名称/值’对”之间用“,”分隔。</li>
<li>数组（Array）：值的有序集合。一个数组以“[”开始，并以“]”结束。值之间用“,”分隔。</li>
</ul>
<p><strong>值</strong>：可以是以下类型：</p>
<ul>
<li>字符串（String）</li>
<li>数字（Number）</li>
<li>对象（Object）</li>
<li>数组（Array）</li>
<li>布尔值（Boolean）：true 或 false</li>
<li>null</li>
</ul>
<p><strong>字符串</strong>：必须用双引号包围，不能用单引号。</p>
<p><strong>数字</strong>：必须是十进制数，且不能有前导零。</p>
<p>案例</p>
<div class="language-json line-numbers-mode" data-highlighter="prismjs" data-ext="json"><pre><code class="language-json"><span class="line"><span class="token punctuation">{</span></span>
<span class="line">  <span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"vue-project"</span><span class="token punctuation">,</span></span>
<span class="line">  <span class="token property">"private"</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span></span>
<span class="line">  <span class="token property">"version"</span><span class="token operator">:</span> <span class="token string">"0.0.0"</span><span class="token punctuation">,</span></span>
<span class="line">  <span class="token property">"type"</span><span class="token operator">:</span> <span class="token string">"module"</span><span class="token punctuation">,</span></span>
<span class="line">  <span class="token property">"scripts"</span><span class="token operator">:</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token property">"dev"</span><span class="token operator">:</span> <span class="token string">"vite"</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token property">"build"</span><span class="token operator">:</span> <span class="token string">"vite build"</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token property">"preview"</span><span class="token operator">:</span> <span class="token string">"vite preview"</span></span>
<span class="line">  <span class="token punctuation">}</span><span class="token punctuation">,</span></span>
<span class="line">  <span class="token property">"dependencies"</span><span class="token operator">:</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token property">"vue"</span><span class="token operator">:</span> <span class="token string">"^3.4.37"</span></span>
<span class="line">  <span class="token punctuation">}</span><span class="token punctuation">,</span></span>
<span class="line">  <span class="token property">"devDependencies"</span><span class="token operator">:</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token property">"@vitejs/plugin-vue"</span><span class="token operator">:</span> <span class="token string">"^5.1.2"</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token property">"vite"</span><span class="token operator">:</span> <span class="token string">"^5.4.1"</span></span>
<span class="line">  <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>命名规范</h2>
<p>详细总结：<a href="/software/Language-JSON-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E5%91%BD%E5%90%8D%E8%A7%84%E8%8C%83.html" target="_blank">Language-JSON-热门推荐-命名规范</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Language - XML</title>
      <link>https://blog.magictable.ha.cn/software/Language-XML.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-XML.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - XML</source>
      <description>文章摘要： XML是一种用于存储和传输数据的标准文本格式。它允许数据以结构化的方式进行定义和描述，具有良好的可读性和可维护性。XML广泛应用于不同系统和应用程序之间的数据交换。 介绍 简要说明 XML（eXtensible Markup Language）是一种用于存储和传输数据的标记语言。 主要功能 配置文件（推荐） 注意事项 由标签（tags）构成...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Sat, 17 Aug 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> XML是一种用于存储和传输数据的标准文本格式。它允许数据以结构化的方式进行定义和描述，具有良好的可读性和可维护性。XML广泛应用于不同系统和应用程序之间的数据交换。</p>
<!-- more -->
<h2>介绍</h2>
<p>简要说明</p>
<ul>
<li>XML（eXtensible Markup Language）是一种用于存储和传输数据的标记语言。</li>
</ul>
<p>主要功能</p>
<ul>
<li>配置文件（推荐）</li>
</ul>
<p>注意事项</p>
<ul>
<li>由标签（tags）构成，标签可以嵌套，具有自我描述性。</li>
</ul>
<p>适用场景</p>
<ul>
<li>需要结构化和层次化配置信息的场景。</li>
<li>需要跨平台和跨语言的数据交换。</li>
<li>Web服务的配置文件。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Language - YAML</title>
      <link>https://blog.magictable.ha.cn/software/Language-YAML.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-YAML.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - YAML</source>
      <description>文章摘要： YAML（YAML Ain’t Markup Language）是一种直观的数据序列化格式，常用于配置文件、数据交换等场景。 介绍 简要说明 YAML（YAML Ain’t Markup Language）是一种直观的数据序列化格式，用于配置文件、数据交换等。 主要功能 容易阅读。 容易与脚本语言交互。 以数据为核心，注重数据，轻格式。 注...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Sat, 17 Aug 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> YAML（YAML Ain’t Markup Language）是一种直观的数据序列化格式，常用于配置文件、数据交换等场景。</p>
<!-- more -->
<h2>介绍</h2>
<p>简要说明</p>
<ul>
<li>YAML（YAML Ain’t Markup Language）是一种直观的数据序列化格式，用于配置文件、数据交换等。</li>
</ul>
<p>主要功能</p>
<ul>
<li>容易阅读。</li>
<li>容易与脚本语言交互。</li>
<li>以数据为核心，注重数据，轻格式。</li>
</ul>
<p>注意事项</p>
<ul>
<li>使用缩进来表示数据层次结构，而不是括号或引号。</li>
<li><code>.yml</code>（推荐）、<code>.yaml</code></li>
</ul>
<p>适用场景</p>
<ul>
<li>需要清晰、简洁配置的场合。</li>
<li>云计算配置文件，如Docker、Kubernetes。</li>
<li>大数据和复杂配置管理。</li>
</ul>
<h2>表达式</h2>
<ul>
<li><code>${}</code>：引用变量，得到数据</li>
<li>引用yaml文件中的其他变量到自身变量中。</li>
</ul>
<h2>注释</h2>
<div class="language-yaml line-numbers-mode" data-highlighter="prismjs" data-ext="yml"><pre><code class="language-yaml"><span class="line"><span class="token comment"># 这是一个YAML文件的示例</span></span>
<span class="line"><span class="token key atrule">name</span><span class="token punctuation">:</span> <span class="token string">"Alice"</span> <span class="token comment"># 用户的姓名</span></span>
<span class="line"><span class="token key atrule">age</span><span class="token punctuation">:</span> <span class="token number">30</span>       <span class="token comment"># 用户的年龄</span></span>
<span class="line"><span class="token comment"># 下面的数组列出了用户喜欢的编程语言</span></span>
<span class="line"><span class="token key atrule">languages</span><span class="token punctuation">:</span></span>
<span class="line">  <span class="token punctuation">-</span> Python</span>
<span class="line">  <span class="token punctuation">-</span> JavaScript</span>
<span class="line">  <span class="token punctuation">-</span> Ruby</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>数据类型</h2>
<h3>基本数据类型</h3>
<div class="language-yaml line-numbers-mode" data-highlighter="prismjs" data-ext="yml"><pre><code class="language-yaml"><span class="line"><span class="token comment"># 字符串</span></span>
<span class="line"><span class="token key atrule">simple_string</span><span class="token punctuation">:</span> Hello<span class="token punctuation">,</span> YAML<span class="token tag">!</span></span>
<span class="line"><span class="token key atrule">quoted_string</span><span class="token punctuation">:</span> <span class="token string">"This is a quoted string."</span></span>
<span class="line"><span class="token key atrule">single_quoted_string</span><span class="token punctuation">:</span> <span class="token string">'This is a single-quoted string.'</span></span>
<span class="line"><span class="token comment"># 空字符串</span></span>
<span class="line"><span class="token key atrule">empty_string</span><span class="token punctuation">:</span> <span class="token string">''</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 整数</span></span>
<span class="line"><span class="token key atrule">integer</span><span class="token punctuation">:</span> <span class="token number">42</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 浮点数</span></span>
<span class="line"><span class="token key atrule">float</span><span class="token punctuation">:</span> <span class="token number">3.14159</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 布尔值</span></span>
<span class="line"><span class="token key atrule">boolean_true</span><span class="token punctuation">:</span> <span class="token boolean important">true</span></span>
<span class="line"><span class="token key atrule">boolean_false</span><span class="token punctuation">:</span> <span class="token boolean important">false</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 空值</span></span>
<span class="line"><span class="token key atrule">null_value</span><span class="token punctuation">:</span> <span class="token null important">null</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># </span></span>
<span class="line"><span class="token key atrule">empty_value</span><span class="token punctuation">:</span> <span class="token null important">~</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>键值对</h3>
<ul>
<li>键值对数据，对象数据</li>
</ul>
<div class="language-yaml line-numbers-mode" data-highlighter="prismjs" data-ext="yml"><pre><code class="language-yaml"><span class="line"><span class="token key atrule">name</span><span class="token punctuation">:</span> Alice</span>
<span class="line"><span class="token key atrule">age</span><span class="token punctuation">:</span> <span class="token number">30</span></span>
<span class="line"><span class="token key atrule">is_student</span><span class="token punctuation">:</span> <span class="token boolean important">false</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>数组</h3>
<div class="language-yaml line-numbers-mode" data-highlighter="prismjs" data-ext="yml"><pre><code class="language-yaml"><span class="line"><span class="token key atrule">fruits</span><span class="token punctuation">:</span></span>
<span class="line">  <span class="token punctuation">-</span> Apple</span>
<span class="line">  <span class="token punctuation">-</span> Banana</span>
<span class="line">  <span class="token punctuation">-</span> Cherry</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-yaml line-numbers-mode" data-highlighter="prismjs" data-ext="yml"><pre><code class="language-yaml"><span class="line"><span class="token key atrule">fruits</span><span class="token punctuation">:</span> <span class="token punctuation">[</span>Apple<span class="token punctuation">,</span> Banana<span class="token punctuation">,</span> Cherry<span class="token punctuation">]</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>嵌套对象</h3>
<div class="language-yaml line-numbers-mode" data-highlighter="prismjs" data-ext="yml"><pre><code class="language-yaml"><span class="line"><span class="token key atrule">user-data</span><span class="token punctuation">:</span> <span class="token punctuation">{</span><span class="token key atrule">name</span><span class="token punctuation">:</span> Bob<span class="token punctuation">,</span> <span class="token key atrule">age</span><span class="token punctuation">:</span> <span class="token number">25</span><span class="token punctuation">,</span> <span class="token key atrule">address</span><span class="token punctuation">:</span> <span class="token punctuation">{</span><span class="token key atrule">street</span><span class="token punctuation">:</span> 123 Main St<span class="token punctuation">,</span> <span class="token key atrule">city</span><span class="token punctuation">:</span> Anytown<span class="token punctuation">,</span> <span class="token key atrule">zip</span><span class="token punctuation">:</span> <span class="token number">12345</span><span class="token punctuation">}</span><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><div class="language-yaml line-numbers-mode" data-highlighter="prismjs" data-ext="yml"><pre><code class="language-yaml"><span class="line"><span class="token key atrule">user-data</span><span class="token punctuation">:</span></span>
<span class="line">  <span class="token key atrule">name</span><span class="token punctuation">:</span> Bob</span>
<span class="line">  <span class="token key atrule">age</span><span class="token punctuation">:</span> <span class="token number">25</span></span>
<span class="line">  <span class="token key atrule">address</span><span class="token punctuation">:</span></span>
<span class="line">    <span class="token key atrule">street</span><span class="token punctuation">:</span> 123 Main St</span>
<span class="line">    <span class="token key atrule">city</span><span class="token punctuation">:</span> Anytown</span>
<span class="line">    <span class="token key atrule">zip</span><span class="token punctuation">:</span> <span class="token number">12345</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>数组和对象的组合</h3>
<div class="language-yaml line-numbers-mode" data-highlighter="prismjs" data-ext="yml"><pre><code class="language-yaml"><span class="line"><span class="token key atrule">users</span><span class="token punctuation">:</span></span>
<span class="line">  <span class="token punctuation">-</span> <span class="token key atrule">name</span><span class="token punctuation">:</span> Alice</span>
<span class="line">    <span class="token key atrule">age</span><span class="token punctuation">:</span> <span class="token number">30</span></span>
<span class="line">  <span class="token punctuation">-</span> <span class="token key atrule">name</span><span class="token punctuation">:</span> Bob</span>
<span class="line">    <span class="token key atrule">age</span><span class="token punctuation">:</span> <span class="token number">25</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>日期时间</h3>
<div class="language-yaml line-numbers-mode" data-highlighter="prismjs" data-ext="yml"><pre><code class="language-yaml"><span class="line"><span class="token key atrule">date</span><span class="token punctuation">:</span> 2024/12/12</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>占位符</h2>
<ul>
<li>实现调用配置文件中的其他键的值。</li>
<li>格式：<code>${&lt;其他键&gt;}</code></li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>仅支持对其他属性的引用。</li>
<li>不支持SpEL表达式。</li>
</ul>
</div>
<div class="language-yaml line-numbers-mode" data-highlighter="prismjs" data-ext="yml"><pre><code class="language-yaml"><span class="line"><span class="token key atrule">name</span><span class="token punctuation">:</span> <span class="token string">"云脉"</span></span>
<span class="line"></span>
<span class="line"><span class="token key atrule">agent_data</span><span class="token punctuation">:</span></span>
<span class="line">  <span class="token key atrule">account</span><span class="token punctuation">:</span> <span class="token string">"CHN2024091700009999"</span></span>
<span class="line">  <span class="token key atrule">nick_name</span><span class="token punctuation">:</span> <span class="token string">"测试姬"</span></span>
<span class="line">  <span class="token key atrule">real_name</span><span class="token punctuation">:</span> $<span class="token punctuation">{</span>name<span class="token punctuation">}</span></span>
<span class="line">  <span class="token key atrule">nationality</span><span class="token punctuation">:</span> <span class="token string">"CHN"</span></span>
<span class="line">  <span class="token key atrule">gender</span><span class="token punctuation">:</span> <span class="token number">0</span></span>
<span class="line">  <span class="token key atrule">age</span><span class="token punctuation">:</span> <span class="token number">23</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>占位符-随机数</h2>
<div class="language-yaml line-numbers-mode" data-highlighter="prismjs" data-ext="yml"><pre><code class="language-yaml"><span class="line"><span class="token comment"># 随机任意随机数</span></span>
<span class="line"><span class="token key atrule">secret</span><span class="token punctuation">:</span> <span class="token string">"${random.value}"</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 随机整数</span></span>
<span class="line"><span class="token key atrule">number</span><span class="token punctuation">:</span> <span class="token string">"${random.int}"</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 随机长整数</span></span>
<span class="line"><span class="token key atrule">bignumber</span><span class="token punctuation">:</span> <span class="token string">"${random.long}"</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 随即UUID</span></span>
<span class="line"><span class="token key atrule">uuid</span><span class="token punctuation">:</span> <span class="token string">"${random.uuid}"</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 指定随机值的长度</span></span>
<span class="line"><span class="token key atrule">number-less-than-ten</span><span class="token punctuation">:</span> <span class="token string">"${random.int(2)}"</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 指定整数随机数范围</span></span>
<span class="line"><span class="token key atrule">number-in-range</span><span class="token punctuation">:</span> <span class="token string">"${random.int[1, 100]}"</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>使用锚点和引用</h2>
<ul>
<li>使用了锚点（<code>&amp;defaults</code>）和引用（<code>*defaults</code>）来避免重复代码。</li>
<li><code>development</code>和<code>test</code>环境共享<code>defaults</code>中的配置。</li>
</ul>
<div class="language-yaml line-numbers-mode" data-highlighter="prismjs" data-ext="yml"><pre><code class="language-yaml"><span class="line"><span class="token key atrule">defaults</span><span class="token punctuation">:</span> <span class="token important">&amp;defaults</span></span>
<span class="line">  <span class="token key atrule">adapter</span><span class="token punctuation">:</span> postgres</span>
<span class="line">  <span class="token key atrule">host</span><span class="token punctuation">:</span> localhost</span>
<span class="line"></span>
<span class="line"><span class="token key atrule">development</span><span class="token punctuation">:</span></span>
<span class="line">  <span class="token key atrule">database</span><span class="token punctuation">:</span> myapp_development</span>
<span class="line">  <span class="token key atrule">&lt;&lt;</span><span class="token punctuation">:</span> <span class="token important">*defaults</span></span>
<span class="line"></span>
<span class="line"><span class="token key atrule">test</span><span class="token punctuation">:</span></span>
<span class="line">  <span class="token key atrule">database</span><span class="token punctuation">:</span> myapp_test</span>
<span class="line">  <span class="token key atrule">&lt;&lt;</span><span class="token punctuation">:</span> <span class="token important">*defaults</span></span>
<span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Technology - 人工智能 - 技术 - 智能体</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD-%E6%8A%80%E6%9C%AF-%E6%99%BA%E8%83%BD%E4%BD%93.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD-%E6%8A%80%E6%9C%AF-%E6%99%BA%E8%83%BD%E4%BD%93.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 人工智能 - 技术 - 智能体</source>
      <description>文章摘要： 与AI相关的、流行的、优秀的论文进行总结。 简介 以LLM（大型语言模型）为核心控制器构建智能体 Agent的核心决策逻辑是让LLM根据动态变化的环境信息选择执行具体的行动或者对结果作出判断，并影响环境，通过多轮迭代重复执行上述步骤，直到完成目标。 精简的决策流程：P（感知）→ P（规划）→ A（行动） 感知（Perception）是指Ag...</description>
      <category>学习笔记/技术</category>
      <pubDate>Mon, 12 Aug 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 与AI相关的、流行的、优秀的论文进行总结。</p>
<!-- more -->
<h2>简介</h2>
<p>以LLM（大型语言模型）为核心控制器构建智能体
Agent的核心决策逻辑是让LLM根据动态变化的环境信息选择执行具体的行动或者对结果作出判断，并影响环境，通过多轮迭代重复执行上述步骤，直到完成目标。</p>
<p>精简的决策流程：P（感知）→ P（规划）→ A（行动）</p>
<ol>
<li>感知（Perception）是指Agent从环境中收集信息并从中提取相关知识的能力。</li>
<li>规划（Planning）是指Agent为了某一目标而作出的决策过程。</li>
<li>行动（Action）是指基于环境和规划做出的动作</li>
</ol>
<p>工程实现上可以拆分出四大块核心模块：推理、记忆、工具、行动</p>
<p>任务拆解、思维链、提示词、长短期记忆、自注意力机制、工具、RAG知识库检索的提示此增强技术、大模型</p>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>部署方案：浏览器、浏览器+虚拟机、虚拟机、跨很多工具</p>
</div>
<h2>Planning 规划</h2>
<p>Task Decomposition 任务分解</p>
<blockquote>
<ul>
<li>子目标和分解：智能体将大型任务分解为更小的、可管理的子目标，从而能够高效处理复杂任务。</li>
</ul>
</blockquote>
<blockquote>
<ul>
<li>思维链（CoT; Wei et al. 2022）已成为提高复杂任务模型性能的标准提示技术。该模型被指示“一步一步地思考”，以利用更多的测试时计算将困难的任务分解为更小、更简单的步骤。CoT 将大型任务转换为多个可管理的任务，并阐明了对模型思维过程的解释。</li>
<li>Tree of Thoughts （ToT; Yao et al. 2023） 通过在每一步探索多种推理可能性来扩展 CoT。它首先将问题分解为多个思维步骤，并在每个步骤中生成多个思维，从而创建树状结构。搜索过程可以是 BFS（广度优先搜索）或 DFS（深度优先搜索），每个状态都由分类器（通过提示）或多数投票进行评估。</li>
<li>LLM+P（Liu et al. 2023），涉及依靠外部经典规划师进行长期规划。此方法利用规划域定义语言 （PDDL） 作为中间接口来描述规划问题。在这个过程中， LLM （1）将问题翻译成“问题PDDL”，然后（2）请求经典规划器基于现有的“领域PDDL”生成PDDL计划，最后（3）将PDDL计划翻译回自然语言。从本质上讲，规划步骤被外包给外部工具，假设有特定领域的PDDL和合适的规划器，这在某些机器人设置中很常见，但在许多其他领域中并不常见。</li>
</ul>
</blockquote>
<p>Self-Reflection 自我反省</p>
<blockquote>
<ul>
<li>反思和完善：智能体可以对过去的行为进行自我批评和自我反思，从错误中吸取教训，并为未来的步骤进行改进，从而提高最终结果的质量。</li>
</ul>
</blockquote>
<blockquote>
<ul>
<li>允许自主代理通过完善过去的行动决策和纠正以前的错误来迭代改进。它在不可避免的试错任务中起着至关重要的作用。</li>
<li>ReAct（ Yao et al. 2023）通过将行动空间扩展为特定任务的离散行动和语言空间的组合，将推理和行动整合在一起LLM。前者能够LLM与环境进行交互（例如使用维基百科搜索 API），而后者则提示LLM以自然语言生成推理痕迹。</li>
</ul>
</blockquote>
<blockquote>
<ul>
<li>Reflexion （ Shinn &amp; Labash 2023） 是一个框架，旨在为智能体提供动态记忆和自我反思能力，以提高推理能力。Reflexion 有一个标准的 RL 设置，其中奖励模型提供简单的二元奖励，操作空间遵循 ReAct 中的设置，其中特定于任务的动作空间通过语言进行增强，以实现复杂的推理步骤。在每次操作 之后，代理会计算一个启发式方法 ，并可选择根据自反射结果决定重置环境以开始新的试验。</li>
</ul>
</blockquote>
<h2>Memory 记忆</h2>
<p>Sensory Memory 感觉记忆</p>
<blockquote>
<ul>
<li>感觉记忆：这是记忆的最早阶段，提供在原始刺激结束后保留感官信息（视觉、听觉等）印象的能力。感觉记忆通常最多只能持续几秒钟。子类别包括标志性记忆（视觉）、回声记忆（听觉）和触觉记忆（触摸）。</li>
</ul>
</blockquote>
<p>Short-Term Memory 短期记忆</p>
<blockquote>
<ul>
<li>短期记忆：所有的情境学习（参见提示工程）都是利用模型的短期记忆来学习的。</li>
</ul>
</blockquote>
<p>Long-Term Memory 长期记忆</p>
<blockquote>
<ul>
<li>长期记忆：为智能体提供了在较长时间内保留和调用（无限）信息的能力，通常是通过利用外部向量存储和快速检索。</li>
</ul>
</blockquote>
<blockquote>
<ul>
<li>显性/陈述性记忆：这是对事实和事件的记忆，指的是那些可以有意识地回忆起的记忆，包括情景记忆（事件和经验）和语义记忆（事实和概念）</li>
<li>内隐/程序性记忆：这种类型的记忆是无意识的，涉及自动执行的技能和例程，例如骑自行车或在键盘上打字。</li>
</ul>
</blockquote>
<blockquote>
<p>我们可以粗略地考虑以下映射：</p>
<ul>
<li>感觉记忆作为原始输入（包括文本、图像或其他模态）的学习嵌入表示。</li>
<li>短期记忆作为情境学习。它是短而有限的，因为它受到 Transformer 的有限上下文窗口长度的限制。</li>
<li>长期内存作为外部向量存储，代理可以在查询时处理，可通过快速检索访问。</li>
</ul>
</blockquote>
<h2>Tool use 工具使用</h2>
<blockquote>
<ul>
<li>智能体学习调用外部 API 以获取模型权重中缺少的额外信息（在预训练后通常很难更改），包括当前信息、代码执行能力、对专有信息源的访问等。</li>
</ul>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Algorithm - 问题 - 杨辉三角</title>
      <link>https://blog.magictable.ha.cn/software/Algorithm-%E9%97%AE%E9%A2%98-%E6%9D%A8%E8%BE%89%E4%B8%89%E8%A7%92.html</link>
      <guid>https://blog.magictable.ha.cn/software/Algorithm-%E9%97%AE%E9%A2%98-%E6%9D%A8%E8%BE%89%E4%B8%89%E8%A7%92.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Algorithm - 问题 - 杨辉三角</source>
      <description>文章摘要： 杨辉三角是一个经典的数学问题，它在中国常被称为“贾宪三角”或“帕斯卡尔三角”。它是一个三角形数表，其中每个数字都是它上方两数字之和（除了边缘上的数字，它们都是1）。 Java 8 源码 结果</description>
      <category>软件程序/算法设计</category>
      <pubDate>Sat, 10 Aug 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 杨辉三角是一个经典的数学问题，它在中国常被称为“贾宪三角”或“帕斯卡尔三角”。它是一个三角形数表，其中每个数字都是它上方两数字之和（除了边缘上的数字，它们都是1）。</p>
<!-- more -->
<h2>Java 8</h2>
<p>源码</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Test</span> <span class="token punctuation">{</span></span>
<span class="line"> <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> ages<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 指定杨辉三角的行数</span></span>
<span class="line">        <span class="token keyword">int</span> <span class="token class-name">Rows</span> <span class="token operator">=</span> <span class="token number">5</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">  <span class="token comment">// 创建存储杨辉三角的二维数组</span></span>
<span class="line">  <span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token punctuation">]</span> array <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token keyword">int</span><span class="token punctuation">[</span><span class="token class-name">Rows</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">  <span class="token comment">// 计算数组的值</span></span>
<span class="line">  <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> i<span class="token operator">&lt;</span><span class="token class-name">Rows</span><span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">   <span class="token comment">// 创建一维数组给二维数组</span></span>
<span class="line">   array<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token keyword">int</span><span class="token punctuation">[</span>i<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">   <span class="token comment">// 将数组每行第0个和最后一个，先赋值为1</span></span>
<span class="line">   array<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span></span>
<span class="line">   array<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span></span>
<span class="line">   <span class="token comment">// 计算中间部分的值，并赋值</span></span>
<span class="line">   <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> j<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span> j<span class="token operator">&lt;</span>i<span class="token punctuation">;</span> j<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 每行的数值是（上一行的上一个值 + 上一行的相同位的值）</span></span>
<span class="line">    array<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span>j<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token punctuation">(</span>array<span class="token punctuation">[</span>i<span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">[</span>j<span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token punctuation">(</span>array<span class="token punctuation">[</span>i<span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">   <span class="token punctuation">}</span> </span>
<span class="line">  <span class="token punctuation">}</span></span>
<span class="line">  </span>
<span class="line">  <span class="token comment">// 打印数组</span></span>
<span class="line">  <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> i<span class="token operator">&lt;</span>array<span class="token punctuation">.</span>length<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">   <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> j<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> j<span class="token operator">&lt;</span>array<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>length<span class="token punctuation">;</span> j<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span>array<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span>j<span class="token punctuation">]</span> <span class="token operator">+</span> <span class="token string">"  "</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">   <span class="token punctuation">}</span></span>
<span class="line">   <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">  <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"> <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>结果</p>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">1  </span>
<span class="line">1  1  </span>
<span class="line">1  2  1  </span>
<span class="line">1  3  3  1  </span>
<span class="line">1  4  6  4  1  </span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Language - Bash Shell</title>
      <link>https://blog.magictable.ha.cn/software/Language-BashShell.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-BashShell.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Bash Shell</source>
      <description>文章摘要： Bash（GNU Bourne-Again SHell）是许多Linux发行版的默认脚本语言。 相关信息 外部相关文章 内部相关文章 简介 简要说明 Bash（Bourne-Again SHell）是一种为GNU项目编写的Unix shell和命令语言解释器。 它是大多数Linux发行版和macOS中的默认命令行接口。 主要功能 命令行解释...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Sat, 10 Aug 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Bash（GNU Bourne-Again SHell）是许多Linux发行版的默认脚本语言。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li></li>
</ul>
<p>内部相关文章</p>
<ul>
<li><a href="/software/Package-Bash.html" target="_blank">Package-Bash</a></li>
</ul>
</div>
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>Bash（Bourne-Again SHell）是一种为GNU项目编写的Unix shell和命令语言解释器。</li>
<li>它是大多数Linux发行版和macOS中的默认命令行接口。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>命令行解释</strong>：执行用户输入的命令，可以是内置命令或外部程序。</li>
<li><strong>脚本编写</strong>：允许用户编写脚本来自动化任务。</li>
<li><strong>变量赋值与使用</strong>：可以定义和使用变量来存储和操作数据。</li>
<li><strong>流程控制</strong>：支持条件判断（if, else, elif）、循环（for, while）等流程控制结构。</li>
<li><strong>管道和重定向</strong>：可以将一个命令的输出作为另一个命令的输入（管道），以及重定向输出到文件或设备。</li>
<li><strong>提供命令历史记录功能</strong>：允许用户查看和重复之前的命令。</li>
<li><strong>提供别名机制</strong>：可以为常用命令或命令序列设置简短的别名。</li>
</ul>
<p>注意事项</p>
<ul>
<li>安全性：在编写脚本时，要注意变量和命令的引用，以避免安全漏洞，如注入攻击。</li>
<li>引号使用：在处理变量和字符串时，正确使用单引号、双引号和无引号是至关重要的。</li>
<li>特殊字符处理：在脚本中处理特殊字符（如空格、换行符等）时需要特别注意。</li>
<li>权限问题：执行脚本时可能需要适当的文件权限和用户权限。</li>
<li>脚本调试：编写复杂的脚本时，调试可能会很困难，因此需要良好的错误处理和日志记录。</li>
</ul>
<p>适用场景</p>
<ul>
<li>Linux和Unix系统的日常命令行操作。</li>
<li>自动化系统管理和维护任务，如备份、用户管理、日志分析等。</li>
<li>开发自动化测试脚本。</li>
<li>数据处理和分析。</li>
<li>编写简单的到复杂的程序和应用程序。</li>
<li>服务器脚本，例如CGI脚本处理Web请求。</li>
<li>作为其他编程语言和工具的接口或桥梁。</li>
</ul>
<h2>脚本</h2>
<ul>
<li>Shell脚本是一组按顺序执行的Shell命令。Shell脚本可以用于自动化任务和创建更复杂的应用程序。</li>
<li>脚本通常以<code>#!/bin/bash</code>开头，指明脚本的解释器。</li>
</ul>
<p>在文件开头写上如下内容，表示该文件是bash shell脚本文件：</p>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">#!/usr/bin/bash</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p>运行方式</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 方案一</span></span>
<span class="line"><span class="token function">bash</span> <span class="token operator">&lt;</span>脚本名<span class="token operator">&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 方案二</span></span>
<span class="line"><span class="token function">sh</span> <span class="token operator">&lt;</span>脚本名<span class="token operator">&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 方案三</span></span>
<span class="line"><span class="token operator">&lt;</span>脚本名<span class="token operator">&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 方案四</span></span>
<span class="line"><span class="token builtin class-name">source</span> <span class="token operator">&lt;</span>脚本名<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>运算符</h2>
<h2>数据类型</h2>
<h2>表达式</h2>
<h2>变量</h2>
<ul>
<li>Shell变量用于存储数据。变量可以通过<code>=</code>符号赋值，例如<code>name=John</code>。</li>
<li>变量名可以由字母、数字和下划线组成，但不能以数字开头。变量值可以是字符串、数字或其他特殊字符。</li>
</ul>
<p>定义变量：<code>&lt;变量名&gt;=&lt;变量值&gt;</code></p>
<p>引用变量：<code>$&lt;变量名&gt;</code> <code>${&lt;变量名&gt;}</code> <code>"$&lt;变量名&gt;"</code></p>
<p>查看变量：<code>echo $&lt;变量名&gt;</code></p>
<p>删除变量：<code>unset &lt;变量名&gt;</code></p>
<div class="hint-container warning">
<p class="hint-container-title">警告</p>
<p>定义变量时<code>=</code>两边不能有空格。
原因：在终端（命令行界面）中空格代表这段命令结束、断句、分隔。
若遇到字符串中带有空格时，可通过<code>""</code>双引号将字符串包裹起来。</p>
</div>
<h2>关键字</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 输出信息</span></span>
<span class="line"><span class="token builtin class-name">echo</span> <span class="token string">"hello word!"</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h2>条件语句</h2>
<h2>循环语句</h2>
<h2>函数</h2>
<h2>输入和输出</h2>
<h2>算术运算符</h2>
<h2>数组和哈希表</h2>
<h2>进程管理</h2>
<h2>环境变量</h2>
<h2>函数替换和命令组</h2>
<h2>bash命令</h2>
<p>type     提示命令的类型
which    显示外部命令的位置，若是内嵌命令则报错
help     简要帮助
man      详细帮助
apropos  通过关键字来查询用户手册相关命令
whatis   返回命令的简要说明
info     类似网页形式的有超链接形式的用户手册查询命令
alias    自定义多命令执行的命令别名
unalias  删除命令别名</p>
<p>pwd     输出显示当前完整路径
cd   转跳路径      .. 代表上一级目录     ~ 代表用户家目录</p>
<p>ls       list  输出显示当前目录下的内容</p>
<blockquote>
<p>-a    列出目录下的所有内容，包括隐藏的文件，all（全部）
-d    --directory
-F    文件或者目录名字后面加一个字符和分类标识，--classify
-h    可读的格式展示，--human-readable
-l    输出显示详细信息，long（长）
-i    显示文件的节点序号（内存地址）
-r     --reverse    反序
-t     --time    按修改日期排序</p>
</blockquote>
<p>cp          复制文件和目录，copy（复制）</p>
<blockquote>
<p>-a      将权限一起复制
-i       交互式的信息确认
-r       递归，将目录内的文件一起复制
-u      只复制新更新的内容
-v      提供详细的操作信息</p>
</blockquote>
<p>mv         移动/重命名文件和目录，move（移动）创建文件</p>
<blockquote>
<p>-i       交互式的信息确认
-u      只复制新更新的内容
-v      提供详细的操作信息</p>
</blockquote>
<p>namo      创建文件
mkdir     创建目录
rm          删除文件和目录</p>
<blockquote>
<p>-i       交互式
-r       递归，删除
-f       强制
-v      提供详细的操作信息</p>
</blockquote>
<p>ln            创建硬链接和软连接（符号链接）</p>
<blockquote>
<p>ls 源文件  硬链接文件
ls -s 源文件   软连接文件</p>
</blockquote>
<p>file         确认文件的文件类型
chmod        改变文件权限
find         搜索符合要求的文件
cat           展示输出文件内容，小文件适用
less          展示输出文件内容，大文件适用
grep         搜索文件中的内容</p>
<p>date    输出显示当前时间
df        输出显示磁盘信息       -h     可读的格式显示
free     输出显示内存信息       -h     可读的格式显示</p>
<p>heda  -n 【数字】
sort       根据字典顺序进行排序</p>
<p>history       输出显示过去运行过哪些命令</p>
<blockquote>
<p>! + 数字      将再次运行对应的命令</p>
</blockquote>
<p>ps           检测和管理进程</p>
<blockquote>
<p>aux     查看所有用户运行的所有进程</p>
</blockquote>
<p>top          系统监控，提供进程和系统资源消耗的实时视图</p>
<blockquote>
<p>Ctrl+C快捷键      退出top界面</p>
</blockquote>
<p>kill           终止进程</p>
<blockquote>
<p>sudo kill</p>
</blockquote>
<p>lsblk        列出磁盘和分区
==fdisk        列出并管理磁盘和分区==</p>
<p>==lshw        获取硬件细节==</p>
<p>env      显示linux系统中所有的环境变量
echo     显示某个环境变量中有哪些路径
which    查找某个命令所在的绝对路径</p>
<p>tar      将许多文件一起保存到一个单独的磁盘中进行归档（打包）</p>
<h2>I/O重定向</h2>
<p>cat     连接文件
sort    排序文本行
uniq    报道或省略重复行
grep    打印匹配行
wc      打印文件中换行符，字，和字节个数
head    输出文件第一部分
tail    输出文件最后一部分
tee     从标准输入读取数据，并同时写道标准输出和文件</p>
]]></content:encoded>
    </item>
    <item>
      <title>基础知识 - 正则表达式 - 热门推荐 - 常见规则</title>
      <link>https://blog.magictable.ha.cn/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E5%B8%B8%E8%A7%81%E8%A7%84%E5%88%99.html</link>
      <guid>https://blog.magictable.ha.cn/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E5%B8%B8%E8%A7%81%E8%A7%84%E5%88%99.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">基础知识 - 正则表达式 - 热门推荐 - 常见规则</source>
      <description>文章摘要： 正则表达式常见规则整理。 验证电子邮件地址 ^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$ 验证手机号码（中国大陆） ^1[3-9]\d{9}$ 验证身份证号（中国大陆） ^\d{15}|\d{18}$ 验证日期（YYYY-MM-DD） ^\d{4}-(0[1-9]|1[0-2])-(0[1-9]...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Sat, 10 Aug 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 正则表达式常见规则整理。</p>
<!-- more -->
<p>验证电子邮件地址</p>
<blockquote>
<ul>
<li><code>^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$</code></li>
</ul>
</blockquote>
<p>验证手机号码（中国大陆）</p>
<blockquote>
<ul>
<li><code>^1[3-9]\d{9}$</code></li>
</ul>
</blockquote>
<p>验证身份证号（中国大陆）</p>
<blockquote>
<ul>
<li><code>^\d{15}|\d{18}$</code></li>
</ul>
</blockquote>
<p>验证日期（YYYY-MM-DD）</p>
<blockquote>
<ul>
<li><code>^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$</code></li>
</ul>
</blockquote>
<p>提取URL</p>
<blockquote>
<ul>
<li><code>https?://[^\s]+</code></li>
</ul>
</blockquote>
<p>去除字符串首尾空白</p>
<blockquote>
<ul>
<li><code>^\s+|\s+$</code></li>
</ul>
</blockquote>
<p>分割字符串（按逗号分隔，可包含空格）</p>
<blockquote>
<ul>
<li><code>[,\s]+</code></li>
</ul>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>基础知识 - 正则表达式</title>
      <link>https://blog.magictable.ha.cn/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F.html</link>
      <guid>https://blog.magictable.ha.cn/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">基础知识 - 正则表达式</source>
      <description>文章摘要： 正则表达式（Regular Expression）是一种文本模式。 简介 简要说明 正则表达式（Regular Expression）是一种文本模式。 由普通字符（例如，a 到 z 之间的字母）和特殊字符（称为&amp;quot;元字符&amp;quot;）组成。 正则表达式用于对字符串进行复杂的模式匹配和查找操作。 主要功能 搜索：在大量文本中查找特定的字符串或模式。 替换...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Sat, 10 Aug 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 正则表达式（Regular Expression）是一种文本模式。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<blockquote>
<ul>
<li>正则表达式（Regular Expression）是一种文本模式。</li>
<li>由普通字符（例如，a 到 z 之间的字母）和特殊字符（称为"元字符"）组成。</li>
<li>正则表达式用于对字符串进行复杂的模式匹配和查找操作。</li>
</ul>
</blockquote>
<p>主要功能</p>
<blockquote>
<ul>
<li><strong>搜索</strong>：在大量文本中查找特定的字符串或模式。</li>
<li><strong>替换</strong>：找到匹配的字符串后，用新的字符串替换它们。</li>
<li><strong>分割</strong>：根据特定的模式将字符串分割成多个子字符串。</li>
<li><strong>验证</strong>：检查字符串是否符合特定的格式，如电子邮件地址、电话号码等。</li>
</ul>
</blockquote>
<p>注意事项</p>
<blockquote>
<ul>
<li><strong>转义字符</strong>：在正则表达式中，某些字符具有特殊含义，如果需要匹配这些字符本身，需要使用反斜杠 <code>\</code> 进行转义。</li>
<li><strong>匹配多个可能性</strong>：使用方括号 <code>[]</code> 来指定一个字符集合，匹配集合中的任意一个字符。</li>
<li><strong>贪婪与懒惰</strong>：默认情况下，量词（如 <code>*</code>、<code>+</code>）是贪婪的，会匹配尽可能多的字符。使用 <code>?</code> 可以使其变为懒惰模式，匹配尽可能少的字符。</li>
<li><strong>性能问题</strong>：复杂的正则表达式可能导致性能问题，尤其是在处理大量数据时。应尽量优化表达式，避免回溯。</li>
<li><strong>兼容性</strong>：不同的编程语言和平台可能支持不同的正则表达式特性，需要注意兼容性问题。</li>
</ul>
</blockquote>
<p>适用场景</p>
<blockquote>
<ul>
<li><strong>数据验证</strong>：在用户输入数据时，确保数据格式正确，如表单验证。</li>
<li><strong>文本处理</strong>：在文本编辑器中查找和替换文本，或者在日志文件中搜索特定模式。</li>
<li><strong>数据分析</strong>：从大量文本数据中提取有用信息，如日志分析、自然语言处理。</li>
<li><strong>字符串操作</strong>：编程中处理字符串时，进行搜索、替换、分割等操作。</li>
<li><strong>网络爬虫</strong>：从网页中提取链接、数据等信息。</li>
</ul>
</blockquote>
<h2>语法</h2>
<h3>基本匹配</h3>
<blockquote>
<ul>
<li><code>.</code>：匹配除换行符之外的任意单个字符。</li>
<li><code>[abc]</code>：匹配方括号内的任意一个字符（a、b 或 c）。</li>
<li><code>[^abc]</code>：匹配不在方括号内的任意一个字符。</li>
<li><code>\d</code>：匹配任意一个数字字符（等价于 <code>[0-9]</code>）。</li>
<li><code>\D</code>：匹配一个非数字字符。等价于 <code>[^0-9]</code>。</li>
<li><code>\w</code>：匹配任意一个字母数字或下划线字符（等价于 <code>[a-zA-Z0-9_]</code>）。</li>
<li><code>\W</code>：匹配任何非单词字符。等价于 <code>[^A-Za-z0-9_]</code>。</li>
<li><code>\s</code>：匹配任意一个空白字符（空格、制表符、换行符等）。</li>
<li><code>\S</code>：匹配任何非空白字符。</li>
</ul>
</blockquote>
<h3>量词</h3>
<blockquote>
<ul>
<li><code>*</code>：匹配前面的子表达式零次或多次。</li>
<li><code>+</code>：匹配前面的子表达式一次或多次。</li>
<li><code>?</code>：匹配前面的子表达式零次或一次。</li>
<li><code>{n}</code>：匹配前面的子表达式恰好 n 次。</li>
<li><code>{n,}</code>：匹配前面的子表达式至少 n 次。</li>
<li><code>{n,m}</code>：匹配前面的子表达式至少 n 次，但不超过 m 次。</li>
</ul>
</blockquote>
<h3>定位符</h3>
<blockquote>
<ul>
<li><code>^</code>：匹配输入字符串的开始位置。</li>
<li><code>$</code>：匹配输入字符串的结束位置。</li>
<li><code>\b</code>：匹配一个单词边界。</li>
<li><code>\B</code>：非单词边界匹配。</li>
</ul>
</blockquote>
<h3>分组和引用</h3>
<blockquote>
<ul>
<li><code>(exp)</code>：匹配 exp 并捕获文本到自动命名的组里。</li>
<li><code>(?:exp)</code>：匹配 exp 但不捕获匹配的文本。</li>
<li><code>\n</code>：引用编号为 n 的捕获组匹配的文本。</li>
</ul>
</blockquote>
<h3>选择符</h3>
<blockquote>
<ul>
<li><code>|</code>：匹配两个或多个分支选择的任意一个。</li>
</ul>
</blockquote>
<h2>常见推荐规则</h2>
<p>详细总结：<a href="/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E5%B8%B8%E8%A7%81%E8%A7%84%E5%88%99.html" target="_blank">基础知识-正则表达式-热门推荐-常见规则</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>基础知识 - 通用转义字符</title>
      <link>https://blog.magictable.ha.cn/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E9%80%9A%E7%94%A8%E8%BD%AC%E4%B9%89%E5%AD%97%E7%AC%A6.html</link>
      <guid>https://blog.magictable.ha.cn/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E9%80%9A%E7%94%A8%E8%BD%AC%E4%B9%89%E5%AD%97%E7%AC%A6.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">基础知识 - 通用转义字符</source>
      <description>文章摘要： 编程通用的转义字符表格汇总，特定语言的转义字符请查看相关查询手册。 警告 CRLF 表示回车换行。在Windows操作系统中，通常使用 \r\n 作为行结束符。 CR 表示回车。在某些老旧的系统中，比如早期的Mac系统，使用 \r 作为行结束符。 LF 表示换行。在Unix、Linux、Mac OS X（以及较新的Mac OS版本）操作系统...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Sat, 10 Aug 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 编程通用的转义字符表格汇总，特定语言的转义字符请查看相关查询手册。</p>
<!-- more -->
<table>
<thead>
<tr>
<th style="text-align:center">符号</th>
<th style="text-align:left">含义</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">\b</td>
<td style="text-align:left">退格（BS）</td>
<td style="text-align:left">将当前位置移动到前一列</td>
</tr>
<tr>
<td style="text-align:center">\f</td>
<td style="text-align:left">换页（FF）</td>
<td style="text-align:left">将当前位置移动到下页开头</td>
</tr>
<tr>
<td style="text-align:center">\n</td>
<td style="text-align:left">换行（LF）</td>
<td style="text-align:left">将当前位置移动到下一行开头</td>
</tr>
<tr>
<td style="text-align:center">\r</td>
<td style="text-align:left">回车（CR）</td>
<td style="text-align:left">将当前位置移动到本行开头</td>
</tr>
<tr>
<td style="text-align:center">\t</td>
<td style="text-align:left">水平制表（HT）</td>
<td style="text-align:left">跳到下一个TAB位置</td>
</tr>
<tr>
<td style="text-align:center">\v</td>
<td style="text-align:left">垂直制表（VT）</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">\s</td>
<td style="text-align:left">空格（0x20）</td>
<td style="text-align:left">\s</td>
</tr>
<tr>
<td style="text-align:center">\\</td>
<td style="text-align:left">反斜杠</td>
<td style="text-align:left">\</td>
</tr>
<tr>
<td style="text-align:center">\"</td>
<td style="text-align:left">双引号</td>
<td style="text-align:left">"</td>
</tr>
<tr>
<td style="text-align:center">\'</td>
<td style="text-align:left">单引号</td>
<td style="text-align:left">'</td>
</tr>
<tr>
<td style="text-align:center">\`</td>
<td style="text-align:left">反引号</td>
<td style="text-align:left">`</td>
</tr>
<tr>
<td style="text-align:center">\{\}</td>
<td style="text-align:left">花括号</td>
<td style="text-align:left">{}</td>
</tr>
<tr>
<td style="text-align:center">\[\]</td>
<td style="text-align:left">方括号</td>
<td style="text-align:left">[]</td>
</tr>
<tr>
<td style="text-align:center">\(\)</td>
<td style="text-align:left">小括号</td>
<td style="text-align:left">()</td>
</tr>
<tr>
<td style="text-align:center">\*</td>
<td style="text-align:left">星号</td>
<td style="text-align:left">*</td>
</tr>
<tr>
<td style="text-align:center">\_</td>
<td style="text-align:left">下划线</td>
<td style="text-align:left">_</td>
</tr>
<tr>
<td style="text-align:center">\#</td>
<td style="text-align:left">井字号</td>
<td style="text-align:left">#</td>
</tr>
<tr>
<td style="text-align:center">\+</td>
<td style="text-align:left">加号</td>
<td style="text-align:left">+</td>
</tr>
<tr>
<td style="text-align:center">\-</td>
<td style="text-align:left">减号</td>
<td style="text-align:left">-</td>
</tr>
<tr>
<td style="text-align:center">\.</td>
<td style="text-align:left">英文句点/小数点</td>
<td style="text-align:left">.</td>
</tr>
<tr>
<td style="text-align:center">\!</td>
<td style="text-align:left">感叹号</td>
<td style="text-align:left">!</td>
</tr>
<tr>
<td style="text-align:center">\0</td>
<td style="text-align:left">空字符（NUL）</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">\ddd</td>
<td style="text-align:left">八进制字符（ddd）</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">\uxxxx</td>
<td style="text-align:left">16进制Unicode字符 (xxxx)</td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
<div class="hint-container warning">
<p class="hint-container-title">警告</p>
<ul>
<li>CRLF 表示回车换行。在Windows操作系统中，通常使用 <code>\r\n</code> 作为行结束符。</li>
<li>CR 表示回车。在某些老旧的系统中，比如早期的Mac系统，使用 <code>\r</code> 作为行结束符。</li>
<li>LF 表示换行。在Unix、Linux、Mac OS X（以及较新的Mac OS版本）操作系统中，通常使用 <code>\n</code> 作为行结束符。</li>
</ul>
</div>
<p>这些不同的行结束符可能会导致在不同操作系统之间交换文本文件时出现兼容性问题。</p>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>例如：</p>
<ul>
<li>如果在 Windows 上创建的文件在 Linux 上打开，可能会看到行尾出现额外的字符。</li>
<li>或者在 Linux 上创建的文件在 Windows 上打开时，行可能不会正确地换行显示。</li>
<li>为了解决这个问题，许多文本编辑器和IDE提供了在不同行结束符之间转换的功能。</li>
</ul>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Solution - 博客网站 - VScode+Hexo+Github</title>
      <link>https://blog.magictable.ha.cn/note/Solution-%E5%8D%9A%E5%AE%A2%E7%BD%91%E7%AB%99-Hexo_Github.html</link>
      <guid>https://blog.magictable.ha.cn/note/Solution-%E5%8D%9A%E5%AE%A2%E7%BD%91%E7%AB%99-Hexo_Github.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Solution - 博客网站 - VScode+Hexo+Github</source>
      <description>文章摘要： 使用Hexo框架并部署到Github平台的个人博客项目。 针对 Debian Linux 系统的环境。 注释 博客中使用的图片使用vscode编辑器中的Excalidraw插件绘制，能够实现一个文件随时修改图像和展示结果，实现无需导出图片操作。 该博客是静态博客，因此没有后台管理系统或登录功能，没有涉及数据库操作等内容。 项目简介 使用He...</description>
      <category>学习笔记/方案</category>
      <pubDate>Fri, 09 Aug 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 使用Hexo框架并部署到Github平台的个人博客项目。</p>
<ul>
<li>针对 Debian Linux 系统的环境。</li>
</ul>
<!-- more -->
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>博客中使用的图片使用vscode编辑器中的<code>Excalidraw</code>插件绘制，能够实现一个文件随时修改图像和展示结果，实现无需导出图片操作。</li>
<li>该博客是静态博客，因此没有后台管理系统或登录功能，没有涉及数据库操作等内容。</li>
</ul>
</div>
<h2>项目简介</h2>
<ul>
<li>使用Hexo框架并部署到Github平台的个人博客项目。</li>
</ul>
<h2>项目部署流程</h2>
<h3>安装项目所需软件</h3>
<ul>
<li>若你的计算机中已经安装，则自行跳过该步骤。</li>
</ul>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 安装Git</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">apt</span> <span class="token function">install</span> <span class="token function">git</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 安装Node.js</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">apt</span> <span class="token function">install</span> nodejs</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 安装npm包管理工具</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">apt</span> <span class="token function">install</span> <span class="token function">npm</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 通过Node.js的npm包管理工具安装Hexo框架</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">npm</span> <span class="token function">install</span> <span class="token parameter variable">-g</span> hexo-cli</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>初始化项目的本地文件</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 手动选择或创建存放项目的目录</span></span>
<span class="line"><span class="token function">mkdir</span> <span class="token string">"项目目录名称"</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 切换到项目的目录下</span></span>
<span class="line"><span class="token builtin class-name">cd</span> <span class="token string">"项目目录"</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 初始化项目</span></span>
<span class="line"><span class="token comment"># 将会在当前目录中创建一个新的目录结构</span></span>
<span class="line"><span class="token comment"># 包含项目所需的文件和文件夹</span></span>
<span class="line">hexo init</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 安装依赖项</span></span>
<span class="line"><span class="token comment"># 将会在当前目录中继续下载一些文件</span></span>
<span class="line"><span class="token function">npm</span> <span class="token function">install</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>安装Arknights主题</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 切换到项目的目录下</span></span>
<span class="line"><span class="token builtin class-name">cd</span> <span class="token operator">&lt;</span>路径<span class="token operator">&gt;</span>/<span class="token operator">&lt;</span>项目目录名称<span class="token operator">&gt;</span>/themes</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 通过Git下载Hexo博客框架的Arknights主题文件</span></span>
<span class="line"><span class="token function">git</span> clone https://github.com/Yue-plus/hexo-theme-arknights.git themes/arknights</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 安装Arknights主题所需的依赖项</span></span>
<span class="line"><span class="token function">npm</span> <span class="token function">install</span> hexo-server hexo-browsersync hexo-renderer-pug <span class="token parameter variable">--save</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 通过hexo命令来上传文章到github平台的插件</span></span>
<span class="line"><span class="token function">npm</span> <span class="token function">install</span> hexo-deployer-git <span class="token parameter variable">--save</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>修改Hexo框架的配置文件</h3>
<p>修改Hexo配置文件</p>
<blockquote>
<ul>
<li>修改Hexo博客框架中的“_config.yml”文件。</li>
<li>修改内容如下：</li>
</ul>
</blockquote>
<div class="language-yaml line-numbers-mode" data-highlighter="prismjs" data-ext="yml"><pre><code class="language-yaml"><span class="line"><span class="token comment"># Hexo博客框架配置文件</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">#### 网站 ####</span></span>
<span class="line"><span class="token comment"># 网站标题</span></span>
<span class="line"><span class="token key atrule">title</span><span class="token punctuation">:</span> 魔术桌的个博客</span>
<span class="line"><span class="token comment"># 网站副标题</span></span>
<span class="line"><span class="token key atrule">subtitle</span><span class="token punctuation">:</span> <span class="token string">""</span></span>
<span class="line"><span class="token comment"># 网站描述</span></span>
<span class="line"><span class="token key atrule">description</span><span class="token punctuation">:</span> 「因为所以科学道理，原来如此皆有前提」</span>
<span class="line"><span class="token comment"># 网站的关键词，支持多个关键词</span></span>
<span class="line"><span class="token key atrule">keywords</span><span class="token punctuation">:</span> 机器人、人工智能、机器学习、深度学习、操作系统、编程语言</span>
<span class="line"><span class="token comment"># 我的名字</span></span>
<span class="line"><span class="token key atrule">author</span><span class="token punctuation">:</span> 魔术桌</span>
<span class="line"><span class="token comment"># 网站使用的语言</span></span>
<span class="line"><span class="token key atrule">language</span><span class="token punctuation">:</span> zh<span class="token punctuation">-</span>cn</span>
<span class="line"><span class="token comment"># 网站时区</span></span>
<span class="line"><span class="token key atrule">timezone</span><span class="token punctuation">:</span> Asia/Shanghai</span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span class="token comment">#### 网址 ####</span></span>
<span class="line"><span class="token comment"># 设置我的网址url</span></span>
<span class="line"><span class="token comment"># 网址, 必须以 http:// 或 https:// 开头</span></span>
<span class="line"><span class="token comment"># 例如，如果您使用GitHub页面，请将url设置为'https://username.github.io/project'</span></span>
<span class="line"><span class="token key atrule">url</span><span class="token punctuation">:</span> https<span class="token punctuation">:</span>//magictable.github.io</span>
<span class="line"><span class="token comment"># 网站根目录</span></span>
<span class="line"><span class="token key atrule">root</span><span class="token punctuation">:</span> </span>
<span class="line"><span class="token comment"># 文章的 永久链接 格式</span></span>
<span class="line"><span class="token key atrule">permalink</span><span class="token punctuation">:</span> title/<span class="token punctuation">:</span>title/</span>
<span class="line"><span class="token comment"># 永久链接中各部分的默认值</span></span>
<span class="line"><span class="token key atrule">permalink_defaults</span><span class="token punctuation">:</span> </span>
<span class="line"><span class="token comment"># 改写 permalink 的值来美化 URL</span></span>
<span class="line"><span class="token key atrule">pretty_urls</span><span class="token punctuation">:</span> </span>
<span class="line">  <span class="token key atrule">trailing_index</span><span class="token punctuation">:</span> <span class="token boolean important">true</span> <span class="token comment"># 是否在永久链接中保留尾部的 index.html，设置为 false 时去除</span></span>
<span class="line">  <span class="token key atrule">trailing_html</span><span class="token punctuation">:</span> <span class="token boolean important">true</span>  <span class="token comment"># 是否在永久链接中保留尾部的 .html, 设置为 false 时去除 (对尾部的 index.html无效)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">#### 目录 ####</span></span>
<span class="line"><span class="token comment"># 资源文件夹</span></span>
<span class="line"><span class="token key atrule">source_dir</span><span class="token punctuation">:</span> source</span>
<span class="line"><span class="token comment"># 公共文件夹</span></span>
<span class="line"><span class="token key atrule">public_dir</span><span class="token punctuation">:</span> public</span>
<span class="line"><span class="token comment"># 标签文件夹</span></span>
<span class="line"><span class="token key atrule">tag_dir</span><span class="token punctuation">:</span> tags</span>
<span class="line"><span class="token comment"># 归档文件夹</span></span>
<span class="line"><span class="token key atrule">archive_dir</span><span class="token punctuation">:</span> archives</span>
<span class="line"><span class="token comment"># 分类文件夹</span></span>
<span class="line"><span class="token key atrule">category_dir</span><span class="token punctuation">:</span> categories</span>
<span class="line"><span class="token comment"># 代码文件夹，位于资源文件夹下的子目录</span></span>
<span class="line"><span class="token key atrule">code_dir</span><span class="token punctuation">:</span> downloads/code</span>
<span class="line"><span class="token comment"># 国际化（i18n）文件夹</span></span>
<span class="line"><span class="token key atrule">i18n_dir</span><span class="token punctuation">:</span> <span class="token punctuation">:</span>lang</span>
<span class="line"><span class="token comment"># 跳过指定文件的渲染。匹配到的文件将会被不做改动地复制到 public 目录中。您可使用 glob 表达式来匹配路径。</span></span>
<span class="line"><span class="token key atrule">skip_render</span><span class="token punctuation">:</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span class="token comment">#### 文章 ####</span></span>
<span class="line"><span class="token comment"># 新文章的文件名称</span></span>
<span class="line"><span class="token key atrule">new_post_name</span><span class="token punctuation">:</span> <span class="token punctuation">:</span>title.md</span>
<span class="line"><span class="token comment"># 预设布局</span></span>
<span class="line"><span class="token key atrule">default_layout</span><span class="token punctuation">:</span> post</span>
<span class="line"><span class="token comment"># 把标题转换为标题框</span></span>
<span class="line"><span class="token key atrule">titlecase</span><span class="token punctuation">:</span> <span class="token boolean important">false</span></span>
<span class="line"><span class="token comment"># 在新标签中打开链接</span></span>
<span class="line"><span class="token key atrule">external_link</span><span class="token punctuation">:</span> </span>
<span class="line">  <span class="token key atrule">enable</span><span class="token punctuation">:</span> <span class="token boolean important">true</span> <span class="token comment"># 在新标签中打开链接</span></span>
<span class="line">  <span class="token key atrule">field</span><span class="token punctuation">:</span> site  <span class="token comment"># 对整个网站（site）生效或仅对文章（post）生效</span></span>
<span class="line">  <span class="token key atrule">exclude</span><span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span>  <span class="token comment"># 需要排除的域名，主域名和子域名如 www 需分别配置</span></span>
<span class="line"><span class="token comment"># 把文件名称转换为 (1) 小写或 (2) 大写，默认0不变</span></span>
<span class="line"><span class="token key atrule">filename_case</span><span class="token punctuation">:</span> <span class="token number">0</span></span>
<span class="line"><span class="token comment"># 显示草稿</span></span>
<span class="line"><span class="token key atrule">render_drafts</span><span class="token punctuation">:</span> <span class="token boolean important">true</span></span>
<span class="line"><span class="token comment"># 启用 资源文件夹</span></span>
<span class="line"><span class="token key atrule">post_asset_folder</span><span class="token punctuation">:</span> <span class="token boolean important">false</span></span>
<span class="line"><span class="token comment"># 把链接改为与根目录的相对位址</span></span>
<span class="line"><span class="token key atrule">relative_link</span><span class="token punctuation">:</span> <span class="token boolean important">false</span></span>
<span class="line"><span class="token comment"># 显示未来的文章</span></span>
<span class="line"><span class="token key atrule">future</span><span class="token punctuation">:</span> <span class="token boolean important">true</span></span>
<span class="line"><span class="token comment"># 代码块的设置</span></span>
<span class="line"><span class="token key atrule">syntax_highlighter</span><span class="token punctuation">:</span> highlight.js</span>
<span class="line"><span class="token key atrule">highlight</span><span class="token punctuation">:</span></span>
<span class="line">  <span class="token key atrule">auto_detect</span><span class="token punctuation">:</span> <span class="token boolean important">false</span></span>
<span class="line">  <span class="token key atrule">line_number</span><span class="token punctuation">:</span> <span class="token boolean important">true</span></span>
<span class="line">  <span class="token key atrule">line_threshold</span><span class="token punctuation">:</span> <span class="token number">0</span></span>
<span class="line">  <span class="token key atrule">tab_replace</span><span class="token punctuation">:</span> <span class="token string">""</span></span>
<span class="line">  <span class="token key atrule">exclude_languages</span><span class="token punctuation">:</span></span>
<span class="line">    <span class="token punctuation">-</span> example</span>
<span class="line">  <span class="token key atrule">wrap</span><span class="token punctuation">:</span> <span class="token boolean important">true</span></span>
<span class="line">  <span class="token key atrule">hljs</span><span class="token punctuation">:</span> <span class="token boolean important">false</span></span>
<span class="line"><span class="token key atrule">prismjs</span><span class="token punctuation">:</span></span>
<span class="line">  <span class="token key atrule">preprocess</span><span class="token punctuation">:</span> <span class="token boolean important">true</span></span>
<span class="line">  <span class="token key atrule">line_number</span><span class="token punctuation">:</span> <span class="token boolean important">true</span></span>
<span class="line">  <span class="token key atrule">line_threshold</span><span class="token punctuation">:</span> <span class="token number">0</span></span>
<span class="line">  <span class="token key atrule">tab_replace</span><span class="token punctuation">:</span> <span class="token string">""</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span class="token comment">#### 首页设置 ####</span></span>
<span class="line"><span class="token key atrule">index_generator</span><span class="token punctuation">:</span></span>
<span class="line">  <span class="token key atrule">path</span><span class="token punctuation">:</span> <span class="token string">""</span>               <span class="token comment"># 博客索引页的根路径。(默认值为'')</span></span>
<span class="line">  <span class="token key atrule">per_page</span><span class="token punctuation">:</span> <span class="token number">20</span>           <span class="token comment"># 每页显示的帖子。 (0 = 禁用分页)</span></span>
<span class="line">  <span class="token key atrule">order_by</span><span class="token punctuation">:</span> <span class="token punctuation">-</span>date        <span class="token comment"># 文章顺序。(默认情况下按日期降序排列)</span></span>
<span class="line">  <span class="token key atrule">pagination_dir</span><span class="token punctuation">:</span> page   <span class="token comment"># URL格式</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span class="token comment">#### 分类和标签 ####</span></span>
<span class="line"><span class="token comment"># 默认分类</span></span>
<span class="line"><span class="token key atrule">default_category</span><span class="token punctuation">:</span> uncategorized</span>
<span class="line"><span class="token comment"># 分类别名</span></span>
<span class="line"><span class="token key atrule">category_map</span><span class="token punctuation">:</span> </span>
<span class="line"><span class="token comment"># 标签别名</span></span>
<span class="line"><span class="token key atrule">tag_map</span><span class="token punctuation">:</span> </span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span class="token comment">#### 日期 / 时间格式 ####</span></span>
<span class="line"><span class="token comment"># 日期格式</span></span>
<span class="line"><span class="token key atrule">date_format</span><span class="token punctuation">:</span> YYYY<span class="token punctuation">-</span>MM<span class="token punctuation">-</span>DD</span>
<span class="line"><span class="token comment"># 时间格式</span></span>
<span class="line"><span class="token key atrule">time_format</span><span class="token punctuation">:</span> HH<span class="token punctuation">:</span>mm<span class="token punctuation">:</span>ss</span>
<span class="line"><span class="token comment"># 当 Front Matter 中没有指定 updated 时 updated 的取值，'mtime'时间, 'date'日期, 'empty'空</span></span>
<span class="line"><span class="token key atrule">updated_option</span><span class="token punctuation">:</span> mtime</span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span class="token comment">#### 包括或不包括目录和文件 ####</span></span>
<span class="line"><span class="token comment"># 包含隐藏文件（包括名称以下划线开头的文件/文件夹，* 除外）</span></span>
<span class="line"><span class="token key atrule">include</span><span class="token punctuation">:</span> </span>
<span class="line"><span class="token comment"># 排除文件或文件夹</span></span>
<span class="line"><span class="token key atrule">exclude</span><span class="token punctuation">:</span> </span>
<span class="line"><span class="token comment"># 忽略文件/文件夹</span></span>
<span class="line"><span class="token key atrule">ignore</span><span class="token punctuation">:</span> </span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span class="token comment">#### 主题 ####</span></span>
<span class="line"><span class="token comment">## Plugins（插件）: https://hexo.io/plugins/</span></span>
<span class="line"><span class="token comment">## Themes（主题）: https://hexo.io/themes/</span></span>
<span class="line"><span class="token comment"># 当前主题名称。 值为false时禁用主题</span></span>
<span class="line"><span class="token key atrule">theme</span><span class="token punctuation">:</span> arknights<span class="token punctuation">-</span>1.19.0</span>
<span class="line"><span class="token comment"># 主题的配置文件。 在这里放置的配置会覆盖主题目录下的 _config.yml 中的配置</span></span>
<span class="line"><span class="token key atrule">theme_config</span><span class="token punctuation">:</span> ./themes/arknights<span class="token punctuation">-</span>1.19.0/_config.yml</span>
<span class="line"><span class="token comment"># Meta generator 标签。 值为 false 时 Hexo 不会在头部插入该标签</span></span>
<span class="line"><span class="token key atrule">meta_generator</span><span class="token punctuation">:</span> </span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span class="token comment">#### 部署 ####</span></span>
<span class="line"><span class="token key atrule">deploy</span><span class="token punctuation">:</span></span>
<span class="line">  <span class="token key atrule">type</span><span class="token punctuation">:</span> git</span>
<span class="line">  <span class="token key atrule">repo</span><span class="token punctuation">:</span> https<span class="token punctuation">:</span>//github.com/MagicTable/magictable.github.io.git</span>
<span class="line">  <span class="token key atrule">branch</span><span class="token punctuation">:</span> main       <span class="token comment"># 分支名称</span></span>
<span class="line">  <span class="token key atrule">message</span><span class="token punctuation">:</span> 更新文章   <span class="token comment"># 自定义提交信息</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>修改Arknights主题的配置文件</h3>
<blockquote>
<ul>
<li>目录在：<code>./themes/&lt;主题&gt;/_config.yml</code></li>
<li>修改文件为如下内容，部分配置信息自行修改。</li>
</ul>
</blockquote>
<div class="language-yaml line-numbers-mode" data-highlighter="prismjs" data-ext="yml"><pre><code class="language-yaml"><span class="line"><span class="token comment"># 标签页图标</span></span>
<span class="line"><span class="token key atrule">favicon</span><span class="token punctuation">:</span></span>
<span class="line">  <span class="token key atrule">type</span><span class="token punctuation">:</span> <span class="token string">"image/x-icon"</span></span>
<span class="line">  <span class="token key atrule">href</span><span class="token punctuation">:</span> <span class="token string">"/favicon.ico"</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># canvas 动态背景</span></span>
<span class="line"><span class="token key atrule">canvas_dust</span><span class="token punctuation">:</span> <span class="token boolean important">true</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 默认颜色模式 dark / dark-only / light / light-only / auto</span></span>
<span class="line"><span class="token comment"># dark 暗色模式</span></span>
<span class="line"><span class="token comment"># light 亮色模式</span></span>
<span class="line"><span class="token comment"># light-only 锁定颜色模式</span></span>
<span class="line"><span class="token comment"># auto 跟随系统</span></span>
<span class="line"><span class="token key atrule">color</span><span class="token punctuation">:</span> auto</span>
<span class="line"></span>
<span class="line"><span class="token comment"># &lt;body&gt; 背景图片链接</span></span>
<span class="line"><span class="token key atrule">background_image</span><span class="token punctuation">:</span></span>
<span class="line">  <span class="token key atrule">dark</span><span class="token punctuation">:</span> /img/dark_backdrop.jpg <span class="token comment"># 暗色模式</span></span>
<span class="line">  <span class="token key atrule">light</span><span class="token punctuation">:</span> /img/light_backdrip.jpg <span class="token comment"># 亮色模式</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 导航栏</span></span>
<span class="line"><span class="token key atrule">menu</span><span class="token punctuation">:</span></span>
<span class="line">  <span class="token key atrule">文章动态</span><span class="token punctuation">:</span> <span class="token string">""</span></span>
<span class="line">  <span class="token key atrule">文章归档</span><span class="token punctuation">:</span> <span class="token string">"/archives/"</span></span>
<span class="line">  <span class="token key atrule">数据资产</span><span class="token punctuation">:</span> <span class="token string">"/data_asset/"</span></span>
<span class="line">  <span class="token key atrule">网站导航</span> <span class="token punctuation">:</span> <span class="token string">"/web_navigation/"</span></span>
<span class="line">  <span class="token comment"># 智能体: "/chat_agent/"</span></span>
<span class="line">  <span class="token comment"># 留言板: "/guestbook/"</span></span>
<span class="line">  <span class="token key atrule">关于</span><span class="token punctuation">:</span> <span class="token string">"/about/"</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 侧边栏</span></span>
<span class="line"><span class="token key atrule">aside</span><span class="token punctuation">:</span></span>
<span class="line">  <span class="token key atrule">in_left</span><span class="token punctuation">:</span> <span class="token boolean important">false</span> <span class="token comment"># 侧边栏在左 true / false</span></span>
<span class="line">  <span class="token key atrule">logo</span><span class="token punctuation">:</span> /img/avatar_MagicTable.png <span class="token comment">#图片链接，建议 1:1 比例</span></span>
<span class="line">  <span class="token key atrule">dr</span><span class="token punctuation">:</span> / <span class="token comment"># 侧边栏 Dr. 链接</span></span>
<span class="line">  <span class="token key atrule">icp</span><span class="token punctuation">:</span> <span class="token comment"># ICP 备案号，与版权声明相同，但会链接到 https://beian.miit.gov.cn/</span></span>
<span class="line">  <span class="token key atrule">copyright</span><span class="token punctuation">:</span> <span class="token comment"># 版权声明、备案号等，可自定义键值，不想显示则留空</span></span>
<span class="line">    <span class="token comment"># 萌:</span></span>
<span class="line">    <span class="token comment">#   萌ICP备XXXXXXXX号: https://icp.gov.moe/?keyword=XXXXXXXX</span></span>
<span class="line">    <span class="token comment"># copyright:</span></span>
<span class="line">    <span class="token comment">#   CC BY-NC-SA 4.0: https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 社交链接</span></span>
<span class="line"><span class="token comment"># 格式：链接 || 图标</span></span>
<span class="line"><span class="token comment"># 所有可用图标参考：https://fontawesome.com/icons</span></span>
<span class="line"><span class="token key atrule">social</span><span class="token punctuation">:</span></span>
<span class="line">  <span class="token comment"># GitHub: https://github.com/yourname || fab fa-github</span></span>
<span class="line">  <span class="token comment"># E-Mail: mailto:yourname@gmail.com || fa fa-envelope</span></span>
<span class="line">  <span class="token comment"># BiliBili: https://space.bilibili.com/0000000 || fa-brands fa-bilibili</span></span>
<span class="line">  <span class="token comment"># Weibo: https://weibo.com/yourname || fab fa-weibo</span></span>
<span class="line">  <span class="token comment"># Zhihu: https://www.zhihu.com/people/yourname || fab fa-zhihu</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># post 文章页面配置；true / false</span></span>
<span class="line"><span class="token key atrule">post</span><span class="token punctuation">:</span></span>
<span class="line">  <span class="token key atrule">date</span><span class="token punctuation">:</span> <span class="token boolean important">true</span>    <span class="token comment"># 是否显示发布日期</span></span>
<span class="line">  <span class="token key atrule">updated</span><span class="token punctuation">:</span> <span class="token boolean important">true</span> <span class="token comment"># 是否显示修改日期</span></span>
<span class="line">  <span class="token key atrule">excerpt</span><span class="token punctuation">:</span> <span class="token boolean important">true</span> <span class="token comment"># 是否在文章中显示摘要内容（&lt;!-- more--&gt; 以上的内容）</span></span>
<span class="line">  <span class="token key atrule">count</span><span class="token punctuation">:</span> <span class="token boolean important">true</span>   <span class="token comment"># 是否显示字数统计</span></span>
<span class="line">  <span class="token key atrule">time</span><span class="token punctuation">:</span> <span class="token boolean important">true</span>    <span class="token comment"># 是否显示预计阅读时长</span></span>
<span class="line">  <span class="token comment"># 文章末显示打赏二维码</span></span>
<span class="line">  <span class="token key atrule">reward</span><span class="token punctuation">:</span></span>
<span class="line">    <span class="token comment"># 支付宝 | Alipay: img/Alipay.png</span></span>
<span class="line">    <span class="token comment"># 微信 | Wechat: img/WeChat.png</span></span>
<span class="line">  <span class="token comment"># 以下两项依赖 hexo-wordcount，请参阅 README 开启</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 文章内目录</span></span>
<span class="line"><span class="token key atrule">toc</span><span class="token punctuation">:</span></span>
<span class="line">  <span class="token key atrule">list_number</span><span class="token punctuation">:</span> <span class="token boolean important">true</span> <span class="token comment"># true / false ；是否显示编号</span></span>
<span class="line">  <span class="token key atrule">max_depth</span><span class="token punctuation">:</span> <span class="token number">6</span>      <span class="token comment"># 最大目录深度</span></span>
<span class="line">  <span class="token key atrule">min_depth</span><span class="token punctuation">:</span> <span class="token number">1</span>      <span class="token comment"># 最小目录深度</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 归档页</span></span>
<span class="line"><span class="token key atrule">archives</span><span class="token punctuation">:</span></span>
<span class="line">  <span class="token key atrule">categories_count</span><span class="token punctuation">:</span> <span class="token boolean important">true</span> <span class="token comment"># 是否显示分类总数</span></span>
<span class="line">  <span class="token key atrule">tags_count</span><span class="token punctuation">:</span> <span class="token boolean important">true</span> <span class="token comment"># 是否显示标签总数</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 搜索</span></span>
<span class="line"><span class="token key atrule">search</span><span class="token punctuation">:</span></span>
<span class="line">  <span class="token key atrule">enable</span><span class="token punctuation">:</span> <span class="token boolean important">true</span></span>
<span class="line">  <span class="token key atrule">content</span><span class="token punctuation">:</span> <span class="token boolean important">true</span> <span class="token comment"># 若为 false，仅可搜索标题及 metadata</span></span>
<span class="line">  <span class="token key atrule">preload</span><span class="token punctuation">:</span> <span class="token boolean important">false</span> <span class="token comment"># 自动加载搜索数据</span></span>
<span class="line">  <span class="token comment"># 设为 post 时，仅可搜索 post 页面</span></span>
<span class="line">  <span class="token comment"># 设为 page 时，仅可搜索非 post 页面</span></span>
<span class="line">  <span class="token comment"># 设为 all 时，可搜索全部页面</span></span>
<span class="line">  <span class="token key atrule">field</span><span class="token punctuation">:</span> post</span>
<span class="line">  <span class="token comment"># 设为 html 时，依据 html 文件生成</span></span>
<span class="line">  <span class="token comment"># 设为 striptags 时，滤除 html tag</span></span>
<span class="line">  <span class="token comment"># 设为 raw 时，依据 markdown 源文件生成</span></span>
<span class="line">  <span class="token key atrule">format</span><span class="token punctuation">:</span> striptags</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 不蒜子</span></span>
<span class="line"><span class="token comment"># 详见 http://busuanzi.ibruce.info/</span></span>
<span class="line"><span class="token key atrule">busuanzi</span><span class="token punctuation">:</span></span>
<span class="line">  <span class="token key atrule">enable</span><span class="token punctuation">:</span> <span class="token boolean important">false</span></span>
<span class="line">  <span class="token key atrule">sitePV</span><span class="token punctuation">:</span> <span class="token boolean important">true</span> <span class="token comment"># 站点总访问量</span></span>
<span class="line">  <span class="token key atrule">siteUV</span><span class="token punctuation">:</span> <span class="token boolean important">true</span> <span class="token comment"># 站点访客数</span></span>
<span class="line">  <span class="token key atrule">pagePV</span><span class="token punctuation">:</span> <span class="token boolean important">true</span> <span class="token comment"># 页面访问量</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># Valine，评论插件</span></span>
<span class="line"><span class="token comment"># 详见 https://valine.js.org</span></span>
<span class="line"><span class="token key atrule">valine</span><span class="token punctuation">:</span></span>
<span class="line">  <span class="token key atrule">enable</span><span class="token punctuation">:</span> <span class="token boolean important">false</span></span>
<span class="line">  <span class="token key atrule">app_id</span><span class="token punctuation">:</span>      <span class="token comment"># APP ID</span></span>
<span class="line">  <span class="token key atrule">app_key</span><span class="token punctuation">:</span>     <span class="token comment"># APP KEY</span></span>
<span class="line">  <span class="token key atrule">server_url</span><span class="token punctuation">:</span>  <span class="token comment"># APP DOMAIN（LeanCloud 国际版）</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># gitalk，评论插件</span></span>
<span class="line"><span class="token comment"># 详见 https://github.com/gitalk/gitalk</span></span>
<span class="line"><span class="token key atrule">gitalk</span><span class="token punctuation">:</span></span>
<span class="line">  <span class="token key atrule">enable</span><span class="token punctuation">:</span> <span class="token boolean important">false</span></span>
<span class="line">  <span class="token key atrule">client_id</span><span class="token punctuation">:</span>      <span class="token comment"># GitHub 应用 Client ID</span></span>
<span class="line">  <span class="token key atrule">client_secret</span><span class="token punctuation">:</span>  <span class="token comment"># GitHub 应用 Client Secret</span></span>
<span class="line">  <span class="token key atrule">repo</span><span class="token punctuation">:</span>           <span class="token comment"># 用于存放评论数据的 GitHub 仓库</span></span>
<span class="line">  <span class="token key atrule">owner</span><span class="token punctuation">:</span>          <span class="token comment"># 该 GitHub 仓库所有者</span></span>
<span class="line">  <span class="token key atrule">admin</span><span class="token punctuation">:</span>          <span class="token comment"># 具有写该 GitHub 仓库权限的用户，例如: [adminA,adminB]</span></span>
<span class="line">  <span class="token key atrule">id</span><span class="token punctuation">:</span> location.pathname <span class="token comment"># (可选) 页面的唯一标识</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># Waline，评论插件</span></span>
<span class="line"><span class="token comment"># 详情: https://waline.js.org/</span></span>
<span class="line"><span class="token key atrule">waline</span><span class="token punctuation">:</span></span>
<span class="line">  <span class="token key atrule">enable</span><span class="token punctuation">:</span> <span class="token boolean important">false</span></span>
<span class="line">  <span class="token key atrule">server_url</span><span class="token punctuation">:</span> <span class="token comment">#Server_Url</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">#Artalk</span></span>
<span class="line"><span class="token comment">#详见：https://artalk.js.org/</span></span>
<span class="line"><span class="token key atrule">artalk</span><span class="token punctuation">:</span></span>
<span class="line">  <span class="token key atrule">enable</span><span class="token punctuation">:</span> <span class="token boolean important">false</span></span>
<span class="line">  <span class="token key atrule">server</span><span class="token punctuation">:</span> https<span class="token punctuation">:</span>//artalk.server.instance/ <span class="token comment"># 你的 Artalk 服务地址</span></span>
<span class="line">  <span class="token key atrule">site_name</span><span class="token punctuation">:</span> My Blog                      <span class="token comment"># 站点名称，用于区分多个站点（可选）</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 图表支持</span></span>
<span class="line"><span class="token key atrule">mermaid</span><span class="token punctuation">:</span></span>
<span class="line">  <span class="token key atrule">enable</span><span class="token punctuation">:</span> <span class="token boolean important">true</span></span>
<span class="line">  <span class="token key atrule">version</span><span class="token punctuation">:</span> <span class="token string">"10.5.0"</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># pjax 支持</span></span>
<span class="line"><span class="token key atrule">pjax</span><span class="token punctuation">:</span></span>
<span class="line">  <span class="token key atrule">enable</span><span class="token punctuation">:</span> <span class="token boolean important">true</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 公式前端渲染</span></span>
<span class="line"><span class="token key atrule">mathjax</span><span class="token punctuation">:</span></span>
<span class="line">  <span class="token key atrule">enable</span><span class="token punctuation">:</span> <span class="token boolean important">false</span></span>
<span class="line">  <span class="token key atrule">version</span><span class="token punctuation">:</span> <span class="token string">"2.6.1"</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 在 `&lt;head&gt;` 标签内引入 CSS 样式表</span></span>
<span class="line"><span class="token key atrule">stylesheets</span><span class="token punctuation">:</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 在 `&lt;body&gt;` 尾部引入 JavaScript 脚本</span></span>
<span class="line"><span class="token key atrule">scripts</span><span class="token punctuation">:</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>生成静态文件</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 请在项目目录下执行</span></span>
<span class="line"><span class="token comment"># 会在项目目录下生成一个最终渲染后的网页目录。</span></span>
<span class="line">hexo g</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>启动本地服务进行测试</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 请在项目目录下执行</span></span>
<span class="line"><span class="token comment"># 在本机中启动一个web服务，可通过给出的链接在浏览器中查看结果</span></span>
<span class="line">hexo s</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>到华为云购买域名</h3>
<ul>
<li>购买域名</li>
<li>解析域名</li>
</ul>
<h3>配置Git工具对接Github平台</h3>
<ul>
<li>提示：若没有Github平台的账户，请提前到官方网站注册。</li>
</ul>
<p>在Github平台中创建博客项目</p>
<p>设置SSH免密码登入</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 在本地生成SSH公钥</span></span>
<span class="line">ssh-keygen <span class="token parameter variable">-t</span> ed25519 <span class="token parameter variable">-C</span> <span class="token string">"Github的用户邮箱"</span></span>
<span class="line"><span class="token comment"># 后面会提示存储路径，保持默认，回车继续</span></span>
<span class="line"><span class="token comment"># 提示输入私钥密码，保持无，回车继续</span></span>
<span class="line"><span class="token comment"># 提示再次输入私钥密码，保持无，回车继续</span></span>
<span class="line"><span class="token comment"># 在`/home/用户名/.ssh/`下会生成`id_ed25519`私钥、`id_ed25519.pub`公钥</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>读取公钥文件</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">cat</span> /home/用户名/.ssh/id_ed25519.pub</span>
<span class="line"><span class="token comment"># 复制输出的公钥内容</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><p>设置Github平台账户的SSH公钥</p>
<blockquote>
<ul>
<li>用户可以通过主页右上角 「个人设置」-&gt;「安全设置」-&gt;「SSH 公钥」-&gt;「添加公钥」，添加生成的 public key 添加到当前账户中。</li>
</ul>
</blockquote>
<p>设置 Gitee的邮箱和用户名</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 配置用户名和邮箱，若用户名存在空格则需要使用双引号包裹起来。</span></span>
<span class="line"><span class="token function">git</span> config user.name <span class="token string">"【用户名】"</span></span>
<span class="line"><span class="token function">git</span> config user.email <span class="token string">"【电子邮件】"</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 保存用户名和密码</span></span>
<span class="line"><span class="token function">git</span> config credential.helper store</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>上传文章到Github平台</h3>
<blockquote>
<ul>
<li>提示：首次部署连接会要求输入Github的用户名和密码，且linux命令行端没有图像界面，请仔细输入。</li>
<li>若生成静态文件后又修改了文章或配置</li>
<li>请先执行<code>hexo clear</code>清空缓存，再从新<code>hexo g</code>生成新的静态文件，最后再上传Gitee平台。</li>
</ul>
</blockquote>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 上传文章</span></span>
<span class="line">hexo d</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h3>Github平台端项目仓库配置</h3>
<p>项目仓库必要设置</p>
<blockquote>
<ul>
<li>到Gitee平台中创建的博客项目中，进入「管理」-&gt;「基本信息」</li>
<li>仓库名称：随意无限制</li>
<li>路径：需要与用户名一致且全部小写，这样网站地址不会产生二级域名。</li>
<li>语言：JavaScript</li>
<li>是否开源：开源</li>
</ul>
</blockquote>
<p>开启Github Pages服务</p>
<blockquote>
<ul>
<li>修改自定义域名</li>
<li>教学文章：<a href="https://cloud.baidu.com/article/2760883" target="_blank" rel="noopener noreferrer">https://cloud.baidu.com/article/2760883</a></li>
</ul>
</blockquote>
<blockquote>
<ul>
<li>在hexo项目的<code>/source</code>目录下创建<code>CNAME</code>文件，该文件没有后缀名，并在里面填写自定义的域名，然后保存即可。</li>
<li>教学文章：<a href="https://blog.csdn.net/javemalloc/article/details/136669951" target="_blank" rel="noopener noreferrer">https://blog.csdn.net/javemalloc/article/details/136669951</a></li>
</ul>
</blockquote>
<p>管理小技巧</p>
<blockquote>
<ul>
<li>文件名需要规划好，不重名，清晰好记。</li>
<li>文章需要经常更新且优化同步等。</li>
</ul>
</blockquote>
<h2>项目目录结构讲解</h2>
<blockquote>
<p><strong><code>node_modules</code>目录</strong></p>
<ul>
<li>该目录是nodejs底层所需要的依赖库。</li>
</ul>
<p><strong><code>public</code>目录</strong></p>
<ul>
<li>该目录是hexo框架执行<code>hexo generate</code>命令生成的编译渲染后最终的页面文件。</li>
</ul>
<p><strong><code>.deploy_git</code>目录</strong></p>
<ul>
<li>该目录是hexo框架执行<code>hexo deploy</code>命令时生成的部署项目到github上的项目，上传时会将该目录提交到github，且该目录是有版本控制的，因此需要进行版本控制。</li>
</ul>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 人工智能</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 人工智能</source>
      <description>文章摘要： 人工智能是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学，是认知、决策、反馈的过程。 提示 人工智能领域，有很多方向，其中有很多技术，组成了很多任务，形成了很多实际应用。 我认为应该给每个东西一个定义，什么时候应该用什么，有什么优缺点，从而找到最优解。 应该多跟国内外领先的公司和技术对比，进而看到别人的...</description>
      <category>学习笔记/技术</category>
      <pubDate>Fri, 09 Aug 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 人工智能是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学，是认知、决策、反馈的过程。</p>
<!-- more -->
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<ul>
<li>人工智能领域，有很多方向，其中有很多技术，组成了很多任务，形成了很多实际应用。</li>
<li>我认为应该给每个东西一个定义，什么时候应该用什么，有什么优缺点，从而找到最优解。</li>
<li>应该多跟国内外领先的公司和技术对比，进而看到别人的优缺点，来不断提升自己。</li>
<li>机器学习或者深度学习框架就是将数据转换成二维矩阵或者三维张量（tensor）来进行计算。</li>
<li>推荐教程：<a href="https://www.bilibili.com/video/BV1Pa411X76s/?p=3&amp;spm_id_from=pageDriver&amp;vd_source=262edcbbd8e80915a7dff074a0e165a1" target="_blank" rel="noopener noreferrer">吴恩达老师的机器学习课程</a></li>
</ul>
</div>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>人工智能就像孩童，传授垃圾知识，产出垃圾结果，请认真对待与呵护。</p>
</div>
<h2>人工智能简介</h2>
<p>细分领域</p>
<ul>
<li>深度学习、计算机视觉、智能机器人、虚拟个人助理、自然语言处理—语音识别、自然语言处理—通用、实时语音翻译、情境感知计算、手势控制、视觉内容自动识别、推荐引擎等。</li>
</ul>
<h3>各个主义的实现对比</h3>
<p>知识表示</p>
<ul>
<li>符号主义：谓词逻辑、产生式系统、框架系统</li>
<li>经验主义：状态表示、特征表示</li>
<li>连接主义：语义向量、网络权重</li>
</ul>
<h3>发展阶段设想</h3>
<p>设想1</p>
<blockquote>
<p>运算智能</p>
<ul>
<li>记忆、计算的能力</li>
</ul>
<p>感知智能</p>
<ul>
<li>听觉、视觉、触觉</li>
</ul>
<p>认知智能</p>
<ul>
<li>理解、运用语言的能力。</li>
<li>掌握知识、运用知识的能力。</li>
<li>以在语言和知识基础上的推理能力。</li>
</ul>
<p>创造智能</p>
<ul>
<li>利用想象力创造出很好的作品或产品。</li>
</ul>
</blockquote>
<p>设想2</p>
<blockquote>
<p>第一阶段</p>
<ul>
<li>机器学习：智能系统使用一系列算法从经验中进行学习。</li>
</ul>
<p>第二阶段</p>
<ul>
<li>机器智能：机器使用一些列从经验中进行学习的高级算法，如，深度神经网络。</li>
</ul>
<p>第三阶段</p>
<ul>
<li>机器意识：不需要外部数据就能从经验中自学习。</li>
</ul>
</blockquote>
<p>设想3</p>
<blockquote>
<p>ANI（狭义人工智能）</p>
<ul>
<li>包含基础的、角色型任务。</li>
<li>如，Siri、Alexa、Cortana</li>
</ul>
<p>AGI（通用人工智能）</p>
<ul>
<li>包含人类水平的任务，涉及到机器的持续学习。</li>
</ul>
<p>ASI（强人工智能）</p>
<ul>
<li>比人类更聪明的机器。</li>
</ul>
</blockquote>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>神经网络是一种通用机器学习模型，是一套特定的算法集。</p>
<p>一般会说基于机器学习/深度学习的神经网络，神经网络可以说是一种算法集。</p>
</div>
<h2>技术</h2>
<h3>机器学习（ML）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href="/note/Technology-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD-%E6%8A%80%E6%9C%AF-%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0.html" target="_blank">机器学习</a></p>
<h3>深度学习（DL）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href="/note/Technology-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD-%E6%8A%80%E6%9C%AF-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0.html" target="_blank">深度学习</a></p>
<h3>自然语言理解（NLU）</h3>
<ul>
<li>发展方向：对话系统、情感分析、情感计算、数据分析、推荐系统、文本翻译、文本分类、文本纠错、文本聚类、问答系统、信息抽取、信息检索、信息推荐、信息摘要、阅读理解</li>
</ul>
<p>详细总结：<a href="/note/Technology-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD-%E6%8A%80%E6%9C%AF-%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E7%90%86%E8%A7%A3.html" target="_blank">自然语言理解</a></p>
<h3>自然语言生成（NLG）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href="/note/Technology-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD-%E6%8A%80%E6%9C%AF-%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E7%94%9F%E6%88%90.html" target="_blank">自然语言生成</a></p>
<h3>图像识别（CV）</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>语音转文本（STT）</h3>
<ul>
<li>语音识别</li>
</ul>
<p>详细总结：<a href="/note/Technology-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD-%E6%8A%80%E6%9C%AF-%E8%AF%AD%E9%9F%B3%E8%BD%AC%E6%96%87%E6%9C%AC.html" target="_blank">语音转文本</a></p>
<h3>语音转语音</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>文本转语音（TTS）</h3>
<ul>
<li>语音合成</li>
</ul>
<p>详细总结：<a href="/note/Technology-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD-%E6%8A%80%E6%9C%AF-%E6%96%87%E6%9C%AC%E8%BD%AC%E8%AF%AD%E9%9F%B3.html" target="_blank">文本转语音</a></p>
<h3>文本转图像</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>RAG</h3>
<ul>
<li>知识管理是大模型更懂企业的基础。</li>
<li>内部知识管理、外部情报分析、大数据分析、多模态处理、工作流知识管理</li>
</ul>
<p>详细总结：<a href="/note/Technology-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD-%E6%8A%80%E6%9C%AF-RAG.html" target="_blank">RAG</a></p>
<h3>大模型</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href="/note/Technology-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD-%E6%8A%80%E6%9C%AF-%E5%A4%A7%E6%A8%A1%E5%9E%8B.html" target="_blank">大模型</a></p>
<h3>提示词工程</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href="/note/Technology-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD-%E6%8A%80%E6%9C%AF-%E6%8F%90%E7%A4%BA%E8%AF%8D%E5%B7%A5%E7%A8%8B.html" target="_blank">提示词工程</a></p>
<h3>智能体（Agent）</h3>
<ul>
<li>能够调用各种工具，具有行动能力。</li>
<li>通过RAG，调用企业专业知识，更懂企业。</li>
<li>将日常重复性业务流程形成策略，实现流程自动化。</li>
<li>自主性响应，从辅助人的工具变成能够自主工作的数字员工。</li>
</ul>
<p>详细总结：<a href="/note/Technology-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD-%E6%8A%80%E6%9C%AF-%E6%99%BA%E8%83%BD%E4%BD%93.html" target="_blank">智能体</a></p>
<h3>工作流自动化</h3>
<ul>
<li>连接多个Agent和数字化系统，实现多个Agent、多个数字化系统、多个组织之间的协同。</li>
<li><strong>Skill（技能）</strong>：执行特定Task（任务）的能力，是最基本的操作单元。</li>
<li><strong>Playbook（剧本/策略）</strong>：包含一系列Task（任务）或Action（动作），针对特定场景的预定义策略和动作。</li>
<li><strong>Workflow（工作流）</strong>：描述业务流程的高级结构，包含多个<code>Skill</code>和<code>Playbook</code>。</li>
</ul>
<p>详细总结：<a href=""></a></p>
<h3>数字人</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href=""></a></p>
<h2>工序</h2>
<h3>数据标注</h3>
<ul>
<li>数据标注专注于人工智能领域，为人工智能行业提供 “数据采集、数据清洗、数据标注” 等数据类服务。</li>
</ul>
<p>详细总结：<a href="/note/Technology-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD-%E6%8A%80%E6%9C%AF-%E6%95%B0%E6%8D%AE%E6%A0%87%E6%B3%A8.html" target="_blank">数据标注</a></p>
<h2>应用</h2>
<h3>人机对话系统</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href="/note/Technology-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD-%E6%8A%80%E6%9C%AF-%E4%BA%BA%E6%9C%BA%E5%AF%B9%E8%AF%9D%E7%B3%BB%E7%BB%9F.html" target="_blank">人机对话系统</a></p>
<h2>岗位</h2>
<p>AI产品人员分工</p>
<blockquote>
<p></p>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Language（程序语言）</title>
      <link>https://blog.magictable.ha.cn/software/Language%EF%BC%88%E7%A8%8B%E5%BA%8F%E8%AF%AD%E8%A8%80%EF%BC%89.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language%EF%BC%88%E7%A8%8B%E5%BA%8F%E8%AF%AD%E8%A8%80%EF%BC%89.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language（程序语言）</source>
      <description>文章摘要： 程序语言作为计算机科学的核心要素，是人与计算机之间沟通的桥梁。它们为程序员提供了精确控制计算机行为的工具，从而简化了编程过程，使得解决复杂问题变得可能。 简介 简要说明 程序语言是一种形式化的符号系统。 用于描述计算机如何执行任务。 提供了一种与计算机交互的方式，使程序员能够精确地控制计算机的行为。 主要功能 编写程序：提供一种方式来编写指...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Fri, 09 Aug 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 程序语言作为计算机科学的核心要素，是人与计算机之间沟通的桥梁。它们为程序员提供了精确控制计算机行为的工具，从而简化了编程过程，使得解决复杂问题变得可能。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>程序语言是一种形式化的符号系统。</li>
<li>用于描述计算机如何执行任务。</li>
<li>提供了一种与计算机交互的方式，使程序员能够精确地控制计算机的行为。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>编写程序</strong>：提供一种方式来编写指令，这些指令可以被计算机理解并执行。</li>
<li><strong>数据操作</strong>：允许程序员定义、操作和处理数据。</li>
<li><strong>算法实现</strong>：使程序员能够实现各种算法来解决特定问题。</li>
<li><strong>系统控制</strong>：提供控制计算机硬件和软件行为的机制。</li>
<li><strong>抽象表示</strong>：允许用更高级的概念来表示复杂操作，提高开发效率。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>语法规则</strong>：每种编程语言都有特定的语法规则，必须严格遵守，否则程序无法正确编译或运行。</li>
<li><strong>性能考虑</strong>：不同的编程语言在执行效率上可能有很大差异，选择合适的语言需要考虑性能需求。</li>
<li><strong>可维护性</strong>：编写易于理解和维护的代码是重要的，应遵循良好的编程实践和风格指南。</li>
<li><strong>安全性</strong>：编程语言可能存在安全漏洞，需要采取措施来防止代码被恶意利用。</li>
<li><strong>兼容性</strong>：程序可能需要在不同的操作系统或硬件平台上运行，语言的选择应考虑兼容性问题。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>系统编程</strong>：如C语言，适用于编写操作系统、驱动程序等底层系统软件。</li>
<li><strong>应用软件开发</strong>：如Java、C#、Python，适用于开发桌面应用、网络应用和移动应用。</li>
<li><strong>数据处理与分析</strong>：如R、Python，适用于统计分析和大数据处理。</li>
<li><strong>网页开发</strong>：如JavaScript、HTML/CSS，适用于网页设计和前端开发。</li>
<li><strong>移动应用开发</strong>：如Swift（iOS）、Kotlin（Android），专门用于开发移动平台的应用程序。</li>
<li><strong>游戏开发</strong>：如C++、C#（使用Unity引擎），适用于高性能游戏开发。</li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>学习编程语言之前，首先要搞清楚「编程语言」这个概念。</li>
<li>我们也可以通过”语言“来控制计算机，让计算机为我们做事情，这样的语言就叫做编程语言（Programming Language）。</li>
<li>编程语言也有固定的格式和词汇，我们必须经过学习才会使用，才能控制计算机。</li>
<li>编程语言有很多种。</li>
<li>可以将不同的编程语言比喻成各国语言，为了表达同一个意思，可能使用不同的语句。（例如，表达“世界你好”的意思）</li>
<li>在编程语言中，同样的操作也可能使用不同的语句。（例如，在屏幕上显示“C语言中文网”）</li>
<li>编程语言类似于人类语言，由直观的词汇组成，我们很容易就能理解它的意思。</li>
<li>编程语言是用来控制计算机的一系列指令（Instruction），它有固定的格式和词汇（不同编程语言的格式和词汇不一样），必须遵守，否则就会出错，达不到我们的目的。</li>
<li>代码文件中具有特定含义的词汇、语句，按照特定的格式组织在一起，就构成了源代码（Source Code），也称源码或代码（Code）。</li>
<li>每个编程语言肯定规定了源代码中每个词汇、语句的含义，也规定了它们该如何组织在一起，这就是语法（Syntax）。它与我们学习英语时所说的“语法”类似，都规定了如何将特定的词汇和句子组织成能听懂的语言。</li>
<li>编写源代码的过程就叫做编程（Program）。从事编程工作的人叫程序员（Programmer）。</li>
<li>（程序员也很幽默，喜欢自嘲，经常说自己的工作辛苦，地位低，像农民一样，所以称自己是”码农“，就是写代码的农民。也有人自嘲称是”程序猿“。）</li>
</ul>
</div>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>程序是为了模拟现实世界，解决现实问题而使用计算机语言编写的一系列有序的指令集合。</li>
<li>程序语言是现代计算的核心，它的发展不断推动着技术的进步。</li>
<li>掌握程序语言不仅仅是掌握一种技能，更是理解计算机科学基础的一种方式。随着技术的不断发展，程序语言及其相关领域将继续为我们提供无尽的机会和挑战。</li>
</ul>
</div>
<h2>基础知识</h2>
<h3>主要分类</h3>
<p><strong>按难易程度分类</strong></p>
<ul>
<li><strong>机器语言</strong>：最底层的编程语言，它完全由二进制代码组成，直接对应于计算机的硬件指令。机器语言非常难以理解和编写，因为它要求程序员直接操作硬件层面的细节，如寄存器、内存地址等。</li>
<li><strong>汇编语言</strong>：汇编语言相对于机器语言来说，是一种低级语言，但它使用助记符来代替二进制代码，这使得编程变得稍微容易一些。汇编语言与机器语言有一一对应的关系，每一条汇编语言指令通常对应一条机器语言指令。</li>
<li><strong>高级语言</strong>：高级语言是更接近人类语言的编程语言，它们抽象了硬件细节，提供了更丰富的语法和库函数，使得编程变得更加容易和高效。</li>
</ul>
<p><strong>按执行方式分类</strong></p>
<ul>
<li><strong>解释型</strong>：在运行时由解释器逐行或逐段地将源代码转换成机器码并执行。这种方式不需要预先编译成目标平台的机器码，因此可以快速地开发和测试，但执行效率通常不如编译型语言。</li>
<li><strong>编译型</strong>：需要将源文件编译成平台相关的机器码文件，一次编译多次执行，执行效率高，不可跨平台。</li>
<li><strong>编译+解释</strong>：首先将源代码编译成中间代码（Intermediate Code），然后在运行时由解释器或虚拟机（VM）执行中间代码。这种方式结合了编译型和解释型语言的特点，既可以提高执行效率，又保持了一定的跨平台能力。</li>
</ul>
<h3>基本组成</h3>
<ul>
<li><strong>数据类型</strong>：定义了可以存储的数据种类（如整数、浮点数、字符、布尔值等）。</li>
<li><strong>运算符号</strong>：对数据执行操作的符号（如加、减、乘、除等）。</li>
<li><strong>控制结构</strong>：定义了程序如何执行（如顺序、选择和循环结构）。</li>
<li><strong>函数/方法</strong>：封装了一段可重用的代码。</li>
</ul>
<h3>编程范式</h3>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>演进顺序</p>
<ul>
<li>流程式 -&gt; 命令式 -&gt; 函数式 -&gt; 面向对象 -&gt; 面向接口 -&gt; 逻辑式 -&gt; 声明式</li>
</ul>
</div>
<p>流程式</p>
<ul>
<li>关注的是如何执行任务，强调的是步骤和算法。</li>
</ul>
<p>命令式</p>
<ul>
<li>偏向使用命令的方式，精确、个性化的执行。</li>
<li>程序由一系列指令组成，计算机严格按照指令顺序执行操作，强调"如何做"而非"做什么"。</li>
</ul>
<p>函数式</p>
<ul>
<li>偏向封装代码和重复使用，减少代码量。</li>
<li>关注的是不变性，强调的是纯函数和不可变性。</li>
<li>将一些多次使用的代码，封装到一个方法中调用。</li>
</ul>
<p>面向对象</p>
<ul>
<li>偏向代码分类和整合。</li>
<li>关注的是“事物”和它们之间的关系，强调的是对象和类。</li>
<li>以一个对象或事物为单位，单独封装到一个文件中来进行复用。</li>
</ul>
<p>面向接口</p>
<ul>
<li>偏向模块前期规划。</li>
<li>降低耦合度。</li>
<li>在实例化时，将使用实现类的接口作为数据类型，变的是实现类，但其数据数据类型是接口类型。</li>
</ul>
<p>逻辑式</p>
<ul>
<li>偏向交互和运行流程。</li>
<li>关注的是推理和知识表示，强调的是规则和推理。</li>
</ul>
<p>声明式</p>
<ul>
<li>偏向配置文件。</li>
<li>程序员只需描述程序的逻辑，而具体的执行步骤由系统自行决定。</li>
<li>例如：通过编写yaml配置文件，让程序读取从而得到不同的结果。</li>
<li>使用“注解”功能和语法进行编写代码。</li>
</ul>
<h3>重要概念与特性</h3>
<ul>
<li>语法与语义：语法定义了代码的结构，语义定义了代码的意义。</li>
<li>编译与解释：编译型语言（如C++）先编译成机器码执行；解释型语言（如Python）逐行翻译并执行。</li>
<li>静态与动态类型：静态类型语言（如Java）在编译时确定变量类型；动态类型语言（如Python）在运行时确定变量类型。</li>
<li>强类型与弱类型语言：强类型语言（如Python）不允许隐式类型转换；弱类型语言（如JavaScript）允许隐式转换。</li>
</ul>
<h3>字符集</h3>
<p>详细总结：<a href="/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E5%AD%97%E7%AC%A6%E9%9B%86.html" target="_blank">基础知识-字符集</a></p>
<h3>转义字符</h3>
<p>详细总结：<a href="/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E9%80%9A%E7%94%A8%E8%BD%AC%E4%B9%89%E5%AD%97%E7%AC%A6.html" target="_blank">基础知识-通用转义字符</a></p>
<h3>正则表达式</h3>
<p>详细总结：<a href="/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F.html" target="_blank">基础知识-正则表达式</a></p>
<h3>专业术语</h3>
<p>详细总结：<a href="/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E4%B8%93%E4%B8%9A%E6%9C%AF%E8%AF%AD.html" target="_blank">基础知识-专业术语</a></p>
<h3>规范</h3>
<p>详细总结：<a href="/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E8%A7%84%E8%8C%83.html" target="_blank">基础知识-规范</a></p>
<h2>脚本语言（通用）</h2>
<h3>Bash Shell</h3>
<p>详细总结：<a href="/software/Language-BashShell.html" target="_blank">Bash Shell</a></p>
<h3>Power Shell</h3>
<p>详细总结：<a href="/software/Language-PowerShell.html" target="_blank">Power Shell</a></p>
<h2>脚本语言（特殊用途）</h2>
<h3>SQL</h3>
<ul>
<li>关系型数据库交互语言</li>
</ul>
<p>详细总结：<a href="/software/Language-SQL.html" target="_blank">SQL</a></p>
<h3>MML</h3>
<ul>
<li>人机语言（Man Machine Language，MML）用一系列命令实现维护终端的各种操作。</li>
<li>通信协议比较简单，有利于实现远程维护。缺点是用户需要记忆繁杂的命令，且输出结果均为纯字符，因此使用起来不如GUI方式直观和方便。 其中，MML接口也指人机访问接口，在电信通信业务中，也指营业支撑系统中的营业系统接口。</li>
</ul>
<p>详细总结：<a href="/software/Language-MML.html" target="_blank">Language-MML</a></p>
<h3>梯形图语言（LD）</h3>
<p>==待完善==</p>
<h3>机构化文本语言（ST）</h3>
<p>==待完善==</p>
<h3>顺序功能流程图语言（SFC）</h3>
<p>==待完善==</p>
<h3>功能模块图（FBD）</h3>
<p>==待完善==</p>
<h3>指令表语言（IL）</h3>
<p>==待完善==</p>
<h2>编程语言</h2>
<h3>C++</h3>
<ul>
<li></li>
</ul>
<p>==待完善==</p>
<p>详细总结：<a href=""></a></p>
<h3>Java</h3>
<ul>
<li>做项目开发</li>
<li>本博主当前专注整理JavaSE25版本，同时JDK使用的是OpenJDK，即开源版本的Java。</li>
</ul>
<p>详细总结：<a href="/software/Language-Java.html" target="_blank">Java</a></p>
<h3>Python</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href="/software/Language-Python3.html" target="_blank">Python 3</a></p>
<h3>JavaScript</h3>
<ul>
<li></li>
</ul>
<p>详细总结：<a href="/software/Language-JavaScript.html" target="_blank">JavaScript</a></p>
<h2>特殊格式语言</h2>
<h3>HTML</h3>
<p>详细总结：<a href="/software/Language-HTML.html" target="_blank">HTML</a></p>
<h3>CSS</h3>
<p>详细总结：<a href="/software/Language-CSS.html" target="_blank">CSS</a></p>
<h3>Markdown</h3>
<p>详细总结：<a href="/software/Language-Markdown.html" target="_blank">Markdown</a></p>
<h3>LaTeX</h3>
<p>详细总结：<a href="/software/Language-LaTeX.html" target="_blank">LaTeX</a></p>
<h3>UML</h3>
<p>详细总结：<a href="/software/Language-UML.html" target="_blank">UML</a></p>
<h3>XML</h3>
<p>详细总结：<a href="/software/Language-XML.html" target="_blank">XML</a></p>
<h3>YAML</h3>
<p>详细总结：<a href="/software/Language-YAML.html" target="_blank">YAML</a></p>
<h3>JSON</h3>
<p>详细总结：<a href="/software/Language-JSON.html" target="_blank">JSON</a></p>
<h3>Properties</h3>
<p>详细总结：<a href="/software/Language-Properties.html" target="_blank">Properties</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Library - Npm - Axios</title>
      <link>https://blog.magictable.ha.cn/software/Library-Npm-Axios.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Npm-Axios.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Npm - Axios</source>
      <description>文章摘要： HTTP网络请求组件。 相关信息 外部相关文章 第三方教程 内部相关文章 简介 Axios 是一个基于 promise 网络请求库，作用于node.js 和浏览器中。 特性 从浏览器创建 XMLHttpRequests 从 node.js 创建 http 请求 支持 Promise API 拦截请求和响应 转换请求和响应数据 取消请求 超时...</description>
      <category>软件程序/代码类库</category>
      <pubDate>Tue, 06 Aug 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> HTTP网络请求组件。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li><a href="http://www.axios-js.com/zh-cn/docs/" target="_blank" rel="noopener noreferrer">第三方教程</a></li>
</ul>
<p>内部相关文章</p>
<ul>
<li></li>
</ul>
</div>
<h2>简介</h2>
<blockquote>
<ul>
<li>Axios 是一个基于 promise 网络请求库，作用于node.js 和浏览器中。</li>
</ul>
</blockquote>
<p>特性</p>
<blockquote>
<ul>
<li>从浏览器创建 XMLHttpRequests</li>
<li>从 node.js 创建 http 请求</li>
<li>支持 Promise API</li>
<li>拦截请求和响应</li>
<li>转换请求和响应数据</li>
<li>取消请求</li>
<li>超时处理</li>
<li>查询参数序列化支持嵌套项处理</li>
<li>自动将请求体序列化为：</li>
<li>
<ul>
<li>JSON (application/json)</li>
</ul>
</li>
<li>
<ul>
<li>Multipart / FormData (multipart/form-data)</li>
</ul>
</li>
<li>
<ul>
<li>URL encoded form (application/x-www-form-urlencoded)</li>
</ul>
</li>
<li>将 HTML Form 转换成 JSON 进行请求</li>
<li>自动转换JSON数据</li>
<li>获取浏览器和 node.js 的请求进度，并提供额外的信息（速度、剩余时间）</li>
<li>为 node.js 设置带宽限制</li>
<li>兼容符合规范的 FormData 和 Blob（包括 node.js）</li>
<li>客户端支持防御XSRF</li>
</ul>
</blockquote>
<h2>安装</h2>
<p>使用npm安装</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">npm</span> <span class="token function">install</span> axios</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>Axios API</h2>
<p>方法</p>
<blockquote>
<ul>
<li><code>axios(config)</code>：可以向 axios 传递相关配置来创建请求。</li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li><code>method</code>：请求方式，<code>get</code>、<code>post</code>、<code>delete</code>、<code>patch</code>、<code>put</code>。</li>
<li><code>url</code>：请求地址</li>
<li><code>data</code>：</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-JavaScript line-numbers-mode" data-highlighter="prismjs" data-ext="JavaScript"><pre><code class="language-JavaScript"><span class="line">const logon_submit = axios({</span>
<span class="line">    method: 'post',</span>
<span class="line">    url: '/user/logon',</span>
<span class="line">    data: {</span>
<span class="line">        account: "YH202408091830001000",</span>
<span class="line">        password: "123456",</span>
<span class="line">        check_code_type: 'image',</span>
<span class="line">        check_code: 'abcd',</span>
<span class="line">    }</span>
<span class="line">}).then(reactive =&gt; {</span>
<span class="line">    console.log("数据：" + reactive.data)</span>
<span class="line">})</span>
<span class="line"></span>
<span class="line"></span>
<span class="line">// 用GET请求方式获取远程图片</span>
<span class="line">axios({</span>
<span class="line">    method: 'get',</span>
<span class="line">    url: 'http://localhost:8080',</span>
<span class="line">    responseType: 'stream',</span>
<span class="line">}).then()</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>axios常用语法</h2>
<p><code>axios(config)</code>：通用/最本质的发任意类型的方式。
<code>axios(url[,config])</code>：可以指定url发<code>get请求</code>。
<code>axios.request(config)</code>：等同于<code>axios(config)</code>。
<code>axios.get(url[,config])</code>：发<code>get请求</code>。
<code>axios.post()</code></p>
]]></content:encoded>
    </item>
    <item>
      <title>Library - Npm - Pinia</title>
      <link>https://blog.magictable.ha.cn/software/Library-Npm-Pinia.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Npm-Pinia.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Npm - Pinia</source>
      <description>文章摘要： Pinia 是 Vue 的专属状态管理库，允许你跨组件或页面共享状态。 前置依赖： 简介</description>
      <category>软件程序/代码类库</category>
      <pubDate>Mon, 22 Jul 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Pinia 是 Vue 的专属状态管理库，允许你跨组件或页面共享状态。</p>
<!-- more -->
<blockquote>
<p>前置依赖：</p>
</blockquote>
<h2>简介</h2>
]]></content:encoded>
    </item>
    <item>
      <title>Library - Npm - Vue 3</title>
      <link>https://blog.magictable.ha.cn/software/Library-Npm-Vue3.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Npm-Vue3.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Npm - Vue 3</source>
      <description>文章摘要： Vue 是一款用于构建用户界面的 JavaScript 框架，偏向组合式API的总结。 前置依赖：操作系统、node.js、npm 简介 渐进式的JavaScript框架。 基于标准 HTML、CSS 和 JavaScript 构建。 提供了一套声明式的、组件化的编程模型。 声明式渲染：Vue 基于标准 HTML 拓展了一套模板语法，使得我...</description>
      <category>软件程序/代码类库</category>
      <pubDate>Mon, 22 Jul 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Vue 是一款用于构建用户界面的 JavaScript 框架，偏向组合式API的总结。</p>
<!-- more -->
<blockquote>
<p>前置依赖：操作系统、node.js、npm</p>
</blockquote>
<h2>简介</h2>
<blockquote>
<ul>
<li>渐进式的JavaScript框架。</li>
<li>基于标准 HTML、CSS 和 JavaScript 构建。</li>
<li>提供了一套声明式的、组件化的编程模型。</li>
</ul>
</blockquote>
<blockquote>
<ul>
<li><strong>声明式渲染</strong>：Vue 基于标准 HTML 拓展了一套模板语法，使得我们可以声明式地描述最终输出的 HTML 和 JavaScript 状态之间的关系。</li>
<li><strong>响应性</strong>：Vue 会自动跟踪 JavaScript 状态并在其发生变化时响应式地更新 DOM。</li>
<li>Vue 的单文件组件 （即 *.vue 文件）是一种特殊的文件格式，将Vue组件的模块、逻辑和样式封装在单个文件中。</li>
</ul>
</blockquote>
<p>适用场景</p>
<blockquote>
<ul>
<li>无需构建步骤，渐进式增强静态的 HTML</li>
<li>在任何页面中作为 Web Components 嵌入</li>
<li>单页应用 (SPA)</li>
<li>全栈 / 服务端渲染 (SSR)</li>
<li>Jamstack / 静态站点生成 (SSG)</li>
<li>开发桌面端、移动端、WebGL，甚至是命令行终端中的界面</li>
</ul>
</blockquote>
<h2>项目搭建</h2>
<blockquote>
<ul>
<li>请看Vue官方文档，此处只总结使用规范和项目总结。</li>
</ul>
</blockquote>
<ol>
<li>
<p>安装nodejs、npm</p>
</li>
<li>
<p>创建vue项目</p>
</li>
</ol>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># vue脚手架命令行工具</span></span>
<span class="line"><span class="token comment"># 网络获取项目模板</span></span>
<span class="line"><span class="token function">npm</span> create vue@latest</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 切换到项目目录下</span></span>
<span class="line"><span class="token builtin class-name">cd</span> <span class="token operator">&lt;</span>project<span class="token operator">&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 安装依赖，下载下来的项目并不包含依赖扩展，需要根据配置文件中的信息下载所需依赖扩展</span></span>
<span class="line"><span class="token function">npm</span> <span class="token function">install</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ol start="3">
<li>运行vue项目</li>
</ol>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 运行项目</span></span>
<span class="line"><span class="token function">npm</span> run dev</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><ol start="4">
<li>打包部署</li>
</ol>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">npm</span> run build</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>API 风格</h2>
<h3>选项式 API（Options API）</h3>
<p>案例展示</p>
<div class="language-html line-numbers-mode" data-highlighter="prismjs" data-ext="html"><pre><code class="language-html"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>组合式 API (Composition API)</h3>
<p>案例展示</p>
<div class="language-html line-numbers-mode" data-highlighter="prismjs" data-ext="html"><pre><code class="language-html"><span class="line"><span class="token doctype"><span class="token punctuation">&lt;!</span><span class="token doctype-tag">DOCTYPE</span> <span class="token name">html</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>html</span> <span class="token attr-name">lang</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>zh<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>head</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>meta</span> <span class="token attr-name">charset</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>UTF-8<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>meta</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>viewport<span class="token punctuation">"</span></span> <span class="token attr-name">content</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>width=device-width, initial-scale=1.0<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>title</span><span class="token punctuation">&gt;</span></span>组合式 API 案例<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>title</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>head</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>body</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>app<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>p</span><span class="token punctuation">&gt;</span></span>数字：{{count}}<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>p</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>p</span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>button</span> <span class="token attr-name"><span class="token namespace">v-on:</span>click</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>count++<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>点击<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>button</span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>p</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>body</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line"><span class="token comment">&lt;!--设置script标签的type属性为module--&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>script</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>module<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span><span class="token script"><span class="token language-javascript"></span>
<span class="line">    <span class="token comment">/*导入所需的文件*/</span></span>
<span class="line">    <span class="token keyword">import</span> <span class="token punctuation">{</span>createApp<span class="token punctuation">,</span> ref<span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">"./vue.esm-browser.js"</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">/* 根组件，createApp本质是一个组件 */</span></span>
<span class="line">    <span class="token function">createApp</span><span class="token punctuation">(</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 设置响应式数据和方法等</span></span>
<span class="line">        <span class="token function">setup</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token comment">/*定义数据*/</span></span>
<span class="line">            <span class="token keyword">const</span> count<span class="token operator">=</span> <span class="token function">ref</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line">            <span class="token comment">/*返回数据*/</span></span>
<span class="line">            <span class="token keyword">return</span> <span class="token punctuation">{</span></span>
<span class="line">                count<span class="token punctuation">,</span>  <span class="token comment">// 返回数值</span></span>
<span class="line">            <span class="token punctuation">}</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">    <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">mount</span><span class="token punctuation">(</span><span class="token string">"#app"</span><span class="token punctuation">)</span>  <span class="token comment">// 挂载实例</span></span>
<span class="line"></span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>script</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>html</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>创建vue实例</h2>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token keyword">import</span> <span class="token punctuation">{</span> createApp <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'vue'</span></span>
<span class="line"><span class="token keyword">import</span> App <span class="token keyword">from</span> <span class="token string">'./App.vue'</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">const</span> app <span class="token operator">=</span> <span class="token function">createApp</span><span class="token punctuation">(</span>App<span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line">app<span class="token punctuation">.</span><span class="token function">mount</span><span class="token punctuation">(</span><span class="token string">'#app'</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>单文件组件格式</h2>
<blockquote>
<ul>
<li>使用一种类似 HTML 格式的文件来书写 Vue 组件，它被称为单文件组件 (也被称为 *.vue 文件，英文 Single-File Components，缩写为 SFC)。</li>
<li>单文件组件会将一个组件的逻辑 (JavaScript)，模板 (HTML) 和样式 (CSS) 封装在同一个文件里。</li>
</ul>
</blockquote>
<div class="language-vue line-numbers-mode" data-highlighter="prismjs" data-ext="vue"><pre><code class="language-vue"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>script</span> <span class="token attr-name">setup</span><span class="token punctuation">&gt;</span></span><span class="token script"><span class="token language-javascript"></span>
<span class="line"><span class="token keyword">import</span> <span class="token punctuation">{</span> ref <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'vue'</span></span>
<span class="line"><span class="token keyword">const</span> count <span class="token operator">=</span> <span class="token function">ref</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span></span>
<span class="line"></span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>script</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>template</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>button</span> <span class="token attr-name">@click</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>count++<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>Count is: {{ count }}<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>button</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>template</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>style</span> <span class="token attr-name">scoped</span><span class="token punctuation">&gt;</span></span><span class="token style"><span class="token language-css"></span>
<span class="line"><span class="token selector">button</span> <span class="token punctuation">{</span></span>
<span class="line">  <span class="token property">font-weight</span><span class="token punctuation">:</span> bold<span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>style</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>单组件相关</h2>
<h3>表达式</h3>
<p>插值表达式</p>
<blockquote>
<ul>
<li><code>{{ }}</code>：里面允许“数值”和“表达式”，不能是“编程语句”。</li>
<li>定义、判断、转换</li>
</ul>
</blockquote>
<h3>响应式数据（引用类型数据）</h3>
<blockquote>
<ul>
<li>响应式数据，代表Vue能做到实时数据监听和更新。</li>
</ul>
</blockquote>
<blockquote>
<ul>
<li><code>ref(&lt;数据&gt;)</code>：定义“浅层”的响应式对象数据。</li>
<li><code>reactive(&lt;数据&gt;)</code>：定义“深层”的响应式对象数据。</li>
<li><code>toRef(&lt;响应式对象数据&gt;, &lt;对象中的某个变量名&gt;)</code>：赋值给一个新变量名，同时保持响应数据同步。</li>
</ul>
</blockquote>
<h3>计算属性（计算得到结果并保持）</h3>
<blockquote>
<ul>
<li><code>computed()</code>：该方法提供计算，缓存计算结果，带有响应式数据追踪。</li>
</ul>
</blockquote>
<h3>侦听器（数据变化）</h3>
<blockquote>
<ul>
<li>侦听一个或多个响应式数据源。</li>
<li><code>watch()</code>：在数据源变化时才会执行回调函数。</li>
<li><code>watchEffect()</code>：立即运行一个函数，同时响应式地追踪其依赖，并在依赖更改时重新执行。</li>
</ul>
</blockquote>
<h3>指令（内置方法）</h3>
<blockquote>
<ul>
<li>Vue特有且针对HTML渲染行为的预定义属性。</li>
<li>v-text、v-html、v-show、v-if、v-else、v-else-if、v-for、v-on、v-bind、v-model、v-slot、v-pre、v-once、v-memo、v-cloak</li>
</ul>
</blockquote>
<h3><code>v-on</code>的事件修饰符</h3>
<blockquote>
<ul>
<li><strong>点击事件修饰符</strong>：<code>stop</code>、<code>prevent</code>、<code>self</code>、<code>capture</code>、<code>once</code>、<code>passive</code>、<code>keyup</code>单击、<code>keydown</code>按下</li>
<li><strong>鼠标按键修饰符</strong>：<code>left</code>、<code>right</code>、<code>middle</code></li>
<li><strong>按键修饰符</strong>：<code>space</code>空格、<code>enter</code>回车、<code>tab</code>Tab、<code>shift</code>上档、<code>ctrl</code>、<code>alt</code>、<code>&lt;小写的26个字母&gt;</code></li>
<li><strong>输入框修饰符</strong>：<code>lazy</code>、<code>number</code>、<code>trin</code></li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-html line-numbers-mode" data-highlighter="prismjs" data-ext="html"><pre><code class="language-html"><span class="line"><span class="token comment">&lt;!--提示：写在HTML的标签中，作为属性存在--&gt;</span></span>
<span class="line"><span class="token comment">&lt;!--按键监听--&gt;</span></span>
<span class="line">v-on:<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>参数</span><span class="token punctuation">&gt;</span></span>.<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>值</span><span class="token punctuation">&gt;</span></span> = "<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>执行内容</span><span class="token punctuation">&gt;</span></span>"</span>
<span class="line">v-on:<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>参数</span><span class="token punctuation">&gt;</span></span>.<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>值</span><span class="token punctuation">&gt;</span></span>.<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>值</span><span class="token punctuation">&gt;</span></span> = "<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>执行内容</span><span class="token punctuation">&gt;</span></span>"</span>
<span class="line">v-on:<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>参数</span><span class="token punctuation">&gt;</span></span>.<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>值</span><span class="token punctuation">&gt;</span></span>.<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>值</span><span class="token punctuation">&gt;</span></span>.<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>值</span><span class="token punctuation">&gt;</span></span> = "<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>执行内容</span><span class="token punctuation">&gt;</span></span>"</span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>button</span> <span class="token attr-name"><span class="token namespace">v-on:</span>keyup.enter</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>&lt;执行方法&gt;<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>按钮<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>button</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>静态资源</h3>
<p>图片引用、样式绑定、外部样式表、sass、bootstrap、tailwindCss、动态样式</p>
<h2>多组件相关</h2>
<h3>引用与注册</h3>
<p>全局注册</p>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token keyword">import</span> user <span class="token keyword">from</span> <span class="token string">'./user.vue'</span></span>
<span class="line"></span>
<span class="line">app<span class="token punctuation">.</span><span class="token function">component</span><span class="token punctuation">(</span><span class="token string">'user'</span><span class="token punctuation">,</span> user<span class="token punctuation">)</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>局部注册</p>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token operator">&lt;</span>script setup<span class="token operator">&gt;</span></span>
<span class="line">    <span class="token keyword">import</span> user <span class="token keyword">from</span> <span class="token string">'./user.vue'</span></span>
<span class="line"><span class="token operator">&lt;</span><span class="token operator">/</span>script<span class="token operator">&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token operator">&lt;</span>template<span class="token operator">&gt;</span></span>
<span class="line">  <span class="token operator">&lt;</span>user<span class="token operator">&gt;</span><span class="token operator">&lt;</span><span class="token operator">/</span>user<span class="token operator">&gt;</span></span>
<span class="line"><span class="token operator">&lt;</span><span class="token operator">/</span>template<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>传递数据</h3>
<h4>父传子（浅层）</h4>
<blockquote>
<ul>
<li><code>defineProps()</code></li>
<li>定义数据：<code>变量名: {type: &lt;数据类型&gt;, required: &lt;是否必须&gt;, default: &lt;默认值&gt;}</code></li>
</ul>
</blockquote>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token function">defineProps</span><span class="token punctuation">(</span><span class="token punctuation">{</span></span>
<span class="line">    <span class="token literal-property property">变量名</span><span class="token operator">:</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token literal-property property">type</span><span class="token operator">:</span> <span class="token operator">&lt;</span>数据类型<span class="token operator">&gt;</span><span class="token punctuation">,</span> </span>
<span class="line">        <span class="token literal-property property">required</span><span class="token operator">:</span> <span class="token operator">&lt;</span>是否必须<span class="token operator">&gt;</span><span class="token punctuation">,</span> </span>
<span class="line">        <span class="token keyword">default</span><span class="token operator">:</span> <span class="token operator">&lt;</span>默认值<span class="token operator">&gt;</span></span>
<span class="line">    <span class="token punctuation">}</span><span class="token punctuation">,</span></span>
<span class="line"><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4>子传父（浅层）</h4>
<blockquote>
<ul>
<li><code>defineEmits()</code></li>
<li>定义数据</li>
</ul>
</blockquote>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token keyword">const</span> emits <span class="token operator">=</span> <span class="token function">defineEmits</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token string">"&lt;变量名&gt;"</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 为变量赋值</span></span>
<span class="line"><span class="token function">emits</span><span class="token punctuation">(</span><span class="token string">"&lt;变量名&gt;"</span><span class="token punctuation">,</span> <span class="token operator">&lt;</span>数据<span class="token operator">&gt;</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4>依赖注入（深层父传子）</h4>
<blockquote>
<ul>
<li>定义全局变量且不允许子级修改。</li>
<li>只允许“父级”向“子级”方向传值或更新值。</li>
<li></li>
</ul>
</blockquote>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token keyword">import</span> <span class="token punctuation">{</span>provide inject<span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'vue'</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 父级定义</span></span>
<span class="line"><span class="token function">provide</span><span class="token punctuation">(</span><span class="token string">"&lt;变量&gt;"</span><span class="token punctuation">,</span> 数据<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 子级使用</span></span>
<span class="line"><span class="token keyword">const</span> data <span class="token operator">=</span> <span class="token function">inject</span><span class="token punctuation">(</span><span class="token string">"&lt;变量&gt;"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4>状态管理（深层子传父）</h4>
<blockquote>
<ul>
<li>当多个组件没有关系，但使用共同的变量数据，且需要修改共同的变量数据。</li>
<li>==待完善==</li>
</ul>
</blockquote>
<h3>插槽（小功能）</h3>
<blockquote>
<ul>
<li>在当前组件的html位置预留HTML空位的行为，在被第三方引入时插入具体内容。</li>
</ul>
</blockquote>
<p>单一插槽</p>
<blockquote>
<ul>
<li><code>&lt;slot&gt;&lt;/slot&gt;</code>：仅预留一个插槽位置</li>
<li>具体使用时，直接传入内容即可。</li>
</ul>
</blockquote>
<p>具名插槽</p>
<blockquote>
<ul>
<li><code>&lt;slot name=名称&gt;&lt;/slot&gt;</code>：为插槽指定一个<code>name</code>属性。</li>
<li>具体使用时需要写在<code>&lt;template #插槽名称&gt;&lt;/template&gt;</code>中，并设置<code>#&lt;插槽名&gt;</code>。</li>
</ul>
</blockquote>
<p>条件插槽</p>
<blockquote>
<ul>
<li>具体实现类似，用于相同的元素循环生成，并提供外部传入元素。</li>
</ul>
</blockquote>
<h3>生命周期（监听器）</h3>
<blockquote>
<ul>
<li>监听组件一系列时间段时的方法。</li>
</ul>
</blockquote>
<blockquote>
<ul>
<li><code>onMounted()</code>：注册一个回调函数，在组件挂载完成后执行。</li>
<li><code>onUpdated()</code>：注册一个回调函数，在组件因为响应式状态变更而更新其 DOM 树之后调用。</li>
<li><code>onUnmounted()</code>：注册一个回调函数，在组件实例被卸载之后调用。</li>
<li><code>onBeforeMount()</code>：注册一个钩子，在组件被挂载之前被调用。</li>
<li><code>onBeforeUpdate()</code>：注册一个钩子，在组件即将因为响应式状态变更而更新其 DOM 树之前调用。</li>
<li><code>onBeforeUnmount()</code>：注册一个钩子，在组件实例被卸载之前调用。</li>
<li><code>onErrorCaptured()</code>：注册一个钩子，在捕获了后代组件传递的错误时调用。</li>
<li><code>onRenderTracked()</code>：注册一个调试钩子，当组件渲染过程中追踪到响应式依赖时调用。</li>
<li><code>onRenderTriggered()</code>：注册一个调试钩子，当响应式依赖的变更触发了组件渲染时调用。</li>
<li><code>onActivated()</code>：注册一个回调函数，若组件实例是 <code>&lt;KeepAlive&gt;</code> 缓存树的一部分，当组件被插入到 DOM 中时调用。</li>
<li><code>onDeactivated()</code>：注册一个回调函数，若组件实例是 <code>&lt;KeepAlive&gt;</code> 缓存树的一部分，当组件从 DOM 中被移除时调用。</li>
<li><code>onServerPrefetch()</code>：注册一个异步函数，在组件实例在服务器上被渲染之前调用。</li>
</ul>
</blockquote>
<h3>动态组件</h3>
<blockquote>
<ul>
<li>选择性的选择组件</li>
<li><code>&lt;component v-bind:is="&lt;布尔变量&gt; ? &lt;组件1&gt; : &lt;组件2&gt;" /&gt;</code></li>
</ul>
</blockquote>
<h3>内置组件</h3>
<blockquote>
<ul>
<li><code>&lt;Transition&gt;</code>：（过度动画效果）为单个元素或组件提供动画过渡效果。</li>
<li><code>&lt;TransitionGroup&gt;</code>：为列表中的多个元素或组件提供过渡效果。</li>
<li><code>&lt;KeepAlive&gt;</code>：（缓存组件状态）组件包裹的组件将总是被缓存、切换会时保留组件当时的操作状态。</li>
<li><code>&lt;Teleport&gt;</code>：将其插槽内容渲染到 DOM 中的另一个位置。</li>
</ul>
</blockquote>
<h2>动画</h2>
<div class="language-vue line-numbers-mode" data-highlighter="prismjs" data-ext="vue"><pre><code class="language-vue"><span class="line">// 组件刚开始离开</span>
<span class="line">.v-leave-active {</span>
<span class="line">}</span>
<span class="line"></span>
<span class="line">// 组件离开结束</span>
<span class="line">.v-leave-to {</span>
<span class="line">}</span>
<span class="line"></span>
<span class="line">// 组件刚开始进入</span>
<span class="line">.v-enter-active {</span>
<span class="line">}</span>
<span class="line"></span>
<span class="line">// 组件进入完成</span>
<span class="line">.v-enter-to {</span>
<span class="line">}</span>
<span class="line"></span>
<span class="line">// 正在进入和离开</span>
<span class="line">.v-leave-active, .v-enter-active {</span>
<span class="line">}</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>项目打包部署方案</h2>
<p>配置文件名<code>vue-config.js</code></p>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token comment">// 项目部署的基本路径</span></span>
<span class="line"><span class="token literal-property property">publicPath</span><span class="token operator">:</span> process<span class="token punctuation">.</span>env<span class="token punctuation">.</span><span class="token constant">NODE_ENV</span> <span class="token operator">===</span> <span class="token string">"production"</span> <span class="token operator">?</span> <span class="token string">"./"</span> <span class="token operator">:</span> <span class="token string">""</span><span class="token punctuation">,</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 项目打包的根目录</span></span>
<span class="line"><span class="token literal-property property">outputDir</span><span class="token operator">:</span> <span class="token string">"dist"</span><span class="token punctuation">,</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 项目打包的静态资源存放目录</span></span>
<span class="line"><span class="token literal-property property">assetsDir</span><span class="token operator">:</span> <span class="token string">""</span><span class="token punctuation">,</span></span>
<span class="line"><span class="token comment">// 项目打包的index.html输出路径，默认“index.html”</span></span>
<span class="line"><span class="token literal-property property">indexPath</span><span class="token operator">:</span> <span class="token string">"index.html"</span><span class="token punctuation">,</span></span>
<span class="line"><span class="token comment">// 项目打包是否生成js的source map 调试包，默认 true，生产部署设置为false</span></span>
<span class="line"><span class="token literal-property property">productionSourceMap</span><span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span></span>
<span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>博主提示</h2>
<blockquote>
<p>推荐详细教程请前往Vue官网查看文档：</p>
<ul>
<li><a href="https://cn.vuejs.org/guide/introduction.html" target="_blank" rel="noopener noreferrer">官方教学文档</a></li>
<li><a href="https://cn.vuejs.org/api/" target="_blank" rel="noopener noreferrer">官方API文档</a></li>
<li>vue3项目目录结构和文件说明：<a href="https://www.bilibili.com/video/BV1QN4y1k76o/?p=5&amp;spm_id_from=pageDriver&amp;vd_source=262edcbbd8e80915a7dff074a0e165a1" target="_blank" rel="noopener noreferrer">b站教程</a></li>
</ul>
</blockquote>
<p>第三方网站教程：<a href="https://www.cnblogs.com/xiaobaicai12138/p/18110179" target="_blank" rel="noopener noreferrer">vite创建爱女vue3项目</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Library - Npm - Vue Router 4</title>
      <link>https://blog.magictable.ha.cn/software/Library-Npm-VueRouter4.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Npm-VueRouter4.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Npm - Vue Router 4</source>
      <description>文章摘要： Vue Router 是 Vue.js 的官方路由。它与 Vue.js 核心深度集成，让用 Vue.js 构建单页应用变得轻而易举。 官方文档网站 路由机制 安装 流程 配置独立的路由文件 创建路由 配置路由规则 注册路由子对象 导入路由到Vue中，并通过app挂载到DOM节点上 指定路由显示入口 &amp;lt;router-view&amp;gt;标签指定路由组件...</description>
      <category>软件程序/代码类库</category>
      <pubDate>Mon, 22 Jul 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Vue Router 是 Vue.js 的官方路由。它与 Vue.js 核心深度集成，让用 Vue.js 构建单页应用变得轻而易举。</p>
<!-- more -->
<blockquote>
<ul>
<li><a href="https://router.vuejs.org/zh/" target="_blank" rel="noopener noreferrer">官方文档网站</a></li>
</ul>
</blockquote>
<h2>路由机制</h2>
<p>安装</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">npm</span> <span class="token function">install</span> vue-router</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>流程</h2>
<ol>
<li>配置独立的路由文件</li>
</ol>
<ul>
<li>创建路由</li>
<li>配置路由规则</li>
<li>注册路由子对象</li>
<li></li>
</ul>
<ol start="2">
<li>
<p>导入路由到Vue中，并通过app挂载到DOM节点上</p>
</li>
<li>
<p>指定路由显示入口</p>
</li>
</ol>
<ul>
<li><code>&lt;router-view&gt;</code>标签指定路由组件显示的位置</li>
<li>使用<code>&lt;router-link&gt;</code>来代替<code>&lt;a&gt;</code>标签，实现页面更新/跳转</li>
</ul>
<p>标签</p>
<blockquote>
<ul>
<li><code>&lt;router-view&gt;</code>：页面添加位置</li>
<li><code>&lt;router-link&gt;</code>：触发事件标签</li>
</ul>
</blockquote>
<h2>路由概念和机制</h2>
<h2>路由配置</h2>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token keyword">import</span> <span class="token punctuation">{</span>createRouter<span class="token punctuation">,</span> createWebHistory<span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'vue-router'</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 创建路由，配置“页面”与“路由对象”的映射关系</span></span>
<span class="line"><span class="token keyword">const</span> router <span class="token operator">=</span> <span class="token function">createRouter</span><span class="token punctuation">(</span><span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 配置路由规则</span></span>
<span class="line">    <span class="token literal-property property">history</span><span class="token operator">:</span> <span class="token function">createWebHistory</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token comment">// 设置前进后退的规则，使用浏览器常规的方式控制历史</span></span>
<span class="line">    <span class="token comment">// 注册路由对象和路由规则</span></span>
<span class="line">    <span class="token literal-property property">routes</span><span class="token operator">:</span> <span class="token punctuation">[</span></span>
<span class="line">        <span class="token punctuation">{</span></span>
<span class="line">            <span class="token literal-property property">path</span><span class="token operator">:</span> <span class="token string">'/login'</span><span class="token punctuation">,</span></span>
<span class="line">            <span class="token literal-property property">name</span><span class="token operator">:</span> <span class="token string">'login'</span><span class="token punctuation">,</span></span>
<span class="line">            <span class="token function-variable function">component</span><span class="token operator">:</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token keyword">import</span> <span class="token punctuation">(</span><span class="token string">'../view/Login.vue'</span><span class="token punctuation">)</span><span class="token punctuation">,</span></span>
<span class="line">            <span class="token literal-property property">meta</span><span class="token operator">:</span> <span class="token punctuation">{</span><span class="token string-property property">'title'</span><span class="token operator">:</span> <span class="token string">'注册界面'</span><span class="token punctuation">}</span></span>
<span class="line">        <span class="token punctuation">}</span><span class="token punctuation">,</span></span>
<span class="line">        <span class="token punctuation">{</span></span>
<span class="line">            <span class="token literal-property property">path</span><span class="token operator">:</span> <span class="token string">'/logon'</span><span class="token punctuation">,</span></span>
<span class="line">            <span class="token literal-property property">name</span><span class="token operator">:</span> <span class="token string">'logon'</span><span class="token punctuation">,</span></span>
<span class="line">            <span class="token function-variable function">component</span><span class="token operator">:</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token keyword">import</span> <span class="token punctuation">(</span><span class="token string">'../view/Logon.vue'</span><span class="token punctuation">)</span><span class="token punctuation">,</span></span>
<span class="line">            <span class="token literal-property property">meta</span><span class="token operator">:</span> <span class="token punctuation">{</span><span class="token string-property property">'title'</span><span class="token operator">:</span> <span class="token string">'登录界面'</span><span class="token punctuation">}</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">    <span class="token punctuation">]</span></span>
<span class="line"><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">export</span> <span class="token keyword">default</span> router<span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>页面跳转</h3>
<blockquote>
<ul>
<li>html中使用<code>&lt;router-link&gt;</code>进行跳转。</li>
</ul>
</blockquote>
<div class="language-html line-numbers-mode" data-highlighter="prismjs" data-ext="html"><pre><code class="language-html"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>router-link</span> <span class="token attr-name">to</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>../view/Logon.vue<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>跳转按钮<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>router-link</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>路由缓存</h3>
<h3>路由重定向</h3>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token punctuation">{</span></span>
<span class="line">    <span class="token literal-property property">path</span><span class="token operator">:</span> <span class="token string">'/'</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token literal-property property">redirect</span><span class="token operator">:</span> <span class="token string">'/'</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>路由404</h3>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token punctuation">{</span></span>
<span class="line">    <span class="token literal-property property">path</span><span class="token operator">:</span> <span class="token string">'/:pathMatch(.*)'</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token literal-property property">redirect</span><span class="token operator">:</span> <span class="token string">'/home'</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>子路由</h3>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token punctuation">{</span></span>
<span class="line">    <span class="token literal-property property">path</span><span class="token operator">:</span> <span class="token string">'/logon'</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token literal-property property">name</span><span class="token operator">:</span> <span class="token string">'logon'</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token function-variable function">component</span><span class="token operator">:</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token keyword">import</span> <span class="token punctuation">(</span><span class="token string">'../view/Logon.vue'</span><span class="token punctuation">)</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token literal-property property">meta</span><span class="token operator">:</span> <span class="token punctuation">{</span><span class="token string-property property">'title'</span><span class="token operator">:</span> <span class="token string">'登录界面'</span><span class="token punctuation">}</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token comment">// 子路由/二级路由</span></span>
<span class="line">    <span class="token literal-property property">children</span><span class="token operator">:</span> <span class="token punctuation">[</span></span>
<span class="line">        <span class="token literal-property property">path</span><span class="token operator">:</span> <span class="token string">'/logon/a1'</span><span class="token punctuation">,</span></span>
<span class="line">        <span class="token literal-property property">name</span><span class="token operator">:</span> <span class="token string">'a1'</span><span class="token punctuation">,</span></span>
<span class="line">        <span class="token function-variable function">component</span><span class="token operator">:</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token keyword">import</span> <span class="token punctuation">(</span><span class="token string">'../view/a1.vue'</span><span class="token punctuation">)</span><span class="token punctuation">,</span></span>
<span class="line">        <span class="token literal-property property">meta</span><span class="token operator">:</span> <span class="token punctuation">{</span><span class="token string-property property">'title'</span><span class="token operator">:</span> <span class="token string">'登录界面a1'</span><span class="token punctuation">}</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token punctuation">]</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>同组件多路由容器</h3>
<p>html方面</p>
<blockquote>
<ul>
<li>为标签添加<code>name</code>属性</li>
</ul>
</blockquote>
<div class="language-html line-numbers-mode" data-highlighter="prismjs" data-ext="html"><pre><code class="language-html"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>router-view</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>topBox02<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>router-view</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p>js方面</p>
<blockquote>
<ul>
<li>使用<code>components</code>参数来配置。</li>
</ul>
</blockquote>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token keyword">import</span> <span class="token punctuation">{</span>createRouter<span class="token punctuation">,</span> createWebHistory<span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'vue-router'</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 创建路由，配置“页面”与“路由对象”的映射关系</span></span>
<span class="line"><span class="token keyword">const</span> router <span class="token operator">=</span> <span class="token function">createRouter</span><span class="token punctuation">(</span><span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 配置路由规则</span></span>
<span class="line">    <span class="token literal-property property">history</span><span class="token operator">:</span> <span class="token function">createWebHistory</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token comment">// 设置前进后退的规则，使用浏览器常规的方式控制历史</span></span>
<span class="line">    <span class="token comment">// 注册路由对象和路由规则</span></span>
<span class="line">    <span class="token literal-property property">routes</span><span class="token operator">:</span> <span class="token punctuation">[</span></span>
<span class="line">        <span class="token punctuation">{</span></span>
<span class="line">            <span class="token literal-property property">path</span><span class="token operator">:</span> <span class="token string">'/login'</span><span class="token punctuation">,</span></span>
<span class="line">            <span class="token literal-property property">name</span><span class="token operator">:</span> <span class="token string">'login'</span><span class="token punctuation">,</span></span>
<span class="line">            <span class="token literal-property property">components</span><span class="token operator">:</span> <span class="token punctuation">{</span></span>
<span class="line">                <span class="token function-variable function">topBox02</span><span class="token operator">:</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token keyword">import</span> <span class="token punctuation">(</span><span class="token string">'../view/Login.vue'</span><span class="token punctuation">)</span><span class="token punctuation">,</span></span>
<span class="line">            <span class="token punctuation">}</span><span class="token punctuation">,</span></span>
<span class="line">            <span class="token literal-property property">meta</span><span class="token operator">:</span> <span class="token punctuation">{</span><span class="token string-property property">'title'</span><span class="token operator">:</span> <span class="token string">'注册界面'</span><span class="token punctuation">}</span></span>
<span class="line">        <span class="token punctuation">}</span><span class="token punctuation">,</span></span>
<span class="line">        <span class="token punctuation">{</span></span>
<span class="line">            <span class="token literal-property property">path</span><span class="token operator">:</span> <span class="token string">'/logon'</span><span class="token punctuation">,</span></span>
<span class="line">            <span class="token literal-property property">name</span><span class="token operator">:</span> <span class="token string">'logon'</span><span class="token punctuation">,</span></span>
<span class="line">            <span class="token literal-property property">components</span><span class="token operator">:</span> <span class="token punctuation">{</span></span>
<span class="line">                <span class="token function-variable function">topBox02</span><span class="token operator">:</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token keyword">import</span> <span class="token punctuation">(</span><span class="token string">'../view/Logon.vue'</span><span class="token punctuation">)</span><span class="token punctuation">,</span></span>
<span class="line">            <span class="token punctuation">}</span><span class="token punctuation">,</span></span>
<span class="line">            <span class="token literal-property property">meta</span><span class="token operator">:</span> <span class="token punctuation">{</span><span class="token string-property property">'title'</span><span class="token operator">:</span> <span class="token string">'登录界面'</span><span class="token punctuation">}</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">    <span class="token punctuation">]</span></span>
<span class="line"><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">export</span> <span class="token keyword">default</span> router<span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>路由占位参数（动态参数）</h3>
<p>js方面</p>
<blockquote>
<ul>
<li>设置<code>props</code>参数为true。</li>
<li>这将解析url中带有<code>:</code>的参数。</li>
</ul>
</blockquote>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token punctuation">{</span></span>
<span class="line">    <span class="token literal-property property">path</span><span class="token operator">:</span> <span class="token string">'/logon'</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token literal-property property">name</span><span class="token operator">:</span> <span class="token string">'logon'</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token function-variable function">component</span><span class="token operator">:</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token keyword">import</span> <span class="token punctuation">(</span><span class="token string">'../view/Logon.vue'</span><span class="token punctuation">)</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token literal-property property">meta</span><span class="token operator">:</span> <span class="token punctuation">{</span><span class="token string-property property">'title'</span><span class="token operator">:</span> <span class="token string">'登录界面'</span><span class="token punctuation">}</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token comment">// 子路由/二级路由</span></span>
<span class="line">    <span class="token literal-property property">children</span><span class="token operator">:</span> <span class="token punctuation">[</span></span>
<span class="line">        <span class="token literal-property property">path</span><span class="token operator">:</span> <span class="token string">'/logon/a1/:id'</span><span class="token punctuation">,</span></span>
<span class="line">        <span class="token literal-property property">name</span><span class="token operator">:</span> <span class="token string">'a1'</span><span class="token punctuation">,</span></span>
<span class="line">        <span class="token function-variable function">component</span><span class="token operator">:</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token keyword">import</span> <span class="token punctuation">(</span><span class="token string">'../view/a1.vue'</span><span class="token punctuation">)</span><span class="token punctuation">,</span></span>
<span class="line">        <span class="token literal-property property">meta</span><span class="token operator">:</span> <span class="token punctuation">{</span><span class="token string-property property">'title'</span><span class="token operator">:</span> <span class="token string">'登录界面a1'</span><span class="token punctuation">}</span><span class="token punctuation">,</span></span>
<span class="line">        <span class="token literal-property property">props</span><span class="token operator">:</span> <span class="token boolean">true</span></span>
<span class="line">    <span class="token punctuation">]</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>编程式路由</h2>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token operator">&lt;</span>script setup<span class="token operator">&gt;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token punctuation">{</span>useRouter<span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'vue-router'</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">const</span> router <span class="token operator">=</span> <span class="token function">useRouter</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">function</span> <span class="token function">toUserData</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 跳转页面</span></span>
<span class="line">    router<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span><span class="token punctuation">{</span><span class="token literal-property property">name</span><span class="token operator">:</span> <span class="token string">'userData'</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token comment">// 这里的`name`是路由配置中的`name`参数</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"><span class="token operator">&lt;</span><span class="token operator">/</span>script<span class="token operator">&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token operator">&lt;</span>template<span class="token operator">&gt;</span></span>
<span class="line">    <span class="token operator">&lt;</span>button v<span class="token operator">-</span>on<span class="token operator">:</span>click<span class="token operator">=</span><span class="token string">"toUserData"</span><span class="token operator">&gt;</span>执行跳转页面<span class="token operator">&lt;</span><span class="token operator">/</span>button<span class="token operator">&gt;</span></span>
<span class="line"><span class="token operator">&lt;</span><span class="token operator">/</span>template<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>路由守卫</h2>
<blockquote>
<ul>
<li>路由守卫用于全局路由拦截逻辑处理，用户登录拦截、权限拦截等。</li>
</ul>
</blockquote>
<h3>机制说明</h3>
<blockquote>
<ul>
<li>全局前置拦截：<code>beforeEach((to, from, next) =&gt; {})</code>，路由还未跳转。</li>
<li>全局后置拦截：<code>afterEach((to, from, next) =&gt; {})</code>，路由已跳转。</li>
<li>单个路由拦截：<code>beforeEnter:(to, from, next) =&gt; {}</code>，配置在路由对象。</li>
</ul>
</blockquote>
<p>参数介绍</p>
<blockquote>
<ul>
<li><code>to</code>：表示当前去的路由对象。</li>
<li><code>from</code>：表示当前所在页面对应的路由对象。</li>
<li><code>next({路由对象})</code>：函数，表示跳转到指定参数路由、无参时表示放行。</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token comment">// 路由守卫</span></span>
<span class="line">router<span class="token punctuation">.</span><span class="token function">beforeEach</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">to<span class="token punctuation">,</span> from<span class="token punctuation">,</span> next</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 判断是否有`title`值，且`isPage`为true</span></span>
<span class="line">    <span class="token keyword">if</span> <span class="token punctuation">(</span>to<span class="token punctuation">.</span>meta<span class="token punctuation">.</span>title<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 更新页面菜单栏标题</span></span>
<span class="line">        document<span class="token punctuation">.</span>title <span class="token operator">=</span> to<span class="token punctuation">.</span>meta<span class="token punctuation">.</span>title<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 放行</span></span>
<span class="line">    <span class="token function">next</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Library - Maven - SpringFramework 6</title>
      <link>https://blog.magictable.ha.cn/software/Library-Maven-SpringFramework6.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Maven-SpringFramework6.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Maven - SpringFramework 6</source>
      <description>文章摘要： 基于Java实现MVC模型的轻量级Web框架。 注释 Spring框架设计思想 使用对象时不仅可以直接从IoC容器中获取bean对象，并且DI绑定好了所需的依赖关系。 通过xml配置文件的方式来降低耦合度。 通过注解的方式来减少配置文件中的数量。 简介 简要说明 SpringFramework是一种基于Java实现MVC模型的轻量级Web框...</description>
      <category>软件程序/代码类库</category>
      <pubDate>Wed, 17 Jul 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 基于Java实现MVC模型的轻量级Web框架。</p>
<!-- more -->
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p><strong>Spring框架设计思想</strong></p>
<ul>
<li>使用对象时不仅可以直接从IoC容器中获取bean对象，并且DI绑定好了所需的依赖关系。</li>
<li>通过<strong>xml配置文件</strong>的方式来降低耦合度。</li>
<li>通过<strong>注解</strong>的方式来减少配置文件中的数量。</li>
</ul>
</div>
<h2>简介</h2>
<p>简要说明</p>
<blockquote>
<ul>
<li>SpringFramework是一种基于Java实现MVC模型的轻量级Web框架。</li>
<li>Spring 是一个轻量级Java开发框架。</li>
<li>目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。</li>
<li>核心特性：依赖注入（DI）、面向切片编程（AOP）。</li>
<li>Spring是一个IOC（控制反转）和AOP（面向切片编程）的容器框架。容器用于管理应用对象的生命周期。</li>
</ul>
</blockquote>
<p>主要功能</p>
<blockquote>
<ul>
<li><strong>更新Java版本支持</strong>：将支持Java 17或更高版本，利用最新的语言特性和改进。</li>
<li><strong>模块化</strong>：进一步模块化框架，减少依赖，提高可维护性。</li>
<li><strong>响应式编程</strong>：继续增强对响应式编程的支持，包括对Reactor和WebFlux的改进。</li>
<li><strong>Web应用开发</strong>：增强Spring MVC和Spring WebFlux，以支持现代Web应用的需求。</li>
<li><strong>集成支持</strong>：改进对各种数据源、消息队列和第三方服务的集成。</li>
<li><strong>云原生支持</strong>：更好地支持云原生应用开发，包括服务发现、配置管理、健康检查等。</li>
<li><strong>性能优化</strong>：框架层面的性能优化，提高应用性能。</li>
<li><strong>安全性增强</strong>：更新和改进Spring Security，以应对最新的安全威胁。</li>
</ul>
</blockquote>
<p>注意事项</p>
<blockquote>
<ul>
<li><strong>兼容性</strong>：升级到Spring Framework 6可能需要修改现有代码，以适应新的API和更改。</li>
<li><strong>依赖升级</strong>：依赖的第三方库可能需要升级以兼容Spring Framework 6。</li>
<li><strong>学习曲线</strong>：开发者可能需要学习新的特性和最佳实践。</li>
<li><strong>测试和验证</strong>：在迁移到新版本之前，应充分测试应用以确保稳定性。</li>
</ul>
</blockquote>
<p>适用场景</p>
<blockquote>
<ul>
<li><strong>新项目开发</strong>：适用于开发新的Java企业级应用，特别是需要利用最新Java特性的项目。</li>
<li><strong>云原生应用</strong>：适用于构建云原生应用，利用Spring Framework 6的云原生特性。</li>
<li><strong>响应式系统</strong>：适用于构建响应式系统，如使用WebFlux的响应式Web应用。</li>
<li><strong>微服务架构</strong>：适用于微服务架构，Spring Framework 6提供了更好的服务化和集成支持。</li>
<li><strong>系统升级</strong>：适用于需要升级旧版Spring应用以利用新特性的项目。</li>
</ul>
</blockquote>
<h2>Maven坐标</h2>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- Spring 框架的基础功能 --&gt;</span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.springframework<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>spring-context<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>6.1.15<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- 请替换为实际的版本号 --&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>核心概念</h2>
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>控制反转IOC和Spring容器是一个东西</p>
</div>
<h3>Spring容器</h3>
<blockquote>
<ul>
<li><code>org.springframework.context.ApplicationContext</code>是Spring容器实现的顶层接口，</li>
<li>负责实例化、配置和关联Bean对象。</li>
<li>配置元数据可以使用XML、Java注解、Java配置类实现。</li>
<li>处理应用程序的对象与其他对象之间的相互依赖关系。</li>
</ul>
</blockquote>
<p>详细总结：<a href="/software/Library-Maven-SpringFramework6-spring%E5%AE%B9%E5%99%A8.html" target="_blank">Library-Maven-SpringFramework6-spring容器</a></p>
<p></p>
<h3>Bean的生命周期步骤</h3>
<p>详细总结：<a href="/software/Library-Maven-SpringFramework6-Bean%E7%9A%84%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F.html" target="_blank">Library-Maven-SpringFramework6-Bean的生命周期</a></p>
<h3>控制反转</h3>
<blockquote>
<ul>
<li>IoC（Inversion of Control）控制反转，对象的创建控制权由程序外部提供。</li>
<li>SpringFramework 提供了一个容器，称为<code>IoC容器</code>。</li>
<li>IoC容器负责对象的创建，初始化等一些列工作。</li>
<li>IoC容器中被管理的对象被称为<code>Bean</code>。</li>
</ul>
</blockquote>
<h3>推断构造方法底层原理</h3>
<h3>依赖注入</h3>
<blockquote>
<ul>
<li>DI（Dependency Injection）依赖注入</li>
<li>对IoC容器中建立<code>Bean</code>与<code>Bean</code>之间依赖关系的过程，被称为<code>依赖注入</code>。</li>
</ul>
</blockquote>
<h3>初始化前、初始化、初始化后</h3>
<h3>AOP底层实现</h3>
<h3>事务及传播机制</h3>
<h3><code>Configuration</code>注解底层原理</h3>
<h3>Spring6核心新特性介绍</h3>
<h2>配置属性</h2>
<h3>YAML配置文件</h3>
<p>详细总结：<a href=""></a></p>
<h3>XML配置文件</h3>
<p>详细总结：<a href="/software/Library-Maven-SpringFramework6-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6-XML%E6%96%87%E4%BB%B6.html" target="_blank">Library-Maven-SpringFramework6-配置文件-XML文件</a></p>
<h2>注解</h2>
<p>详细总结：<a href="/software/Library-Maven-SpringFramework6-%E6%B3%A8%E8%A7%A3.html" target="_blank">Library-Maven-SpringFramework6-注解</a></p>
<h2>方法</h2>
<h3>通过接口来自定义bean的特性</h3>
<p>初始化回调函数</p>
<blockquote>
<ul>
<li>功能：允许bean在所有的必要的依赖配置完成后执行bean的初始化。在实例化bean之前执行该方法。</li>
<li>继承<code>org.springframework.beans.factory.InitializingBean</code>接口。</li>
<li>重写<code>afterPropertiesSet()</code>方法。</li>
</ul>
</blockquote>
<p>销毁回调函数</p>
<blockquote>
<ul>
<li>功能：Bean能让容器通过回调来销毁bean所引用的资源。在销毁bean之后执行该方法。</li>
<li>实现<code>org.springframework.beans.factory.DisposableBean 接口</code>接口。</li>
<li>重写<code>destroy()</code>方法。</li>
</ul>
</blockquote>
<h3>获取Spring的IoC容器</h3>
<p>实例化IoC容器对象，并加载所有bean到容器中</p>
<blockquote>
<ul>
<li><code>ApplicationContext</code>，spring的顶层核心接口，一般用于当作数据类型（数据类型向上转型）</li>
</ul>
</blockquote>
<p>方法名</p>
<blockquote>
<ul>
<li><code>new ClassPathXmlApplicationContext()</code>，根据项目路径的xml配置文件，来实例化spring容器</li>
<li><code>new FileSystemXmlApplicationContext()</code>，根据磁盘路径的xml配置，来实例化spring容器</li>
<li><code>new AnnotationConfigApplicationContext()</code>，根据java配置类，来实例化spring容器</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 实例化IoC容器对象，并加载所有bean到容器中</span></span>
<span class="line"><span class="token class-name">ApplicationContext</span> ioc <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ClassPathXmlApplicationContext</span><span class="token punctuation">(</span><span class="token string">"spring-ioc.xml"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h3>获取IoC容器中的bean对象</h3>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 获取bean对象</span></span>
<span class="line"><span class="token comment">// 写法一，通过“class”在IoC容器中查找</span></span>
<span class="line"><span class="token class-name">User</span> bean <span class="token operator">=</span> ioc<span class="token punctuation">.</span><span class="token function">getBean</span><span class="token punctuation">(</span><span class="token class-name">User</span><span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token comment">// 写法二，通过“id或name”在IoC容器中查找</span></span>
<span class="line"><span class="token class-name">User</span> bean <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token class-name">User</span><span class="token punctuation">)</span>ioc<span class="token punctuation">.</span><span class="token function">getBean</span><span class="token punctuation">(</span><span class="token string">"user"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token comment">// 写法三，通过“id或class”在IoC容器中查找</span></span>
<span class="line"><span class="token class-name">User</span> bean <span class="token operator">=</span> ioc<span class="token punctuation">.</span><span class="token function">getBean</span><span class="token punctuation">(</span><span class="token string">"user"</span><span class="token punctuation">,</span> <span class="token class-name">User</span><span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>表达式</h2>
<blockquote>
<ul>
<li><code>${&lt;bean对象&gt;}</code>：花括号<code>{}</code>里面写注册（添加）到IoC容器中的对象，例如：<code>project.name</code>来获取对象的name属性。</li>
<li><code>#()</code>：</li>
</ul>
</blockquote>
<h2>IoC容器的配置方案</h2>
<h3>基于XML文件</h3>
<blockquote>
<ul>
<li>定义XML配置文件、声明Bean信息，交给</li>
</ul>
</blockquote>
<p>配置spring的IoC容器的xml配置文件</p>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token prolog">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">&lt;!--添加的约束，配置文件的标签不能随意命名--&gt;</span></span>
<span class="line"><span class="token comment">&lt;!--添加命名空间--&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>beans</span> <span class="token attr-name">xmlns</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>http://www.springframework.org/schema/beans<span class="token punctuation">"</span></span></span>
<span class="line">       <span class="token attr-name"><span class="token namespace">xmlns:</span>xsi</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>http://www.w3.org/2001/XMLSchema-instance<span class="token punctuation">"</span></span></span>
<span class="line">       <span class="token attr-name"><span class="token namespace">xsi:</span>schemaLocation</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>http://www.springframework.org/schema/beans</span>
<span class="line">            http://www.springframework.org/schema/beans/spring-beans.xsd<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">&lt;!--添加bean对象--&gt;</span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>bean</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>bookDao<span class="token punctuation">"</span></span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>book bookDaoImap<span class="token punctuation">"</span></span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>com.cykj.dao.impl.BookDaoImpl<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>bean</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token comment">&lt;!--添加bean对象--&gt;</span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>bean</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>bookService<span class="token punctuation">"</span></span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>com.cykj.service.impl.BookServiceImpl<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="line">        <span class="token comment">&lt;!--依赖注入，将另一个bean当作参数进行注入--&gt;</span></span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>property</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>bookDao<span class="token punctuation">"</span></span> <span class="token attr-name">ref</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>bookDao<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>property</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>bean</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"> </span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>beans</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>基于注解</h3>
<blockquote>
<ul>
<li>基于注解的元数据配置。</li>
<li>SSM框架开发中使用。（当需要与其他插件相互操作时使用）</li>
<li>在运行时IoC容器将扫描指定包路径下有包含<code>@Component</code>、<code>@Controller</code>、<code>@Service</code>、<code>@Repository</code>注解的类，并添加到IoC容器中。</li>
</ul>
</blockquote>
<p>配置spring的IoC容器的xml配置文件</p>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token prolog">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">&lt;!--添加命名空间--&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>beans</span> <span class="token attr-name">xmlns</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>http://www.springframework.org/schema/beans<span class="token punctuation">"</span></span></span>
<span class="line">    <span class="token attr-name"><span class="token namespace">xmlns:</span>xsi</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>http://www.w3.org/2001/XMLSchema-instance<span class="token punctuation">"</span></span></span>
<span class="line">    <span class="token attr-name"><span class="token namespace">xmlns:</span>context</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>http://www.springframework.org/schema/context<span class="token punctuation">"</span></span></span>
<span class="line">    <span class="token attr-name"><span class="token namespace">xsi:</span>schemaLocation</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    </span>
<span class="line">    <span class="token comment">&lt;!--指定包扫描路径，通过查找注解的方式来确定bean对象，并添加到IoC容器中进行管理--&gt;</span></span>
<span class="line">    <span class="token comment">&lt;!--通过指定扫描路径，用于告知spring的扫描位置--&gt;</span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">context:</span>component-scan</span> <span class="token attr-name">base-package</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>&lt;需要扫描的包路径&gt;<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span><span class="token namespace">context:</span>component-scan</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>beans</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>将需要被添加到IoC容器的类上添加注解</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 标记为bean对象</span></span>
<span class="line"><span class="token annotation punctuation">@Service</span><span class="token punctuation">(</span><span class="token string">"userService"</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">UserServiceImpl</span> <span class="token punctuation">{</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">UserDaoImpl</span> userDao<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 依赖注入，查询IoC容器中的bean对象，并将满足条件的对象当作参数传入</span></span>
<span class="line">    <span class="token annotation punctuation">@Autowired</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">UserServiceImpl</span><span class="token punctuation">(</span> <span class="token class-name">UserDaoImpl</span> userDao<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>userDao <span class="token operator">=</span> userDao<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 提供get/set方法，暴露出去可供外部使用</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">UserDaoImpl</span> <span class="token function">getUserDao</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">return</span> userDao<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setUserDao</span><span class="token punctuation">(</span><span class="token class-name">UserDaoImpl</span> userDao<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>userDao <span class="token operator">=</span> userDao<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>基于Java配置类</h3>
<blockquote>
<ul>
<li>使用Java配置来代替XML配置。</li>
</ul>
</blockquote>
<h2>创建IoC容器和添加bean的方式</h2>
<h3>配置文件中添加</h3>
<blockquote>
<ul>
<li>在配置文件中手动编写需要由IoC容器管理的bean，并关联所需的依赖。</li>
</ul>
</blockquote>
<p>IoC容器层面</p>
<blockquote>
<ul>
<li>创建spring的xml文件，并手动添加需要被IoC容器管理的对象。</li>
<li>格式如下：</li>
</ul>
</blockquote>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token comment">&lt;!--添加service、dao到IoC容器中，以Bean对象的形式存在--&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>bean</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>com.cykj.service.UserService<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token comment">&lt;!--依赖注入，为bean关联好所依赖的bean对象--&gt;</span></span>
<span class="line">    <span class="token comment">&lt;!--将当前bean中的方法与bean对象进行关联--&gt;</span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>property</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>userDao<span class="token punctuation">"</span></span> <span class="token attr-name">ref</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>userDao<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>property</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>bean</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>bean</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>userDao<span class="token punctuation">"</span></span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>com.cykj.dao.UserDao<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>bean</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line">...</span>
<span class="line">...</span>
<span class="line">...</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>servlet层面</p>
<blockquote>
<ul>
<li>在<code>servlet</code>层中的代码，获取spring的IoC容器，并从中获取<code>service</code>。</li>
<li>添加如下代码：</li>
</ul>
</blockquote>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 依赖spring的IoC容器，即spring配置文件</span></span>
<span class="line"><span class="token comment">// 从IoC容器中获取service，即从spring配置文件中获取service</span></span>
<span class="line"><span class="token comment">// 获取spring的IoC容器</span></span>
<span class="line"><span class="token class-name">ClassPathXmlApplicationContext</span> ioc <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ClassPathXmlApplicationContext</span><span class="token punctuation">(</span><span class="token string">"spring.xml"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token comment">// 从IoC容器中获取service</span></span>
<span class="line"><span class="token class-name">IUserService</span> service <span class="token operator">=</span> ioc<span class="token punctuation">.</span><span class="token function">getBean</span><span class="token punctuation">(</span><span class="token class-name">IUserService</span><span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token comment">// 执行service</span></span>
<span class="line">service<span class="token punctuation">.</span><span class="token function">getUser</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>service层面</p>
<blockquote>
<ul>
<li>此处所需要执行的dao层无需被赋值。</li>
<li>提供修改变量的get/set方法，用于让IoC容器能够赋值具体的内容在里面。</li>
</ul>
</blockquote>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">UserService</span> <span class="token keyword">implements</span> <span class="token class-name">IUserService</span> <span class="token punctuation">{</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 依赖spring注入（DI）</span></span>
<span class="line">    <span class="token class-name">IUserDao</span> userDao<span class="token punctuation">;</span>   <span class="token comment">// 此处无需赋值</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">getUser</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        userDao<span class="token punctuation">.</span><span class="token function">getUser</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">IUserDao</span> <span class="token function">getUserDao</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">return</span> userDao<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setUserDao</span><span class="token punctuation">(</span><span class="token class-name">IUserDao</span> userDao<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>userDao <span class="token operator">=</span> userDao<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>dao层面</p>
<blockquote>
<ul>
<li>无需任何变动。</li>
</ul>
</blockquote>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">UserDao</span> <span class="token keyword">implements</span> <span class="token class-name">IUserDao</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">getUser</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"具体查询数据库的代码，查询用户"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>扫描注解</h3>
<blockquote>
<ul>
<li>在运行时IoC容器将扫描指定包路径下有包含<code>@Component</code>注解的类，并添加到IoC容器中。</li>
</ul>
</blockquote>
<p>IoC容器层面</p>
<blockquote>
<ul>
<li>创建spring的xml文件，指定扫描路径。</li>
<li>格式如下：</li>
</ul>
</blockquote>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token comment">&lt;!--指定包扫描路径，通过查找注解的方式来确定bean对象，并添加到IoC容器中进行管理--&gt;</span></span>
<span class="line"><span class="token comment">&lt;!--通过指定扫描路径，用于减少对不必要的类进行扫描--&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">context:</span>component-scan</span> <span class="token attr-name">base-package</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>com.cykj<span class="token punctuation">"</span></span> <span class="token punctuation">/&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>servlet层面</p>
<blockquote>
<ul>
<li>在<code>servlet</code>层中的代码，获取spring的IoC容器的xml配置文件，并从中获取<code>service</code>。</li>
<li>添加如下代码：</li>
</ul>
</blockquote>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>context<span class="token punctuation">.</span>support<span class="token punctuation">.</span></span><span class="token class-name">ClassPathXmlApplicationContext</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 依赖spring的IoC容器，即spring配置文件</span></span>
<span class="line"><span class="token comment">// 从IoC容器中获取service，即从spring配置文件中获取service</span></span>
<span class="line"><span class="token comment">// 获取spring的IoC容器</span></span>
<span class="line"><span class="token class-name">ClassPathXmlApplicationContext</span> ioc <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ClassPathXmlApplicationContext</span><span class="token punctuation">(</span><span class="token string">"spring.xml"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token comment">// 从IoC容器中获取service</span></span>
<span class="line"><span class="token class-name">IUserService</span> service <span class="token operator">=</span> ioc<span class="token punctuation">.</span><span class="token function">getBean</span><span class="token punctuation">(</span><span class="token class-name">IUserService</span><span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token comment">// 执行service</span></span>
<span class="line">service<span class="token punctuation">.</span><span class="token function">getUser</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>service层面</p>
<blockquote>
<ul>
<li>在类的头部添加<code>@Component</code>注解，IoC容器会在扫描到后，将该类添加到容器中并实例化。</li>
<li>在依赖dao层的代码的地方，头部添加<code>@Autowired</code>注解，IoC容器将会自动进行依赖绑定，将dao层的实现对象赋值给变量。</li>
</ul>
</blockquote>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token annotation punctuation">@Component</span>   <span class="token comment">// spring的IoC容器扫描的注解，将被添加到IoC容器中</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">UserService</span> <span class="token keyword">implements</span> <span class="token class-name">IUserService</span> <span class="token punctuation">{</span>  </span>
<span class="line">  </span>
<span class="line">    <span class="token comment">// 依赖spring注入（DI）  </span></span>
<span class="line">    <span class="token annotation punctuation">@Autowired</span>          <span class="token comment">// spring的依赖绑定的注解</span></span>
<span class="line">    <span class="token class-name">IUserDao</span> userDao<span class="token punctuation">;</span>   <span class="token comment">// 此处无需赋值</span></span>
<span class="line">  </span>
<span class="line">    <span class="token annotation punctuation">@Override</span>  </span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">getUser</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>  </span>
<span class="line">        userDao<span class="token punctuation">.</span><span class="token function">getUser</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  </span>
<span class="line">    <span class="token punctuation">}</span>  </span>
<span class="line">  </span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">IUserDao</span> <span class="token function">getUserDao</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>  </span>
<span class="line">        <span class="token keyword">return</span> userDao<span class="token punctuation">;</span>  </span>
<span class="line">    <span class="token punctuation">}</span>  </span>
<span class="line">  </span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setUserDao</span><span class="token punctuation">(</span><span class="token class-name">IUserDao</span> userDao<span class="token punctuation">)</span> <span class="token punctuation">{</span>  </span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>userDao <span class="token operator">=</span> userDao<span class="token punctuation">;</span>  </span>
<span class="line">    <span class="token punctuation">}</span>  </span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>dao层面</p>
<blockquote>
<ul>
<li>在类的头部添加<code>@Component</code>注解，IoC容器会在扫描到后，将该类添加到容器中并实例化。</li>
</ul>
</blockquote>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>stereotype<span class="token punctuation">.</span></span><span class="token class-name">Component</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token annotation punctuation">@Component</span>   <span class="token comment">// spring的IoC容器扫描的注解，将被添加到IoC容器中</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">UserDao</span> <span class="token keyword">implements</span> <span class="token class-name">IUserDao</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">getUser</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"具体查询数据库的代码，查询用户"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>Java配置类</h3>
<blockquote>
<ul>
<li>编写Java配置类，该类添加<code>@Configuration</code>和<code>@ComponentScan(&lt;包扫描路径&gt;)</code>注解，并添加bean。</li>
</ul>
</blockquote>
<p>IoC容器层面</p>
<blockquote>
<ul>
<li>创建java代码，文件例如：<code>SpringConfig.java</code></li>
<li>并添加如下内容：</li>
</ul>
</blockquote>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token annotation punctuation">@Configuration</span>              <span class="token comment">// 标记为是spring的xml配置文件</span></span>
<span class="line"><span class="token annotation punctuation">@ComponentScan</span><span class="token punctuation">(</span><span class="token string">"com.cykj"</span><span class="token punctuation">)</span>  <span class="token comment">// 指定包扫描路径，通过查找注解的方式来确定bean对象，并添加到IoC容器中进行管理</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">SpringConfig</span> <span class="token punctuation">{</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>servlet层面</p>
<blockquote>
<ul>
<li>在<code>servlet</code>层中的代码，获取IoC容器的Java配置类，并从中获取<code>service</code>。</li>
<li>添加如下代码：</li>
</ul>
</blockquote>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 获取IoC容器的Java配置类  </span></span>
<span class="line"><span class="token class-name">AnnotationConfigApplicationContext</span> ioc <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">AnnotationConfigApplicationContext</span><span class="token punctuation">(</span><span class="token class-name">SpringConfig</span><span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  </span>
<span class="line"><span class="token comment">// 从IoC容器中获取service  </span></span>
<span class="line"><span class="token class-name">IUserService</span> service <span class="token operator">=</span> ioc<span class="token punctuation">.</span><span class="token function">getBean</span><span class="token punctuation">(</span><span class="token class-name">IUserService</span><span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  </span>
<span class="line"><span class="token comment">// 执行service  </span></span>
<span class="line">service<span class="token punctuation">.</span><span class="token function">getUser</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>service层面</p>
<blockquote>
<ul>
<li>在类的头部添加<code>@Component</code>注解，IoC容器会在扫描到后，将该类添加到容器中并实例化。</li>
<li>在依赖dao层的代码的地方，头部添加<code>@Autowired</code>注解，IoC容器将会自动进行依赖绑定，将dao层的实现对象赋值给变量。</li>
</ul>
</blockquote>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token annotation punctuation">@Component</span>   <span class="token comment">// spring的IoC容器扫描的注解，将被添加到IoC容器中</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">UserService</span> <span class="token keyword">implements</span> <span class="token class-name">IUserService</span> <span class="token punctuation">{</span>  </span>
<span class="line">  </span>
<span class="line">    <span class="token comment">// 依赖spring注入（DI）  </span></span>
<span class="line">    <span class="token annotation punctuation">@Autowired</span>          <span class="token comment">// spring的依赖绑定的注解</span></span>
<span class="line">    <span class="token class-name">IUserDao</span> userDao<span class="token punctuation">;</span>   <span class="token comment">// 此处无需赋值</span></span>
<span class="line">  </span>
<span class="line">    <span class="token annotation punctuation">@Override</span>  </span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">getUser</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>  </span>
<span class="line">        userDao<span class="token punctuation">.</span><span class="token function">getUser</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  </span>
<span class="line">    <span class="token punctuation">}</span>  </span>
<span class="line">  </span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">IUserDao</span> <span class="token function">getUserDao</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>  </span>
<span class="line">        <span class="token keyword">return</span> userDao<span class="token punctuation">;</span>  </span>
<span class="line">    <span class="token punctuation">}</span>  </span>
<span class="line">  </span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setUserDao</span><span class="token punctuation">(</span><span class="token class-name">IUserDao</span> userDao<span class="token punctuation">)</span> <span class="token punctuation">{</span>  </span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>userDao <span class="token operator">=</span> userDao<span class="token punctuation">;</span>  </span>
<span class="line">    <span class="token punctuation">}</span>  </span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>dao层面</p>
<blockquote>
<ul>
<li>在类的头部添加<code>@Component</code>注解，IoC容器会在扫描到后，将该类添加到容器中并实例化。</li>
</ul>
</blockquote>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>stereotype<span class="token punctuation">.</span></span><span class="token class-name">Component</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token annotation punctuation">@Component</span>   <span class="token comment">// spring的IoC容器扫描的注解，将被添加到IoC容器中</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">UserDao</span> <span class="token keyword">implements</span> <span class="token class-name">IUserDao</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">getUser</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"具体查询数据库的代码，查询用户"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>配置静态资源路径映射</h3>
<blockquote>
<ul>
<li>作用：当web服务器的<code>DispatcherServlet</code>拦截到url时判断是否是静态资源，并返回静态资源。</li>
</ul>
</blockquote>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token comment">&lt;!--配置静态资源路径映射--&gt;</span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">mvc:</span>annotation-driven</span><span class="token punctuation">/&gt;</span></span></span>
<span class="line">    <span class="token comment">&lt;!--将拦截到的url,满足该条件的url,映射到指定本地路径，并返回静态资源--&gt;</span></span>
<span class="line">    <span class="token comment">&lt;!--    - mapping：设置URL上的路径，从“请求资源路径”的根路径开始，`**`代表全部资源--&gt;</span></span>
<span class="line">    <span class="token comment">&lt;!--    - location：设置项目本地下的目录位置，`webapp/`是本地静态资源根路径--&gt;</span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">mvc:</span>resources</span> <span class="token attr-name">mapping</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>/static/**<span class="token punctuation">"</span></span> <span class="token attr-name">location</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>/static/<span class="token punctuation">"</span></span><span class="token punctuation">/&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Library - Maven - MyBatis</title>
      <link>https://blog.magictable.ha.cn/software/Library-Maven-MyBatis.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Maven-MyBatis.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Maven - MyBatis</source>
      <description>文章摘要： 持久层框架。 注释 该依赖的总结还未完成。 简介 简要说明 持久层框架。 负责将数据保存到数据库的代码。 主要功能 注意事项 适用场景 Maven坐标 问题 POJO对象的属性必须拷贝数据库字段名 配置文件分类：主配置文件、映射文件 创建MyBatis的主配置文件 文件名称：mybatis-config.xml 目录位置：src/main/...</description>
      <category>软件程序/代码类库</category>
      <pubDate>Sun, 14 Jul 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 持久层框架。</p>
<!-- more -->
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>该依赖的总结还未完成。</p>
</div>
<h2>简介</h2>
<p>简要说明</p>
<blockquote>
<ul>
<li>持久层框架。</li>
<li>负责将数据保存到数据库的代码。</li>
</ul>
</blockquote>
<p>主要功能</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>注意事项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>适用场景</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<h2>Maven坐标</h2>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- MyBatis --&gt;</span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.mybatis.spring.boot<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>mybatis-spring-boot-starter<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>版本号<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- 请替换为实际的版本号 --&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>问题</h2>
<blockquote>
<ul>
<li>POJO对象的属性必须拷贝数据库字段名</li>
</ul>
</blockquote>
<p>配置文件分类：主配置文件、映射文件</p>
<h2>创建MyBatis的主配置文件</h2>
<blockquote>
<ul>
<li><strong>文件名称</strong>：<code>mybatis-config.xml</code></li>
<li><strong>目录位置</strong>：<code>src/main/resources/</code></li>
<li><strong>主要作用</strong>：用于配置连接数据库的环境以及MyBatis全局配置信息。</li>
</ul>
</blockquote>
<h3>根标签</h3>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token prolog">&lt;?xml version="1.0" encoding="UTF-8" ?&gt;</span></span>
<span class="line"><span class="token doctype"><span class="token punctuation">&lt;!</span><span class="token doctype-tag">DOCTYPE</span> <span class="token name">configuration</span></span>
<span class="line">        <span class="token name">PUBLIC</span> <span class="token string">"-//mybatis.org//DTD Config 3.0//EN"</span></span>
<span class="line">        <span class="token string">"https://mybatis.org/dtd/mybatis-3-config.dtd"</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>configuration</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    </span>
<span class="line">    <span class="token comment">&lt;!--具体配置的内容--&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>configuration</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>引入外部配置文件</h3>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token comment">&lt;!--引入外部配置文件，在当前文件中通过`${key}`的方式访问value--&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>properties</span> <span class="token attr-name">resource</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>db.properties<span class="token punctuation">"</span></span><span class="token punctuation">/&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h3>为一个类型设置别名</h3>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token comment">&lt;!--设置类型别名，为某一个具体的类型设置一个别名，来表示具体的类型--&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>typeAliases</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token comment">&lt;!-- type：设置需要起别名的类型--&gt;</span></span>
<span class="line">    <span class="token comment">&lt;!-- alias：设置某个类型的别名--&gt;</span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>typeAlias</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>com.cykj.wellness.pojo.User<span class="token punctuation">"</span></span> <span class="token attr-name">alias</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>User<span class="token punctuation">"</span></span><span class="token punctuation">/&gt;</span></span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">&lt;!--通过包设置类型别名，指定包下所有的类型将全部拥有默认的别名，别名默认是类名，且不区分大小写--&gt;</span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>package</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>com.cykj.wellness.pojo<span class="token punctuation">"</span></span><span class="token punctuation">/&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>typeAliases</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>配置连接数据库的环境</h3>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token comment">&lt;!--配置连接数据库的环境--&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>environments</span> <span class="token attr-name">default</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>development<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>environment</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>development<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="line">        <span class="token comment">&lt;!--事务管理器--&gt;</span></span>
<span class="line">        <span class="token comment">&lt;!--type：设置事务管理的方式，参数支持（JDBC | MANAGED）--&gt;</span></span>
<span class="line">        <span class="token comment">&lt;!-- - JDBC: 表示使用JDBC中原生的事务管理方式--&gt;</span></span>
<span class="line">        <span class="token comment">&lt;!-- - MANAGED: 被第三方管理，例如由Spring进行管理--&gt;</span></span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>transactionManager</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>JDBC<span class="token punctuation">"</span></span><span class="token punctuation">/&gt;</span></span></span>
<span class="line">        <span class="token comment">&lt;!--数据源--&gt;</span></span>
<span class="line">        <span class="token comment">&lt;!--type：设置数据源的类型，参数支持（POOLED | UNPOOLED | JNDI）--&gt;</span></span>
<span class="line">        <span class="token comment">&lt;!-- - POOLED：使用数据库连接池--&gt;</span></span>
<span class="line">        <span class="token comment">&lt;!-- - UNPOOLED：不使用数据库连接池--&gt;</span></span>
<span class="line">        <span class="token comment">&lt;!-- - JNDI：使用上下文中的数据源，其他数据源--&gt;</span></span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dataSource</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>POOLED<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="line">            <span class="token comment">&lt;!--驱动类--&gt;</span></span>
<span class="line">            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>property</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>driver<span class="token punctuation">"</span></span> <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>#{jdbc.driverClassName}<span class="token punctuation">"</span></span><span class="token punctuation">/&gt;</span></span></span>
<span class="line">            <span class="token comment">&lt;!--数据库的地址--&gt;</span></span>
<span class="line">            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>property</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>url<span class="token punctuation">"</span></span> <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>#{jdbc.url}<span class="token punctuation">"</span></span><span class="token punctuation">/&gt;</span></span></span>
<span class="line">            <span class="token comment">&lt;!--用户名--&gt;</span></span>
<span class="line">            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>property</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>username<span class="token punctuation">"</span></span> <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>#{jdbc.username}<span class="token punctuation">"</span></span><span class="token punctuation">/&gt;</span></span></span>
<span class="line">            <span class="token comment">&lt;!--密码--&gt;</span></span>
<span class="line">            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>property</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>password<span class="token punctuation">"</span></span> <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>#{jdbc.password}<span class="token punctuation">"</span></span><span class="token punctuation">/&gt;</span></span></span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dataSource</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>environment</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>environments</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>引入MyBatis的映射文件</h3>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token comment">&lt;!--引入MyBatis的映射文件--&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>mappers</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token comment">&lt;!--引入单个映射文件--&gt;</span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>mapper</span> <span class="token attr-name">resource</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>mapper/UserMapper.xml<span class="token punctuation">"</span></span><span class="token punctuation">/&gt;</span></span></span>
<span class="line">    <span class="token comment">&lt;!--通过引入包的方式引入映射文件--&gt;</span></span>
<span class="line">    <span class="token comment">&lt;!--mapper接口和映射文件之间的“方法名”和“类名”必须保持一致--&gt;</span></span>
<span class="line">    <span class="token comment">&lt;!--mapper接口和映射之间的文件目录结构必须一致--&gt;</span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>package</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>com.cykj.wellness.mapper<span class="token punctuation">"</span></span> <span class="token punctuation">/&gt;</span></span></span>
<span class="line">    </span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>mappers</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>mybatis的mapper关系映射配置文件</h2>
<blockquote>
<ul>
<li>问题：若字段名和实体类中的属性名不一致，导致读取到键值对中的键的命名与java类中的属性名不一致，无法正确读取对应的值。</li>
<li>将SQL字段名（下划线）映射为Java的属性名（驼峰命名）。</li>
<li>作用：实现读取到数据库的信息后，字段的命名规范是驼峰命名的格式。</li>
</ul>
</blockquote>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token prolog">&lt;?xml version="1.0" encoding="UTF-8" ?&gt;</span></span>
<span class="line"><span class="token doctype"><span class="token punctuation">&lt;!</span><span class="token doctype-tag">DOCTYPE</span> <span class="token name">mapper</span> <span class="token name">PUBLIC</span> <span class="token string">"-//mybatis.org//DTD Mapper 3.0//EN"</span> <span class="token string">"https://mybatis.org/dtd/mybatis-3-mapper.dtd"</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line"><span class="token comment">&lt;!--提示，需要设置传入的数据和返回的数据--&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>mapper</span> <span class="token attr-name">namespace</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>com.cykj.wellness.mapper.UserMapper<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token comment">&lt;!--新增数据--&gt;</span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>insert</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>doCreate<span class="token punctuation">"</span></span> <span class="token attr-name">parameterType</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>com.cykj.wellness.pojo.User<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>insert</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token comment">&lt;!--删除数据--&gt;</span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>delete</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>doRemove<span class="token punctuation">"</span></span> <span class="token attr-name">parameterType</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>int<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>delete</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token comment">&lt;!--修改数据--&gt;</span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>update</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>doUpdate<span class="token punctuation">"</span></span> <span class="token attr-name">parameterType</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>com.cykj.wellness.pojo.User<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>update</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token comment">&lt;!--查询所有数据--&gt;</span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>select</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>findAll<span class="token punctuation">"</span></span> <span class="token attr-name">resultType</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>com.cykj.wellness.pojo.User<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>select</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token comment">&lt;!--查询 - 根据id查询数据--&gt;</span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>select</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>findById<span class="token punctuation">"</span></span> <span class="token attr-name">resultType</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>com.cykj.wellness.pojo.User<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>select</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>mapper</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>MyBatis获取参数值的方式</h2>
<blockquote>
<ul>
<li>MyBatis获取参数值的方式：<code>${}</code>和<code>#{}</code></li>
<li><code>${}</code>：字符串拼接的方式拼接SQL。</li>
<li><code>#{}</code>：占位符赋值的方式拼接SQL。</li>
<li>若字符串类型或日期类型的字段进行赋值时，需要手动加单引号。</li>
</ul>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Tomcat - 安装与卸载</title>
      <link>https://blog.magictable.ha.cn/software/Package-Tomcat-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Tomcat-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Tomcat - 安装与卸载</source>
      <description>文章摘要： 摘要内容。 软件获取 官方下载地址：https://tomcat.apache.org/download-90.cgi 安装 - apt包管理器 卸载 - apt包管理器 安装 - 预编译 卸载 - 预编译 安装 - 源代码 下载/获取 Tomcat 的软件包：官方网站 安装和运行方式是通过可执行文件直接执行，没有复杂的安装流程。 解压压缩...</description>
      <category>软件程序/软件包</category>
      <pubDate>Thu, 11 Jul 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>软件获取</h2>
<ul>
<li>官方下载地址：<a href="https://tomcat.apache.org/download-90.cgi" target="_blank" rel="noopener noreferrer">https://tomcat.apache.org/download-90.cgi</a></li>
</ul>
<h2>安装 - apt包管理器</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 查看系统支持哪些版本和包的具体名称</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">apt</span> list --all-versions <span class="token operator">|</span> <span class="token function">grep</span> tomcat</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 开始安装</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">apt</span> <span class="token function">install</span> libtomcat9-java</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>卸载 - apt包管理器</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>安装 - 预编译</h2>
<h2>卸载 - 预编译</h2>
<h2>安装 - 源代码</h2>
<ul>
<li>下载/获取 Tomcat 的软件包：<a href="https://tomcat.apache.org/" target="_blank" rel="noopener noreferrer">官方网站</a></li>
<li>安装和运行方式是通过可执行文件直接执行，没有复杂的安装流程。</li>
</ul>
<ol>
<li>解压压缩包到指定目录</li>
</ol>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">sudo</span> <span class="token function">tar</span> <span class="token parameter variable">-zxvf</span> apache-tomcat-9.0.91.tar.gz <span class="token parameter variable">-C</span> /opt/</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><ol start="2">
<li>更改安装到的目录权限</li>
</ol>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 由于安装时使用的是root管理员权限，因此普通用户操作里面的内容不方便修改，因此需要设置该目录的使用权限，方便后续修改文件。</span></span>
<span class="line"></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">chown</span> <span class="token parameter variable">-R</span> <span class="token operator">&lt;</span>用户名<span class="token operator">&gt;</span>:root <span class="token operator">&lt;</span>Tomcat所在目录<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ol start="3">
<li>将Tomcat的bin目录加入到系统环境变量</li>
</ol>
<h2>卸载 - 源代码</h2>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Tomcat - 终端命令</title>
      <link>https://blog.magictable.ha.cn/software/Package-Tomcat-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Tomcat-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Tomcat - 终端命令</source>
      <description>文章摘要： Tomcat 服务器是一个免费的开放源代码的Web应用服务器，属于轻量级应用服务器。 查看Tomcat的版本信息 启动Tomcat服务器 停止Tomcat服务器 重新启动Tomcat服务器 查看Tomcat的当前状态 执行Tomcat的脚本 查看Tomcat日志 查看Tomcat的端口分配</description>
      <category>软件程序/软件包</category>
      <pubDate>Thu, 11 Jul 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Tomcat 服务器是一个免费的开放源代码的Web应用服务器，属于轻量级应用服务器。</p>
<!-- more -->
<h2>查看Tomcat的版本信息</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">bash</span> ./bin/version.sh</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>启动Tomcat服务器</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">bash</span> ./bin/startup.sh</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>停止Tomcat服务器</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">bash</span> ./bin/shutdown.sh</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>重新启动Tomcat服务器</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">bash</span> ./bin/restart.sh</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>查看Tomcat的当前状态</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">bash</span> ./bin/catalina.sh <span class="token parameter variable">-status</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>执行Tomcat的脚本</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">bash</span> ./bin/run.sh</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>查看Tomcat日志</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">bash</span> ./bin/tail-access.sh</span>
<span class="line"><span class="token function">bash</span> ./bin/tail-error.sh</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h2>查看Tomcat的端口分配</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">bash</span> ./bin/catalina.sh <span class="token parameter variable">-list</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Tomcat</title>
      <link>https://blog.magictable.ha.cn/software/Package-Tomcat.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Tomcat.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Tomcat</source>
      <description>文章摘要： Tomcat 服务器是一个免费的开放源代码的轻量级应用服务器。 提示 在 Tomcat 安装目录下有/conf的文件夹，用于存储配置，可对其中的文件进行配置达到不同的效果。 静态资源：所有用户访问后，得到的结果都是一样的，称为静态资源。静态资源可以直接被浏览器解析。 动态资源：每个用户访问相同资源后，得到的结果可能不一样，称为动态资源。动态...</description>
      <category>软件程序/软件包</category>
      <pubDate>Thu, 11 Jul 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Tomcat 服务器是一个免费的开放源代码的轻量级应用服务器。</p>
<!-- more -->
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<ul>
<li>在 Tomcat 安装目录下有<code>/conf</code>的文件夹，用于存储配置，可对其中的文件进行配置达到不同的效果。</li>
<li>静态资源：所有用户访问后，得到的结果都是一样的，称为静态资源。静态资源可以直接被浏览器解析。</li>
<li>动态资源：每个用户访问相同资源后，得到的结果可能不一样，称为动态资源。动态资源被访问后，需要先转换为静态资源，再返回给浏览器，通过浏览器进行解析。</li>
</ul>
</div>
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>Tomcat 是由 Apache Software Foundation 开发的一个开源的 Java Servlet、JSP 容器。</li>
<li>用于提供一个纯 Java 的 HTTP web 服务器环境，用于运行 Java 代码。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>Servlet 容器</strong>：Tomcat 是一个 Servlet 容器，负责管理和运行 Java Servlet，处理客户端请求。</li>
<li><strong>JSP 支持</strong>：支持 Java Server Pages (JSP)，将 JSP 文件转换为 Servlet，然后执行。</li>
<li><strong>Websocket 支持</strong>：支持 Websocket 协议，实现服务器与客户端之间的全双工通信。</li>
<li><strong>负载均衡</strong>：通过配置可以实现简单的负载均衡，分发请求到不同的服务器。</li>
<li><strong>安全性</strong>：提供基于角色的访问控制和 SSL 加密等安全特性。</li>
<li><strong>可配置性</strong>：通过配置文件可以灵活地配置服务器行为，如连接器、会话管理、数据源等。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>内存配置</strong>：合理配置 JVM 内存参数，避免内存泄漏和性能问题。</li>
<li><strong>安全性</strong>：定期更新 Tomcat 和 Java 以修复安全漏洞。</li>
<li><strong>日志管理</strong>：配置合适的日志级别和日志文件管理，以便于问题追踪和系统监控。</li>
<li><strong>并发处理</strong>：根据应用需求调整线程池配置，以优化并发处理能力。</li>
<li><strong>版本兼容性</strong>：确保应用与 Tomcat 版本兼容，避免因版本差异导致的问题。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>Java Web 应用</strong>：适用于部署 Java Web 应用程序，特别是使用 Servlet 和 JSP 技术的应用。</li>
<li><strong>中小型项目</strong>：对于中小型项目和初创企业，Tomcat 是一个轻量级且易于管理的解决方案。</li>
<li><strong>开发和测试环境</strong>：由于其易用性和可配置性，Tomcat 常被用作开发者的本地开发环境和测试服务器。</li>
<li><strong>企业级应用</strong>：虽然 Tomcat 主要用于中小型应用，但通过适当的配置和优化，也可以用于企业级应用。</li>
</ul>
<h2>安装与卸载</h2>
<p>详细总结：<a href="/software/Package-Tomcat-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html" target="_blank">Package-Tomcat-安装与卸载</a></p>
<h2>终端命令</h2>
<p>详细总结：<a href="/software/Package-Tomcat-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4.html" target="_blank">Package-Tomcat-终端命令</a></p>
<h2>配置文件</h2>
<p>详细总结：<a href="/software/Package-Tomcat-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6.html" target="_blank">Package-Tomcat-配置文件</a></p>
<h2>热门推荐</h2>
<p>详细总结：<a href=""></a></p>
<h2>问题总结</h2>
<p>详细总结：<a href=""></a></p>
<h2>部署与配置（IDEA）</h2>
<ol>
<li>将Tomcat添加到IDEA中。</li>
</ol>
<ul>
<li>
<p>点击菜单栏打开“<code>设置</code>”窗口：<code>文件 -&gt; 设置</code></p>
</li>
<li>
<p>切换到“<code>构建、执行、部署 -&gt; 应用程序服务器</code>”页面，点击“+”添加“<code>Web</code>框架模块”</p>
</li>
<li>
<p>填写“Tomcat的所在目录”</p>
</li>
<li>
<p>点击<code>应用</code>，并点击<code>确定</code></p>
</li>
</ul>
<ol start="2">
<li>添加运行/调试配置。（即提供一键式运行Tomcat服务器）</li>
</ol>
<ul>
<li>
<p>点击菜单栏打开“<code>运行/调试窗口</code>”窗口：<code>运行 -&gt; 编辑配置</code></p>
</li>
<li>
<p>点击“<code>+</code>”添加“<code>Tomcat服务器</code> -&gt; <code>本地</code>”</p>
</li>
<li>
<p>点击切换到“部署”页面，点击“<code>+</code>”添加“<code>工件</code>”</p>
</li>
<li>
<p>点击<code>应用</code>，并点击<code>确定</code></p>
</li>
</ul>
<h2>知识总结</h2>
<p>WEB-INF：存放项目相关的配置文件</p>
<h2>Tomcat程序目录</h2>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">/tomcat</span>
<span class="line">|-- /bin      // 可执行程序文件</span>
<span class="line">|-- /conf     // 配置文件</span>
<span class="line"> |-- context.xml</span>
<span class="line"> |-- server.xml</span>
<span class="line"> |-- tomcat-users.xml</span>
<span class="line"> |-- web.xml</span>
<span class="line">|-- /lib      // Tomcat允许所需要的库文件</span>
<span class="line">|-- /logs     // 日志文件</span>
<span class="line">|-- /temp     // 临时文件</span>
<span class="line">|-- /webapps  //主要Web发布目录</span>
<span class="line">|-- work      // 存放jsp编译后产生的class文件</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>项目目录结构</h2>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">/Project</span>
<span class="line">|-- /out  // 编译文件</span>
<span class="line">|-- /src  // 源码文件</span>
<span class="line">    |-- /main</span>
<span class="line">        |-- /java        // java代码目录</span>
<span class="line">        |-- /resources   // 资源目录</span>
<span class="line">        |-- /webapp           // Web文件</span>
<span class="line">            |-- WEB-INF       // Web文件</span>
<span class="line">                |-- web.xml   // 配置文件</span>
<span class="line">    |-- /test</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>添加环境变量</h2>
<ul>
<li>修改<code>~/.bashrc</code>文件，添加如下内容</li>
</ul>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">export CATALINA_HOME=/path/to/tomcat</span>
<span class="line">export PATH=$CATALINA_HOME/bin:$PATH</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><ul>
<li>更新环境变量的命令</li>
</ul>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token builtin class-name">source</span> ~/.bashrc</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>Tomcat服务器与servlet表现层绑定</h2>
<ul>
<li>作用：代码解耦。</li>
</ul>
<h3>通过注解的方式</h3>
<ul>
<li>写一个类，并继承<code>HttpServlet</code></li>
<li>为该类写上注解，<code>@WebServlet()</code></li>
</ul>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token annotation punctuation">@WebServlet</span><span class="token punctuation">(</span><span class="token string">"/login"</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">LoginServlet</span> <span class="token keyword">extends</span> <span class="token class-name">HttpServlet</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">protected</span> <span class="token keyword">void</span> <span class="token function">doGet</span><span class="token punctuation">(</span><span class="token class-name">HttpServletRequest</span> req<span class="token punctuation">,</span> <span class="token class-name">HttpServletResponse</span> resp<span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">ServletException</span><span class="token punctuation">,</span> <span class="token class-name">IOException</span> <span class="token punctuation">{</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 获取请求参数</span></span>
<span class="line">        req<span class="token punctuation">.</span><span class="token function">getParameter</span><span class="token punctuation">(</span><span class="token string">"account"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 设置响应头</span></span>
<span class="line">        resp<span class="token punctuation">.</span><span class="token function">setContentType</span><span class="token punctuation">(</span><span class="token string">"text/html;charset=utf-8"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token comment">// 设置数据类型</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 返回响应体</span></span>
<span class="line">        resp<span class="token punctuation">.</span><span class="token function">getWriter</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">write</span><span class="token punctuation">(</span><span class="token string">"你好，世界。"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>通过修改Tomcat配置文件的方式</h3>
<ul>
<li>修改<code>WEB-INF</code>文件夹中的<code>web.xml</code>文件。</li>
</ul>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>web-app</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">&lt;!--导入servlet--&gt;</span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>servlet</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>servlet-mame</span><span class="token punctuation">&gt;</span></span> "servlet在Tomcat服务器中的名称" <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>servlet-mame</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>servlet-class</span><span class="token punctuation">&gt;</span></span> "类所在路径，例如：com.cykj.servlet.LoginServlet" <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>servlet-class</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>servlet</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token comment">&lt;!--将servlet映射到指定的URL路径--&gt;</span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>servlet-mapping</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>servlet-name</span><span class="token punctuation">&gt;</span></span> "servlet的名称" <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>servlet-name</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>url-pattern</span><span class="token punctuation">&gt;</span></span> "url请求模块，例如：/login" <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>url-pattern</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>servlet-mapping</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>web-app</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Language - JavaScript - API - JQuery</title>
      <link>https://blog.magictable.ha.cn/software/Language-JavaScript-API-JQuery.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-JavaScript-API-JQuery.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - JavaScript - API - JQuery</source>
      <description>文章摘要： JQuery是封装好的JavaScript库。 JQuery解决了浏览器兼容问题。 JQuery解决了编写代码繁琐的问题。 Ajax是JavaScript的一个API，实现在不刷新当前页面的情况下，再次访问服务器获取资源，并更新当前页面上的元素信息。 在HTML文件中引入JQuery.JS文件 jQuery的入口函数 等待DOM结构渲染完毕...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Fri, 28 Jun 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> JQuery是封装好的JavaScript库。</p>
<ul>
<li>JQuery解决了浏览器兼容问题。</li>
<li>JQuery解决了编写代码繁琐的问题。</li>
<li>Ajax是JavaScript的一个API，实现在不刷新当前页面的情况下，再次访问服务器获取资源，并更新当前页面上的元素信息。</li>
</ul>
<!-- more -->
<ul>
<li>在HTML文件中引入JQuery.JS文件</li>
</ul>
<h2>jQuery的入口函数</h2>
<ul>
<li>等待DOM结构渲染完毕即可执行内部代码，不必等到所有外部资源加载完成。</li>
</ul>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token comment">// 方案一</span></span>
<span class="line"><span class="token function">$</span><span class="token punctuation">(</span>document<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">ready</span><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 代码块</span></span>
<span class="line"><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 方案二</span></span>
<span class="line"><span class="token function">$</span><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 代码块</span></span>
<span class="line"><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>顶级对象</h2>
<ul>
<li>jQuery与<code>$</code>的作用一样。</li>
<li><code>$</code>是jQuery的别名。</li>
<li><code>$</code>是jQuery的顶级对象，相当于原生JavaScript中的window，把元素利用<code>$</code>包装成jQuery对象，就可以调用jQuery的方法。</li>
</ul>
<h2>获取jQuery对象</h2>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token function">$</span><span class="token punctuation">(</span><span class="token string">'div'</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token function">$</span><span class="token punctuation">(</span><span class="token string">'.class'</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token function">$</span><span class="token punctuation">(</span><span class="token string">'#id'</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>jQuery对象与DOM对象的转换</h2>
<ul>
<li>jQuery对象与DOM对象之间可以相互转换。</li>
<li>jQuery并没有将全部属性和方法进行封装。</li>
</ul>
<p><strong>DOM对象转换为jQuery对象</strong></p>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token keyword">var</span> div <span class="token operator">=</span> document<span class="token punctuation">.</span><span class="token function">querySelector</span><span class="token punctuation">(</span><span class="token string">'div'</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token function">$</span><span class="token punctuation">(</span>div<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>jQuery对象转换为DOM对象</strong></p>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token comment">// index是索引号</span></span>
<span class="line"></span>
<span class="line"><span class="token function">$</span><span class="token punctuation">(</span><span class="token string">'div'</span><span class="token punctuation">)</span><span class="token punctuation">[</span>index<span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token function">$</span><span class="token punctuation">(</span><span class="token string">'div'</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span>index<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>元素选择器</h2>
<p><strong>基础选择器</strong></p>
<table>
<thead>
<tr>
<th style="text-align:center">名称</th>
<th style="text-align:left">例子</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">ID选择器</td>
<td style="text-align:left"><code>$('#id')</code></td>
<td style="text-align:left">获取指定ID的元素</td>
</tr>
<tr>
<td style="text-align:center">全选选择器 <code>$('*')</code></td>
<td style="text-align:left">匹配所有元素</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">类选择器</td>
<td style="text-align:left"><code>$('.class')</code></td>
<td style="text-align:left">获取同一类class的元素</td>
</tr>
<tr>
<td style="text-align:center">标签选择器</td>
<td style="text-align:left"><code>$('div')</code></td>
<td style="text-align:left">获取同一类标签的所有元素</td>
</tr>
<tr>
<td style="text-align:center">并集选择器</td>
<td style="text-align:left"><code>$('div,p,li')</code></td>
<td style="text-align:left">选取多个元素</td>
</tr>
<tr>
<td style="text-align:center">交集选择器</td>
<td style="text-align:left"><code>$('li.current')</code></td>
<td style="text-align:left">交集元素</td>
</tr>
</tbody>
</table>
<p><strong>层级选择器</strong></p>
<table>
<thead>
<tr>
<th style="text-align:center">名称</th>
<th style="text-align:left">例子</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">子代选择器</td>
<td style="text-align:left"><code>$('ul&gt;li')</code></td>
<td style="text-align:left">使用<code>&gt;</code>，来获取儿子层级的元素，且不会获取孙子层级的元素</td>
</tr>
<tr>
<td style="text-align:center">后代选择器</td>
<td style="text-align:left"><code>$('ul li')</code></td>
<td style="text-align:left">使用空格，代表后代选择器，获取<code>ul</code>下的所有<code>li</code>元素包括孙子层级的元素</td>
</tr>
</tbody>
</table>
<p><strong>筛选选择器</strong></p>
<table>
<thead>
<tr>
<th style="text-align:center">语法</th>
<th style="text-align:left">例子</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center"><code>:first</code></td>
<td style="text-align:left"><code>$('li:first')</code></td>
<td style="text-align:left">获取第一个<code>li</code>元素</td>
</tr>
<tr>
<td style="text-align:center"><code>:last</code></td>
<td style="text-align:left"><code>$('li:last')</code></td>
<td style="text-align:left">获取最后一个<code>li</code>元素</td>
</tr>
<tr>
<td style="text-align:center"><code>:eq(index)</code></td>
<td style="text-align:left"><code>$('li:eq(2)')</code></td>
<td style="text-align:left">获取到的<code>li</code>元素中，选择索引号为2的元素，索引号index从0开始</td>
</tr>
<tr>
<td style="text-align:center"><code>:odd</code></td>
<td style="text-align:left"><code>$('li:odd')</code></td>
<td style="text-align:left">获取到的<code>li</code>元素中，选择索引号为奇数的元素</td>
</tr>
<tr>
<td style="text-align:center"><code>:even</code></td>
<td style="text-align:left"><code>$('li:even')</code></td>
<td style="text-align:left">获取到的<code>li</code>元素中，选择索引号为偶数的元素</td>
</tr>
</tbody>
</table>
<h2>元素筛选方法</h2>
<table>
<thead>
<tr>
<th style="text-align:center">语法</th>
<th style="text-align:left">例子</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center"><code>parent()</code></td>
<td style="text-align:left"><code>$('li').parent();</code></td>
<td style="text-align:left">查找父级</td>
</tr>
<tr>
<td style="text-align:center"><code>children(selector)</code></td>
<td style="text-align:left"><code>$('ul').children('li');</code></td>
<td style="text-align:left">相当于<code>$('ul&gt;li')</code>，儿子层级</td>
</tr>
<tr>
<td style="text-align:center"><code>find(selector)</code></td>
<td style="text-align:left"><code>$('ul').find('li');</code></td>
<td style="text-align:left">相当于<code>$('ul li')</code>，后代选择器</td>
</tr>
<tr>
<td style="text-align:center"><code>siblings(selector)</code></td>
<td style="text-align:left"><code>$('.first').siblings('li');</code></td>
<td style="text-align:left">查找兄弟节点，不包括自己本身</td>
</tr>
<tr>
<td style="text-align:center"><code>nextAll([expr])</code></td>
<td style="text-align:left"><code>$('.first').nextAll();</code></td>
<td style="text-align:left">查找当前元素之后的所有同辈元素</td>
</tr>
<tr>
<td style="text-align:center"><code>prevAll([expr])</code></td>
<td style="text-align:left"><code>$('.last').prevAll();</code></td>
<td style="text-align:left">查找当前元素之前的所有同辈元素</td>
</tr>
<tr>
<td style="text-align:center"><code>hasClass(class)</code></td>
<td style="text-align:left"><code>$('div').hasClass('protected');</code></td>
<td style="text-align:left">检查当前的元素是否含有某个特定的类，若有则返回<code>true</code></td>
</tr>
<tr>
<td style="text-align:center"><code>eq(index)</code></td>
<td style="text-align:left"><code>$('li').eq(2);</code></td>
<td style="text-align:left">相当于<code>$('li:eq(2)')</code>，index从0开始</td>
</tr>
</tbody>
</table>
<h2>样式操作</h2>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token function">$</span><span class="token punctuation">(</span><span class="token string">"&lt;元素&gt;"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">css</span><span class="token punctuation">(</span><span class="token string">"&lt;属性&gt;"</span><span class="token punctuation">,</span> <span class="token string">"&lt;值&gt;"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>效果</h2>
<h2>属性操作</h2>
<h2>文本属性值</h2>
<h2>元素操作</h2>
<h2>尺寸、位置操作</h2>
<p>清空id为data的元素中的内容</p>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token function">$</span><span class="token punctuation">(</span><span class="token string">'#data'</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">empty</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>事件监听</h2>
<blockquote>
<ul>
<li>事件监听可以理解为比较特殊的修改元素属性值的操作。</li>
</ul>
</blockquote>
<p>==待完善==</p>
<table>
<thead>
<tr>
<th style="text-align:left">方法</th>
<th style="text-align:center">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>$&lt;元素对象&gt;.on()</code></td>
<td style="text-align:center">鼠标点击</td>
</tr>
<tr>
<td style="text-align:left"><code>$&lt;元素对象&gt;.onblur</code></td>
<td style="text-align:center">元素失去焦点</td>
</tr>
<tr>
<td style="text-align:left"><code>$&lt;元素对象&gt;.onfocus</code></td>
<td style="text-align:center">元素获得焦点</td>
</tr>
<tr>
<td style="text-align:left"><code>$&lt;元素对象&gt;.onload</code></td>
<td style="text-align:center">某个页面或图像被完成加载</td>
</tr>
<tr>
<td style="text-align:left"><code>$&lt;元素对象&gt;.onsubmit</code></td>
<td style="text-align:center">当表单提交时出发该事件</td>
</tr>
<tr>
<td style="text-align:left"><code>$&lt;元素对象&gt;.onkeydown</code></td>
<td style="text-align:center">某个键盘的键被按下</td>
</tr>
<tr>
<td style="text-align:left"><code>$&lt;元素对象&gt;.onmouseover</code></td>
<td style="text-align:center">鼠标被移到某个元素上</td>
</tr>
<tr>
<td style="text-align:left"><code>$&lt;元素对象&gt;.onmouseout</code></td>
<td style="text-align:center">鼠标从某个元素上移开</td>
</tr>
<tr>
<td style="text-align:left">==待完善==</td>
<td style="text-align:center"></td>
</tr>
</tbody>
</table>
<p><strong>案例</strong></p>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>循环</h2>
<p><strong>格式</strong></p>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token comment">// 传入需要遍历循环的数组</span></span>
<span class="line"><span class="token comment">// 自动每循环一次，就执行一次`function()`函数</span></span>
<span class="line"><span class="token comment">// function(i, item)，i代表当前循环的索引，item代表当前循环的数值</span></span>
<span class="line">$<span class="token punctuation">.</span><span class="token function">each</span><span class="token punctuation">(</span><span class="token operator">&lt;</span>循环数组<span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token parameter">i<span class="token punctuation">,</span> item</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">    console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>item<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>发起请求与接收响应</h2>
<h3><code>$.get()</code></h3>
<blockquote>
<ul>
<li>专门用于发起get请求，从而将服务器上的资源请求到客户端来进行使用。</li>
</ul>
</blockquote>
<p><strong>格式</strong></p>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token comment">// url：请求的资源地址</span></span>
<span class="line"><span class="token comment">// data：（可选）请求资源期间要携带的参数</span></span>
<span class="line"><span class="token comment">// callback：（可选）请求成功时的回调函数</span></span>
<span class="line">$<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span>url<span class="token punctuation">,</span> <span class="token punctuation">[</span>data<span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span>callback<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>案例 - 不带data参数的数据</strong></p>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token function">$</span><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 监听id是button的元素，当点击时执行该函数</span></span>
<span class="line">    <span class="token function">$</span><span class="token punctuation">(</span><span class="token string">'#button'</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">on</span><span class="token punctuation">(</span><span class="token string">'click'</span><span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        $<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token string">'http://127.0.0.1:8080/login'</span><span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token parameter">res</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>res<span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token comment">// res是服务器返回的数据</span></span>
<span class="line">        <span class="token punctuation">}</span><span class="token punctuation">)</span></span>
<span class="line">    <span class="token punctuation">}</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>案例 - 携带data参数的数据</strong></p>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token function">$</span><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 监听id是button的元素，当点击时执行该函数</span></span>
<span class="line">    <span class="token function">$</span><span class="token punctuation">(</span><span class="token string">'#button'</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">on</span><span class="token punctuation">(</span><span class="token string">'click'</span><span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        $<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token string">'http://127.0.0.1:8080/login'</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token literal-property property">id</span><span class="token operator">:</span> <span class="token number">1</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token parameter">res</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>res<span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token comment">// res是服务器返回的数据</span></span>
<span class="line">        <span class="token punctuation">}</span><span class="token punctuation">)</span></span>
<span class="line">    <span class="token punctuation">}</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3><code>$.post()</code></h3>
<ul>
<li>专门用于发起post请求，向服务器提交数据。</li>
</ul>
<p><strong>格式</strong></p>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token comment">// url：请求的资源地址</span></span>
<span class="line"><span class="token comment">// data：（可选）请求资源期间要携带的参数</span></span>
<span class="line"><span class="token comment">// callback：（可选）请求成功时的回调函数</span></span>
<span class="line">$<span class="token punctuation">.</span><span class="token function">post</span><span class="token punctuation">(</span>url<span class="token punctuation">,</span> <span class="token punctuation">[</span>data<span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span>callback<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>案例 - 携带data参数的数据</strong></p>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token function">$</span><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 监听id是button的元素，当点击时执行该函数</span></span>
<span class="line">    <span class="token function">$</span><span class="token punctuation">(</span><span class="token string">'#button'</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">on</span><span class="token punctuation">(</span><span class="token string">'click'</span><span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        $<span class="token punctuation">.</span><span class="token function">post</span><span class="token punctuation">(</span><span class="token string">'http://127.0.0.1:8080/login'</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token literal-property property">name</span><span class="token operator">:</span> <span class="token string">"小明"</span><span class="token punctuation">,</span> <span class="token literal-property property">age</span><span class="token operator">:</span> <span class="token number">18</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token parameter">res</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>res<span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token comment">// res是服务器返回的数据</span></span>
<span class="line">        <span class="token punctuation">}</span><span class="token punctuation">)</span></span>
<span class="line">    <span class="token punctuation">}</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3><code>$.ajax()</code></h3>
<ul>
<li>能比较综合的函数，允许我们对ajax请求进行更详细的配置。</li>
</ul>
<p><strong>格式</strong></p>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line">$<span class="token punctuation">.</span><span class="token function">ajax</span><span class="token punctuation">(</span><span class="token punctuation">{</span></span>
<span class="line">    <span class="token literal-property property">type</span><span class="token operator">:</span> <span class="token string">''</span><span class="token punctuation">,</span>    <span class="token comment">// 请求方式，如GET、POST</span></span>
<span class="line">    <span class="token literal-property property">url</span><span class="token operator">:</span> <span class="token string">''</span><span class="token punctuation">,</span>     <span class="token comment">// 请求的URL地址</span></span>
<span class="line">    <span class="token literal-property property">data</span><span class="token operator">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">,</span>    <span class="token comment">// 请求携带的数据</span></span>
<span class="line">    <span class="token function-variable function">success</span><span class="token operator">:</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token parameter">res</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>   <span class="token comment">// 请求成功之后的回调函数</span></span>
<span class="line"></span>
<span class="line"><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>案例</strong></p>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line">$<span class="token punctuation">.</span><span class="token function">ajax</span><span class="token punctuation">(</span><span class="token punctuation">{</span></span>
<span class="line">    <span class="token literal-property property">type</span><span class="token operator">:</span> <span class="token string">'GET'</span><span class="token punctuation">,</span>                        <span class="token comment">// 请求方式，如GET、POST</span></span>
<span class="line">    <span class="token literal-property property">url</span><span class="token operator">:</span> <span class="token string">'http://127.0.0.1:8080/login'</span><span class="token punctuation">,</span> <span class="token comment">// 请求的URL地址</span></span>
<span class="line">    <span class="token literal-property property">data</span><span class="token operator">:</span> <span class="token punctuation">{</span>                             <span class="token comment">// 请求携带的数据</span></span>
<span class="line">        <span class="token literal-property property">name</span><span class="token operator">:</span> <span class="token string">"小明"</span><span class="token punctuation">,</span></span>
<span class="line">        <span class="token literal-property property">age</span><span class="token operator">:</span> <span class="token number">18</span></span>
<span class="line">    <span class="token punctuation">}</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token function-variable function">success</span><span class="token operator">:</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token parameter">res</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>            <span class="token comment">// 请求成功之后的回调函数</span></span>
<span class="line">        <span class="token comment">// res是服务器返回的数据</span></span>
<span class="line">        console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>res<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>案例</strong></p>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token comment">// 方法</span></span>
<span class="line"><span class="token function">$</span><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 监听id是button的元素，当点击时执行该函数</span></span>
<span class="line">    <span class="token function">$</span><span class="token punctuation">(</span><span class="token string">'#button'</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">on</span><span class="token punctuation">(</span><span class="token string">'click'</span><span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        $<span class="token punctuation">.</span><span class="token function">ajax</span><span class="token punctuation">(</span><span class="token punctuation">{</span></span>
<span class="line">            <span class="token literal-property property">type</span><span class="token operator">:</span> <span class="token string">'GET'</span><span class="token punctuation">,</span>                        <span class="token comment">// 请求方式，如GET、POST</span></span>
<span class="line">            <span class="token literal-property property">url</span><span class="token operator">:</span> <span class="token string">'http://127.0.0.1:8080/login'</span><span class="token punctuation">,</span> <span class="token comment">// 请求的URL地址</span></span>
<span class="line">            <span class="token literal-property property">data</span><span class="token operator">:</span> <span class="token punctuation">{</span>                             <span class="token comment">// 请求携带的数据</span></span>
<span class="line">                <span class="token literal-property property">name</span><span class="token operator">:</span> <span class="token string">"小明"</span><span class="token punctuation">,</span></span>
<span class="line">                <span class="token literal-property property">age</span><span class="token operator">:</span> <span class="token number">18</span></span>
<span class="line">            <span class="token punctuation">}</span><span class="token punctuation">,</span></span>
<span class="line">            <span class="token function-variable function">success</span><span class="token operator">:</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token parameter">res</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>            <span class="token comment">// 请求成功之后的回调函数</span></span>
<span class="line">                <span class="token comment">// res是服务器返回的数据</span></span>
<span class="line">                console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>res<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">        <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token punctuation">}</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>案例</h2>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token function">$</span><span class="token punctuation">(</span><span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 获取图书列表数据</span></span>
<span class="line">    <span class="token keyword">function</span> <span class="token function">getBookList</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        $<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token string">'http://127.0.0.1:8080/book'</span><span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token parameter">res</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token comment">// 判断是否获取成功，这里的响应码是后台自行设定的，并非服务器标准响应码</span></span>
<span class="line">            <span class="token keyword">if</span> <span class="token punctuation">(</span>res<span class="token punctuation">.</span>status <span class="token operator">!==</span> <span class="token number">200</span><span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token function">alert</span><span class="token punctuation">(</span><span class="token string">"获取数据失败"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">            <span class="token keyword">var</span> rows <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span></span>
<span class="line">            $<span class="token punctuation">.</span><span class="token function">each</span><span class="token punctuation">(</span>res<span class="token punctuation">.</span>data<span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token parameter">i<span class="token punctuation">,</span> item</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                rows<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span><span class="token string">"&lt;tr&gt;&lt;td&gt;"</span><span class="token operator">+</span>item<span class="token punctuation">.</span>id<span class="token operator">+</span><span class="token string">"&lt;/td&gt;&lt;td&gt;"</span><span class="token operator">+</span>item<span class="token punctuation">.</span>bookname<span class="token operator">+</span><span class="token string">"&lt;/td&gt;&lt;td&gt;"</span><span class="token operator">+</span>item<span class="token punctuation">.</span>author<span class="token operator">+</span><span class="token string">"&lt;/td&gt;&lt;td&gt;"</span><span class="token operator">+</span>item<span class="token punctuation">.</span>publisher<span class="token operator">+</span><span class="token string">"&lt;/td&gt;&lt;td&gt;&lt;a href='javascript:;' class='del' data-id='"</span><span class="token operator">+</span>item<span class="token punctuation">.</span>id<span class="token operator">+</span><span class="token string">"'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token comment">// 将一个id为tb的标签，进行清空之前渲染过的数据内容，并添加新的内容进去</span></span>
<span class="line">            <span class="token function">$</span><span class="token punctuation">(</span><span class="token string">'#tb'</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">empty</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">append</span><span class="token punctuation">(</span>rows<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token string">''</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span><span class="token punctuation">)</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token function">getBookList</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 通过代理的方式为动态添加的元素绑定点击事件</span></span>
<span class="line">    <span class="token comment">// - 通过先绑定父级的标签，再去绑定动态添加的元素</span></span>
<span class="line">    <span class="token function">$</span><span class="token punctuation">(</span><span class="token string">'tbody'</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">on</span><span class="token punctuation">(</span><span class="token string">'click'</span><span class="token punctuation">,</span> <span class="token string">'.del'</span><span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">var</span> id <span class="token operator">=</span> <span class="token function">$</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">attr</span><span class="token punctuation">(</span><span class="token string">'data-id'</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">"点击id为"</span><span class="token operator">+</span>id<span class="token operator">+</span><span class="token string">"的删除按钮"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        $<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token string">'http://127.0.0.1:8080/delbook'</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token string-property property">"id"</span><span class="token operator">:</span> id<span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token parameter">res</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token keyword">if</span><span class="token punctuation">(</span>res<span class="token punctuation">.</span>status <span class="token operator">!==</span> <span class="token number">200</span><span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token function">alert</span><span class="token punctuation">(</span><span class="token string">"删除失败"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token function">alert</span><span class="token punctuation">(</span><span class="token string">"删除成功"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token function">getBookList</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line">        <span class="token punctuation">}</span><span class="token punctuation">)</span></span>
<span class="line">    <span class="token punctuation">}</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Architecture - 分层架构</title>
      <link>https://blog.magictable.ha.cn/software/Architecture-%E5%88%86%E5%B1%82%E6%9E%B6%E6%9E%84.html</link>
      <guid>https://blog.magictable.ha.cn/software/Architecture-%E5%88%86%E5%B1%82%E6%9E%B6%E6%9E%84.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Architecture - 分层架构</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 分层（Layered）软件架构。 将系统划分为几个层次，每个层次负责不同的功能。 通常包括以下几层： 表示层（Presentation Layer）：负责与用户交互，展示数据和接收用户输入。 业务逻辑层（Business Logic Layer）：包含应用程序的核心功能，处理业务规则和逻辑。 数据访问层（Data...</description>
      <category>软件程序/软件架构</category>
      <pubDate>Tue, 25 Jun 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>分层（Layered）软件架构。</li>
<li>将系统划分为几个层次，每个层次负责不同的功能。</li>
</ul>
<p>通常包括以下几层：</p>
<ul>
<li><strong>表示层（Presentation Layer）</strong>：负责与用户交互，展示数据和接收用户输入。</li>
<li><strong>业务逻辑层（Business Logic Layer）</strong>：包含应用程序的核心功能，处理业务规则和逻辑。</li>
<li><strong>数据访问层（Data Access Layer）</strong>：负责与数据库或其他数据源交互，进行数据持久化操作。</li>
<li><strong>数据层（Data Layer）</strong>：存储数据的层，通常是数据库或文件系统。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>分离关注点</strong>：每一层专注于特定的功能，使得系统更易于理解和维护。</li>
<li><strong>可复用性</strong>：各层可以独立开发和测试，提高了代码的复用性。</li>
<li><strong>易于替换</strong>：由于各层的独立性，可以在不影响其他层的情况下替换某一层的技术或实现。</li>
<li><strong>易于扩展</strong>：可以单独扩展某一层以应对系统负载的增加。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>避免跨层调用</strong>：应严格遵守分层架构的规则，避免跨层直接调用，以保持层的独立性。</li>
<li><strong>控制层间依赖</strong>：通常上层依赖于下层，但下层不应依赖于上层。</li>
<li><strong>性能考虑</strong>：过多的层次可能会导致性能下降，因为每次请求都需要通过所有层。</li>
<li><strong>事务管理</strong>：跨层的事务管理需要谨慎处理，以确保数据的一致性。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>中等规模到大型项目</strong>：分层架构适合于规模较大、需要长期维护的项目。</li>
<li><strong>需求明确的项目</strong>：当项目的需求和业务流程相对稳定时，分层架构能够提供良好的结构和支持。</li>
<li><strong>多种客户端访问</strong>：当系统需要支持多种客户端（如Web、移动端等）时，分层架构能够很好地分离用户界面和业务逻辑。</li>
<li><strong>需要高度模块化的系统</strong>：分层架构有助于实现模块化，使得系统更易于管理和维护。</li>
</ul>
<h2>技术框架图</h2>
<blockquote>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/d161e80eeb0b89db8c9272cb2594263e.png" alt=""></p>
</blockquote>
<h2>规范要求</h2>
<p>在实际的工作之中，针对与简单java类的开发给出如下的要求：</p>
<ol>
<li>考虑到日后程序有可能出现的分布式应用问题，因此简单java类必须要实现<code>java.io.Serializable</code>接口。</li>
<li>简单java类的名称必须与表名称保持一致。</li>
</ol>
<ul>
<li>例如：表名是user，则类名称为User。</li>
</ul>
<ol start="3">
<li>类中的属性不允许使用基本数据类型，都必须使用基本数据类型的包装类。</li>
</ol>
<ul>
<li>基本数据类型的数值默认值是<code>0</code>,而包装类的默认值是<code>null</code>。</li>
</ul>
<ol start="4">
<li>类中的属性必须使用<code>private</code>关键字进行封装，封装后的属性必须提供有<code>getter</code>和<code>setter</code>方法。</li>
<li>类中可以定义有多个构造方法，但必须保留有一个无参构造方法。</li>
</ol>
<p>对于数据层的接口给出如下的开发要求：</p>
<ol>
<li>数据层用于操作数据，因此需要将代码保存到dao包目录下。</li>
<li>不同的数据表的操作有可能使用不同的数据层开发，因此数据层的文件名要针对于数据表进行命名。</li>
</ol>
<ul>
<li>例如：user表，数据层的接口应该命名为<code>IUserDAO</code>。</li>
</ul>
<ol start="3">
<li>对于整个数据层的开发严格来讲就只有两类功能：数据更新、数据查询。</li>
</ol>
<ul>
<li>数据更新：该类方法要以<code>do</code>开头的形式命名，如：doUpdate()、doUser()。</li>
<li>查询表中数据：该类方法要以<code>find</code>开头的形式命名，如：findById()、findByName()、findAll()。</li>
<li>统计表中数据：该类方法要以<code>get</code>开头的形式命名，如：getAllCount()、</li>
</ul>
]]></content:encoded>
      <enclosure url="https://i-blog.csdnimg.cn/blog_migrate/d161e80eeb0b89db8c9272cb2594263e.png" type="image/png"/>
    </item>
    <item>
      <title>Technology - 通信 - 查询手册 - API - REST</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-API-REST.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-API-REST.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 通信 - 查询手册 - API - REST</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 REST (Representational State Transfer)是一种架构风格。 用于设计网络应用程序的通信协议。 基于HTTP协议，并通过URI来识别资源，使用标准的HTTP方法来操作资源。 主要功能 资源标识：通过URI来唯一标识资源。 数据传输：使用HTTP的GET, POST, PUT, DE...</description>
      <category>学习笔记/技术</category>
      <pubDate>Sun, 23 Jun 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>REST (Representational State Transfer)是一种架构风格。</li>
<li>用于设计网络应用程序的通信协议。</li>
<li>基于HTTP协议，并通过URI来识别资源，使用标准的HTTP方法来操作资源。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>资源标识</strong>：通过URI来唯一标识资源。</li>
<li><strong>数据传输</strong>：使用HTTP的GET, POST, PUT, DELETE等方法来传输资源。</li>
<li><strong>无状态</strong>：每次请求都包含所有必要的信息，服务器不存储会话状态。</li>
<li><strong>可缓存</strong>：响应可以被缓存以提高性能。</li>
<li><strong>分层系统</strong>：客户端和服务器之间的通信可以经过多个中间层。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>安全性</strong>：确保使用HTTPS来加密数据传输。</li>
<li><strong>错误处理</strong>：返回合适的HTTP状态码来指示错误的类型。</li>
<li><strong>版本控制</strong>：在设计API时要考虑未来的版本更新，避免破坏现有的客户端。</li>
<li><strong>限流和速率限制</strong>：防止服务被过度使用，保护服务器资源。</li>
<li><strong>文档化</strong>：提供详细的API文档，帮助开发者理解和使用API。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>Web服务</strong>：为Web应用提供数据接口。</li>
<li><strong>移动应用</strong>：作为移动应用的后端服务接口。</li>
<li><strong>物联网(IoT)</strong>：设备之间的数据交换和命令传递。</li>
<li><strong>微服务架构</strong>：微服务之间的通信接口。</li>
<li><strong>公开API</strong>：允许第三方开发者访问服务的数据或功能。</li>
</ul>
<h2>格式</h2>
<p>传统风格资源描述格式：<a href="/note/Technology-%E9%80%9A%E4%BF%A1-%E5%8D%8F%E8%AE%AE-HTTP.html" target="_blank">HTTP协议</a></p>
<ul>
<li><code>http://localhost/user/getById?id=1</code></li>
<li><code>http://localhost/user/saveUser</code></li>
</ul>
<p>REST风格描述格式：</p>
<ul>
<li><code>http://localhost/user/1</code></li>
<li><code>http://localhost/user</code></li>
</ul>
<p>| 请求方式        | 请求URL                      | 说明       |
|</p>
]]></content:encoded>
    </item>
    <item>
      <title>DesignPattern - 策略模式</title>
      <link>https://blog.magictable.ha.cn/software/DesignPattern-%E7%AD%96%E7%95%A5%E6%A8%A1%E5%BC%8F.html</link>
      <guid>https://blog.magictable.ha.cn/software/DesignPattern-%E7%AD%96%E7%95%A5%E6%A8%A1%E5%BC%8F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">DesignPattern - 策略模式</source>
      <description>文章摘要： 策略模式使用总结。 简介 简要说明 策略模式（Strategy Pattern）是一种行为型设计模式。 允许在运行时选择不同的算法行为，通过将算法封装在独立的类中，并在运行时根据需要切换这些算法。 主要功能 定义了一系列的算法，并将每一个算法封装起来，使它们可以互相替换。 允许算法的变化独立于使用算法的客户。 允许客户端从算法中解耦，算法可...</description>
      <category>软件程序/设计模式</category>
      <pubDate>Tue, 18 Jun 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 策略模式使用总结。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>策略模式（Strategy Pattern）是一种行为型设计模式。</li>
<li>允许在运行时选择不同的算法行为，通过将算法封装在独立的类中，并在运行时根据需要切换这些算法。</li>
</ul>
<p>主要功能</p>
<ul>
<li>定义了一系列的算法，并将每一个算法封装起来，使它们可以互相替换。</li>
<li>允许算法的变化独立于使用算法的客户。</li>
<li>允许客户端从算法中解耦，算法可以独立于客户端变化。</li>
</ul>
<p>注意事项</p>
<ul>
<li>客户端必须知道所有的策略类，并能够决定使用哪一个策略类。</li>
<li>策略模式造成很多策略类，每个具体策略类都会产生一个新类。</li>
<li>所有的策略类都需要对外暴露出一个公共接口，较高的抽象水平可能会导致具体实现策略时的一些限制。</li>
</ul>
<p>适用场景</p>
<ul>
<li>当一个系统需要在几种算法中动态选择一种时。</li>
<li>当一个对象有很多的行为，并且这些行为在这个对象的类中会以多个条件语句的形式出现时。</li>
<li>当算法使用的数据从外部传入时，策略模式可以避免暴露复杂的、与算法相关的数据结构。</li>
</ul>
<h2>Java 8</h2>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 策略接口，定义所有支持的算法的公共操作</span></span>
<span class="line"><span class="token keyword">interface</span> <span class="token class-name">Strategy</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">int</span> <span class="token function">doOperation</span><span class="token punctuation">(</span><span class="token keyword">int</span> num1<span class="token punctuation">,</span> <span class="token keyword">int</span> num2<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 具体策略类，实现了策略接口</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">OperationAdd</span> <span class="token keyword">implements</span> <span class="token class-name">Strategy</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 加法算法</span></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">int</span> <span class="token function">doOperation</span><span class="token punctuation">(</span><span class="token keyword">int</span> num1<span class="token punctuation">,</span> <span class="token keyword">int</span> num2<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">return</span> num1 <span class="token operator">+</span> num2<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">OperationSubtract</span> <span class="token keyword">implements</span> <span class="token class-name">Strategy</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 减法算法</span></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">int</span> <span class="token function">doOperation</span><span class="token punctuation">(</span><span class="token keyword">int</span> num1<span class="token punctuation">,</span> <span class="token keyword">int</span> num2<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">return</span> num1 <span class="token operator">-</span> num2<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">OperationMultiply</span> <span class="token keyword">implements</span> <span class="token class-name">Strategy</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 乘法算法</span></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">int</span> <span class="token function">doOperation</span><span class="token punctuation">(</span><span class="token keyword">int</span> num1<span class="token punctuation">,</span> <span class="token keyword">int</span> num2<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">return</span> num1 <span class="token operator">*</span> num2<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 上下文类，使用某种策略</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">Context</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">Strategy</span> strategy<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 设置策略</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setStrategy</span><span class="token punctuation">(</span><span class="token class-name">Strategy</span> strategy<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>strategy <span class="token operator">=</span> strategy<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 执行策略</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">int</span> <span class="token function">executeStrategy</span><span class="token punctuation">(</span><span class="token keyword">int</span> num1<span class="token punctuation">,</span> <span class="token keyword">int</span> num2<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">return</span> strategy<span class="token punctuation">.</span><span class="token function">doOperation</span><span class="token punctuation">(</span>num1<span class="token punctuation">,</span> num2<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 客户端代码，使用策略模式</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">StrategyPatternDemo</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">Context</span> context <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Context</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 设置加法策略</span></span>
<span class="line">        context<span class="token punctuation">.</span><span class="token function">setStrategy</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">OperationAdd</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"10 + 5 = "</span> <span class="token operator">+</span> context<span class="token punctuation">.</span><span class="token function">executeStrategy</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 设置减法策略</span></span>
<span class="line">        context<span class="token punctuation">.</span><span class="token function">setStrategy</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">OperationSubtract</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"10 - 5 = "</span> <span class="token operator">+</span> context<span class="token punctuation">.</span><span class="token function">executeStrategy</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 设置乘法策略</span></span>
<span class="line">        context<span class="token punctuation">.</span><span class="token function">setStrategy</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">OperationMultiply</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"10 * 5 = "</span> <span class="token operator">+</span> context<span class="token punctuation">.</span><span class="token function">executeStrategy</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>在这个例子中，<code>Strategy</code>接口定义了一个方法<code>doOperation</code>，它将由具体的策略类实现。<code>OperationAdd</code>、<code>OperationSubtract</code>和<code>OperationMultiply</code>是三个具体的策略类，它们分别实现了加法、减法和乘法算法。</li>
<li><code>Context</code>类是上下文类，它持有一个策略对象，并提供了一个设置策略的方法<code>setStrategy</code>和执行策略的方法<code>executeStrategy</code>。</li>
<li>客户端代码<code>StrategyPatternDemo</code>创建了<code>Context</code>对象，并通过调用<code>setStrategy</code>方法来设置不同的策略。然后，它调用<code>executeStrategy</code>方法来执行所选的策略，并打印结果。通过这种方式，客户端可以在运行时动态地改变算法行为。</li>
</ul>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>DesignPattern - 单例模式</title>
      <link>https://blog.magictable.ha.cn/software/DesignPattern-%E5%8D%95%E4%BE%8B%E6%A8%A1%E5%BC%8F.html</link>
      <guid>https://blog.magictable.ha.cn/software/DesignPattern-%E5%8D%95%E4%BE%8B%E6%A8%A1%E5%BC%8F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">DesignPattern - 单例模式</source>
      <description>文章摘要： 单例模式使用总结。 简介 简要说明 单例模式（Singleton Pattern）是一种创建型设计模式。 单例类只能有一个实例。 单例类必须自己创建自己的实例。 单例类必须给所有其他对象提供仅这唯一实例。 主要功能 控制实例的数量，确保全局只有一个实例。 提供全局访问点。 注意事项 线程安全：确保单例模式在多线程环境中正确实现，避免多个线程...</description>
      <category>软件程序/设计模式</category>
      <pubDate>Mon, 17 Jun 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 单例模式使用总结。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>单例模式（Singleton Pattern）是一种创建型设计模式。</li>
<li>单例类只能有一个实例。</li>
<li>单例类必须自己创建自己的实例。</li>
<li>单例类必须给所有其他对象提供仅这唯一实例。</li>
</ul>
<p>主要功能</p>
<ul>
<li>控制实例的数量，确保全局只有一个实例。</li>
<li>提供全局访问点。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>线程安全</strong>：确保单例模式在多线程环境中正确实现，避免多个线程同时创建单例类的多个实例。</li>
<li><strong>延迟加载</strong>：如果单例类在初始化时需要消耗大量资源，应考虑使用延迟加载（懒汉模式），以避免不必要的资源消耗。</li>
<li><strong>序列化问题</strong>：如果单例类需要被序列化，需要确保反序列化时不会创建新的实例。</li>
<li><strong>防止反射攻击</strong>：反射可以破坏单例模式，需要采取措施防止通过反射创建多个实例。</li>
<li><strong>避免全局状态</strong>：单例模式可能导致全局状态，这在某些情况下可能导致代码难以测试和维护。</li>
<li><strong>资源释放</strong>：单例类可能会长时间存在于系统中，需要确保适时释放其持有的资源，避免内存泄漏。</li>
<li><strong>依赖注入</strong>：尽量使用依赖注入而非单例模式来提供实例，这样可以提高代码的灵活性和可测试性。</li>
<li><strong>单例的范围</strong>：确定单例的范围，是进程级别的还是类加载器级别的，根据需求合理选择。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>资源共享</strong>：当系统中需要一个类来控制对某种资源的访问，确保资源不被重复创建，如数据库连接池、线程池、文件系统操作等。</li>
<li><strong>全局配置</strong>：需要全局访问的配置对象，例如系统的配置信息。</li>
<li><strong>全局控制</strong>：某些需要全局统一管理或调度的类，如日志管理器、全局唯一序列号生成器。</li>
<li><strong>唯一序列号生成器</strong>：生成唯一序列号，确保系统内不会产生重复的序列号。</li>
<li><strong>同步访问</strong>：需要同步访问的资源或服务，确保操作的原子性。</li>
</ul>
<h2>Java 8</h2>
<p>案例 - 懒汉式的单例模式</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Test</span> <span class="token punctuation">{</span>  </span>
<span class="line">  </span>
<span class="line">    <span class="token comment">// 私有、静态的变量  </span></span>
<span class="line">    <span class="token comment">// 存储该类的实例化对象  </span></span>
<span class="line">    <span class="token comment">// 确保外部获取到的是唯一的  </span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token keyword">static</span> <span class="token class-name">Test</span> test<span class="token punctuation">;</span>  </span>
<span class="line">  </span>
<span class="line">    <span class="token comment">// 构造方法 - 私有  </span></span>
<span class="line">    <span class="token comment">// 不允许外部通过构造方法创建该类的对象  </span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">Test</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>  </span>
<span class="line">  </span>
<span class="line">    <span class="token punctuation">}</span>  </span>
<span class="line">  </span>
<span class="line">    <span class="token comment">// 对外提供获取该类对象的方法  </span></span>
<span class="line">    <span class="token comment">// 静态、线程安全  </span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">synchronized</span> <span class="token class-name">Test</span> <span class="token function">getTest</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>  </span>
<span class="line">        <span class="token comment">// 判断该类创建的对象是否存在  </span></span>
<span class="line">        <span class="token keyword">if</span> <span class="token punctuation">(</span>test <span class="token operator">==</span> <span class="token keyword">null</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>  </span>
<span class="line">            <span class="token comment">// 创建对象，并赋值给成员变量中  </span></span>
<span class="line">            test <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Test</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  </span>
<span class="line">        <span class="token punctuation">}</span>  </span>
<span class="line">        <span class="token keyword">return</span> test<span class="token punctuation">;</span>  </span>
<span class="line">    <span class="token punctuation">}</span>  </span>
<span class="line">  </span>
<span class="line"><span class="token punctuation">}</span> </span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>案例 - 饿汉式的单例模式</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Test</span> <span class="token punctuation">{</span>  </span>
<span class="line">  </span>
<span class="line">    <span class="token comment">// 私有、静态的变量  </span></span>
<span class="line">    <span class="token comment">// 存储该类的实例化对象  </span></span>
<span class="line">    <span class="token comment">// 确保外部获取到的是唯一的  </span></span>
<span class="line">    <span class="token comment">// 此处直接初始化，创建该类的实例对象  </span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token keyword">static</span> <span class="token class-name">Test</span> test <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Test</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  </span>
<span class="line">  </span>
<span class="line">    <span class="token comment">// 构造方法 - 私有  </span></span>
<span class="line">    <span class="token comment">// 不允许外部通过构造方法创建该类的对象  </span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">Test</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>  </span>
<span class="line">  </span>
<span class="line">    <span class="token punctuation">}</span>  </span>
<span class="line">  </span>
<span class="line">    <span class="token comment">// 对外提供获取该类对象的方法  </span></span>
<span class="line">    <span class="token comment">// 静态、没有线程安全  </span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token class-name">Test</span> <span class="token function">getTest</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>  </span>
<span class="line">        <span class="token comment">// 不需要再判断是否已经实例化，因为从一开始已经完成创建  </span></span>
<span class="line">        <span class="token keyword">return</span> test<span class="token punctuation">;</span>  </span>
<span class="line">    <span class="token punctuation">}</span>  </span>
<span class="line">  </span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>DesignPattern（设计模式）</title>
      <link>https://blog.magictable.ha.cn/software/DesignPattern%EF%BC%88%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%EF%BC%89.html</link>
      <guid>https://blog.magictable.ha.cn/software/DesignPattern%EF%BC%88%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%EF%BC%89.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">DesignPattern（设计模式）</source>
      <description>文章摘要： 设计模式是一组经过验证的代码结构或模板，用于解决常见的设计问题。 简介 设计模式的作用 设计模式是解决常见设计问题的经验总结，它提供了一种通用的、最佳实践的解决方案。 设计模式可以帮助我们更好地组织代码，提高代码的可重用性、可维护性和可扩展性。 设计模式的分类 创建型设计模式（5种）：单例模式、原型模式、工厂方法模式、抽象工厂模式、建造者模...</description>
      <category>软件程序/设计模式</category>
      <pubDate>Mon, 17 Jun 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 设计模式是一组经过验证的代码结构或模板，用于解决常见的设计问题。</p>
<!-- more -->
<h2>简介</h2>
<p>设计模式的作用</p>
<ul>
<li>设计模式是解决常见设计问题的经验总结，它提供了一种通用的、最佳实践的解决方案。</li>
<li>设计模式可以帮助我们更好地组织代码，提高代码的可重用性、可维护性和可扩展性。</li>
</ul>
<p>设计模式的分类</p>
<ul>
<li><strong>创建型设计模式</strong>（5种）：单例模式、原型模式、工厂方法模式、抽象工厂模式、建造者模式</li>
<li><strong>结构型设计模式</strong>（7种）：代理模式、适配器模式、桥接模式、装饰器模式、外观模式、享元模式、组合模式</li>
<li><strong>行为型设计模式</strong>（11种）：责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式、访问者模式</li>
</ul>
<h2>基础知识</h2>
<h3>设计模式七大原则</h3>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>设计模式的七大原则通常被称为“SOLID原则”，是面向对象设计中的基本原则，能够帮助开发人员编写出更加灵活、可扩展、可维护的代码。</p>
</div>
<p>详细总结：<a href="/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E7%9A%84%E4%B8%83%E5%A4%A7%E5%8E%9F%E5%88%99.html" target="_blank">基础知识-设计模式的七大原则</a></p>
<h2>创建型设计模式（5种）</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
</div>
<h3>单例模式</h3>
<ul>
<li><strong>英文</strong>：Singleton Pattern</li>
<li><strong>说明</strong>：确保某一个类只有一个实例，而且自行实例化并向整个系统提供这个实例。</li>
</ul>
<p>详细总结：<a href="/software/DesignPattern-%E5%8D%95%E4%BE%8B%E6%A8%A1%E5%BC%8F.html" target="_blank">单例模式</a></p>
<h3>原型模式</h3>
<ul>
<li><strong>英文</strong>：Prototype Pattern</li>
<li><strong>说明</strong>：通过复制现有的实例来创建新的对象，而不是使用构造函数。</li>
</ul>
<p>详细总结：<a href="/software/DesignPattern-%E5%8E%9F%E5%9E%8B%E6%A8%A1%E5%BC%8F.html" target="_blank">原型模式</a></p>
<h3>工厂方法模式</h3>
<ul>
<li><strong>英文</strong>：Factory Pattern</li>
<li><strong>说明</strong>：定义一个创建对象的接口，让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。</li>
</ul>
<p>详细总结：<a href="/software/DesignPattern-%E5%B7%A5%E5%8E%82%E6%96%B9%E6%B3%95%E6%A8%A1%E5%BC%8F.html" target="_blank">工厂方法模式</a></p>
<h3>抽象工厂模式</h3>
<ul>
<li><strong>英文</strong>：Abstract Factory Pattern</li>
<li><strong>说明</strong>：提供一个创建一系列相关或相互依赖对象的接口，而无需指定它们的具体类。</li>
</ul>
<p>详细总结：<a href="/software/DesignPattern-%E6%8A%BD%E8%B1%A1%E5%B7%A5%E5%8E%82%E6%A8%A1%E5%BC%8F.html" target="_blank">抽象工厂模式</a></p>
<h3>建造者模式</h3>
<ul>
<li><strong>英文</strong>：Builder Pattern</li>
<li><strong>说明</strong>：将一个复杂对象的构建与其表示分离，使得同样的构建过程可以创建不同的表示。</li>
</ul>
<p>详细总结：<a href="/software/DesignPattern-%E5%BB%BA%E9%80%A0%E8%80%85%E6%A8%A1%E5%BC%8F.html" target="_blank">建造者模式</a></p>
<h2>结构型设计模式（7种）</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
</div>
<h3>代理模式</h3>
<ul>
<li><strong>英文</strong>：Proxy Pattern</li>
<li><strong>说明</strong>：为其他对象提供一种代理以控制对这个对象的访问。代理对象可以在被代理对象执行操作前后进行一些预处理和后处理。</li>
</ul>
<p>详细总结：<a href="/software/DesignPattern-%E4%BB%A3%E7%90%86%E6%A8%A1%E5%BC%8F.html" target="_blank">代理模式</a></p>
<h3>适配器模式</h3>
<ul>
<li><strong>英文</strong>：Adapter Pattern</li>
<li><strong>说明</strong>：将一个类的接口转换成客户端所期望的另一个接口，使得原本由于接口不兼容而无法协同工作的类能够一起工作。</li>
</ul>
<p>详细总结：<a href="/software/DesignPattern-%E9%80%82%E9%85%8D%E5%99%A8%E6%A8%A1%E5%BC%8F.html" target="_blank">适配器模式</a></p>
<h3>桥接模式</h3>
<ul>
<li><strong>英文</strong>：Bridge Pattern</li>
<li><strong>说明</strong>：将抽象部分与它的实现部分分离，使它们都可以独立地变化。</li>
</ul>
<p>详细总结：<a href="/software/DesignPattern-%E6%A1%A5%E6%8E%A5%E6%A8%A1%E5%BC%8F.html" target="_blank">桥接模式</a></p>
<h3>装饰器模式</h3>
<ul>
<li><strong>英文</strong>：Decorator Pattern</li>
<li><strong>说明</strong>：可以在不改变对象结构的情况下，动态地给对象添加一些额外的职责。提供了一种灵活的替代继承的方式。</li>
</ul>
<p>详细总结：<a href="/software/DesignPattern-%E8%A3%85%E9%A5%B0%E5%99%A8%E6%A8%A1%E5%BC%8F.html" target="_blank">装饰器模式</a></p>
<h3>门面模式</h3>
<ul>
<li><strong>英文</strong>：Facade Pattern</li>
<li>又称：外观模式</li>
<li><strong>说明</strong>：为子系统中的一组接口提供一个一致的界面，使得子系统更容易使用。提供了一个统一的接口，用于隐藏系统的复杂性，并使得子系统更加易于使用。</li>
</ul>
<p>详细总结：<a href="/software/DesignPattern-%E9%97%A8%E9%9D%A2%E6%A8%A1%E5%BC%8F.html" target="_blank">门面模式</a></p>
<h3>享元模式</h3>
<ul>
<li><strong>英文</strong>：Flyweight Pattern</li>
<li><strong>说明</strong>：运用共享技术来有效地支持大量细粒度对象的复用。</li>
</ul>
<p>详细总结：<a href="/software/DesignPattern-%E4%BA%AB%E5%85%83%E6%A8%A1%E5%BC%8F.html" target="_blank">享元模式</a></p>
<h3>组合模式</h3>
<ul>
<li><strong>英文</strong>：Composite Pattern</li>
<li><strong>说明</strong>：将对象组合成树形结构以表示部分-整体的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。</li>
</ul>
<p>详细总结：<a href="/software/DesignPattern-%E7%BB%84%E5%90%88%E6%A8%A1%E5%BC%8F.html" target="_blank">组合模式</a></p>
<h2>行为型设计模式（11种）</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
</div>
<h3>模板方法模式</h3>
<ul>
<li><strong>英文</strong>：Template Method Pattern</li>
<li><strong>说明</strong>：定义一个算法框架，并将一些步骤延迟到子类中实现，以便在不改变算法结构的情况下，允许子类重定义算法的某些步骤。</li>
</ul>
<p>详细总结：<a href="/software/DesignPattern-%E6%A8%A1%E6%9D%BF%E6%96%B9%E6%B3%95%E6%A8%A1%E5%BC%8F.html" target="_blank">模板方法模式</a></p>
<h3>策略模式</h3>
<ul>
<li><strong>英文</strong>：Strategy Pattern</li>
<li><strong>说明</strong>：定义一系列算法，将每个算法都封装起来，并使它们之间可以互换。策略模式使得算法可以独立于使用它的客户而变化。</li>
</ul>
<p>详细总结：<a href="/software/DesignPattern-%E7%AD%96%E7%95%A5%E6%A8%A1%E5%BC%8F.html" target="_blank">策略模式</a></p>
<h3>命令模式</h3>
<ul>
<li><strong>英文</strong>：Command Pattern</li>
<li><strong>说明</strong>：将请求封装成一个对象，从而使你可以用不同的请求对客户进行参数化。命令模式也支持撤销操作。</li>
</ul>
<p>详细总结：<a href="/software/DesignPattern-%E5%91%BD%E4%BB%A4%E6%A8%A1%E5%BC%8F.html" target="_blank">命令模式</a></p>
<h3>责任链模式</h3>
<ul>
<li><strong>英文</strong>：Chain of Responsibility Pattern</li>
<li><strong>说明</strong>：为解除请求的发送者和接收者之间耦合，而使多个对象都有机会处理这个请求。</li>
</ul>
<p>详细总结：<a href="/software/DesignPattern-%E8%B4%A3%E4%BB%BB%E9%93%BE%E6%A8%A1%E5%BC%8F.html" target="_blank">责任链模式</a></p>
<h3>状态模式</h3>
<ul>
<li><strong>英文</strong>：State Pattern</li>
<li><strong>说明</strong>：允许对象在其内部状态发生改变时改变它的行为。对象看起来似乎修改了它的类。</li>
</ul>
<p>详细总结：<a href="/software/DesignPattern-%E7%8A%B6%E6%80%81%E6%A8%A1%E5%BC%8F.html" target="_blank">状态模式</a></p>
<h3>观察者模式</h3>
<ul>
<li><strong>英文</strong>：Observer Pattern</li>
<li>又称：订阅者模式</li>
<li><strong>说明</strong>：定义对象间的一种一对多的依赖关系，使得每当一个对象状态发生改变时，所有依赖它的对象都会得到通知并自动更新。</li>
</ul>
<p>详细总结：<a href="/software/DesignPattern-%E8%A7%82%E5%AF%9F%E8%80%85%E6%A8%A1%E5%BC%8F.html" target="_blank">观察者模式</a></p>
<h3>中介者模式</h3>
<ul>
<li><strong>英文</strong>：Mediator Pattern</li>
<li><strong>说明</strong>：用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显式地相互作用，从而使其耦合松散，而且可以独立地改变它们之间的交互。</li>
</ul>
<p>详细总结：<a href="/software/DesignPattern-%E4%B8%AD%E4%BB%8B%E8%80%85%E6%A8%A1%E5%BC%8F.html" target="_blank">中介者模式</a></p>
<h3>迭代器模式</h3>
<ul>
<li><strong>英文</strong>：Iterator Pattern</li>
<li><strong>说明</strong>：提供一种方法顺序访问一个聚合对象中的各个元素，而又不暴露该对象的内部表示。</li>
</ul>
<p>详细总结：<a href="/software/DesignPattern-%E8%BF%AD%E4%BB%A3%E5%99%A8%E6%A8%A1%E5%BC%8F.html" target="_blank">迭代器模式</a></p>
<h3>访问者模式</h3>
<ul>
<li><strong>英文</strong>：Visitor Pattern</li>
<li><strong>说明</strong>：是一种行为型设计模式，它可以让你在不修改对象结构的前提下，定义作用于这些对象元素的新操作。</li>
</ul>
<p>详细总结：<a href="/software/DesignPattern-%E8%AE%BF%E9%97%AE%E8%80%85%E6%A8%A1%E5%BC%8F.html" target="_blank">访问者模式</a></p>
<h3>备忘录模式</h3>
<ul>
<li><strong>英文</strong>：Memento Pattern</li>
<li><strong>说明</strong>：在不破坏封装性的前提下，捕获一个对象的内部状态，并在该对象之外保存这个状态。备忘录模式可以在需要时将对象恢复到先前的状态。</li>
</ul>
<p>详细总结：<a href="/software/DesignPattern-%E5%A4%87%E5%BF%98%E5%BD%95%E6%A8%A1%E5%BC%8F.html" target="_blank">备忘录模式</a></p>
<h3>解释器模式</h3>
<ul>
<li><strong>英文</strong>：Interpreter Pattern</li>
<li><strong>说明</strong>：是一种行为型设计模式，它提供了一种方法，可以在运行时解释语言文法中的表达式，并执行相应的操作。</li>
</ul>
<p>详细总结：<a href="/software/DesignPattern-%E8%A7%A3%E9%87%8A%E5%99%A8%E6%A8%A1%E5%BC%8F.html" target="_blank">解释器模式</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>基础知识 - 设计模式的七大原则</title>
      <link>https://blog.magictable.ha.cn/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E7%9A%84%E4%B8%83%E5%A4%A7%E5%8E%9F%E5%88%99.html</link>
      <guid>https://blog.magictable.ha.cn/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E7%9A%84%E4%B8%83%E5%A4%A7%E5%8E%9F%E5%88%99.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">基础知识 - 设计模式的七大原则</source>
      <description>文章摘要： 设计模式七种原则汇总。 单一职责原则 （Single Responsibility Principle，SRP） 一个类只负责一个职责或一个功能。 这个原则强调的是高内聚、低耦合，可以降低类的复杂度，提高代码的可读性、可维护性和可重用性。 开闭原则 （Open-Closed Principle，OCP） 一个类的行为应该是可扩展的，但是不可...</description>
      <category>软件程序/设计模式</category>
      <pubDate>Mon, 17 Jun 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 设计模式七种原则汇总。</p>
<!-- more -->
<h3>单一职责原则</h3>
<ul>
<li>（Single Responsibility Principle，SRP）</li>
<li>一个类只负责一个职责或一个功能。</li>
<li>这个原则强调的是高内聚、低耦合，可以降低类的复杂度，提高代码的可读性、可维护性和可重用性。</li>
</ul>
<h3>开闭原则</h3>
<ul>
<li>（Open-Closed Principle，OCP）</li>
<li>一个类的行为应该是可扩展的，但是不可修改。</li>
<li>这个原则强调的是代码的可维护性和可扩展性，通过抽象化来避免修改已有代码的风险，从而降低软件维护的成本。</li>
</ul>
<h3>里氏替换原则</h3>
<ul>
<li>（Liskov Substitution Principle，LSP）</li>
<li>子类应该可以替换其父类并且不会影响程序的正确性。</li>
<li>这个原则强调的是面向对象的继承和多态特性，通过保证子类的行为和父类一致，从而提高代码的可维护性和可扩展性。</li>
</ul>
<h3>接口隔离原则</h3>
<ul>
<li>（Interface Segregation Principle，ISP）</li>
<li>一个类不应该依赖它不需要的接口，即一个类对其它类的依赖应该建立在最小的接口上。</li>
<li>这个原则强调的是接口设计的合理性，避免不必要的接口导致类之间的耦合性过高，从而提高代码的灵活性和可维护性。</li>
</ul>
<h3>依赖倒置原则</h3>
<ul>
<li>（Dependency Inversion Principle，DIP）</li>
<li>依赖于抽象而不是依赖于具体实现。</li>
<li>这个原则强调的是代码的可扩展性和可维护性，通过抽象化来减少组件之间的耦合性，从而使得代码更加灵活、易于维护和扩展。</li>
</ul>
<h3>迪米特法则</h3>
<ul>
<li>（Law of Demeter，LoD）</li>
<li>也叫最少知识原则（Least Knowledge Principle，LKP），</li>
<li>一个对象应当对其他对象有尽可能少的了解，不需要了解的内容尽量不要去了解。</li>
<li>这个原则强调的是组件之间的松耦合，通过减少组件之间的依赖关系，提高代码的可维护性和可重用性。</li>
</ul>
<h3>组合/聚合复用原则</h3>
<ul>
<li>（Composite/Aggregate Reuse Principle，CARP）</li>
<li>尽量使用组合或聚合关系，而不是继承关系来达到代码复用的目的。</li>
<li>这个原则强调的是通过组合和聚合的方式来实现代码复用，避免继承带来的一些问题，如父类和子类之间的强耦合性，从而提高代码的灵活性和可维护性。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 通信 - 协议 - HTTP</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E5%8D%8F%E8%AE%AE-HTTP.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E5%8D%8F%E8%AE%AE-HTTP.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 通信 - 协议 - HTTP</source>
      <description>文章摘要： HTTP（超文本传输协议）是互联网上应用最为广泛的协议之一，主要用于在Web服务器和客户端浏览器之间传输数据。 简介 简要说明 HTTP是一种无状态的、应用层的通信协议。 定义了客户端（通常是浏览器）和服务器之间请求和响应的格式。 HTTP使用统一资源定位符（URLs）来定位网络上的资源，并通过一系列的方法（如GET、POST等）来操作这些...</description>
      <category>学习笔记/技术</category>
      <pubDate>Sun, 16 Jun 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> HTTP（超文本传输协议）是互联网上应用最为广泛的协议之一，主要用于在Web服务器和客户端浏览器之间传输数据。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>HTTP是一种无状态的、应用层的通信协议。</li>
<li>定义了客户端（通常是浏览器）和服务器之间请求和响应的格式。</li>
<li>HTTP使用统一资源定位符（URLs）来定位网络上的资源，并通过一系列的方法（如GET、POST等）来操作这些资源。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>资源请求</strong>：客户端可以通过HTTP请求访问服务器上的资源，如HTML页面、图片、视频等。</li>
<li><strong>数据传输</strong>：HTTP支持将请求的数据和响应的数据在客户端和服务器之间传输。</li>
<li><strong>状态码反馈</strong>：服务器通过返回不同的状态码（如200表示成功，404表示未找到）来告知客户端请求的处理结果。</li>
<li><strong>会话管理</strong>：虽然HTTP本身是无状态的，但通过Cookie等技术可以在客户端和服务器之间维护会话状态。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>安全性</strong>：HTTP不提供数据加密，容易受到中间人攻击。对于敏感数据的传输，应使用HTTPS（HTTP Secure）。</li>
<li><strong>数据完整性</strong>：HTTP不保证数据的完整性，可能会在传输过程中被篡改。HTTPS通过SSL/TLS加密可以提供更好的数据完整性保护。</li>
<li><strong>性能优化</strong>：HTTP请求可能会影响页面加载速度，应合理使用缓存、压缩等技术来优化性能。</li>
<li><strong>错误处理</strong>：服务器和客户端都应妥善处理HTTP错误，如重定向、错误提示等。</li>
<li><strong>兼容性</strong>：不同的HTTP版本（如HTTP/1.1、HTTP/2）可能在功能和支持上有所不同，需要确保客户端和服务器之间的兼容性。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>网页浏览</strong>：用户通过浏览器访问网页时，使用HTTP协议来请求和接收网页内容。</li>
<li><strong>API交互</strong>：Web服务通常使用HTTP协议来提供API接口，供客户端应用程序调用。</li>
<li><strong>文件传输</strong>：HTTP协议可以用于上传和下载文件，如通过浏览器上传图片或下载软件安装包。</li>
<li><strong>单页应用（SPA）</strong>：现代单页应用通常使用HTTP协议与后端进行数据交互，实现动态内容更新。</li>
<li><strong>移动应用</strong>：移动应用经常使用HTTP协议与服务器进行数据同步和更新。</li>
</ul>
<h2>格式详情</h2>
<ul>
<li><strong>URI</strong>：统一资源标识符，代表网络中某个资源的名称或地址，用来标识网络上的资源，包括了URL和URN。</li>
<li><strong>URL</strong>：统一资源定位符，网络资源的地址，告诉你如何找到它。</li>
<li><strong>URN</strong>：Uniform Resource Name，统一资源名称。</li>
</ul>
<p>例子：<code>http://www.baidu.com:80/index.html?name=xiaoming&amp;age=18#a</code></p>
<ul>
<li>协议：<code>http</code></li>
<li>域名/IP：<code>www.baidu.com</code> == <code>202.108.22.5</code></li>
<li>端口：<code>80</code></li>
<li>请求静态资源名称/请求模块：<code>/login</code>、<code>/index.html</code></li>
<li>参数：<code>name=xiaoming&amp;age=18</code></li>
<li>锚点：<code>a</code></li>
</ul>
<h2>请求格式</h2>
<ul>
<li>客户端发送请求：<code>request</code></li>
<li>请求头中的内容是以“键值对”的形式存储。</li>
</ul>
<blockquote>
<p></p>
</blockquote>
<h3>请求方法</h3>
<ul>
<li>POST：Create：提交表单数据</li>
<li>GET：Read，检索数据</li>
<li>PUT：Update，修改数据</li>
<li>DELETE：Delete，删除数据</li>
</ul>
<h3>请求头部</h3>
<ul>
<li></li>
</ul>
<h3>案例</h3>
<div class="language-html line-numbers-mode" data-highlighter="prismjs" data-ext="html"><pre><code class="language-html"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>响应格式</h2>
<ul>
<li>服务端返回响应：<code>response</code></li>
</ul>
<blockquote>
<p></p>
</blockquote>
<h3>响应状态代码</h3>
<ul>
<li>响应状态代码（HTTP Status Codes）是HTTP协议的一部分。</li>
<li>由服务器发送给客户端，以指示HTTP请求的处理结果。</li>
<li>状态代码分为五类：1xx（信息性状态码）、2xx（成功状态码）、3xx（重定向状态码）、4xx（客户端错误状态码）、5xx（服务器错误状态码）</li>
</ul>
<p>详细总结：<a href="/note/Technology-%E9%80%9A%E4%BF%A1-%E5%8D%8F%E8%AE%AE-HTTP-%E5%93%8D%E5%BA%94%E7%8A%B6%E6%80%81%E4%BB%A3%E7%A0%81.html" target="_blank">Technology-通信-协议-HTTP-响应状态代码</a></p>
<h3>响应头部</h3>
<ul>
<li></li>
</ul>
<h3>案例</h3>
<div class="language-html line-numbers-mode" data-highlighter="prismjs" data-ext="html"><pre><code class="language-html"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>DNS域名服务</h2>
<p>应用层的协议
如果要使用域名完成网络通信，必须先从域名服务器获取域名对应的IP地址</p>
<p>用于记录IP地址</p>
<p>域名 = 子域名 + 二极域名 + 根域名</p>
<h2>扩展提示</h2>
<ul>
<li>DOT数据传输对象</li>
<li>TCP传输协议，将传输的数据打包在一个8192字节的数据包中，当数据比较大时就会打包在多个数据包中。在正式传输前会先告诉目标计算机将要发送的数据大小和相关信息。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 通信 - 协议 - TCP</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E5%8D%8F%E8%AE%AE-TCP.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E5%8D%8F%E8%AE%AE-TCP.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 通信 - 协议 - TCP</source>
      <description>文章摘要： 在网络模型中属于传输层的网络通信协议，TCP全称：传输控制协议。 简介 简要说明 TCP（Transmission Control Protocol）：传输控制协议 一种面向连接（连接导向）的、可靠的基于字节流的传输层通信协议。 主要功能 面向连接、点到点可靠通信，最终目的是要保证在不可靠的信道上实现可靠的传输。 注意事项 通信效率相对不高...</description>
      <category>学习笔记/技术</category>
      <pubDate>Sun, 16 Jun 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 在网络模型中属于传输层的网络通信协议，TCP全称：传输控制协议。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li><strong>TCP</strong>（Transmission Control Protocol）：传输控制协议</li>
<li>一种面向连接（连接导向）的、可靠的基于字节流的传输层通信协议。</li>
</ul>
<p>主要功能</p>
<ul>
<li>面向连接、点到点可靠通信，最终目的是要保证在不可靠的信道上实现可靠的传输。</li>
</ul>
<p>注意事项</p>
<ul>
<li>通信效率相对不高、占用资源多。</li>
</ul>
<p>适用场景</p>
<ul>
<li>网页、文件下载、支付。</li>
</ul>
<h2>运行流程</h2>
<ol>
<li>三次握手建立可靠连接（客户端发送连接请求、服务端返回响应、客户端再次确认信息建立连接）</li>
<li>传输数据进行确认</li>
<li>四次挥手断开连接（客户端发送断开连接请求、服务端返回稍等响应、服务端返回确认断开响应、客户端发送正式确认断开连接）</li>
</ol>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 通信 - 协议 - UDP</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E5%8D%8F%E8%AE%AE-UDP.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1-%E5%8D%8F%E8%AE%AE-UDP.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 通信 - 协议 - UDP</source>
      <description>文章摘要： 在网络模型中属于传输层的网络通信协议，UDP全称：用户数据报协议。 简介 简要说明 UDP（User Datagram Protocol）：用户数据报协议 一种无连接的传输层协议，提供面向事务的简单不可靠信息传输服务。 主要功能 非面向连接，传输不可靠，可能丢失数据，可以广播发送，资源消耗低。 通信效率高。 注意事项 发送方不管对方是否在线...</description>
      <category>学习笔记/技术</category>
      <pubDate>Sun, 16 Jun 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 在网络模型中属于传输层的网络通信协议，UDP全称：用户数据报协议。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li><strong>UDP</strong>（User Datagram Protocol）：用户数据报协议</li>
<li>一种无连接的传输层协议，提供面向事务的简单不可靠信息传输服务。</li>
</ul>
<p>主要功能</p>
<ul>
<li>非面向连接，传输不可靠，可能丢失数据，可以广播发送，资源消耗低。</li>
<li>通信效率高。</li>
</ul>
<p>注意事项</p>
<ul>
<li>发送方不管对方是否在线，数据在中间丢失也不管，如果接收方收到数据也不返回确认。</li>
</ul>
<p>适用场景</p>
<ul>
<li>语音通话、视频直播。</li>
</ul>
<h2>运行流程</h2>
<ul>
<li>不事先建立连接，数据按照包发，一包数据包含（自己的IP、程序端口、目的地IP、程序端口、数据）。</li>
<li>分析：基于UDP协议的Socket网络编程实现，不需要利用IO流实现数据的传输，每个数据发送单元被统一封装成数据包的方式，发送放将数据包发送到网络中，数据包在网络中去寻找它的目的地。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Docker - 终端命令 - docker</title>
      <link>https://blog.magictable.ha.cn/software/Package-Docker-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-docker.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Docker-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-docker.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Docker - 终端命令 - docker</source>
      <description>文章摘要： 摘要内容。 命令分为：基本命令、镜像命令、容器命令、仓库命令 基本命令 查询Docker的版本信息 查询Docker的系统信息，包括镜像和容器数量 帮助 镜像命令 查找镜像（远程） 获取镜像 推送镜像 创建镜像 查看镜像（本地） 注释 输出显示出来的结果提示： REPOSITORY：表示镜像的仓库源 TAG：镜像的标签 IMAGE ID：镜...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sun, 16 Jun 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<ul>
<li>命令分为：基本命令、镜像命令、容器命令、仓库命令</li>
</ul>
<h2>基本命令</h2>
<p>查询Docker的版本信息</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 版本号</span></span>
<span class="line"><span class="token function">docker</span> <span class="token parameter variable">-v</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 版本信息</span></span>
<span class="line"><span class="token function">docker</span> version</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>查询Docker的系统信息，包括镜像和容器数量</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">docker</span> info</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p>帮助</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 命令可选</span></span>
<span class="line"><span class="token function">docker</span> <span class="token punctuation">[</span>命令<span class="token punctuation">]</span> <span class="token parameter variable">--help</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h2>镜像命令</h2>
<h3>查找镜像（远程）</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">sudo</span> <span class="token function">docker</span> search <span class="token operator">&lt;</span>镜像名称<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>获取镜像</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 拉取镜像</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">docker</span> pull <span class="token operator">&lt;</span>镜像名称<span class="token operator">&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 指定版本号</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">docker</span> pull <span class="token operator">&lt;</span>镜像名称<span class="token operator">&gt;</span>:<span class="token operator">&lt;</span>版本号<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>推送镜像</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line">// 上传本地镜像到官网</span>
<span class="line"><span class="token function">sudo</span> <span class="token function">docker</span> push <span class="token operator">&lt;</span>镜像名称<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h3>创建镜像</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 本地构建</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">docker</span> bulid</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h3>查看镜像（本地）</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 列出本地主机的镜像</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">docker</span> images</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>输出显示出来的结果提示：</p>
<ul>
<li>REPOSITORY：表示镜像的仓库源</li>
<li>TAG：镜像的标签</li>
<li>IMAGE ID：镜像ID</li>
<li>CREATED：镜像创建时间</li>
<li>SIZE：镜像大小</li>
</ul>
</div>
<h3>删除镜像</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">sudo</span> <span class="token function">docker</span> rmi <span class="token operator">&lt;</span>镜像名称或镜像ID<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>导出镜像</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">sudo</span> <span class="token function">docker</span> save <span class="token parameter variable">-o</span> <span class="token operator">&lt;</span>文件名.tar<span class="token operator">&gt;</span> <span class="token operator">&lt;</span>镜像名称<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>加载镜像</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">sudo</span> <span class="token function">docker</span> load <span class="token parameter variable">-i</span> <span class="token operator">&lt;</span>文件名.tar<span class="token operator">&gt;</span></span>
<span class="line"></span>
<span class="line">// 不输出日志</span>
<span class="line"><span class="token function">sudo</span> <span class="token function">docker</span> load <span class="token parameter variable">-i</span> <span class="token parameter variable">-q</span> <span class="token operator">&lt;</span>文件名.tar<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>容器命令</h2>
<h3>命令行模式运行并进入容器</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 退出容器时，容器会关闭</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">docker</span> attach <span class="token operator">&lt;</span>容器名称<span class="token operator">&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 退出容器时，容器不会关闭</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">docker</span> <span class="token builtin class-name">exec</span> <span class="token parameter variable">-it</span> <span class="token operator">&lt;</span>容器名称<span class="token operator">&gt;</span> /bin/bash</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 退出容器</span></span>
<span class="line"><span class="token builtin class-name">exit</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h3>创建并运行容器</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># `-P`：将容器内部端口号映射到本地宿主机的端口上</span></span>
<span class="line"><span class="token comment"># `-d`：可在后台运行容器</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">docker</span> run <span class="token parameter variable">--name</span> <span class="token operator">&lt;</span>容器名称<span class="token operator">&gt;</span> <span class="token parameter variable">-P</span> <span class="token operator">&lt;</span>宿主机端口号:容器内部端口号<span class="token operator">&gt;</span> <span class="token parameter variable">-d</span> <span class="token operator">&lt;</span>镜像名称<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>查询容器</h3>
<h4>列出所有容器</h4>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 查询正在运行的容器</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">docker</span> <span class="token function">ps</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 查询所有容器</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">docker</span> <span class="token function">ps</span> <span class="token parameter variable">-a</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4>产看容器端口</h4>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">sudo</span> <span class="token function">docker</span> port <span class="token operator">&lt;</span>容器ID<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h4>查看容器进程</h4>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">sudo</span> <span class="token function">docker</span> <span class="token function">top</span> wizardly_chandrasekhar</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h4>查看容器日志</h4>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 查看容器日志</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">docker</span> logs <span class="token operator">&lt;</span>容器ID/名称<span class="token operator">&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 持续查看容器日志</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">docker</span> logs <span class="token parameter variable">-f</span> <span class="token operator">&lt;</span>容器ID/名称<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>控制容器运行</h3>
<h4>暂停运行</h4>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">sudo</span> <span class="token function">docker</span> pause <span class="token operator">&lt;</span>容器ID/名称<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h4>暂停运行-&gt;恢复运行</h4>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">sudo</span> <span class="token function">docker</span> unpause <span class="token operator">&lt;</span>容器ID/名称<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h4>停止运行</h4>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">sudo</span> <span class="token function">docker</span> stop <span class="token operator">&lt;</span>容器ID/名称<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h4>停止运行-&gt;恢复运行</h4>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">sudo</span> <span class="token function">docker</span> start <span class="token operator">&lt;</span>容器ID/名称<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h4>重启容器</h4>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">sudo</span> <span class="token function">docker</span> restart <span class="token operator">&lt;</span>容器ID/名称<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>删除容器</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">sudo</span> <span class="token function">docker</span> <span class="token function">rm</span> <span class="token operator">&lt;</span>容器ID/名称<span class="token operator">&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">#  强制删除容器</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">docker</span> <span class="token function">rm</span> <span class="token parameter variable">-f</span> <span class="token operator">&lt;</span>容器ID/名称<span class="token operator">&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 删除所有docker容器，包含正在运行和已经停止的容器</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">docker</span> <span class="token function">rm</span> <span class="token parameter variable">-f</span> <span class="token variable"><span class="token variable">$(</span><span class="token function">docker</span> <span class="token function">ps</span> <span class="token parameter variable">-qa</span><span class="token variable">)</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>设置容器</h3>
<h4>开机自启动</h4>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">sudo</span> <span class="token function">docker</span> update <span class="token parameter variable">--restart</span><span class="token operator">=</span>always <span class="token operator">&lt;</span>容器ID/名称<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>导出容器快照</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">sudo</span> <span class="token function">docker</span> <span class="token builtin class-name">export</span> <span class="token operator">&lt;</span>容器快照<span class="token operator">&gt;</span> <span class="token operator">&gt;</span> <span class="token operator">&lt;</span>快照名.tar<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>导入容器快照</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">sudo</span> <span class="token function">cat</span> <span class="token operator">&lt;</span>快照名.tar<span class="token operator">&gt;</span> <span class="token operator">|</span> <span class="token function">docker</span> <span class="token function">import</span> - test/<span class="token operator">&lt;</span>快照名<span class="token operator">&gt;</span>:<span class="token operator">&lt;</span>v<span class="token operator"><span class="token file-descriptor important">1</span>&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 指定URL或目录来导入</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">docker</span> <span class="token function">import</span> <span class="token operator">&lt;</span>URL网址<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>cache</h2>
<h3>查询镜像下载的保存位置</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">sudo</span> <span class="token function">docker</span> info <span class="token operator">|</span> <span class="token function">grep</span> <span class="token string">"Docker Root Dir"</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p>查询容器/镜像元数据</p>
<p>查询容器中运行的进程信息</p>
<p>从服务器获取实时事件</p>
<p>列出指定容器的端口映射</p>
<p>与主机之间进行数据拷贝</p>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Docker</title>
      <link>https://blog.magictable.ha.cn/software/Package-Docker.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Docker.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Docker</source>
      <description>文章摘要： Docker 是开源的容器化工具，通过提供一种标准化的、轻量级的运行时环境，极大地简化了应用程序的部署和管理。 相关信息 外部相关文章 本文章将使用华为镜像站提供的软件包：华为镜像站提供的Docker-CE 推荐第三方教程：B站up主教程 内部相关文章 Kubernetes容器编排： 简介 简要说明 Docker是一个开源的应用容器引擎。 ...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sun, 16 Jun 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Docker 是开源的容器化工具，通过提供一种标准化的、轻量级的运行时环境，极大地简化了应用程序的部署和管理。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li>本文章将使用华为镜像站提供的软件包：<a href="https://mirrors.huaweicloud.com/mirrorDetail/5ea14d84b58d16ef329c5c13?mirrorName=docker-ce&amp;catalog=docker" target="_blank" rel="noopener noreferrer">华为镜像站提供的Docker-CE</a></li>
<li>推荐第三方教程：<a href="https://www.bilibili.com/video/BV1MR4y1Q738/?spm_id_from=333.337.search-card.all.click&amp;vd_source=262edcbbd8e80915a7dff074a0e165a1" target="_blank" rel="noopener noreferrer">B站up主教程</a></li>
</ul>
<p>内部相关文章</p>
<ul>
<li>Kubernetes容器编排：<a href="/software/Package-Kubectl-Kubernetes(k8s)%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86.html" target="_blank">Package-Kubectl-Kubernetes(k8s)基础知识</a></li>
</ul>
</div>
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>Docker是一个开源的应用容器引擎。</li>
<li>允许开发者打包他们的应用以及应用的依赖包到一个可移植的容器中，然后发布到任何流行的Linux机器或Windows服务器上。</li>
<li>容器是完全使用沙箱机制，相互之间不会有任何接口（类似iPhone的app）而且更轻量级。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>容器化</strong>：可以将应用程序及其环境封装在一个容器中，实现环境的一致性。</li>
<li><strong>可移植性</strong>：容器可以在任何支持Docker的环境中运行，不受底层操作系统限制。</li>
<li><strong>隔离性</strong>：容器之间相互隔离，不会影响宿主机或其他容器的运行。</li>
<li><strong>可扩展性</strong>：可以很容易地增加或减少容器的数量来应对不同的负载情况。</li>
<li><strong>版本控制</strong>：通过Docker镜像的版本控制，可以跟踪和管理应用程序的变化。</li>
<li><strong>持续集成和持续部署（CI/CD）</strong>：Docker可以集成到CI/CD流程中，实现自动化测试和部署。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>安全性</strong>：容器化技术虽然提供了一定程度的隔离，但并非完全安全，需要合理配置和管理。</li>
<li><strong>数据持久化</strong>：容器在停止后其状态会丢失，因此需要使用卷（Volumes）或其他机制来持久化数据。</li>
<li><strong>资源管理</strong>：需要监控和管理容器的资源使用情况，避免资源泄露或过度使用。</li>
<li><strong>兼容性</strong>：并非所有的应用程序都适合容器化，需要评估应用是否适合在容器中运行。</li>
<li><strong>网络配置</strong>：容器网络配置较为复杂，需要合理规划网络以保障容器间通信。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>微服务架构</strong>：Docker非常适合微服务架构，可以独立部署和管理服务。</li>
<li><strong>开发与测试环境</strong>：提供一致的开发和测试环境，减少“在我的机器上可以运行”的问题。</li>
<li><strong>快速部署和扩展</strong>：适用于需要快速部署和横向扩展的应用，如Web应用、移动后端等。</li>
<li><strong>持续集成和持续部署</strong>：作为CI/CD流程的一部分，实现自动化测试和部署。</li>
<li><strong>云服务迁移</strong>：帮助应用无缝迁移到云平台，实现云原生应用的开发。</li>
<li><strong>资源隔离</strong>：在共享主机环境中隔离不同用户或团队的应用。</li>
</ul>
<h2>安装与卸载</h2>
<p>详细总结：<a href="/software/Package-Docker-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html" target="_blank">Package-Docker-安装与卸载</a></p>
<h2>终端命令</h2>
<p>详细总结：<a href="/software/Package-Docker-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-docker.html" target="_blank">Package-Docker-终端命令-docker</a></p>
<h2>配置文件</h2>
<p>详细总结：<a href=""></a></p>
<h2>热门推荐</h2>
<p>详细总结：<a href=""></a></p>
<h2>问题总结</h2>
<p>详细总结：<a href=""></a></p>
<h2>Docker镜像</h2>
<ul>
<li>Docker镜像就是一个只读的模板（配置文件）。</li>
<li>镜像（Image）可以用来创建Docker容器。</li>
<li>Docker提供了一个简单的机制来创建镜像或者更新现有的镜像。</li>
<li>用户可以直接从其他人那里下载一个已经做好的镜像来直接使用。</li>
</ul>
<h2>Docker容器</h2>
<ul>
<li>Docker利用容器来运行应用（正在运行的软件进程）。</li>
<li>容器（Container）是从镜像创建的运行实例。</li>
<li>可以被“运行、开始、停止、删除”。</li>
<li>每个容器都是相互隔离的、保证安全的平台。</li>
</ul>
<h2>Docker仓库</h2>
<ul>
<li>仓库（Repository）是集中存放镜像文件的场所。</li>
<li>仓库主持服务器（Registry）上存放这很多仓库，每个仓库中包含来很多镜像，每个镜像有不同的标签（Tag）。</li>
</ul>
<h2>容器的状态</h2>
<ul>
<li>运行：进程正常运行。</li>
<li>暂停：进程暂停，CPU不再运行，不释放内容。</li>
<li>停止：进程停止，回收进程暂用的内存、CPU等资源。</li>
</ul>
<h2>制作Dockerfile镜像文件</h2>
<ol>
<li>创建一个名为<code>Dockerfile</code>的文件，且没有后缀。</li>
</ol>
<p>==待完善==</p>
<h2>扩展知识</h2>
<blockquote>
<ul>
<li>Debian Linux系统环境下，镜像文件的下载保存位置：<code>/var/lib/docker</code></li>
<li>提示：Docker容器软件比较特殊，必须使用<strong>管理员权限</strong>来进行操作。</li>
</ul>
</blockquote>
<h2>镜像文件推荐</h2>
<p>==待完善==</p>
]]></content:encoded>
    </item>
    <item>
      <title>Language - UML</title>
      <link>https://blog.magictable.ha.cn/software/Language-UML.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-UML.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - UML</source>
      <description>文章摘要： 统一建模语言(Unified Modeling Language，UML)是一种为面向对象系统的产品进行说明、可视化和编制文档的一种标准语言。 相关信息 外部相关文章 PlantUML官网及在线文档：https://plantuml.com/zh/ 语言指导PDF: https://plantuml.com/zh/guide Github仓...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Mon, 10 Jun 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 统一建模语言(Unified Modeling Language，UML)是一种为面向对象系统的产品进行说明、可视化和编制文档的一种标准语言。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li>PlantUML官网及在线文档：<a href="https://plantuml.com/zh/" target="_blank" rel="noopener noreferrer">https://plantuml.com/zh/</a></li>
<li>语言指导PDF: <a href="https://plantuml.com/zh/guide" target="_blank" rel="noopener noreferrer">https://plantuml.com/zh/guide</a></li>
<li>Github仓库: <a href="https://plantuml.com/zh/guide" target="_blank" rel="noopener noreferrer">https://github.com/plantuml/plantuml</a></li>
</ul>
<p>内部相关文章</p>
<ul>
<li></li>
</ul>
</div>
<h2>介绍</h2>
<p>简要说明</p>
<ul>
<li>统一建模语言(Unified Modeling Language，UML)是一种为面向对象系统的产品进行说明、可视化和编制文档的一种标准语言。</li>
<li>UML使用面向对象设计的的建模工具，但独立于任何具体程序设计语言。</li>
<li>我们在进行项目的时候，通过使用 UML 的面向对象图的方式来更明确、清晰的表达项目中的架设思想、项目结构、执行顺序等一些逻辑思维。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>可视化表示</strong>：UML提供了一套丰富的图形表示，使得复杂的软件系统可以直观地展现出来。</li>
<li><strong>沟通工具</strong>：UML图作为沟通的桥梁，帮助不同背景的人理解系统的设计和架构。</li>
<li><strong>系统分析</strong>：UML支持对系统的功能、行为和结构进行分析。</li>
<li><strong>设计蓝图</strong>：UML图可以作为软件系统设计的蓝图，指导开发过程。</li>
<li><strong>文档化</strong>：UML图可以作为项目文档的一部分，记录系统的设计和决策过程。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>不要过度使用</strong>：不要为每个细节都创建UML图，这会导致文档过多且难以维护。</li>
<li><strong>保持更新</strong>：随着项目的发展，UML图需要及时更新以反映最新的设计变更。</li>
<li><strong>一致性</strong>：在整个项目中保持UML符号和命名的一致性。</li>
<li><strong>简洁性</strong>：确保UML图简洁明了，避免不必要的复杂性。</li>
<li><strong>培训和使用</strong>：团队成员应该接受UML的培训，以确保正确使用和理解UML图。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>需求分析</strong>：在项目开始时，使用UML图来捕捉和分析用户需求。</li>
<li><strong>系统设计</strong>：在系统设计阶段，UML图帮助定义系统的架构和组件。</li>
<li><strong>项目管理</strong>：项目经理可以使用UML图来跟踪项目的进度和设计变更。</li>
<li><strong>代码生成</strong>：某些工具可以从UML图自动生成代码框架。</li>
<li><strong>教学和学习</strong>：在教育环境中，UML图用于教授面向对象的概念和软件工程的原则。</li>
</ul>
<p>UML图的分类</p>
<ul>
<li>结构型：类图、对象图、包图、组件图、部署图。</li>
<li>行为型：用例图、活动图、状态图、序列图、通信图、交互概览图</li>
</ul>
<p>详细总结：<a href="/software/Language-UML-%E8%AF%AD%E6%B3%95%E6%A0%BC%E5%BC%8F.html" target="_blank">Language-UML-语法格式</a></p>
<h2>结构型</h2>
<h3>类图</h3>
<p>简要说明</p>
<ul>
<li>（Class Diagram）</li>
<li>类图是UML中用于描述系统中类的结构和类之间关系的一种静态结构图。</li>
<li>展示了系统中的类、接口、属性、操作以及它们之间的关系。</li>
<li>是面向对象设计中使用最广泛的图之一。</li>
</ul>
<blockquote>
<p><img src="https://bkimg.cdn.bcebos.com/pic/03087bf40ad162d986a4e73010dfa9ec8a13cd50?x-bce-process=image/format,f_auto/watermark,image_d2F0ZXIvYmFpa2UyNzI,g_7,xp_5,yp_5,P_20/resize,m_lfit,limit_1,h_1080" alt=""></p>
</blockquote>
<p>主要功能</p>
<ul>
<li><strong>定义类</strong>：类图中可以定义类的名称、属性（字段）和操作（方法）。</li>
<li><strong>描述关系</strong>：类图可以展示类与类之间的关系，包括继承（泛化）、实现、关联、聚合和组合等。</li>
<li><strong>接口表示</strong>：类图可以表示接口以及类对接口的实现。</li>
<li><strong>属性和操作可见性</strong>：类图中可以指定属性和操作的访问修饰符（如公有、私有、受保护）。</li>
<li><strong>泛化和多态</strong>：类图支持泛化（继承）和多态的概念，可以表示类之间的继承关系和接口的多态性。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>避免过度复杂</strong>：类图应该清晰简洁，避免包含过多的细节，以免难以理解。</li>
<li><strong>命名规范</strong>：类和关系的命名应该清晰、一致，遵循项目的命名规范。</li>
<li><strong>关系清晰</strong>：确保类之间的关系清晰明确，避免模糊不清的关系表示。</li>
<li><strong>更新维护</strong>：随着项目的发展，类图需要及时更新以反映代码的最新状态。</li>
<li><strong>抽象层次</strong>：类图应该在不同抽象层次上展示信息，以适应不同的观众（如开发者、项目经理、客户）。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>系统分析和设计</strong>：在软件开发的早期阶段，类图用于分析和设计系统的静态结构。</li>
<li><strong>文档化</strong>：类图可以作为项目文档的一部分，帮助理解系统的结构和设计决策。</li>
<li><strong>沟通工具</strong>：类图可以作为开发团队之间沟通的工具，确保大家对系统结构的理解一致。</li>
<li><strong>代码生成</strong>：某些工具可以从类图中生成代码框架，简化开发过程。</li>
<li><strong>重构</strong>：在重构代码时，类图可以帮助理解现有的类结构，指导重构的方向。</li>
</ul>
<h3>对象图（Object Diagram）</h3>
<ul>
<li><strong>定义：</strong> 描述在类图中所定义的类和接口的实例的静态快照。</li>
<li><strong>用途：</strong> 展示系统在特定时刻的实例和它们之间的关系。</li>
</ul>
<h3>组件图（Component Diagram）</h3>
<ul>
<li><strong>定义：</strong> 描述系统的物理组件以及它们之间的依赖关系。</li>
<li><strong>用途：</strong> 显示系统组件的静态视图，帮助理解组件之间的依赖。</li>
</ul>
<h3>部署图（Deployment Diagram）</h3>
<ul>
<li><strong>定义：</strong> 描述在执行环境中软件和硬件的配置。</li>
<li><strong>用途：</strong> 显示系统的物理部署视图，包括节点和它们之间的关系。</li>
</ul>
<h2>行为型</h2>
<h3>用例图（Use Case Diagram）</h3>
<ul>
<li><strong>定义：</strong> 描述系统功能和用户（actors）之间的交互。</li>
<li><strong>用途：</strong> 帮助理解系统的功能需求，定义系统的边界。</li>
</ul>
<h3>活动图（Activity Diagram）</h3>
<ul>
<li><strong>定义：</strong> 描述业务流程和工作流中的操作序列。</li>
<li><strong>用途：</strong> 显示从一个活动到另一个活动的控制流，类似于高级别的流程图。</li>
</ul>
<h3>状态图（State Diagram）</h3>
<ul>
<li><strong>定义：</strong> 描述类的对象可能的状态以及状态之间的转移。</li>
<li><strong>用途：</strong> 分析和设计对象的行为，特别是对于具有复杂生命周期和状态变化的对象。</li>
</ul>
<h3>时序图（Sequence Diagram）</h3>
<ul>
<li><strong>定义：</strong> 描述对象之间交互的时间顺序。</li>
<li><strong>用途：</strong> 显示对象之间的交互顺序，强调时间顺序。</li>
</ul>
<h3>协作图（Collaboration Diagram）</h3>
<ul>
<li><strong>定义：</strong> 描述对象之间的协作关系和交互。</li>
<li><strong>用途：</strong> 强调对象之间的消息传递，虽然它不如时序图那样强调时间顺序。</li>
</ul>
<h2>PlantUML工具</h2>
<ul>
<li>PlantUML是一个开源的Java程序，能够根据PlantUML语言生成对应的图片。</li>
<li>PlantUML是一个通用性很强的工具，可以快速、直接地创建各种图表。</li>
<li>PlantUML 可以与其他各种工具无缝集成，以增强您的工作流程。</li>
</ul>
]]></content:encoded>
      <enclosure url="https://bkimg.cdn.bcebos.com/pic/03087bf40ad162d986a4e73010dfa9ec8a13cd50?x-bce-process=image/format,f_auto/watermark,image_d2F0ZXIvYmFpa2UyNzI,g_7,xp_5,yp_5,P_20/resize,m_lfit,limit_1,h_1080" type="image/"/>
    </item>
    <item>
      <title>Diary - 工作流 - 软件开发</title>
      <link>https://blog.magictable.ha.cn/note/Diary-%E5%B7%A5%E4%BD%9C%E6%B5%81-%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91.html</link>
      <guid>https://blog.magictable.ha.cn/note/Diary-%E5%B7%A5%E4%BD%9C%E6%B5%81-%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Diary - 工作流 - 软件开发</source>
      <description>文章摘要： 摘要内容。 注释 每个软件都有自己的命令，即每个软件都能通过终端（命令行）进行操作，比如打开和关闭。 每个软件都是由多个代码库（代码依赖库）或软件包（软件依赖项）构成，当然也可以没有其他依赖的软件。 软件生命周期 规划 需求分析 功能需求 非功能需求 市场与竞品分析 竞品 市场机会 编写代码 集成 构建 测试 部署 问题总结 软件工程技巧：...</description>
      <category>学习笔记/日记</category>
      <pubDate>Sat, 08 Jun 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>每个软件都有自己的命令，即每个软件都能通过终端（命令行）进行操作，比如打开和关闭。</li>
<li>每个软件都是由多个代码库（代码依赖库）或软件包（软件依赖项）构成，当然也可以没有其他依赖的软件。</li>
</ul>
</div>
<h2>软件生命周期</h2>
<p>规划</p>
<p>需求分析</p>
<ul>
<li>功能需求</li>
<li>非功能需求</li>
</ul>
<p>市场与竞品分析</p>
<ul>
<li>竞品</li>
<li>市场机会</li>
</ul>
<p>编写代码</p>
<p>集成</p>
<p>构建</p>
<p>测试</p>
<p>部署</p>
<h2>问题总结</h2>
<p>软件工程技巧：<a href="/note/Diary-%E5%B7%A5%E4%BD%9C%E6%B5%81-%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91-%E5%BC%80%E5%8F%91%E6%80%9D%E6%83%B3%E5%92%8C%E6%96%B9%E6%A1%88.html" target="_blank">Diary-工作流-软件开发-开发思想和方案</a></p>
<p>项目环境隔离：<a href="/note/Diary-%E5%B7%A5%E4%BD%9C%E6%B5%81-%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91-%E5%8D%8F%E4%BD%9C%E5%BC%80%E5%8F%91%E4%B8%AD%E5%A4%9A%E7%B3%BB%E7%BB%9F%E5%A4%9A%E7%8E%AF%E5%A2%83%E9%9A%94%E7%A6%BB.html" target="_blank">Diary-工作流-软件开发-协作开发中多系统多环境隔离</a></p>
<h2>软件开发流程</h2>
<h3>需求分析</h3>
<ul>
<li>与客户进行详细的沟通，提出项目的目标和功能，梳理出一份《产品功能需求逻辑图》，并给出需要的时间和费用。</li>
<li>产出物：产品功能需求逻辑图、预估时间，预估费用。</li>
</ul>
<h3>设计阶段</h3>
<p>流程和页面的原型设计</p>
<ul>
<li>设计原型图，采用Axure或者Figma设计工具设计，根据功能需求列表，绘制页面框架线稿图。</li>
</ul>
<p>UI设计</p>
<ul>
<li>原型图设计完成后，由设计师绘制UI界面，会给出高保真系统界面设计图。</li>
</ul>
<p>数据库设计</p>
<ul>
<li>项目技术经理设计根据功能需求列表设计数据库模型，设计表关联关系等。</li>
</ul>
<p>技术选型</p>
<ul>
<li>根据实际需求选择合适的技术栈。</li>
</ul>
<p>产出物：原型设计文档、UI设计图、数据库设计文档</p>
<h3>开发阶段</h3>
<p>项目结构设计、模块划分、功能分配</p>
<ul>
<li>项目技术经理对设计整体的系统分层架构，便于以后再次扩展功能。</li>
<li>在模块划分的过程中，给出接口类设计。</li>
</ul>
<p>API接口设计（数据交互标准）</p>
<p>项目文件资产权限分配</p>
<ul>
<li>确保不同的功能或模块能够独立互不影响。</li>
</ul>
<p>产出物：API接口文档、项目结构与模块划分文档、代码编写规范文档、第三方资产和平台文档、版本管理文档</p>
<h3>测试阶段（内测）</h3>
<ul>
<li>测试工程师按阶段设计《测试用例》，未测试通过的需要反馈给开发人员进行调整，开发人员修改代码提交测试，测试通过会在测试结果报告中打钩确认。</li>
</ul>
<p>产出物：软件测试报告</p>
<h3>测试运营（公测）</h3>
<ul>
<li>提供指定人员或设备进行小范围运行。</li>
<li>试运营中可能会存在一些问题，可以在正式上线前优化解决掉。</li>
</ul>
<h3>上线与维护</h3>
<ul>
<li>系统部署到正式环境，开始正常运行，进入日常维护阶段。</li>
<li>为非功能性的需求提供一定的技术支持。</li>
</ul>
<h2>开发环境配置方案</h2>
<p><strong>VScode推荐插件：</strong></p>
<ul>
<li><strong>indent-rainbow</strong>，为缩进彩虹（添加颜色区分）更易于阅读。</li>
</ul>
<h2>项目资产管理</h2>
<h3>整合目录</h3>
<p>doc/（项目文档）
bin/（项目代码二进制可执行文件）
src/（项目代码源文件）</p>
<p>.bat（windows批处理）
.sh（linux批处理）</p>
<p>业务流程图
逻辑流程图</p>
<h2>博主提示</h2>
<ul>
<li>前期使用配置文件进行多代码“合作、约束、规范、说明、API”，后期只需要API，因为后期代码编写趋于稳定，不再有大幅度的修改。</li>
<li>不同数据层之间，不同代码之间需要有<strong>接口</strong>进行统一标准。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Technology - 通信</title>
      <link>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1.html</link>
      <guid>https://blog.magictable.ha.cn/note/Technology-%E9%80%9A%E4%BF%A1.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Technology - 通信</source>
      <description>文章摘要： 通信（Communication）是人与人与自然之间通过某种行为或媒介进行的信息交流与传递，从一点传递到另一点或多点的过程。 相关信息 外部相关文章 中华人民共和国工业和信息化部（工信部），。 内部相关文章 ，。 ，。无线通信的硬件设备之一。 ，网络结构展示。 ，网络运营商规则。 简介 简要说明 通信（Communication）是人与人与...</description>
      <category>学习笔记/技术</category>
      <pubDate>Sun, 02 Jun 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 通信（Communication）是人与人与自然之间通过某种行为或媒介进行的信息交流与传递，从一点传递到另一点或多点的过程。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li><a href="https://www.miit.gov.cn/" target="_blank" rel="noopener noreferrer">中华人民共和国工业和信息化部（工信部）</a>，。</li>
</ul>
<p>内部相关文章</p>
<ul>
<li><a href="/note/Technology-%E7%94%B5%E7%A3%81%E6%B3%A2.html" target="_blank">Technology-电磁波</a>，。</li>
<li><a href="/hardware/Device-%E7%A7%BB%E5%8A%A8%E9%80%9A%E4%BF%A1%E5%9F%BA%E7%AB%99.html" target="_blank">Device-移动通信基站</a>，。无线通信的硬件设备之一。</li>
<li><a href="/rule/Environment-%E9%80%9A%E4%BF%A1%E7%BD%91%E7%BB%9C%E7%BB%93%E6%9E%84.html" target="_blank">Environment-通信网络结构</a>，网络结构展示。</li>
<li><a href="/rule/Society-%E8%BF%90%E8%90%A5%E5%95%86-%E7%BD%91%E7%BB%9C%E9%80%9A%E4%BF%A1.html" target="_blank">Society-运营商-网络通信</a>，网络运营商规则。</li>
</ul>
</div>
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>通信（Communication）是人与人与自然之间通过某种行为或媒介进行的信息交流与传递，从一点传递到另一点或多点的过程。</li>
<li>网络通信是指通过计算机网络进行<strong>数据传输</strong>和<strong>交换信息</strong>的过程。</li>
<li>网络通信是现代信息技术的基础，支撑着互联网、物联网、移动通信等各种应用。</li>
<li>网络通信是通过一系列的<strong>协议</strong>和<strong>标准</strong>来确保数据的正确传输。，在计算机网络的节点之间从发送方传输到接收方的传输数据过程。</li>
<li>涉及到数据编码、传输介质、网络拓扑、路由选择等多个方面，确保数据能够准确、高效地在网络中流动。</li>
<li>通常涉及物理层、数据链路层、网络层、传输层和应用层等多个网络层次。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>数据传输</strong>：将数据从一个网络节点传输到另一个网络节点。</li>
<li><strong>信息交换</strong>：在网络中的多个节点之间交换数据。</li>
<li><strong>资源共享</strong>：允许网络中的用户共享硬件、软件和数据资源。</li>
<li><strong>通信服务</strong>：提供电子邮件、即时消息、文件传输和远程登录等服务。</li>
<li><strong>网络管理</strong>：监控网络状态，确保网络的稳定性和安全性。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>安全性</strong>：确保数据传输的安全性，使用加密和认证机制来防止数据泄露和未授权访问。</li>
<li><strong>可靠性</strong>：选择合适的传输协议（如 TCP）来保证数据的可靠传输。</li>
<li><strong>性能</strong>：优化网络结构和协议配置，以提供高带宽和低延迟的通信服务。</li>
<li><strong>兼容性</strong>：确保网络设备和应用程序之间的兼容性，以便顺畅通信。</li>
<li><strong>可扩展性</strong>：设计网络时要考虑未来的扩展需求，以便于添加新设备和用户。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>个人通信</strong>：如电子邮件、社交媒体、即时消息等。</li>
<li><strong>企业网络</strong>：用于企业内部的数据交换、资源共享和业务系统。</li>
<li><strong>互联网服务</strong>：提供网页浏览、在线视频、云服务等。</li>
<li><strong>远程工作</strong>：支持远程登录、虚拟私人网络（VPN）等远程办公解决方案。</li>
<li><strong>物联网（IoT）</strong>：连接各种设备和传感器，实现数据的收集和远程控制。</li>
<li><strong>移动通信</strong>：包括4G、5G等移动网络技术，适用于智能手机和其他移动设备。</li>
</ul>
<h2>基础知识</h2>
<h3>通信传输介质分类</h3>
<p>引导性介质（线缆/有线）</p>
<ul>
<li>金属导体、玻璃</li>
</ul>
<p>非引导性介质（无线）</p>
<ul>
<li>电磁波被称为传输的<strong>载波/载体</strong>。</li>
<li>传输的数据叠加在载波上，接收端再过滤出信号。</li>
<li>传输数据的频率范围为<strong>频带/波段/频段</strong>。</li>
<li>多个无线电载波可共存于同一空间，即不同频带的电磁波互不干扰。</li>
</ul>
<h3>协议</h3>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p><strong>协议</strong>：连接和数据在网络中传输的规则。</p>
<p><strong>IP</strong>：设备在网络中唯一标识的地址。</p>
<p><strong>端口</strong>：应用程序在设备中唯一的标识。</p>
</div>
<h3>IP</h3>
<ul>
<li>IP（Internet Protocol），全称“互联网协议地址”，是分配给联网设备在网络中唯一标识的地址。</li>
<li>IP地址有两种形式：<code>IPv4</code>、<code>IPv6</code>。</li>
<li>IPv4 由32位二进制组成，并将每8位二进制数转换为十进制数，使用点号<code>.</code>分开，例如：<code>192.168.0.1</code></li>
<li>IPv6 由128位二进制组成，分成8段表示，每段每四位编码成一个十六进制位标识，数之间用冒号<code>:</code>分开，例如：<code>2001:0db8:0000:2200:0008:0800:110a:417a</code></li>
</ul>
<p>IP域名</p>
<ul>
<li>流程是输入域名发送到DNS服务器，查询域名对应的IP，再访问IP对应的服务器。例如：域名<code>https://www.baidu.com</code>，IP地址<code>202.108.22.5</code></li>
</ul>
<p>公网IP</p>
<ul>
<li>可以连接互联网的IP地址。</li>
</ul>
<p>内网IP</p>
<ul>
<li>又称局域网IP，只能在同一网络下进行使用。</li>
<li>路由以内的网络，可以连接互联网，但互联网无法直接连接内网（需要端口映射）。</li>
</ul>
<p>特殊IP地址</p>
<ul>
<li><code>127.0.0.1</code>、<code>localhost</code>：代表本机IP，只会寻找当前所在的主机。</li>
</ul>
<h3>端口</h3>
<ul>
<li>标记正在计算机设备上运行的应用程序。</li>
<li>被规定为一个16位的二进制数，范围是<code>0~65535</code></li>
</ul>
<p>分类</p>
<ul>
<li>周知（公认）端口：<code>0~1023</code>，即被预先定义的知名应用程序占用。（如：HTTP占用80、FTP占用21）</li>
<li>注册端口：<code>1024~49151</code>，即分配给用户进程或某些应用程序。</li>
<li>动态（私有）端口：<code>49152~65535</code>，动态端口一般分配给不固定分配某些进程。</li>
</ul>
<p>提示</p>
<ul>
<li>设备中不能出现两个程序的端口号重复。</li>
<li>个人开发者开发的程序一般选择使用注册端口。</li>
</ul>
<h2>无线帧结构</h2>
<h2>通信的传输媒介</h2>
<ul>
<li>有线通信：网线、光纤</li>
<li>无线通信</li>
</ul>
<h2>移动网络通信</h2>
<h3>历史</h3>
<table>
<thead>
<tr>
<th style="text-align:left">第几代通信技术</th>
<th style="text-align:left">诞生时间</th>
<th style="text-align:left">功能</th>
<th style="text-align:left">业务</th>
<th style="text-align:left">频段</th>
<th style="text-align:left">通信技术</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">1G</td>
<td style="text-align:left">1980年</td>
<td style="text-align:left">模拟通信</td>
<td style="text-align:left">语音业务</td>
<td style="text-align:left">800MHz~900MHz</td>
<td style="text-align:left">AMPS、TACS</td>
</tr>
<tr>
<td style="text-align:left">2G</td>
<td style="text-align:left">1990年</td>
<td style="text-align:left">数字通信</td>
<td style="text-align:left">短信业务</td>
<td style="text-align:left">800MHz~900MHz</td>
<td style="text-align:left">GSM、CDMA2000 1X</td>
</tr>
<tr>
<td style="text-align:left">3G</td>
<td style="text-align:left">2000年</td>
<td style="text-align:left">移动带宽</td>
<td style="text-align:left">图片浏览</td>
<td style="text-align:left">1920MHz~2170MHz</td>
<td style="text-align:left">WCDMA、TD-SCDMA、CDMA2000</td>
</tr>
<tr>
<td style="text-align:left">4G</td>
<td style="text-align:left">2010年</td>
<td style="text-align:left">移动互联网</td>
<td style="text-align:left">高清视频业务</td>
<td style="text-align:left">2100MHz~2600MHz</td>
<td style="text-align:left">TDD-LTE、FDD-LTE</td>
</tr>
<tr>
<td style="text-align:left">5G</td>
<td style="text-align:left">2020年</td>
<td style="text-align:left">工业物联网</td>
<td style="text-align:left">海量应用业务</td>
<td style="text-align:left">3GHz~300GHz</td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
<h3>移动通信网络结构</h3>
<p>核心网（NFV技术）、承载网（SDN技术）、基站（频带单元、射频单元）、终端</p>
<p>华为基站：</p>
<ul>
<li>密集城区3D覆盖（Massive-MIMO AAU）</li>
<li>地铁隧道连续覆盖（8通道的5G RRU）</li>
<li>室内热点覆盖（small cell）</li>
<li>高话务热点区域（5G Pole Site）</li>
</ul>
<h3>运营商技术</h3>
<table>
<thead>
<tr>
<th style="text-align:left">运营商名称</th>
<th style="text-align:left">2G技术</th>
<th style="text-align:left">3G技术</th>
<th style="text-align:left">4G技术</th>
<th style="text-align:left">4G+技术</th>
<th style="text-align:left">5G技术</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">移动</td>
<td style="text-align:left">GSM</td>
<td style="text-align:left">TD-SCDMA</td>
<td style="text-align:left">TDD-LTE（时分双工LTE网络）</td>
<td style="text-align:left"></td>
<td style="text-align:left">5G NR</td>
</tr>
<tr>
<td style="text-align:left">广电</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">5G NR</td>
</tr>
<tr>
<td style="text-align:left">联通</td>
<td style="text-align:left">GSM</td>
<td style="text-align:left">WCDMA</td>
<td style="text-align:left">FDD-LTE（频分双工LTE网络）</td>
<td style="text-align:left"></td>
<td style="text-align:left">5G-A</td>
</tr>
<tr>
<td style="text-align:left">电信</td>
<td style="text-align:left">CDMA</td>
<td style="text-align:left">CDMA2000</td>
<td style="text-align:left">FDD-LTE（频分双工LTE网络）</td>
<td style="text-align:left"></td>
<td style="text-align:left">5G-A</td>
</tr>
</tbody>
</table>
<h3>硬件制造商</h3>
<ul>
<li>华为（HUAWEI）</li>
<li>爱立信（ERICSSON）</li>
<li>诺基亚（NOKIA）</li>
<li>中兴（ZTE）</li>
</ul>
<h3>移动通信频段</h3>
<table>
<thead>
<tr>
<th style="text-align:left">网络运营商</th>
<th style="text-align:left">频段编号</th>
<th style="text-align:left">频点</th>
<th style="text-align:left">频段（Band）</th>
<th style="text-align:center">带宽</th>
<th style="text-align:left">网络类型</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">广电</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">703MHz~733MHz</td>
<td style="text-align:center">30MB</td>
<td style="text-align:left">5G</td>
<td style="text-align:left">上行（上传），与<strong>移动</strong>共建共享</td>
</tr>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">733MHz~758MHz</td>
<td style="text-align:center"></td>
<td style="text-align:left"></td>
<td style="text-align:left">==未知==</td>
</tr>
<tr>
<td style="text-align:left">广电</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">758MHz~788MHz</td>
<td style="text-align:center">30MB</td>
<td style="text-align:left">5G</td>
<td style="text-align:left">下行（下载），与<strong>移动</strong>共建共享</td>
</tr>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">788MHz~842MHz</td>
<td style="text-align:center"></td>
<td style="text-align:left"></td>
<td style="text-align:left">==未知==</td>
</tr>
<tr>
<td style="text-align:left">电信</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">842MHz~835MHz</td>
<td style="text-align:center">11MB</td>
<td style="text-align:left">3G/4G/5G</td>
<td style="text-align:left">上行（上传）</td>
</tr>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">835MHz~869MHz</td>
<td style="text-align:center"></td>
<td style="text-align:left"></td>
<td style="text-align:left">==未知==</td>
</tr>
<tr>
<td style="text-align:left">电信</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">869MHz~880MHz</td>
<td style="text-align:center">11MB</td>
<td style="text-align:left">3G/4G/5G</td>
<td style="text-align:left">下行（下载）</td>
</tr>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">880MHz~889MHz</td>
<td style="text-align:center"></td>
<td style="text-align:left"></td>
<td style="text-align:left">==未知==</td>
</tr>
<tr>
<td style="text-align:left">移动</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">889MHz~904MHz</td>
<td style="text-align:center">15MB</td>
<td style="text-align:left">2G/4G</td>
<td style="text-align:left">上行（上传）</td>
</tr>
<tr>
<td style="text-align:left">联通</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">904MHz~915MHz</td>
<td style="text-align:center">11MB</td>
<td style="text-align:left">2G/3G/4G/5G</td>
<td style="text-align:left">上行（上传）</td>
</tr>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">915MHz~934MHz</td>
<td style="text-align:center"></td>
<td style="text-align:left"></td>
<td style="text-align:left">==未知==</td>
</tr>
<tr>
<td style="text-align:left">移动</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">934MHz~949MHz</td>
<td style="text-align:center">15MB</td>
<td style="text-align:left">2G/4G</td>
<td style="text-align:left">下行（下载）</td>
</tr>
<tr>
<td style="text-align:left">联通</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">949MHz~960MHz</td>
<td style="text-align:center">11MB</td>
<td style="text-align:left">2G/3G/4G/5G</td>
<td style="text-align:left">下行（下载）</td>
</tr>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">960MHz~1735MHz</td>
<td style="text-align:center"></td>
<td style="text-align:left"></td>
<td style="text-align:left">==未知==</td>
</tr>
<tr>
<td style="text-align:left">联通</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">1735MHz~1765MHz</td>
<td style="text-align:center">30MB</td>
<td style="text-align:left">2G/4G</td>
<td style="text-align:left">上行（上传）</td>
</tr>
<tr>
<td style="text-align:left">电信</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">1765MHz~1785MHz</td>
<td style="text-align:center">20MB</td>
<td style="text-align:left">4G</td>
<td style="text-align:left">上行（上传）</td>
</tr>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">1785MHz~1830MHz</td>
<td style="text-align:center"></td>
<td style="text-align:left"></td>
<td style="text-align:left">==未知==</td>
</tr>
<tr>
<td style="text-align:left">联通</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">1830MHz~1860MHz</td>
<td style="text-align:center">30MB</td>
<td style="text-align:left">2G/4G</td>
<td style="text-align:left">下行（下载）</td>
</tr>
<tr>
<td style="text-align:left">电信</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">1860MHz~1880MHz</td>
<td style="text-align:center">20MB</td>
<td style="text-align:left">4G</td>
<td style="text-align:left">下行（下载）</td>
</tr>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">1880MHz~1885MHz</td>
<td style="text-align:center"></td>
<td style="text-align:left"></td>
<td style="text-align:left">==未知==</td>
</tr>
<tr>
<td style="text-align:left">移动</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">1885MHz~1915MHz</td>
<td style="text-align:center">30MB</td>
<td style="text-align:left">4G</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">1915MHz~1920MHz</td>
<td style="text-align:center"></td>
<td style="text-align:left"></td>
<td style="text-align:left">==未知==</td>
</tr>
<tr>
<td style="text-align:left">电信</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">1920MHz~1940MHz</td>
<td style="text-align:center">20MB</td>
<td style="text-align:left">4G/5G</td>
<td style="text-align:left">上行（上传），5G与<strong>联通</strong>共建共享</td>
</tr>
<tr>
<td style="text-align:left">联通</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">1940MHz~1965MHz</td>
<td style="text-align:center">25MB</td>
<td style="text-align:left">3G/4G/5G</td>
<td style="text-align:left">上行（上传），5G与<strong>电信</strong>共建共享</td>
</tr>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">1965MHz~2010MHz</td>
<td style="text-align:center"></td>
<td style="text-align:left"></td>
<td style="text-align:left">==未知==</td>
</tr>
<tr>
<td style="text-align:left">移动</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">2010MHz~2025MHz</td>
<td style="text-align:center">15MB</td>
<td style="text-align:left">4G</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">2025MHz~2110MHz</td>
<td style="text-align:center"></td>
<td style="text-align:left"></td>
<td style="text-align:left">==未知==</td>
</tr>
<tr>
<td style="text-align:left">电信</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">2110MHz~2130MHz</td>
<td style="text-align:center">20MB</td>
<td style="text-align:left">4G/5G</td>
<td style="text-align:left">下行（下载），5G与<strong>联通</strong>共建共享</td>
</tr>
<tr>
<td style="text-align:left">联通</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">2130MHz~2155MHz</td>
<td style="text-align:center">25MB</td>
<td style="text-align:left">3G/4G/5G</td>
<td style="text-align:left">下行（下载），5G与<strong>电信</strong>共建共享</td>
</tr>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">2155MHz~2300MHz</td>
<td style="text-align:center"></td>
<td style="text-align:left"></td>
<td style="text-align:left">==未知==</td>
</tr>
<tr>
<td style="text-align:left">联通</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">2300MHz~2320MHz</td>
<td style="text-align:center">20MB</td>
<td style="text-align:left">4G</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">移动</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">2320MHz~2370MHz</td>
<td style="text-align:center">50MB</td>
<td style="text-align:left">4G</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">电信</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">2370MHz~2390MHz</td>
<td style="text-align:center">20MB</td>
<td style="text-align:left">4G</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">2390MHz~2515MHz</td>
<td style="text-align:center"></td>
<td style="text-align:left"></td>
<td style="text-align:left">==未知==</td>
</tr>
<tr>
<td style="text-align:left">移动</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">2515MHz~2675MHz</td>
<td style="text-align:center">160MB</td>
<td style="text-align:left">4G/5G</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">2675MHz~3300MHz</td>
<td style="text-align:center">40MB</td>
<td style="text-align:left"></td>
<td style="text-align:left">==未知==</td>
</tr>
<tr>
<td style="text-align:left">电信、联通、广电</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">3300MHz~3400MHz</td>
<td style="text-align:center">100MB</td>
<td style="text-align:left">5G</td>
<td style="text-align:left">电信、联通、广电共用</td>
</tr>
<tr>
<td style="text-align:left">电信</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">3400MHz~3500MHz</td>
<td style="text-align:center">100MB</td>
<td style="text-align:left">5G</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">联通</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">3500MHz~3600MHz</td>
<td style="text-align:center">100MB</td>
<td style="text-align:left">5G</td>
<td style="text-align:left">与<strong>电信</strong>共建共享</td>
</tr>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">3600MHz~4800MHz</td>
<td style="text-align:center">1200MB</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">移动</td>
<td style="text-align:left">n79</td>
<td style="text-align:left"></td>
<td style="text-align:left">4800MHz~4900MHz</td>
<td style="text-align:center">100MB</td>
<td style="text-align:left">5G</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">广电</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">4900MHz~4960MHz</td>
<td style="text-align:center">60MB</td>
<td style="text-align:left">5G</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left">4960MHz~5000MHz</td>
<td style="text-align:center">40MB</td>
<td style="text-align:left">5G</td>
<td style="text-align:left">预留</td>
</tr>
</tbody>
</table>
<ul>
<li>无线电频率在移动网络通讯中的划分：高频到超高频</li>
</ul>
<p>相关信息可查看 “中国无线电频率划分” 中的介绍：<a href="/note/Technology-%E7%94%B5%E7%A3%81%E6%B3%A2-%E6%97%A0%E7%BA%BF%E7%94%B5%E6%B3%A2-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-%E4%B8%AD%E5%9B%BD%E6%97%A0%E7%BA%BF%E7%94%B5%E9%A2%91%E7%8E%87%E5%88%92%E5%88%86.html" target="_blank">Technology-电磁波-无线电波-查询手册-中国无线电频率划分</a></p>
<h3>网络模型</h3>
<ul>
<li>NR</li>
<li>LTE</li>
<li>TD</li>
<li>W</li>
<li>C</li>
<li>G</li>
<li>SC</li>
</ul>
<h3>任务优先级别/用户等级划分</h3>
<p>普通用户 &lt; VIP用户（花钱多） &lt; VVIP用户（合作方/市场部） &lt; 热点区域用户（公共服务地区、交通、学校） &lt; 党政军用户</p>
<p>热点区域（场景）：</p>
<ul>
<li>5高：高速公路、高铁、高校、高价值区域（党政军）、高密集区域（办公楼、密集住宅区）</li>
<li>2低：地铁站、火车站</li>
<li>2美：美食商圈、风景区</li>
</ul>
<h3>用户投诉解决流程</h3>
<ol>
<li>（收集投诉信息）询问用户什么时间？什么地点？发生什么网络问题？（确认问题类型）</li>
<li>（核查终端问题）询问用户使用的设备型号、是否更换过SIM手机卡，确认是否是用户的问题。</li>
<li>（核查基站设备）核查附近基站运营状态是否故障？</li>
<li>（核查基站配置）核查基站参数配置是否有改动。</li>
<li>（核查基站利用率）核查基站PRB（用户利用率）是否大于50%的拥塞。</li>
<li>（现场解决问题）到现场数据采集、输出调整方案、进行优化调整并复测。</li>
<li>（问题解决反馈）回访用户。</li>
</ol>
<h2>协议</h2>
<ul>
<li>网络上通信的设备，事先规定连接规则、传输数据的规则被称为网络通信协议。</li>
<li>OSI网络参考模型：全球网络互联标准。</li>
<li>TCP/IP网络模型：实际使用的国际标准。</li>
</ul>
<p>详细总结：<a href="/note/Technology-%E9%80%9A%E4%BF%A1-%E5%8D%8F%E8%AE%AE.html" target="_blank">Technology-通信-协议</a></p>
<h2>技术</h2>
<p>详细总结：<a href="/note/Technology-%E9%80%9A%E4%BF%A1-%E6%8A%80%E6%9C%AF.html" target="_blank">Technology-通信-技术</a></p>
<h2>查询手册</h2>
<h3>世界各国和地区名称代码</h3>
<ul>
<li>世界各国和地区的名称代码通常指的是国际标准化组织（ISO）发布的ISO 3166标准中的国家代码。</li>
</ul>
<p>详细总结：<a href="/note/Technology-%E9%80%9A%E4%BF%A1-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-%E4%B8%96%E7%95%8C%E5%90%84%E5%9B%BD%E5%92%8C%E5%9C%B0%E5%8C%BA%E5%90%8D%E7%A7%B0%E4%BB%A3%E7%A0%81.html" target="_blank">Technology-通信-查询手册-世界各国和地区名称代码</a></p>
<h3>域名解析服务（DNS）</h3>
<ul>
<li>域名解析服务（DNS）是互联网的一项基础服务。</li>
<li>将易于记忆的域名转换成计算机能够直接访问的IP地址。</li>
<li>这个过程允许用户通过输入简单的域名来访问互联网上的资源，而不需要记住复杂的数字序列。</li>
</ul>
<p>详细总结：<a href="/note/Technology-%E9%80%9A%E4%BF%A1-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-NDS%E5%9F%9F%E5%90%8D%E8%A7%A3%E6%9E%90.html" target="_blank">Technology-通信-查询手册-NDS域名解析</a></p>
<h3>网络域名备案（ICP）</h3>
<ul>
<li>网络域名备案（ICP备案）是中国特有的互联网管理要求，全称为“互联网内容提供商备案”，是中国国家互联网信息办公室（原工业和信息化部）对在中国境内提供互联网信息服务的网站实行的登记制度。</li>
</ul>
<p>详细总结：<a href="/note/Technology-%E9%80%9A%E4%BF%A1-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-ICP%E7%BD%91%E7%BB%9C%E5%9F%9F%E5%90%8D%E5%A4%87%E6%A1%88.html" target="_blank">Technology-通信-查询手册-ICP网络域名备案</a></p>
<h3>API接口规范整理</h3>
<ul>
<li>API接口是软件组件之间进行交互的桥梁。</li>
<li>它定义了请求的格式、通信协议、数据交换方式以及响应的结构。</li>
<li>通过API，不同的应用程序可以在网络上相互请求和传输信息。</li>
</ul>
<p>详细总结：<a href="/note/Technology-%E9%80%9A%E4%BF%A1-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-API.html" target="_blank">Technology-通信-查询手册-API</a></p>
<h3>专业术语</h3>
<p>详细总结：<a href="/note/Technology-%E9%80%9A%E4%BF%A1-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-%E4%B8%93%E4%B8%9A%E6%9C%AF%E8%AF%AD.html" target="_blank">Technology-通信-查询手册-专业术语</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - API - 「java.net」</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjava.net%E3%80%8D.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjava.net%E3%80%8D.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - API - 「java.net」</source>
      <description>文章摘要： 提供实现网络操作相关的类。 介绍 简要说明 提供了用于网络通信的类和接口。 这个包支持多种网络协议，包括 TCP/IP 和 UDP，以及用于 URL 处理的类。 主要功能 URL 处理：提供了 URL 类来表示统一资源定位符，以及 URLConnection 类来处理与 URL 的连接。 Socket 编程：支持客户端和服务器端的 Sock...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Sun, 02 Jun 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 提供实现网络操作相关的类。</p>
<!-- more -->
<h2>介绍</h2>
<p>简要说明</p>
<ul>
<li>提供了用于网络通信的类和接口。</li>
<li>这个包支持多种网络协议，包括 TCP/IP 和 UDP，以及用于 URL 处理的类。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>URL 处理</strong>：提供了 URL 类来表示统一资源定位符，以及 URLConnection 类来处理与 URL 的连接。</li>
<li><strong>Socket 编程</strong>：支持客户端和服务器端的 Socket 编程，包括面向连接的 TCP（通过 Socket 类）和面向无连接的 UDP（通过 DatagramSocket 类）。</li>
<li><strong>网络接口</strong>：提供了 InetAddress 类来表示互联网协议（IP）地址，以及 NetworkInterface 类来获取本地机器的网络接口信息。</li>
<li><strong>HTTP 通信</strong>：提供了 HttpURLConnection 类，它支持 HTTP 特定的功能，如 GET 和 POST 请求。</li>
<li><strong>代理和隧道</strong>：支持使用代理服务器，以及通过代理服务器的隧道通信。</li>
<li><strong>多播数据报</strong>：支持多播通信，允许数据报被发送到多个目的地。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>安全性</strong>：网络通信可能涉及敏感数据，因此需要使用 SSL/TLS 等加密协议来确保数据安全。</li>
<li><strong>异常处理</strong>：网络操作可能会抛出多种异常，如 IOException，因此需要妥善处理这些异常。</li>
<li><strong>资源管理</strong>：网络资源（如 Socket）在使用完毕后应正确关闭，以避免资源泄露。</li>
<li><strong>性能考虑</strong>：网络操作可能比本地操作慢，应考虑异步处理或使用连接池来提高性能。</li>
<li><strong>线程安全</strong>：某些网络类不是线程安全的，需要开发者注意并发访问的问题。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>网络应用开发</strong>：任何需要网络通信的 Java 应用程序，如 Web 客户端、服务器端应用、网络服务。</li>
<li><strong>分布式系统</strong>：在分布式系统中，不同节点之间需要通过网络进行通信和数据交换。</li>
<li><strong>物联网（IoT）</strong>：物联网设备之间通过网络进行数据传输和指令下发。</li>
<li><strong>Web 服务</strong>：开发基于 HTTP 协议的 Web 服务客户端或服务器端。</li>
<li><strong>网络诊断工具</strong>：编写用于网络诊断的工具，如检查网络连接、获取网络信息等。</li>
</ul>
<h3>主要类和接口</h3>
<h4>InetAddress</h4>
<p>表示互联网协议（IP）地址。</p>
<ul>
<li><code>getByName(String host)</code>: 根据主机名获取 <code>InetAddress</code> 实例。</li>
<li><code>getAllByName(String host)</code>: 根据主机名获取 <code>InetAddress</code> 实例数组，用于处理主机名对应多个 IP 地址的情况。</li>
<li><code>getLocalHost()</code>: 获取本地主机的 <code>InetAddress</code> 实例。</li>
<li><code>getHostAddress()</code>: 返回 IP 地址字符串。</li>
</ul>
<h4>URL</h4>
<p>表示统一资源定位符，它是一个指向互联网资源的指针。</p>
<ul>
<li><code>openStream()</code>: 打开到此 URL 的连接并返回一个用于从该连接读入的 <code>InputStream</code>。</li>
<li><code>openConnection()</code>: 返回一个 <code>URLConnection</code> 对象，表示与 URL 引用的资源的通信链接。</li>
</ul>
<h4>URLConnection</h4>
<p>抽象类，是所有类的超类，代表到 URL 引用的资源的连接。</p>
<ul>
<li><code>connect()</code>: 建立到远程对象的实际连接。</li>
<li><code>getInputStream()</code>: 返回从此打开的连接读取的输入流。</li>
<li><code>getContent()</code>: 获取此 URL 连接的内容。</li>
</ul>
<h4>HttpURLConnection</h4>
<p>是 <code>URLConnection</code> 的子类，用于 HTTP 协议。</p>
<ul>
<li><code>getResponseCode()</code>: 获取服务器响应的状态码。</li>
<li><code>getResponseMessage()</code>: 获取服务器响应的状态消息。</li>
<li><code>setRequestMethod(String method)</code>: 设置请求方法，如 “GET” 或 “POST”。</li>
</ul>
<h4>Socket</h4>
<p>实现客户端套接字（也可以是服务器端），用于 TCP 网络通信。</p>
<ul>
<li><code>connect(SocketAddress endpoint)</code>: 将此套接字连接到服务器。</li>
<li><code>getInputStream()</code>: 返回此套接字的输入流。</li>
<li><code>getOutputStream()</code>: 返回此套接字的输出流。</li>
<li><code>close()</code>: 关闭此套接字。</li>
</ul>
<h4>ServerSocket</h4>
<p>实现服务器端套接字，用于监听客户端的 TCP 连接请求。</p>
<ul>
<li><code>bind(SocketAddress endpoint)</code>: 将 ServerSocket 绑定到指定的地址和端口。</li>
<li><code>accept()</code>: 监听并接受到此套接字的连接。</li>
</ul>
<h4>DatagramPacket</h4>
<p>表示数据报包，用于实现无连接的UDP网络通信。</p>
<ul>
<li><code>getData()</code>: 返回数据缓冲区。</li>
<li><code>setSocketAddress(SocketAddress address)</code>: 设置要发送或接收数据报的远程地址。</li>
</ul>
<h4>DatagramSocket</h4>
<p>用于发送和接收 UDP 数据报包。</p>
<ul>
<li><code>send(DatagramPacket p)</code>: 发送数据报包。</li>
<li><code>receive(DatagramPacket p)</code>: 从此套接字接收数据报包。</li>
</ul>
<h3>学习总结</h3>
<ul>
<li><strong>网络基础</strong>: <code>java.net</code> 包提供了网络编程的基础，包括 IP 地址、URL、套接字等。</li>
<li><strong>URL处理</strong>: 使用 <code>URL</code> 和 <code>URLConnection</code> 可以轻松地读取网络资源。</li>
<li><strong>HTTP协议</strong>: <code>HttpURLConnection</code> 提供了处理 HTTP 请求的方法，如设置请求方法、获取响应代码等。</li>
<li><strong>套接字编程</strong>: <code>Socket</code> 和 <code>ServerSocket</code> 用于实现基于 TCP 的客户端和服务器端通信。</li>
<li><strong>无连接通信</strong>: <code>DatagramPacket</code> 和 <code>DatagramSocket</code> 用于实现基于 UDP 的无连接通信。</li>
<li><strong>异常处理</strong>: 网络编程中可能会遇到多种异常，如 <code>UnknownHostException</code>, <code>IOException</code> 等，需要进行适当的异常处理。</li>
<li><strong>流操作</strong>: 网络通信涉及大量的流操作，需要熟悉 <code>InputStream</code> 和 <code>OutputStream</code> 的使用。</li>
<li><strong>线程安全</strong>: 网络操作可能是阻塞的，因此在多线程环境下使用时需要注意线程安全。</li>
<li><strong>资源管理</strong>: 使用完网络资源后，应该及时关闭套接字和流，以释放资源。</li>
</ul>
<h2>InetSocketAddress</h2>
<ul>
<li>用于封装 IP 地址和端口号的类，它仅仅是一个地址信息的容器，本身不提供网络通信的功能。</li>
<li>包路径：<code>java.net.InetAddress</code></li>
</ul>
<p><strong>创建对象</strong></p>
<ul>
<li>静态方法，无需实例化，即不需要通过<code>new</code>来创建对象。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">方法</th>
<th style="text-align:left">返回值</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>InetAddress.getLocalHost()</code></td>
<td style="text-align:left"><code>InetAddress</code></td>
<td style="text-align:left">获取本机IP，返回<code>inetAddress</code>对象</td>
</tr>
<tr>
<td style="text-align:left"><code>InetAddress.getByName(String host)</code></td>
<td style="text-align:left"><code>InetAddress</code></td>
<td style="text-align:left">根据ip地址或域名，例如："www.baidu.com"</td>
</tr>
</tbody>
</table>
<p><strong>相关方法</strong></p>
<table>
<thead>
<tr>
<th style="text-align:left">方法</th>
<th style="text-align:left">返回值</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>&lt;InetAddress&gt;.getHostName()</code></td>
<td style="text-align:left"><code>String</code></td>
<td style="text-align:left">获取给ip地址对象中的主机名</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;InetAddress&gt;.getHostAddress()</code></td>
<td style="text-align:left"><code>String</code></td>
<td style="text-align:left">获取该ip地址对象中的ip地址</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;InetAddress&gt;.isReachable(int timeout)</code></td>
<td style="text-align:left"><code>boolean</code></td>
<td style="text-align:left">在指定的毫秒时间内判断主机与该ip对应的主机是否能连通</td>
</tr>
</tbody>
</table>
<h2>URL</h2>
<ul>
<li>
<p>解析传入的RUL字符串，拆解得到：协议、域名、端口、请求资源。</p>
</li>
<li>
<p>包路径：<code>java.net.URL</code></p>
</li>
<li>
<p>例子：<code>http://www.baidu.com:80/index.html?name=xiaoming&amp;age=18#a</code></p>
</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">方法</th>
<th style="text-align:left">返回值</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>new URL(String url)</code></td>
<td style="text-align:left"></td>
<td style="text-align:left">实例化</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;URL&gt;.getProtocol()</code></td>
<td style="text-align:left"></td>
<td style="text-align:left">返回协议，如<code>http</code></td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;URL&gt;.getHost()</code></td>
<td style="text-align:left"></td>
<td style="text-align:left">返回IP/域名，如<code>www.baidu.com</code></td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;URL&gt;.getPort()</code></td>
<td style="text-align:left"></td>
<td style="text-align:left">返回端口，如<code>80</code></td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;URL&gt;.getPath()</code></td>
<td style="text-align:left"></td>
<td style="text-align:left">返回请求资源，如<code>/index.html</code></td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;URL&gt;.getQuery()</code></td>
<td style="text-align:left"></td>
<td style="text-align:left">返回参数，如<code>name=xiaoming&amp;age=18</code></td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;URL&gt;.getFile()</code></td>
<td style="text-align:left"></td>
<td style="text-align:left">返回请求资源和参数，如<code>/index.html?name=xiaoming&amp;age=18</code></td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;URL&gt;.getRef()</code></td>
<td style="text-align:left"></td>
<td style="text-align:left">返回锚点，如<code>a</code></td>
</tr>
</tbody>
</table>
<h2>TCP</h2>
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li></li>
</ul>
<p>内部相关文章</p>
<ul>
<li>TCP详细总结：<a href="/note/Technology-%E9%80%9A%E4%BF%A1-%E5%8D%8F%E8%AE%AE-TCP.html" target="_blank">Technology-通信-协议-TCP</a></li>
</ul>
</div>
<p>TCP流程图</p>
<blockquote>
<p></p>
</blockquote>
<h3>创建客户端</h3>
<ul>
<li>包路径：<code>java.net.Socket</code></li>
</ul>
<p><strong>客户端代码实现步骤</strong></p>
<ol>
<li>创建客户端的Socket对象，请求与服务端的连接。</li>
<li>使用Socket对象调用<code>getOutputStream()</code>方法得到字节输出流。</li>
<li>使用字节输出流完成数据的发送。</li>
<li>释放资源：关闭socket管道。</li>
</ol>
<p><strong>构造方法</strong></p>
<table>
<thead>
<tr>
<th style="text-align:left">方法</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>new Socket(String host, int port)</code></td>
<td style="text-align:left">指定的服务器IP<code>host</code>和端口<code>port</code>，来请求与服务器与服务端建立连接，连接通过获得客户端Socket</td>
</tr>
</tbody>
</table>
<p><strong>相关方法</strong></p>
<table>
<thead>
<tr>
<th style="text-align:left">方法</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>&lt;Socket&gt;.getOutputStream()</code></td>
<td style="text-align:left">获得字节输出流对象<code>OutputStream</code></td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;Socket&gt;.getInputStream()</code></td>
<td style="text-align:left">获得字节输入流对象<code>InputStream</code></td>
</tr>
</tbody>
</table>
<p><strong>客户端案例</strong></p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token class-name">DataOutputStream</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token class-name">IOException</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token class-name">OutputStream</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>net<span class="token punctuation">.</span></span><span class="token class-name">Socket</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>util<span class="token punctuation">.</span></span><span class="token class-name">Scanner</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token doc-comment comment">/**</span>
<span class="line"> * 客户端</span>
<span class="line"> */</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Client</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> ages<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">try</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token comment">// 创建服务端，并给指定 “服务端IP中的程序端口” 建立管道连接</span></span>
<span class="line">            <span class="token class-name">Socket</span> socket <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Socket</span><span class="token punctuation">(</span><span class="token string">"127.0.0.1"</span><span class="token punctuation">,</span> <span class="token number">4545</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"客户端已启动"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">            <span class="token comment">// 创建 “字节输出流” 来发送数据给服务端中的程序</span></span>
<span class="line">            <span class="token class-name">OutputStream</span> os <span class="token operator">=</span> socket<span class="token punctuation">.</span><span class="token function">getOutputStream</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token comment">// 将 “字节输出流” 包装成 “数据字节输出流” 对象</span></span>
<span class="line">            <span class="token class-name">DataOutputStream</span> dos <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DataOutputStream</span><span class="token punctuation">(</span>os<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">            <span class="token comment">// 实例化接收用户输入</span></span>
<span class="line">            <span class="token class-name">Scanner</span> scanner <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Scanner</span><span class="token punctuation">(</span><span class="token class-name">System</span><span class="token punctuation">.</span>in<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">            <span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span><span class="token string">"&gt;&gt;&gt; "</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                <span class="token comment">// 接收用户输入</span></span>
<span class="line">                <span class="token class-name">String</span> userInput <span class="token operator">=</span> scanner<span class="token punctuation">.</span><span class="token function">next</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                <span class="token comment">// 判断是否退出客户端</span></span>
<span class="line">                <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token string">"exit"</span><span class="token punctuation">.</span><span class="token function">equals</span><span class="token punctuation">(</span>userInput<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                    <span class="token comment">// 释放 “数据字节输出流”</span></span>
<span class="line">                    dos<span class="token punctuation">.</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                    <span class="token comment">// 释放 “连接资源”</span></span>
<span class="line">                    socket<span class="token punctuation">.</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                    <span class="token comment">// 关闭客户端</span></span>
<span class="line">                    <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"客户端已关闭"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                    <span class="token keyword">break</span><span class="token punctuation">;</span></span>
<span class="line">                <span class="token punctuation">}</span></span>
<span class="line">                <span class="token comment">// 开始写入数据</span></span>
<span class="line">                dos<span class="token punctuation">.</span><span class="token function">writeUTF</span><span class="token punctuation">(</span>userInput<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                <span class="token comment">// 更新，防止存放在缓冲区没有真正发送出去</span></span>
<span class="line">                dos<span class="token punctuation">.</span><span class="token function">flush</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">        <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">IOException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token keyword">throw</span> <span class="token keyword">new</span> <span class="token class-name">RuntimeException</span><span class="token punctuation">(</span>e<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>创建服务端</h3>
<ul>
<li>包路径：<code>java.net.ServerSocket</code></li>
</ul>
<p><strong>服务端代码实现步骤</strong></p>
<ol>
<li>创建ServerSocket对象，注册服务端端口。</li>
<li>调用ServerSocket对象的<code>accept()</code>方法，等待客户端的连接，并得到Socket管道对象。</li>
<li>通过Socket对象调用<code>getInputStream()</code>方法得到字节输入流，完成数据的接收。</li>
<li>释放资源，关闭socket管道。</li>
</ol>
<p><strong>构造方法</strong></p>
<table>
<thead>
<tr>
<th style="text-align:left">方法</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>new ServerSocket(int port)</code></td>
<td style="text-align:left">为服务端程序注册端口</td>
</tr>
</tbody>
</table>
<p><strong>相关方法</strong></p>
<table>
<thead>
<tr>
<th style="text-align:left">方法</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>&lt;ServerSocket&gt;.accept()</code></td>
<td style="text-align:left">阻塞等待客户端的连接请求，一旦与某个客户端成功连接，则返回服务端这边的Socket对象</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;ServerSocket&gt;.getRemoteSocketAddress()</code></td>
<td style="text-align:left">获得客户端的IP和端口</td>
</tr>
</tbody>
</table>
<p><strong>服务端案例</strong></p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token class-name">IOException</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token class-name">InputStream</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token class-name">DataInputStream</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>net<span class="token punctuation">.</span></span><span class="token class-name">ServerSocket</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>net<span class="token punctuation">.</span></span><span class="token class-name">Socket</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token doc-comment comment">/**</span>
<span class="line"> * 服务端</span>
<span class="line"> */</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Server</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> ages<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">try</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token comment">// 创建服务端，并为服务端程序注册端口</span></span>
<span class="line">            <span class="token class-name">ServerSocket</span> serverSocket <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ServerSocket</span><span class="token punctuation">(</span><span class="token number">4545</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"服务端已启动"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">            <span class="token comment">// 等待接收客户端的连接请求</span></span>
<span class="line">            <span class="token class-name">Socket</span> socket <span class="token operator">=</span> serverSocket<span class="token punctuation">.</span><span class="token function">accept</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">            <span class="token comment">// 使用 “字节输入流” 来接收客户端发送的数据</span></span>
<span class="line">            <span class="token class-name">InputStream</span> is <span class="token operator">=</span> socket<span class="token punctuation">.</span><span class="token function">getInputStream</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token comment">// 将 “字节输入流” 包装成 “数据字节输入流” 对象</span></span>
<span class="line">            <span class="token class-name">DataInputStream</span> dis <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DataInputStream</span><span class="token punctuation">(</span>is<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">            <span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                <span class="token keyword">try</span> <span class="token punctuation">{</span></span>
<span class="line">                    <span class="token comment">// “解码” 接收到的客户端发送的数据</span></span>
<span class="line">                    <span class="token class-name">String</span> data <span class="token operator">=</span> dis<span class="token punctuation">.</span><span class="token function">readUTF</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">                    <span class="token comment">// 在控制台显示结果</span></span>
<span class="line">                    <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span>socket<span class="token punctuation">.</span><span class="token function">getRemoteSocketAddress</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token string">" : "</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                    <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>data<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">                <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">IOException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                    <span class="token comment">// 当客户端程序关闭时，表示断开了连接</span></span>
<span class="line">                    <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"提示：客户端 \""</span> <span class="token operator">+</span> socket<span class="token punctuation">.</span><span class="token function">getRemoteSocketAddress</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token string">"\" 已断开连接"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                    <span class="token comment">// 释放资源</span></span>
<span class="line">                    dis<span class="token punctuation">.</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                    socket<span class="token punctuation">.</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                    <span class="token comment">// 关闭服务端</span></span>
<span class="line">                    <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"服务端已关闭"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                    <span class="token keyword">break</span><span class="token punctuation">;</span></span>
<span class="line">                <span class="token punctuation">}</span></span>
<span class="line">            <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">        <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">IOException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token keyword">throw</span> <span class="token keyword">new</span> <span class="token class-name">RuntimeException</span><span class="token punctuation">(</span>e<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>案例 - TCP协议的多客户端同时通讯</h3>
<ul>
<li>需要使用Java的多线程技术</li>
</ul>
<h4>客户端代码</h4>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token class-name">DataOutputStream</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token class-name">IOException</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token class-name">OutputStream</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>net<span class="token punctuation">.</span></span><span class="token class-name">Socket</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>util<span class="token punctuation">.</span></span><span class="token class-name">Scanner</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token doc-comment comment">/**</span>
<span class="line"> * 客户端</span>
<span class="line"> */</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Client</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> ages<span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">IOException</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">try</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token comment">// 创建服务端，并给指定 “服务端IP中的程序端口” 建立管道连接</span></span>
<span class="line">            <span class="token class-name">Socket</span> socket <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Socket</span><span class="token punctuation">(</span><span class="token string">"127.0.0.1"</span><span class="token punctuation">,</span> <span class="token number">4545</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"客户端已启动"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">            <span class="token comment">// 创建 “字节输出流” 来发送数据给服务端中的程序</span></span>
<span class="line">            <span class="token class-name">OutputStream</span> os <span class="token operator">=</span> socket<span class="token punctuation">.</span><span class="token function">getOutputStream</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token comment">// 将 “字节输出流” 包装成 “数据字节输出流” 对象</span></span>
<span class="line">            <span class="token class-name">DataOutputStream</span> dos <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DataOutputStream</span><span class="token punctuation">(</span>os<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">            <span class="token comment">// 实例化接收用户输入</span></span>
<span class="line">            <span class="token class-name">Scanner</span> scanner <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Scanner</span><span class="token punctuation">(</span><span class="token class-name">System</span><span class="token punctuation">.</span>in<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">            <span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span><span class="token string">"&gt;&gt;&gt; "</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                <span class="token comment">// 接收用户输入</span></span>
<span class="line">                <span class="token class-name">String</span> userInput <span class="token operator">=</span> scanner<span class="token punctuation">.</span><span class="token function">next</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                <span class="token comment">// 判断是否退出客户端</span></span>
<span class="line">                <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token string">"exit"</span><span class="token punctuation">.</span><span class="token function">equals</span><span class="token punctuation">(</span>userInput<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                    <span class="token comment">// 释放 “数据字节输出流”</span></span>
<span class="line">                    dos<span class="token punctuation">.</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                    <span class="token comment">// 释放 “连接资源”</span></span>
<span class="line">                    socket<span class="token punctuation">.</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                    <span class="token comment">// 关闭客户端</span></span>
<span class="line">                    <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"客户端已关闭"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                    <span class="token keyword">break</span><span class="token punctuation">;</span></span>
<span class="line">                <span class="token punctuation">}</span></span>
<span class="line">                <span class="token comment">// 开始写入数据</span></span>
<span class="line">                dos<span class="token punctuation">.</span><span class="token function">writeUTF</span><span class="token punctuation">(</span>userInput<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                <span class="token comment">// 更新，防止存放在缓冲区没有真正发送出去</span></span>
<span class="line">                dos<span class="token punctuation">.</span><span class="token function">flush</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">        <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">IOException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token keyword">throw</span> <span class="token keyword">new</span> <span class="token class-name">RuntimeException</span><span class="token punctuation">(</span>e<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4>服务端代码</h4>
<ul>
<li>服务端需要编写两个文件。</li>
</ul>
<p><strong>Server.java - 主线程代码</strong></p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token class-name">IOException</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>net<span class="token punctuation">.</span></span><span class="token class-name">ServerSocket</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>net<span class="token punctuation">.</span></span><span class="token class-name">Socket</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token doc-comment comment">/**</span>
<span class="line"> * 服务端</span>
<span class="line"> */</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Server</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> ages<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">try</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token comment">// 创建服务端，并为服务端程序注册端口</span></span>
<span class="line">            <span class="token class-name">ServerSocket</span> serverSocket <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ServerSocket</span><span class="token punctuation">(</span><span class="token number">4545</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"服务端已启动"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">            <span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                <span class="token comment">// 等待接收客户端的连接请求</span></span>
<span class="line">                <span class="token class-name">Socket</span> socket <span class="token operator">=</span> serverSocket<span class="token punctuation">.</span><span class="token function">accept</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">                <span class="token comment">// 提示客户端与服务器建立连接</span></span>
<span class="line">                <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"消息：客户端 \""</span> <span class="token operator">+</span> socket<span class="token punctuation">.</span><span class="token function">getRemoteSocketAddress</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token string">"\" 与服务器建立连接"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">                <span class="token comment">// 将该客户端对象的socket通信管道，交给一个独立的线程负责处理</span></span>
<span class="line">                <span class="token keyword">new</span> <span class="token class-name">ServerReaderThread</span><span class="token punctuation">(</span>socket<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">start</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">        <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">IOException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token keyword">throw</span> <span class="token keyword">new</span> <span class="token class-name">RuntimeException</span><span class="token punctuation">(</span>e<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>ServerReaderThread.java - 多线程代码</strong></p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token class-name">DataInputStream</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token class-name">IOException</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token class-name">InputStream</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>net<span class="token punctuation">.</span></span><span class="token class-name">Socket</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">ServerReaderThread</span> <span class="token keyword">extends</span> <span class="token class-name">Thread</span><span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">Socket</span> socket<span class="token punctuation">;</span>  <span class="token comment">// 全局变量，记录建立连接的客户端对象</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 构造方法</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">ServerReaderThread</span><span class="token punctuation">(</span><span class="token class-name">Socket</span> socket<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>socket <span class="token operator">=</span> socket<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 重写，执行核心代码</span></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">run</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">try</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token comment">// 使用 “字节输入流” 来接收客户端发送的数据</span></span>
<span class="line">            <span class="token class-name">InputStream</span> is <span class="token operator">=</span> socket<span class="token punctuation">.</span><span class="token function">getInputStream</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token comment">// 将 “字节输入流” 包装成 “数据字节输入流” 对象</span></span>
<span class="line">            <span class="token class-name">DataInputStream</span> dis <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DataInputStream</span><span class="token punctuation">(</span>is<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">            <span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                <span class="token keyword">try</span> <span class="token punctuation">{</span></span>
<span class="line">                    <span class="token comment">// “解码” 接收到的客户端发送的数据</span></span>
<span class="line">                    <span class="token class-name">String</span> data <span class="token operator">=</span> dis<span class="token punctuation">.</span><span class="token function">readUTF</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">                    <span class="token comment">// 在控制台显示结果</span></span>
<span class="line">                    <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span>socket<span class="token punctuation">.</span><span class="token function">getRemoteSocketAddress</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token string">" : "</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                    <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>data<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">                <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">IOException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                    <span class="token comment">// 当客户端程序关闭时，表示断开了连接</span></span>
<span class="line">                    <span class="token comment">// 释放资源</span></span>
<span class="line">                    dis<span class="token punctuation">.</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                    socket<span class="token punctuation">.</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                    <span class="token comment">// 关闭当前服务端线程</span></span>
<span class="line">                    <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"提示：客户端 \""</span> <span class="token operator">+</span> socket<span class="token punctuation">.</span><span class="token function">getRemoteSocketAddress</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token string">"\" 已断开连接，关闭对该客户端的服务进程"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                    <span class="token keyword">break</span><span class="token punctuation">;</span></span>
<span class="line">                <span class="token punctuation">}</span></span>
<span class="line">            <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">        <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">IOException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token keyword">throw</span> <span class="token keyword">new</span> <span class="token class-name">RuntimeException</span><span class="token punctuation">(</span>e<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>案例 - TCP协议的端口转发技术实现群聊</h3>
<h4>客户端代码</h4>
<p><strong>客户端代码 - 主进程</strong></p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token class-name">DataOutputStream</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token class-name">IOException</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token class-name">OutputStream</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>net<span class="token punctuation">.</span></span><span class="token class-name">Socket</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>util<span class="token punctuation">.</span></span><span class="token class-name">Scanner</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token doc-comment comment">/**</span>
<span class="line"> * 客户端</span>
<span class="line"> */</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Client</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> ages<span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">IOException</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">try</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token comment">// 创建客户端，并给指定 “服务端IP中的程序端口” 建立管道连接</span></span>
<span class="line">            <span class="token class-name">Socket</span> socket <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Socket</span><span class="token punctuation">(</span><span class="token string">"127.0.0.1"</span><span class="token punctuation">,</span> <span class="token number">4545</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"客户端已启动"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">            <span class="token comment">// 创建独立下线程，来接收服务端发送过来的消息</span></span>
<span class="line">            <span class="token keyword">new</span> <span class="token class-name">ClientReaderThread</span><span class="token punctuation">(</span>socket<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">start</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">            <span class="token comment">// 创建 “字节输出流” 来发送数据给服务端中的程序</span></span>
<span class="line">            <span class="token class-name">OutputStream</span> os <span class="token operator">=</span> socket<span class="token punctuation">.</span><span class="token function">getOutputStream</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token comment">// 将 “字节输出流” 包装成 “数据字节输出流” 对象</span></span>
<span class="line">            <span class="token class-name">DataOutputStream</span> dos <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DataOutputStream</span><span class="token punctuation">(</span>os<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">            <span class="token comment">// 实例化接收用户输入</span></span>
<span class="line">            <span class="token class-name">Scanner</span> scanner <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Scanner</span><span class="token punctuation">(</span><span class="token class-name">System</span><span class="token punctuation">.</span>in<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">            <span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span><span class="token string">"&gt;&gt;&gt; "</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                <span class="token comment">// 接收用户输入</span></span>
<span class="line">                <span class="token class-name">String</span> userInput <span class="token operator">=</span> scanner<span class="token punctuation">.</span><span class="token function">next</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                <span class="token comment">// 判断是否退出客户端</span></span>
<span class="line">                <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token string">"exit"</span><span class="token punctuation">.</span><span class="token function">equals</span><span class="token punctuation">(</span>userInput<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                    <span class="token comment">// 释放 “数据字节输出流”</span></span>
<span class="line">                    dos<span class="token punctuation">.</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                    <span class="token comment">// 释放 “连接资源”</span></span>
<span class="line">                    socket<span class="token punctuation">.</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                    <span class="token comment">// 关闭客户端</span></span>
<span class="line">                    <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"客户端已关闭"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                    <span class="token keyword">break</span><span class="token punctuation">;</span></span>
<span class="line">                <span class="token punctuation">}</span></span>
<span class="line">                <span class="token comment">// 将数据 “编码” 成UTF-8，并发送给服务端</span></span>
<span class="line">                dos<span class="token punctuation">.</span><span class="token function">writeUTF</span><span class="token punctuation">(</span>userInput<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                <span class="token comment">// 更新，防止存放在缓冲区没有真正发送出去</span></span>
<span class="line">                dos<span class="token punctuation">.</span><span class="token function">flush</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">        <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">IOException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token keyword">throw</span> <span class="token keyword">new</span> <span class="token class-name">RuntimeException</span><span class="token punctuation">(</span>e<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>客户端代码 - 子进程</strong></p>
<ul>
<li>用于不断接收服务器发来的信息</li>
</ul>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token class-name">DataInputStream</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token class-name">IOException</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token class-name">InputStream</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>net<span class="token punctuation">.</span></span><span class="token class-name">Socket</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token doc-comment comment">/**</span>
<span class="line"> * 客户端线程</span>
<span class="line"> */</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">ClientReaderThread</span> <span class="token keyword">extends</span> <span class="token class-name">Thread</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">Socket</span> socket<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 构造方法</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">ClientReaderThread</span><span class="token punctuation">(</span><span class="token class-name">Socket</span> socket<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>socket <span class="token operator">=</span> socket<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 重写，执行核心代码</span></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">run</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">try</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token comment">// 使用 “字节输入流” 来接收服务器发送的数据</span></span>
<span class="line">            <span class="token class-name">InputStream</span> is <span class="token operator">=</span> socket<span class="token punctuation">.</span><span class="token function">getInputStream</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token comment">// 将 “字节输入流” 包装成 “数据字节输入流” 对象</span></span>
<span class="line">            <span class="token class-name">DataInputStream</span> dis <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DataInputStream</span><span class="token punctuation">(</span>is<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">            <span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                <span class="token keyword">try</span> <span class="token punctuation">{</span></span>
<span class="line">                    <span class="token comment">// “解码” 接收到的服务端发送的数据</span></span>
<span class="line">                    <span class="token class-name">String</span> data <span class="token operator">=</span> dis<span class="token punctuation">.</span><span class="token function">readUTF</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">                    <span class="token comment">// 在控制台显示结果</span></span>
<span class="line">                    <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>data<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">                <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">IOException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                    <span class="token comment">// 当客户端程序关闭时，表示断开了连接</span></span>
<span class="line">                    <span class="token comment">// 释放资源</span></span>
<span class="line">                    dis<span class="token punctuation">.</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                    socket<span class="token punctuation">.</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                    <span class="token keyword">break</span><span class="token punctuation">;</span></span>
<span class="line">                <span class="token punctuation">}</span></span>
<span class="line">            <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">        <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">IOException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token keyword">throw</span> <span class="token keyword">new</span> <span class="token class-name">RuntimeException</span><span class="token punctuation">(</span>e<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4>服务端代码</h4>
<p><strong>服务端代码 - 主进程</strong></p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token class-name">IOException</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>net<span class="token punctuation">.</span></span><span class="token class-name">ServerSocket</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>net<span class="token punctuation">.</span></span><span class="token class-name">Socket</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>util<span class="token punctuation">.</span></span><span class="token class-name">ArrayList</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>util<span class="token punctuation">.</span></span><span class="token class-name">List</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token doc-comment comment">/**</span>
<span class="line"> * 服务端</span>
<span class="line"> */</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Server</span> <span class="token punctuation">{</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 创建存储与服务器连接的客户端Socket对象的集合</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token class-name">List</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">Socket</span><span class="token punctuation">&gt;</span></span> onLineSockets <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ArrayList</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token punctuation">&gt;</span></span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> ages<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">try</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token comment">// 创建服务端，并为服务端程序注册端口</span></span>
<span class="line">            <span class="token class-name">ServerSocket</span> serverSocket <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ServerSocket</span><span class="token punctuation">(</span><span class="token number">4545</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"服务端已启动"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">            <span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                <span class="token comment">// 等待接收客户端的连接请求</span></span>
<span class="line">                <span class="token class-name">Socket</span> socket <span class="token operator">=</span> serverSocket<span class="token punctuation">.</span><span class="token function">accept</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                <span class="token comment">// 将客户端对象添加到集合中</span></span>
<span class="line">                onLineSockets<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span>socket<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">                <span class="token comment">// 提示客户端与服务器建立连接</span></span>
<span class="line">                <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"消息：客户端 \""</span> <span class="token operator">+</span> socket<span class="token punctuation">.</span><span class="token function">getRemoteSocketAddress</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token string">"\" 与服务器建立连接"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">                <span class="token comment">// 将该客户端对象的socket通信管道，交给一个独立的线程负责处理</span></span>
<span class="line">                <span class="token keyword">new</span> <span class="token class-name">ServerReaderThread</span><span class="token punctuation">(</span>socket<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">start</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">        <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">IOException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token keyword">throw</span> <span class="token keyword">new</span> <span class="token class-name">RuntimeException</span><span class="token punctuation">(</span>e<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>服务端代码 - 子进程</strong></p>
<ul>
<li>用于处理客户端发来的信息，并将信息同步发送给其他在线的客户端</li>
</ul>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token operator">*</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>net<span class="token punctuation">.</span></span><span class="token class-name">Socket</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token doc-comment comment">/**</span>
<span class="line"> * 服务端线程</span>
<span class="line"> */</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">ServerReaderThread</span> <span class="token keyword">extends</span> <span class="token class-name">Thread</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">Socket</span> socket<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 构造方法</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">ServerReaderThread</span><span class="token punctuation">(</span><span class="token class-name">Socket</span> socket<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>socket <span class="token operator">=</span> socket<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 重写，执行核心代码</span></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">run</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">try</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token comment">// 使用 “字节输入流” 来接收客户端发送的数据</span></span>
<span class="line">            <span class="token class-name">InputStream</span> is <span class="token operator">=</span> socket<span class="token punctuation">.</span><span class="token function">getInputStream</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token comment">// 将 “字节输入流” 包装成 “数据字节输入流” 对象</span></span>
<span class="line">            <span class="token class-name">DataInputStream</span> dis <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DataInputStream</span><span class="token punctuation">(</span>is<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">            <span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                <span class="token keyword">try</span> <span class="token punctuation">{</span></span>
<span class="line">                    <span class="token comment">// “解码” 接收到的客户端发送的数据</span></span>
<span class="line">                    <span class="token class-name">String</span> data <span class="token operator">=</span> dis<span class="token punctuation">.</span><span class="token function">readUTF</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">                    <span class="token comment">// 在控制台显示结果</span></span>
<span class="line">                    <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>socket<span class="token punctuation">.</span><span class="token function">getRemoteSocketAddress</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token string">" : "</span> <span class="token operator">+</span> data<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">                    <span class="token comment">// 将客户端发送的信息，同步发送给其他有建立连接的客户端</span></span>
<span class="line">                    <span class="token function">sendMsgToAll</span><span class="token punctuation">(</span>data<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">                <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">IOException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                    <span class="token comment">// 当客户端程序关闭时，表示断开了连接</span></span>
<span class="line">                    <span class="token comment">// 释放资源</span></span>
<span class="line">                    dis<span class="token punctuation">.</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                    socket<span class="token punctuation">.</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                    <span class="token comment">// 更新存放客户端集合，将当断开连接的客户端在集合中删除掉</span></span>
<span class="line">                    <span class="token class-name">Server</span><span class="token punctuation">.</span>onLineSockets<span class="token punctuation">.</span><span class="token function">remove</span><span class="token punctuation">(</span>socket<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                    <span class="token comment">// 关闭当前服务端线程</span></span>
<span class="line">                    <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"提示：客户端 \""</span> <span class="token operator">+</span> socket<span class="token punctuation">.</span><span class="token function">getRemoteSocketAddress</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token string">"\" 已断开连接，关闭对该客户端的服务进程"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">                    <span class="token keyword">break</span><span class="token punctuation">;</span></span>
<span class="line">                <span class="token punctuation">}</span></span>
<span class="line">            <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">        <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">IOException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token keyword">throw</span> <span class="token keyword">new</span> <span class="token class-name">RuntimeException</span><span class="token punctuation">(</span>e<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 同步发送信息给其他客户端</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token keyword">void</span> <span class="token function">sendMsgToAll</span><span class="token punctuation">(</span><span class="token class-name">String</span> data<span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">IOException</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token class-name">Socket</span> onLineSocket <span class="token operator">:</span> <span class="token class-name">Server</span><span class="token punctuation">.</span>onLineSockets<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line"></span>
<span class="line">            <span class="token comment">// 判断该消息是否是当前客户端发送来，即不需要给当前客户端再发信息回去</span></span>
<span class="line">            <span class="token keyword">if</span> <span class="token punctuation">(</span>socket <span class="token operator">==</span> onLineSocket<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                <span class="token keyword">continue</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token punctuation">}</span></span>
<span class="line">            <span class="token comment">// 创建 “字节输出流” 来发送数据给客户端</span></span>
<span class="line">            <span class="token class-name">OutputStream</span> os <span class="token operator">=</span> onLineSocket<span class="token punctuation">.</span><span class="token function">getOutputStream</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token comment">// 将 “字节输出流” 包装成 “数据字节输出流” 对象</span></span>
<span class="line">            <span class="token class-name">DataOutputStream</span> dos <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DataOutputStream</span><span class="token punctuation">(</span>os<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">            <span class="token comment">// 将数据 “编码” 成UTF-8，并发送给服务端</span></span>
<span class="line">            dos<span class="token punctuation">.</span><span class="token function">writeUTF</span><span class="token punctuation">(</span>data<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token comment">// 更新，防止存放在缓冲区没有真正发送出去</span></span>
<span class="line">            dos<span class="token punctuation">.</span><span class="token function">flush</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>UDP</h2>
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li></li>
</ul>
<p>内部相关文章</p>
<ul>
<li>UDP详细总结：<a href="/note/Technology-%E9%80%9A%E4%BF%A1-%E5%8D%8F%E8%AE%AE-UDP.html" target="_blank">Technology-通信-协议-UDP</a></li>
</ul>
</div>
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>流程图</p>
<p></p>
</div>
<h3>创建客户端、服务端</h3>
<ul>
<li><code>java.net.DatagramSocket</code></li>
</ul>
<p><strong>构造方法</strong></p>
<table>
<thead>
<tr>
<th style="text-align:left">方法</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>new DatagramSocket()</code></td>
<td style="text-align:left">创建客户端的Socket对象，系统随即分配一个端口号</td>
</tr>
<tr>
<td style="text-align:left"><code>new DatagramSocket(int port)</code></td>
<td style="text-align:left">创建服务端的Socket对象，并指定端口号</td>
</tr>
</tbody>
</table>
<p><strong>相关方法</strong></p>
<table>
<thead>
<tr>
<th style="text-align:left">方法</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>&lt;DatagramSocket&gt;.send(DatagramSocket dp)</code></td>
<td style="text-align:left">发送数据包</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;DatagramSocket&gt;.receive(DatagramSocket p)</code></td>
<td style="text-align:left">使用数据包接收数据</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;DatagramSocket&gt;.close()</code></td>
<td style="text-align:left">关闭客户端对象</td>
</tr>
</tbody>
</table>
<h3>创建数据包</h3>
<ul>
<li><code>java.net.DatagramPacket</code></li>
</ul>
<p><strong>构造方法</strong></p>
<table>
<thead>
<tr>
<th style="text-align:left">方法</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>new DatagramPacket(byte[] buf, int length, InetAddress address, int port)</code></td>
<td style="text-align:left">创建用于发送数据的数据包对象，<code>buf</code>字节数据包、<code>length</code>数据包的字节长度、<code>address</code>接收端的IP地址、<code>port</code>接收端的端口号</td>
</tr>
<tr>
<td style="text-align:left"><code>new DatagramPacket(byte[] buf, int length)</code></td>
<td style="text-align:left">创建用来接收数据的数据包对象，<code>buf</code>存放接收到的数据包字节数组大小、<code>length</code>接收到的数据包字节数组长度</td>
</tr>
</tbody>
</table>
<p><strong>相关方法</strong></p>
<table>
<thead>
<tr>
<th style="text-align:left">方法</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>&lt;DatagramPacket&gt;.getLength()</code></td>
<td style="text-align:left">获取数据包，实际接收到的字节个数</td>
</tr>
</tbody>
</table>
<h3>案例</h3>
<p><strong>客户端代码</strong></p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token class-name">IOException</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>net<span class="token punctuation">.</span></span><span class="token class-name">DatagramPacket</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>net<span class="token punctuation">.</span></span><span class="token class-name">DatagramSocket</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>net<span class="token punctuation">.</span></span><span class="token class-name">InetAddress</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token doc-comment comment">/**</span>
<span class="line"> * 客户端</span>
<span class="line"> */</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Client</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> ages<span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">IOException</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 实例化一个客户端对象</span></span>
<span class="line">        <span class="token class-name">DatagramSocket</span> socket <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DatagramSocket</span><span class="token punctuation">(</span><span class="token number">8888</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"客户端已启动"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 创建字节输出流对象</span></span>
<span class="line">        <span class="token class-name">FileOutputStream</span> fos <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">FileOutputStream</span><span class="token punctuation">(</span><span class="token string">"webapps/pages/login.html"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token comment">// 包装成数据流</span></span>
<span class="line">        <span class="token class-name">DataOutputStream</span> dos <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DataOutputStream</span><span class="token punctuation">(</span>fos<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 将需要发送的数据进行“编码”，转换成字节码</span></span>
<span class="line">        <span class="token keyword">byte</span><span class="token punctuation">[</span><span class="token punctuation">]</span> dataByte <span class="token operator">=</span> <span class="token keyword">new</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 实例化数据包对象，用于封装要发出去的数据（将要发出去的字节数据、字节数据的长度、接收端）</span></span>
<span class="line">        <span class="token class-name">DatagramPacket</span> packet <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DatagramPacket</span><span class="token punctuation">(</span>dataByte<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> dataByte<span class="token punctuation">.</span>length<span class="token punctuation">,</span> <span class="token keyword">new</span> <span class="token class-name">InetSocketAddress</span><span class="token punctuation">(</span><span class="token string">"127.0.0.1"</span><span class="token punctuation">,</span> <span class="token number">9999</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 开始将数据包发送到服务端，阻塞</span></span>
<span class="line">        socket<span class="token punctuation">.</span><span class="token function">send</span><span class="token punctuation">(</span>packet<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 释放资源，即关闭客户端</span></span>
<span class="line">        socket<span class="token punctuation">.</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>服务端代码</strong></p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token class-name">IOException</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>net<span class="token punctuation">.</span></span><span class="token class-name">DatagramPacket</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>net<span class="token punctuation">.</span></span><span class="token class-name">DatagramSocket</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>net<span class="token punctuation">.</span></span><span class="token class-name">SocketException</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token doc-comment comment">/**</span>
<span class="line"> * 服务端</span>
<span class="line"> */</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Server</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> ages<span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">IOException</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 实例化一个服务端对象</span></span>
<span class="line">        <span class="token class-name">DatagramSocket</span> socket <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DatagramSocket</span><span class="token punctuation">(</span><span class="token number">9999</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"启动服务端"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 创建存放接收数据包的字节数组，大小为64kb</span></span>
<span class="line">        <span class="token keyword">byte</span><span class="token punctuation">[</span><span class="token punctuation">]</span> dataByte <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token keyword">byte</span><span class="token punctuation">[</span><span class="token number">1024</span> <span class="token operator">*</span> <span class="token number">64</span><span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token comment">// 实例化一个数据包对象，用于接收数据</span></span>
<span class="line">        <span class="token class-name">DatagramPacket</span> packet <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DatagramPacket</span><span class="token punctuation">(</span>dataByte<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> dataByte<span class="token punctuation">.</span>length<span class="token punctuation">,</span> <span class="token keyword">new</span> <span class="token class-name">InetSocketAddress</span><span class="token punctuation">(</span><span class="token string">"127.0.0.1"</span><span class="token punctuation">,</span> <span class="token number">8888</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token comment">// 开始使用数据包来接收客户端发来的数据</span></span>
<span class="line">            socket<span class="token punctuation">.</span><span class="token function">receive</span><span class="token punctuation">(</span>packet<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">            <span class="token comment">// 获取本次数据包中接收到了多少字节数组</span></span>
<span class="line">            <span class="token keyword">int</span> len <span class="token operator">=</span> packet<span class="token punctuation">.</span><span class="token function">getLength</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">            <span class="token comment">// 将接收到的数据进行“解码”，转换成字符串</span></span>
<span class="line">            <span class="token class-name">String</span> data <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">String</span> <span class="token punctuation">(</span>dataByte<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> len<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">            <span class="token comment">// 在控制台输出接收到的数据</span></span>
<span class="line">            <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>packet<span class="token punctuation">.</span><span class="token function">getAddress</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getHostAddress</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token string">" : "</span> <span class="token operator">+</span> data<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>"</span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>基础知识 - 字符集</title>
      <link>https://blog.magictable.ha.cn/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E5%AD%97%E7%AC%A6%E9%9B%86.html</link>
      <guid>https://blog.magictable.ha.cn/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E5%AD%97%E7%AC%A6%E9%9B%86.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">基础知识 - 字符集</source>
      <description>文章摘要： 在计算机中，字符集是用于表示字符的编码集合，它是计算机处理文字和符号的基础。 相关信息 外部相关文章 UTF-8的详细介绍 国家标准全文公开系统 内部相关文章 编码的概念 计算机内部使用二进制数，一个字符在计算机中是以0和1构成的序列形式来存储的。 将字符映射到它的二进制形式的过程被成为“编码”（encoding）。 字符有多种不同的编码方...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Thu, 30 May 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 在计算机中，字符集是用于表示字符的编码集合，它是计算机处理文字和符号的基础。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li><a href="https://www.utf8.com/" target="_blank" rel="noopener noreferrer">UTF-8的详细介绍</a></li>
<li><a href="http://openstd.samr.gov.cn/bzgk/gb/index" target="_blank" rel="noopener noreferrer">国家标准全文公开系统</a></li>
</ul>
<p>内部相关文章</p>
<ul>
<li></li>
</ul>
</div>
<h2>编码的概念</h2>
<ul>
<li>计算机内部使用二进制数，一个字符在计算机中是以<code>0</code>和<code>1</code>构成的序列形式来存储的。</li>
<li>将字符映射到它的二进制形式的过程被成为“编码”（encoding）。</li>
<li>字符有多种不同的编码方式，编码表（encoding scheme）定义该如何编码每个字符。</li>
</ul>
<h2>ASCII</h2>
<ul>
<li>美国信息交换标准代码，包含英文字母、数字、符号。</li>
<li>每个字符用1个字节表示，即8位二进制数。</li>
<li>总共可以表示128个字符。</li>
<li>每个字符的二进制最高位用0表示。</li>
</ul>
<p>案例</p>
<ul>
<li><code>0xxx xxxx</code></li>
</ul>
<p>详细总结：<a href="/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E5%AD%97%E7%AC%A6%E9%9B%86-ASCII.html" target="_blank">基础知识-字符集-ASCII</a></p>
<h2>GBK</h2>
<ul>
<li>汉字内码扩展规范，国标。</li>
<li>每个中文字符编码成2个字节的形式存储，即16位二进制。</li>
<li>GBK兼容了ASCII字符集。</li>
<li>每个字符的二进制最高位用1表示。</li>
</ul>
<p>案例：</p>
<ul>
<li>英文字符：<code>0xxx xxxx</code></li>
<li>中文字符：<code>1xxx xxxx xxxx xxxx</code></li>
</ul>
<p><strong>简体中文Simplified Chinese(GB 2312) gb2312</strong></p>
<ul>
<li><em>GB 2312或GB2312-80是中国国家标准简体中文字符集</em>，全称《信息交换用汉字编码字符集·基本集》，又称GB 0 。</li>
<li>1981年5月1日由中国国家标准总局发布。</li>
<li>GB 2312对汉字采用双字节编码，收录7445个图形字符，其中包括6763个汉字。</li>
</ul>
<p><strong>简体中文Simplified Chinese(GBK) gbk</strong></p>
<ul>
<li>GBK编码是对GB 2312编码的扩充，对汉字采用双字节编码。</li>
<li>K的汉字拼音Kuo Zhan(扩展)中“扩”字的字母。</li>
<li>1995年12月发布的汉字编码国家标准。</li>
<li>GBK字符集共收录21886个汉字，包括：GB 2312中的全部汉字、非汉字符号，国家标准GB13000-1中的全部中日韩汉字，和BIG5编码中的所有汉字。</li>
<li>(以上合计“汉字”20902个和“其他汉字、部首、符号”共计984个)</li>
</ul>
<p><strong>简体中文Simplified Chinese(GB 18030) gb18030</strong></p>
<ul>
<li>GB18030编码，全称：国家标准GB 18030-2005《信息技术中文编码字符集》。</li>
<li>是对GBK编码的扩充，覆盖中文、日文、朝鲜语和中国少数民族文字。</li>
<li>GB2312 -&gt; GBK -&gt; GB19030是逐渐扩充的集合</li>
</ul>
<h2>Unicode</h2>
<ul>
<li>Unicode是国际组织制定的，称为“统一码/万国码”。</li>
<li>可以容纳世界上所有文字、符号的字符集。</li>
</ul>
<p><strong>UTF-8编码方案</strong></p>
<ul>
<li>UTF-8是Unicode字符集的一种编码方案，采用可变长编码方案。</li>
<li>共分为四个长度区：1个字节、2个字节、3个字节、4个字节。</li>
<li>英文字符、数字等只占用1个字节，汉字字符占用3个字节。</li>
</ul>
<p>案例：</p>
<ul>
<li>1个字节：<code>0xxx xxxx</code></li>
<li>2个字节：<code>110x xxxx 10xx xxxx</code></li>
<li>3个字节：<code>1110 xxxx 10xx xxxx 10xx xxxx</code></li>
<li>4个字节：<code>1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx</code></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Language - JavaScript - API</title>
      <link>https://blog.magictable.ha.cn/software/Language-JavaScript-API.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-JavaScript-API.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - JavaScript - API</source>
      <description>文章摘要： 摘要内容。 注释 属性 == 对象的成员变量 方法 == 对象的成员函数 对象的属性，其实可以“二次修改赋值”和“获取”。 输出方式 数据类型转换 案例 Array数组 String字符串 JSON对象 Window浏览器窗口对象 DOM文档对象模型 获取 var myvideo = document.querySelector(&amp;apos;butt...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Thu, 23 May 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>属性 == 对象的成员变量</li>
<li>方法 == 对象的成员函数</li>
<li>对象的属性，其实可以“二次修改赋值”和“获取”。</li>
</ul>
</div>
<h2>输出方式</h2>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token comment">/*写入到警告框，并弹出警告框*/</span></span>
<span class="line">window<span class="token punctuation">.</span><span class="token function">alert</span><span class="token punctuation">(</span><span class="token string">"内容"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">/*写入到HTML文件中，在页面中显示*/</span></span>
<span class="line">document<span class="token punctuation">.</span><span class="token function">write</span><span class="token punctuation">(</span><span class="token string">"要输出的内容"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">/*写入到浏览器的控制台上显示*/</span></span>
<span class="line">console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">"内容"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">/*打印获取到的DOM对象*/</span></span>
<span class="line">console<span class="token punctuation">.</span><span class="token function">dir</span><span class="token punctuation">(</span><span class="token string">"DOM对象"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">/*写入 HTML 元素*/</span></span>
<span class="line">innerHTML<span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>数据类型转换</h2>
<table>
<thead>
<tr>
<th style="text-align:left">方法</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>parseInt(&lt;数据&gt;)</code></td>
<td style="text-align:left">转换为<code>number</code>数字类型</td>
</tr>
</tbody>
</table>
<p><strong>案例</strong></p>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token comment">// 转换为数字类型</span></span>
<span class="line"><span class="token function">alert</span><span class="token punctuation">(</span><span class="token function">parseInt</span><span class="token punctuation">(</span><span class="token string">"12"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>     <span class="token comment">// 结果：12</span></span>
<span class="line"><span class="token function">alert</span><span class="token punctuation">(</span><span class="token function">parseInt</span><span class="token punctuation">(</span><span class="token string">"12A45"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token comment">// 结果：12</span></span>
<span class="line"><span class="token function">alert</span><span class="token punctuation">(</span><span class="token function">parseInt</span><span class="token punctuation">(</span><span class="token string">"A12"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token comment">// 结果：NAN</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>Array数组</h2>
<table>
<thead>
<tr>
<th style="text-align:left">属性</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>&lt;Array&gt;.length</code></td>
<td style="text-align:left">获取数组的长度</td>
</tr>
</tbody>
</table>
<table>
<thead>
<tr>
<th style="text-align:left">方法</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>&lt;Array&gt;.length</code></td>
<td style="text-align:left">获取数组的长度</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;Array&gt;.forEach()</code></td>
<td style="text-align:left">遍历数组中<strong>有值的元素</strong>，并调用一次传入的函数</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;Array&gt;.push(&lt;元素&gt;, &lt;元素&gt;...)</code></td>
<td style="text-align:left">在数组末尾追加新元素，并返回新的长度</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;Array&gt;.splice(&lt;元素下标&gt;, &lt;删除元素的个数&gt;)</code></td>
<td style="text-align:left">删除元素</td>
</tr>
</tbody>
</table>
<h2>String字符串</h2>
<table>
<thead>
<tr>
<th style="text-align:left">属性</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>&lt;String&gt;.length</code></td>
<td style="text-align:left">获取字符串的长度</td>
</tr>
</tbody>
</table>
<table>
<thead>
<tr>
<th style="text-align:left">方法</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>&lt;String&gt;.length</code></td>
<td style="text-align:left">获取字符串的长度</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;String&gt;.charAt(&lt;下标&gt;)</code></td>
<td style="text-align:left">返回在指定下标位置的字符</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;String&gt;.indexOf(&lt;需要查找的字符串&gt;)</code></td>
<td style="text-align:left">检索字符串，返回下标数字</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;String&gt;.trim()</code></td>
<td style="text-align:left">去除字符串两边的空格，返回新字符串</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;String&gt;.substring(&lt;起始下标&gt;, &lt;结束下标&gt;)</code></td>
<td style="text-align:left">提取字符串中两个指定的索引号之间的字符</td>
</tr>
</tbody>
</table>
<h2>JSON对象</h2>
<table>
<thead>
<tr>
<th style="text-align:left">方法</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>JSON.parse(&lt;json字符串&gt;)</code></td>
<td style="text-align:left">将JSON字符串转换为JS对象</td>
</tr>
<tr>
<td style="text-align:left"><code>JSON.string(&lt;js对象&gt;)</code></td>
<td style="text-align:left">将JS对象转换为JSON字符串</td>
</tr>
</tbody>
</table>
<h2>Window浏览器窗口对象</h2>
<table>
<thead>
<tr>
<th style="text-align:left">属性</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>window.history</code></td>
<td style="text-align:left">对<strong>History历史记录对象</strong>的只读引用</td>
</tr>
<tr>
<td style="text-align:left"><code>window.location</code></td>
<td style="text-align:left">用于窗口或框架的<strong>Location地址栏对象</strong></td>
</tr>
<tr>
<td style="text-align:left"><code>window.location.href</code></td>
<td style="text-align:left">返回完整的URL字符串，重新赋值URL并跳转到新页面</td>
</tr>
<tr>
<td style="text-align:left"><code>window.navigator</code></td>
<td style="text-align:left">对<strong>Navigator浏览器对象</strong>的只读引用</td>
</tr>
</tbody>
</table>
<table>
<thead>
<tr>
<th style="text-align:left">方法</th>
<th style="text-align:center">返回值</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>window.alert()</code></td>
<td style="text-align:center"></td>
<td style="text-align:left">显示带有一段消息和一个确认按钮的警告框</td>
</tr>
<tr>
<td style="text-align:left"><code>window.confirm()</code></td>
<td style="text-align:center"><code>boolean</code></td>
<td style="text-align:left">显示带有一段消息以及确认按钮和取消按钮的对话框</td>
</tr>
<tr>
<td style="text-align:left"><code>window.setInterval(&lt;匿名函数&gt;, &lt;毫秒数&gt;)</code></td>
<td style="text-align:center"></td>
<td style="text-align:left">计时器，按照指定的周期（毫秒）来调用函数或计算表达式</td>
</tr>
<tr>
<td style="text-align:left"><code>window.setTimeout()</code></td>
<td style="text-align:center"></td>
<td style="text-align:left">延迟器，在指定的毫秒数后调用一次函数或计算表达式</td>
</tr>
</tbody>
</table>
<h2>DOM文档对象模型</h2>
<h3>获取</h3>
<p><code>var myvideo = document.querySelector('button');</code></p>
<table>
<thead>
<tr>
<th style="text-align:left">方法</th>
<th style="text-align:center">返回值</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>document.getElementsByTagName("&lt;标签名称&gt;")</code></td>
<td style="text-align:center">元素对象数组</td>
<td style="text-align:left">根据“标签名”获取</td>
</tr>
<tr>
<td style="text-align:left"><code>document.getElementById("&lt;id属性的值&gt;")</code></td>
<td style="text-align:center">单个元素对象</td>
<td style="text-align:left">根据“id标签的属性值”获取</td>
</tr>
<tr>
<td style="text-align:left"><code>document.getElementsByClassName("&lt;class标签的值&gt;")</code></td>
<td style="text-align:center">元素对象数组</td>
<td style="text-align:left">根据“class标签的属性值”获取</td>
</tr>
<tr>
<td style="text-align:left"><code>document.getElementsByName("&lt;标签的name值&gt;")</code></td>
<td style="text-align:center">元素对象数组</td>
<td style="text-align:left">根据“标签的name属性值”获取</td>
</tr>
</tbody>
</table>
<h3>修改</h3>
<table>
<thead>
<tr>
<th style="text-align:left">方法</th>
<th style="text-align:center">返回值</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>&lt;元素对象&gt;.innerHTML</code></td>
<td style="text-align:center"></td>
<td style="text-align:left">重新赋值，修改标签的内容</td>
</tr>
</tbody>
</table>
<h2>事件监听</h2>
<ul>
<li>事件监听可以理解为比较特殊的修改元素属性值的操作。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">方法</th>
<th style="text-align:center">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>&lt;元素对象&gt;.onclick</code></td>
<td style="text-align:center">鼠标点击</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;元素对象&gt;.onblur</code></td>
<td style="text-align:center">元素失去焦点</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;元素对象&gt;.onfocus</code></td>
<td style="text-align:center">元素获得焦点</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;元素对象&gt;.onload</code></td>
<td style="text-align:center">某个页面或图像被完成加载</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;元素对象&gt;.onsubmit</code></td>
<td style="text-align:center">当表单提交时出发该事件</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;元素对象&gt;.onkeydown</code></td>
<td style="text-align:center">某个键盘的键被按下</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;元素对象&gt;.onmouseover</code></td>
<td style="text-align:center">鼠标被移到某个元素上</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;元素对象&gt;.onmouseout</code></td>
<td style="text-align:center">鼠标从某个元素上移开</td>
</tr>
</tbody>
</table>
<h2>存储数据在浏览器</h2>
<h3>localStorage</h3>
<ul>
<li>一种允许网站在用户浏览器中存储键值对的方法，数据在浏览器会话之间持久存在，即使关闭浏览器窗口也不会被清除。</li>
<li><code>localStorage</code>中的数据存储在客户端，并且是同步的，这意味着在读取或写入数据时会阻塞其他JavaScript代码的执行。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">方法</th>
<th style="text-align:center">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>localStorage.setItem('key', 'value')</code></td>
<td style="text-align:center">存储数据</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;变量&gt; = localStorage.getItem('key')</code></td>
<td style="text-align:center">读取数据，根据<code>key</code>返回对应的值</td>
</tr>
<tr>
<td style="text-align:left"><code>localStorage.removeItem('key')</code></td>
<td style="text-align:center">删除数据</td>
</tr>
<tr>
<td style="text-align:left"><code>localStorage.clear()</code></td>
<td style="text-align:center">清空所有</td>
</tr>
</tbody>
</table>
<h3>sessionStorage</h3>
<ul>
<li>存储的数据只在会话期间存在，当用户关闭浏览器窗口或标签页时，数据会被清除。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">方法</th>
<th style="text-align:center">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>sessionStorage.setItem('key', 'value')</code></td>
<td style="text-align:center">存储数据</td>
</tr>
<tr>
<td style="text-align:left"><code>&lt;变量&gt; = sessionStorage.getItem('key')</code></td>
<td style="text-align:center">读取数据</td>
</tr>
<tr>
<td style="text-align:left"><code>sessionStorage.removeItem('key')</code></td>
<td style="text-align:center">删除数据</td>
</tr>
<tr>
<td style="text-align:left"><code>sessionStorage.clear()</code></td>
<td style="text-align:center">清空所有</td>
</tr>
</tbody>
</table>
<h3>cookies（待完善）</h3>
<ul>
<li>在每次HTTP请求中都会被发送到服务器，因此它们可以用于维持用户的会话状态。</li>
<li><code>cookies</code>可以设置过期时间，也可以设置为在浏览器关闭时删除。</li>
</ul>
<p>==待完善==</p>
<ul>
<li>设置 cookie：<code>document.cookie = 'key=value; expires=Fri, 31 Dec 2023 23:59:59 GMT; path=/';</code></li>
<li>读取 cookie：<code>var cookieValue = document.cookie.split('; ').find(row =&gt; row.startsWith('key=')).split('=')[1];</code></li>
<li>删除 cookie：<code>document.cookie = 'key=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/';</code></li>
</ul>
<p>==待完善==</p>
<h2>JQuery</h2>
<p>详细总结：<a href="/software/Language-JavaScript-API-JQuery.html" target="_blank">Language-JavaScript-API-JQuery</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Language - JavaScript - 关键字</title>
      <link>https://blog.magictable.ha.cn/software/Language-JavaScript-%E5%85%B3%E9%94%AE%E5%AD%97.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-JavaScript-%E5%85%B3%E9%94%AE%E5%AD%97.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - JavaScript - 关键字</source>
      <description>文章摘要： 摘要内容。</description>
      <category>软件程序/程序语言</category>
      <pubDate>Thu, 23 May 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<table>
<thead>
<tr>
<th style="text-align:center">关键字</th>
<th style="text-align:left">说明</th>
<th style="text-align:left">例子</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">var</td>
<td style="text-align:left">定义全局变量</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">let</td>
<td style="text-align:left">定义局部变量，不允许在同一作用域内重复使用<code>let</code>关键字</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">const</td>
<td style="text-align:left">定义只读常量，定义并赋值后不能再次修改值</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">typeof</td>
<td style="text-align:left">获取数据类型</td>
<td style="text-align:left">alert(typeof a);</td>
</tr>
<tr>
<td style="text-align:center">function</td>
<td style="text-align:left">定义函数</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">return</td>
<td style="text-align:left">返回值</td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
]]></content:encoded>
    </item>
    <item>
      <title>Language - JavaScript</title>
      <link>https://blog.magictable.ha.cn/software/Language-JavaScript.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-JavaScript.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - JavaScript</source>
      <description>文章摘要： JavaScript是编程语言，网页标准三大组成部分之一的JavaScript，用来实现网页的动态效果和用户交互功能。 JavaScript 是一种轻量级、解释型编程语言，通常在用户的浏览器中运行，而不需要在服务器上预先编译。 相关信息 外部相关文章 Mmdn web docs，前端知识查询网站。 内部相关文章 API查询手册： 简介 Ja...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Thu, 23 May 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> JavaScript是编程语言，网页标准三大组成部分之一的JavaScript，用来实现网页的动态效果和用户交互功能。</p>
<ul>
<li>JavaScript 是一种轻量级、解释型编程语言，通常在用户的浏览器中运行，而不需要在服务器上预先编译。</li>
</ul>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li><a href="https://developer.mozilla.org/zh-CN/docs/Web" target="_blank" rel="noopener noreferrer">Mmdn web docs</a>，前端知识查询网站。</li>
</ul>
<p>内部相关文章</p>
<ul>
<li>API查询手册：<a href="/software/Language-JavaScript-API.html" target="_blank">Language-JavaScript-API</a></li>
</ul>
</div>
<h2>简介</h2>
<ul>
<li>JavaScript（简称“JS”）</li>
<li>JavaScript 是一种轻量级、解释型编程语言，通常在用户的浏览器中运行，而不需要在服务器上预先编译。</li>
<li>可以在网页中嵌入，用来实现网页的动态效果和用户交互功能。</li>
</ul>
<p><strong>特点</strong></p>
<ol>
<li><strong>脚本语言</strong>：JavaScript 主要在客户端（用户的浏览器）中执行，减轻了服务器的负担。</li>
<li><strong>事件驱动</strong>：JavaScript 可以在响应特定事件时执行，例如用户点击按钮、页面加载完成等。</li>
<li><strong>跨平台</strong>：JavaScript 依赖于浏览器的支持，因此可以在任何支持 JavaScript 的浏览器上运行，无论用户的操作系统是什么。</li>
<li><strong>面向对象</strong>：JavaScript 支持面向对象编程，允许开发者定义对象和类，实现数据封装、继承和多态等特性。</li>
<li><strong>功能丰富</strong>：JavaScript 提供了大量的内置对象和方法，可以操作DOM（文档对象模型），处理日期和时间，实现动画效果等。</li>
</ol>
<h2>引入方式</h2>
<p>HTML中内部编写JS</p>
<ul>
<li>JavaScript代码必须位于HTML文件中的<code>&lt;script&gt;&lt;/script&gt;</code>标签之间。</li>
<li>在HTML文档中，可以在任意位置，放置任意数量的<code>&lt;script&gt;&lt;/script&gt;</code>标签。</li>
<li>一般会把脚本置于<code>&lt;body&gt;&lt;/body&gt;</code>标签的底部，可以<strong>改善显示速度</strong>。</li>
</ul>
<div class="language-html line-numbers-mode" data-highlighter="prismjs" data-ext="html"><pre><code class="language-html"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>script</span><span class="token punctuation">&gt;</span></span><span class="token script"><span class="token language-javascript"></span>
<span class="line"> <span class="token comment">/*JavaScript代码*/</span></span>
<span class="line"></span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>script</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>HTML的外部引入JS</p>
<ul>
<li>JS脚本可放置在外部文件中。</li>
<li>JavaScript文件的扩展名是<code>.js</code></li>
<li>通过在HTML文档中写入以下内容来引入JS脚本。</li>
</ul>
<div class="language-html line-numbers-mode" data-highlighter="prismjs" data-ext="html"><pre><code class="language-html"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>script</span> <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>./JavaScript.js<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span><span class="token script"></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>script</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p>在外部文件中放置脚本有如下优势：</p>
<ul>
<li>分离了 HTML 和代码。</li>
<li>使 HTML 和 JavaScript 更易于阅读和维护。</li>
<li>已缓存的 JavaScript 文件可加速页面加载。</li>
</ul>
<h2>基础语法</h2>
<ul>
<li>区分大小写。</li>
<li>每行结尾的分号可有可无。</li>
</ul>
<p><strong>命名规范</strong></p>
<ul>
<li>支持大小写字母、数字、<code>_</code>下划线、<code>$</code>美元符号。</li>
<li>数字不能开头。</li>
<li>建议使用驼峰命名法，即多个单词之间每个单词首字母大写。</li>
<li>不能与关键字重名。</li>
</ul>
<h3>注释</h3>
<ul>
<li>JavaScript 不会执行注释。</li>
<li>我们可以添加注释来对 JavaScript 进行解释，或者提高代码的可读性。</li>
</ul>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token comment">// 单行注释</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">/*</span>
<span class="line"> 多行注释</span>
<span class="line"></span>
<span class="line">*/</span></span>
<span class="line"></span>
<span class="line"><span class="token doc-comment comment">/**</span>
<span class="line"> * 多行文本注释</span>
<span class="line"> * </span>
<span class="line"> */</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>变量</h3>
<ul>
<li>JavaScript是一门弱类型语言，变量可以存放不同类型的值。</li>
<li>JavaScript中使用<code>var</code>关键字来声明变量。</li>
<li>JavaScript的变量类型能在创建时自动识别数据类型。</li>
</ul>
<p>关键字：<code>let</code></p>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token keyword">let</span> x <span class="token operator">=</span> <span class="token number">5</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>常量</h3>
<ul>
<li>只能初始化一个值，后续不能再次修改。</li>
</ul>
<p>关键字：<code>const</code></p>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token keyword">const</span> x <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>作用域</h3>
<ul>
<li>通过<code>{}</code>来确定一个变量或对象的作用范围。</li>
</ul>
<h3>导入模块</h3>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token comment">// 导入一个变量或对象</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token punctuation">{</span>login<span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">"./admin"</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 导入模块的所有导出成员到一个对象上。</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token operator">*</span> <span class="token keyword">as</span> admin <span class="token keyword">from</span> <span class="token string">"./admin"</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 只导入模块的默认导出成员。</span></span>
<span class="line"><span class="token keyword">import</span> admin <span class="token keyword">from</span> <span class="token string">"./admin"</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>关键字</h2>
<p>详细总结：<a href="/software/Language-JavaScript-%E5%85%B3%E9%94%AE%E5%AD%97.html" target="_blank">JavaScript关键字</a></p>
<h2>数据类型</h2>
<ul>
<li><strong>值类型(基本类型)</strong>：数字(Number)、字符串（String）、布尔（Boolean）、空（Null）、未定义（Undefined）、Symbol。</li>
<li><strong>引用数据类型（对象类型）</strong>：数组(Array)、对象(Object)、函数(Function)，还有两个特殊的对象：正则（RegExp）和日期（Date）。</li>
</ul>
<h2>运算符</h2>
<table>
<thead>
<tr>
<th style="text-align:left">类型</th>
<th style="text-align:left">符号</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">算术和位运算符</td>
<td style="text-align:left">=、+、-、*、/</td>
</tr>
<tr>
<td style="text-align:left">赋值运算符</td>
<td style="text-align:left">=、+=、-=、*=、/=、%=、++、--</td>
</tr>
<tr>
<td style="text-align:left">比较运算符</td>
<td style="text-align:left">==、!=、&lt;、&gt;、&lt;=、&gt;=、===</td>
</tr>
<tr>
<td style="text-align:left">逻辑运算符</td>
<td style="text-align:left">&amp;&amp;、||、!</td>
</tr>
<tr>
<td style="text-align:left">三元运算符</td>
<td style="text-align:left">条件表达式 ? true_value:false_value</td>
</tr>
</tbody>
</table>
<ul>
<li>提示：在比较两个值时<code>==</code>两个等号会进行类型转换，<code>===</code>三个等号不会进行类型转换。</li>
</ul>
<h2>流程控制语句</h2>
<h3>选择语句</h3>
<ul>
<li>关键字：<code>if</code>、<code>else if</code>、<code>else</code></li>
<li>关键字：<code>switch</code>、<code>case</code>、<code>default</code></li>
</ul>
<h3>循环语句</h3>
<ul>
<li>关键字：<code>for</code></li>
<li>关键字：<code>while</code></li>
</ul>
<h2>函数</h2>
<ul>
<li>函数（方法）是被设计为执行特定任务的代码块。</li>
</ul>
<h3>函数的定义</h3>
<ul>
<li>JavaScript的函数通过<code>function</code>关键字进行定义。</li>
<li>函数定义的参数，不需要指定具体的数据类型，因为JavaScript是若类型语言。</li>
<li>返回值不需要指定具体的数据类型，只需要直接使用<code>return</code>关键字进行返回即可。</li>
</ul>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token comment">// 第一种定义函数的方法</span></span>
<span class="line"><span class="token keyword">function</span> <span class="token function">name</span><span class="token punctuation">(</span><span class="token parameter"><span class="token operator">&lt;</span>参数<span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token operator">&lt;</span>参数<span class="token operator">&gt;</span><span class="token operator">...</span></span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 代码块</span></span>
<span class="line">    reutrn <span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">返回值</span><span class="token template-punctuation string">`</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 第二种定义函数的方法</span></span>
<span class="line"><span class="token keyword">var</span> <span class="token operator">&lt;</span>变量<span class="token operator">&gt;</span> <span class="token operator">=</span> <span class="token keyword">function</span> <span class="token function">name</span><span class="token punctuation">(</span><span class="token parameter"><span class="token operator">&lt;</span>参数<span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token operator">&lt;</span>参数<span class="token operator">&gt;</span><span class="token operator">...</span></span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 代码块</span></span>
<span class="line">    reutrn <span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">返回值</span><span class="token template-punctuation string">`</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>函数的调用</h3>
<ul>
<li>格式：<code>函数名称(参数列表)</code></li>
</ul>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token keyword">var</span> data <span class="token operator">=</span> <span class="token function">name</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">20</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>对象</h2>
<h3>正则（RegExp）</h3>
<p>==待完善==</p>
<h3>日期（Date）</h3>
<p>==待完善==</p>
<h3>字符串（String）</h3>
<p><strong>定义</strong></p>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token comment">// 方案一</span></span>
<span class="line"><span class="token keyword">var</span> <span class="token operator">&lt;</span>变量名<span class="token operator">&gt;</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">String</span><span class="token punctuation">(</span><span class="token string">"&lt;字符串数据&gt;"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 方案二</span></span>
<span class="line"><span class="token keyword">var</span> <span class="token operator">&lt;</span>变量名<span class="token operator">&gt;</span> <span class="token operator">=</span> <span class="token string">"字符串数据"</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>数组(Array)</h3>
<ul>
<li><code>[]</code>代表数组。</li>
</ul>
<p><strong>定义</strong></p>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token comment">// 方案一</span></span>
<span class="line"><span class="token keyword">var</span> <span class="token operator">&lt;</span>变量名<span class="token operator">&gt;</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Array</span><span class="token punctuation">(</span><span class="token operator">&lt;</span>元素<span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token operator">&lt;</span>元素<span class="token operator">&gt;</span><span class="token operator">...</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 方案二</span></span>
<span class="line"><span class="token keyword">var</span> <span class="token operator">&lt;</span>变量名<span class="token operator">&gt;</span> <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token operator">&lt;</span>元素<span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token operator">&lt;</span>元素<span class="token operator">&gt;</span><span class="token operator">...</span><span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>访问</strong></p>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token operator">&lt;</span>数组<span class="token operator">&gt;</span><span class="token punctuation">[</span>索引<span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p><strong>修改</strong></p>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token operator">&lt;</span>数组<span class="token operator">&gt;</span><span class="token punctuation">[</span>索引<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token operator">&lt;</span>值<span class="token operator">&gt;</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>对象（Object）</h3>
<ul>
<li>可以说 "JavaScript 对象是变量的容器"。</li>
<li>但是，我们通常认为 "JavaScript 对象是键值对的容器"。</li>
<li>键值对通常写法为 <code>name : value</code> (键与值以冒号分割)。</li>
<li>键值对在 JavaScript 对象通常称为 <strong>对象属性</strong>。</li>
<li>JavaScript 对象是属性变量的容器。</li>
</ul>
<p><strong>定义</strong></p>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token keyword">var</span> <span class="token operator">&lt;</span>对象名<span class="token operator">&gt;</span> <span class="token operator">=</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token operator">&lt;</span>属性名<span class="token operator">&gt;</span><span class="token operator">:</span> <span class="token operator">&lt;</span>属性值<span class="token operator">&gt;</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token operator">...</span></span>
<span class="line">    <span class="token operator">&lt;</span>属性名<span class="token operator">&gt;</span><span class="token operator">:</span> <span class="token operator">&lt;</span>属性值<span class="token operator">&gt;</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token operator">&lt;</span>函数名<span class="token operator">&gt;</span><span class="token operator">:</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token parameter">形参列表</span><span class="token punctuation">)</span><span class="token punctuation">{</span><span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>调用</strong></p>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token operator">&lt;</span>对象名<span class="token operator">&gt;</span><span class="token punctuation">.</span><span class="token operator">&lt;</span>属性值<span class="token operator">&gt;</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token operator">&lt;</span>对象名<span class="token operator">&gt;</span><span class="token punctuation">.</span><span class="token operator">&lt;</span>函数名<span class="token operator">&gt;</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h3>JSON对象</h3>
<ul>
<li>JavaScript Object Notation，JavaScript对象标记法。</li>
<li>JSON就是通过JavaScript对象标记法编写的文本。</li>
</ul>
<p>提示：“键”必须是字符串类型。</p>
<p><strong>定义</strong></p>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token keyword">var</span> <span class="token operator">&lt;</span>变量名<span class="token operator">&gt;</span> <span class="token operator">=</span> <span class="token string">'{"name": "小明", "age": 18, "爱好": ["吃饭", "睡觉", "打游戏"]}'</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>BOM浏览器模型</h2>
<ul>
<li>Browser Object Model，浏览器对象模型。</li>
<li>允许JavaScript与浏览器对话，JavaScript将浏览器的各个组成部分封装为对象。</li>
</ul>
<p><strong>组成部分</strong></p>
<ul>
<li>Windows：浏览器窗口对象</li>
<li>Navigator：浏览器对象</li>
<li>Screen：屏幕对象</li>
<li>History：历史记录对象</li>
<li>Location：地址栏对象</li>
</ul>
<h3>Windows浏览器窗口对象</h3>
<ul>
<li>浏览器窗口对象</li>
</ul>
<p><strong>案例</strong></p>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token comment">// 弹出警示框</span></span>
<span class="line">window<span class="token punctuation">.</span><span class="token function">alert</span><span class="token punctuation">(</span><span class="token string">"hallo wored"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 显示带有一段消息以及确认按钮和取消按钮的对话框</span></span>
<span class="line"><span class="token keyword">var</span> flag <span class="token operator">=</span> window<span class="token punctuation">.</span><span class="token function">confirm</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 按照指定的周期（毫秒）来调用函数或计算表达式</span></span>
<span class="line">window<span class="token punctuation">.</span><span class="token function">setInterval</span><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">    console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">"每隔2秒钟，执行函数操作。"</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token number">2000</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>Navigator浏览器对象</h3>
<p>==待完善==</p>
<h3>Screen屏幕对象</h3>
<p>==待完善==</p>
<h3>History历史记录对象</h3>
<p>==待完善==</p>
<h3>Location地址栏对象</h3>
<p>==待完善==</p>
<h2>DOM文档对象模型</h2>
<ul>
<li>Document Object Model，文档对象模型。</li>
<li>将标记语言的各个组成模块封装为对应的对象。</li>
<li>JavaScript通过DOM文档对象模型对HTML进行操作：改变HTML元素的内容，改变HTML元素的样式（CSS），对HTML DOM事件做出反应，添加和删除HTML元素。</li>
</ul>
<p>DOM是W3C（万维网联盟）的标准，定义了访问HTML和XML文档的标准。</p>
<ol>
<li>Core DOM - 所有文档类型的标准模型</li>
</ol>
<ul>
<li><code>Document</code>：整个文档对象</li>
<li><code>Element</code>：元素对象</li>
<li><code>Attribute</code>：属性对象</li>
<li><code>Text</code>：文本对象</li>
<li><code>Comment</code>：注释对象</li>
</ul>
<ol start="2">
<li>
<p>XML DOM - XML文档的标准模型</p>
</li>
<li>
<p>HTML DOM - HTML文档的标准模型</p>
</li>
</ol>
<ul>
<li><code>image</code>：<code>&lt;img /&gt;</code></li>
<li><code>Button</code>：<code>&lt;import type="button" /&gt;</code></li>
</ul>
<h3>获取元素对象的方法</h3>
<p><strong>格式</strong></p>
<ul>
<li><code>&lt;标签元素&gt;.&lt;属性&gt;</code></li>
<li><code>&lt;标签元素&gt;.getAttribute("属性名");</code></li>
</ul>
<p><strong>案例</strong></p>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token comment">// 根据id属性值获取，返回单个元素对象</span></span>
<span class="line"><span class="token keyword">var</span> h1 <span class="token operator">=</span> document<span class="token punctuation">.</span><span class="token function">getElementById</span><span class="token punctuation">(</span><span class="token string">'h1'</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 根据标签名称获取，返回元素对象数组</span></span>
<span class="line"><span class="token keyword">var</span> divs <span class="token operator">=</span> document<span class="token punctuation">.</span><span class="token function">getElementsByTagName</span><span class="token punctuation">(</span><span class="token string">'div'</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 根据name属性值获取，返回元素对象数组</span></span>
<span class="line"><span class="token keyword">var</span> hobbys <span class="token operator">=</span> document<span class="token punctuation">.</span><span class="token function">getElementsByName</span><span class="token punctuation">(</span><span class="token string">'hobby'</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 根据class属性值获取，返回元素对象数组</span></span>
<span class="line"><span class="token keyword">var</span> <span class="token keyword">class</span> <span class="token operator">=</span> document<span class="token punctuation">.</span><span class="token function">getElementsByClassName</span><span class="token punctuation">(</span><span class="token string">'head-box'</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>修改元素对象的方法</h3>
<p><strong>格式</strong></p>
<ul>
<li><code>&lt;标签元素&gt;.&lt;属性&gt; = &lt;新值&gt;</code></li>
<li><code>&lt;标签元素&gt;.setAttribute("属性名", "属性值");</code></li>
</ul>
<p><strong>案例</strong></p>
<div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token comment">// 将获取到的当前元素的value属性改为新值。</span></span>
<span class="line">id<span class="token punctuation">.</span>value <span class="token operator">=</span> <span class="token string">"新值"</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h2>事件监听</h2>
<ul>
<li>JavaScript可以在事件被侦测到时执行对应的代码。</li>
<li>常见事件：鼠标点击、元素失去焦点、元素获得焦点、某个页面或图像被完成加载、当表单提交时出发该事件、某个键盘的键被按下、鼠标被移到某个元素上、鼠标从某个元素上移开。</li>
</ul>
<h2>事件绑定</h2>
<ul>
<li>事件监听可以理解为比较特殊的修改元素属性值的操作。</li>
</ul>
<p><strong>通过HTML标签中的事件属性进行绑定</strong></p>
<div class="language-html line-numbers-mode" data-highlighter="prismjs" data-ext="html"><pre><code class="language-html"><span class="line"><span class="token comment">&lt;!--当鼠标点击该按钮时，执行一个名字叫test的函数--&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>input</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>button<span class="token punctuation">"</span></span> <span class="token special-attr"><span class="token attr-name">onclick</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token value javascript language-javascript"><span class="token function">test</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span><span class="token punctuation">"</span></span></span> <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>按钮<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token comment">// 执行名字叫test的函数</span></span>
<span class="line"><span class="token keyword">function</span> <span class="token function">test</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token function">alert</span><span class="token punctuation">(</span><span class="token string">"执行"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>通过DOM元素属性绑定</strong></p>
<div class="language-html line-numbers-mode" data-highlighter="prismjs" data-ext="html"><pre><code class="language-html"><span class="line"><span class="token comment">&lt;!--点击鼠标点击该按钮--&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>input</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>button<span class="token punctuation">"</span></span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>button<span class="token punctuation">"</span></span> <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>按钮<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token comment">// 为一个id标签属性为button的元素修改onclick属性</span></span>
<span class="line"><span class="token comment">// 监听鼠标点击</span></span>
<span class="line">document<span class="token punctuation">.</span><span class="token function">getElementById</span><span class="token punctuation">(</span><span class="token string">"button"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function-variable function">onclick</span> <span class="token operator">=</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token function">alert</span><span class="token punctuation">(</span><span class="token string">"执行"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Language - CSS - 样式</title>
      <link>https://blog.magictable.ha.cn/software/Language-CSS-%E6%A0%B7%E5%BC%8F.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-CSS-%E6%A0%B7%E5%BC%8F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - CSS - 样式</source>
      <description>文章摘要： 总结CSS对于HTML标签的属性和参数的整理汇总。本文章的案例将使用“外联样式”的引入方式编写。 提示：建议通过浏览器中自带的的网页关键词搜索来快速定位。 相关信息 外部相关文章 推荐查询手册：Mmdn web docs 内部相关文章 盒子模型（盒子） 提示：只有块级元素才能设置宽度和高度。 宽度和高度 属性名 width：盒子内容区本身宽...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Mon, 20 May 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 总结CSS对于HTML标签的属性和参数的整理汇总。本文章的案例将使用“外联样式”的引入方式编写。</p>
<ul>
<li>提示：建议通过浏览器中自带的的网页关键词搜索来快速定位。</li>
</ul>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li>推荐查询手册：<a href="https://developer.mozilla.org/zh-CN/docs/Web/CSS" target="_blank" rel="noopener noreferrer">Mmdn web docs</a></li>
</ul>
<p>内部相关文章</p>
<ul>
<li></li>
</ul>
</div>
<h2>盒子模型（盒子）</h2>
<ul>
<li>提示：只有块级元素才能设置宽度和高度。</li>
</ul>
<h3>宽度和高度</h3>
<p>属性名</p>
<blockquote>
<ul>
<li><code>width</code>：盒子内容区本身宽度</li>
<li><code>height</code>：盒子内容区本身高度</li>
<li><code>max-width</code>：盒子最大宽度</li>
<li><code>max-height</code>：盒子最大高度</li>
</ul>
</blockquote>
<p>参数值</p>
<blockquote>
<ul>
<li><code>数值px</code>：尺寸大小。</li>
<li><code>数值%</code>：根据父级元素的百分比大小。</li>
<li><code>vh</code>：窗口高度，范围（0~100），实时监听</li>
<li><code>vw</code>：窗口宽度，范围（0~100），实时监听</li>
<li><code>min-content</code>：元素是其内容的最小值</li>
<li><code>max-content</code>：元素是其内容的最大值</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-css line-numbers-mode" data-highlighter="prismjs" data-ext="css"><pre><code class="language-css"><span class="line"><span class="token comment">/* 外联样式*/</span></span>
<span class="line"><span class="token selector">div</span> <span class="token punctuation">{</span></span>
<span class="line"> <span class="token comment">/* 设置宽度*/</span></span>
<span class="line"> <span class="token property">width</span><span class="token punctuation">:</span>100px<span class="token punctuation">;</span></span>
<span class="line"> <span class="token property">width</span><span class="token punctuation">:</span>100%<span class="token punctuation">;</span></span>
<span class="line"> <span class="token property">width</span><span class="token punctuation">:</span> 20vh<span class="token punctuation">;</span>       <span class="token comment">/*宽度是屏幕高度的20%*/</span></span>
<span class="line"> <span class="token property">width</span><span class="token punctuation">:</span> 20vw<span class="token punctuation">;</span>       <span class="token comment">/*宽度是屏幕宽度的20%*/</span></span>
<span class="line"> <span class="token comment">/* 设置高度*/</span></span>
<span class="line"> <span class="token property">height</span><span class="token punctuation">:</span>100px<span class="token punctuation">;</span></span>
<span class="line"> <span class="token property">height</span><span class="token punctuation">:</span>100%<span class="token punctuation">;</span></span>
<span class="line"> <span class="token property">height</span><span class="token punctuation">:</span> 20vh<span class="token punctuation">;</span>      <span class="token comment">/*高度是屏幕高度的20%*/</span></span>
<span class="line"> <span class="token property">height</span><span class="token punctuation">:</span> 20vw<span class="token punctuation">;</span>       <span class="token comment">/*宽度是屏幕宽度的20%*/</span></span>
<span class="line"> <span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>固定宽高比</h3>
<blockquote>
<p>提示：兼容性一般，谨慎使用。</p>
</blockquote>
<p>属性名</p>
<blockquote>
<ul>
<li><code>aspect-ratio</code>：设置一个块级元素的宽高比，实现动态改变大小但不改变比例。</li>
</ul>
</blockquote>
<p>参数值</p>
<blockquote>
<ul>
<li><code>宽 / 高</code>：直接写数字。</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-css line-numbers-mode" data-highlighter="prismjs" data-ext="css"><pre><code class="language-css"><span class="line"><span class="token comment">/* 外联样式*/</span></span>
<span class="line"><span class="token selector">div</span> <span class="token punctuation">{</span></span>
<span class="line">  <span class="token property">aspect-ratio</span><span class="token punctuation">:</span> 4 / 3<span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>外边距、边距、内边距</h3>
<p>属性名</p>
<blockquote>
<table>
<thead>
<tr>
<th style="text-align:left"></th>
<th style="text-align:left"></th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>margin</code> 外边距四条边 <br> <code>margin-top</code> 顶部边距 <br> <code>margin-bottom</code> 底部边距 <br> <code>margin-left</code> 左边边距 <br> <code>margin-right</code> 右边边距</td>
<td style="text-align:left">外边距</td>
</tr>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Language - CSS - 选择器</title>
      <link>https://blog.magictable.ha.cn/software/Language-CSS-%E9%80%89%E6%8B%A9%E5%99%A8.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-CSS-%E9%80%89%E6%8B%A9%E5%99%A8.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - CSS - 选择器</source>
      <description>文章摘要： 摘要内容。 元素（标签）选择器 选择器的名字必须是标签的名字。 作用是选择器中的样式会作用于所有相同标签上。 id选择器 id 选择器可以为标有特定 id 的 HTML 元素指定特定的样式。 HTML元素以id属性来设置id选择器。 CSS 中 id 选择器以#井号来表示。 id名称不能重复，即不能重复在不同的元素中使用同一个id名称。 c...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Mon, 20 May 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<table>
<thead>
<tr>
<th style="text-align:center">选择器种类</th>
<th style="text-align:left">表示方式</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">元素选择器</td>
<td style="text-align:left">&lt;标签名&gt;</td>
<td style="text-align:left">通过标签名来选择</td>
</tr>
<tr>
<td style="text-align:center">class选择器</td>
<td style="text-align:left"><code>.</code>&lt;class名&gt;</td>
<td style="text-align:left">class允许多个属性使用同一个名称</td>
</tr>
<tr>
<td style="text-align:center">id选择器</td>
<td style="text-align:left"><code>#</code>&lt;id名&gt;</td>
<td style="text-align:left">id名必须唯一，不可重复</td>
</tr>
<tr>
<td style="text-align:center">并列选择器</td>
<td style="text-align:left">&lt;名1&gt;<code>,</code>&lt;名2&gt;</td>
<td style="text-align:left">能够同时指定多个</td>
</tr>
<tr>
<td style="text-align:center">后代选择器</td>
<td style="text-align:left">&lt;父类名&gt;``&lt;子类名&gt;</td>
<td style="text-align:left">能够以层级关系获取后代</td>
</tr>
<tr>
<td style="text-align:center">子元素选择器</td>
<td style="text-align:left">&lt;父类名&gt;<code>&gt;</code>&lt;名&gt;</td>
<td style="text-align:left">获取某个元素的直接下一代，不包含孙子代</td>
</tr>
<tr>
<td style="text-align:center">相邻同胞选择器</td>
<td style="text-align:left">&lt;名&gt;<code>+</code>&lt;名&gt;</td>
<td style="text-align:left">选择紧随其后的第一个同胞元素</td>
</tr>
<tr>
<td style="text-align:center">后续同胞选择器</td>
<td style="text-align:left">&lt;名&gt;<code>~</code>&lt;名&gt;</td>
<td style="text-align:left">选择所有跟随其后的相同元素</td>
</tr>
<tr>
<td style="text-align:center">伪类选择器</td>
<td style="text-align:left">&lt;名&gt;<code>:&lt;伪类属性&gt;</code></td>
<td style="text-align:left">为元素添加特殊效果</td>
</tr>
</tbody>
</table>
<h2>元素（标签）选择器</h2>
<ul>
<li>选择器的名字必须是标签的名字。</li>
<li>作用是选择器中的样式会作用于所有相同标签上。</li>
</ul>
<div class="language-css line-numbers-mode" data-highlighter="prismjs" data-ext="css"><pre><code class="language-css"><span class="line"><span class="token selector">label</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">/*样式属性和参数*/</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>id选择器</h2>
<ul>
<li>id 选择器可以为标有特定 id 的 HTML 元素指定特定的样式。</li>
<li>HTML元素以id属性来设置id选择器。</li>
<li>CSS 中 id 选择器以<code>#</code>井号来表示。</li>
<li>id名称不能重复，即不能重复在不同的元素中使用同一个id名称。</li>
</ul>
<div class="language-css line-numbers-mode" data-highlighter="prismjs" data-ext="css"><pre><code class="language-css"><span class="line"><span class="token selector">#ID01</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">/*样式属性和参数*/</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-html line-numbers-mode" data-highlighter="prismjs" data-ext="html"><pre><code class="language-html"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>head</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token comment">&lt;!--外联样式--&gt;</span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>link</span> <span class="token attr-name">rel</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>stylesheet<span class="token punctuation">"</span></span> <span class="token attr-name">href</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>./style.css<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>head</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>class选择器</h2>
<ul>
<li>class 选择器用于描述一组元素的样式，class 选择器有别于id选择器，class可以在多个元素中使用。</li>
<li>class 选择器在 HTML 中以 class 属性表示。</li>
<li>在 CSS 中，class选择器以一个<code>.</code>点号表示。</li>
</ul>
<div class="language-css line-numbers-mode" data-highlighter="prismjs" data-ext="css"><pre><code class="language-css"><span class="line"><span class="token selector">.class01</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">/*样式属性和参数*/</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>并列选择器</h2>
<ul>
<li>使用<code>,</code>逗号隔开。</li>
</ul>
<div class="language-css line-numbers-mode" data-highlighter="prismjs" data-ext="css"><pre><code class="language-css"><span class="line"><span class="token selector">.class01, .class02</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">/*样式属性和参数*/</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>后代选择器</h2>
<ul>
<li>选择指定元素内的所有后代元素。</li>
<li>使用``空格分割。</li>
</ul>
<div class="language-css line-numbers-mode" data-highlighter="prismjs" data-ext="css"><pre><code class="language-css"><span class="line"><span class="token selector">body .class02</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">/*样式属性和参数*/</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>子元素选择器</h2>
<ul>
<li>选择指定元素的直接子元素。</li>
<li>使用<code>&gt;</code>大于号表示。</li>
</ul>
<div class="language-css line-numbers-mode" data-highlighter="prismjs" data-ext="css"><pre><code class="language-css"><span class="line"><span class="token selector">body &gt; .class02</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">/*样式属性和参数*/</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>相邻同胞选择器</h2>
<ul>
<li>选择紧随其后的第一个同胞元素。</li>
<li>使用<code>+</code>加号。</li>
</ul>
<div class="language-css line-numbers-mode" data-highlighter="prismjs" data-ext="css"><pre><code class="language-css"><span class="line"><span class="token selector">label + .class02</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">/*样式属性和参数*/</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>后续同胞选择器</h2>
<ul>
<li>选择所有跟随其后的同胞元素。</li>
<li>使用<code>~</code>波浪号。</li>
</ul>
<div class="language-css line-numbers-mode" data-highlighter="prismjs" data-ext="css"><pre><code class="language-css"><span class="line"><span class="token selector">label ~ .class02</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">/*样式属性和参数*/</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>伪类选择器</h2>
<ul>
<li>CSS伪类是用来添加一些选择器的特殊效果。</li>
</ul>
<h3>表单相关</h3>
<table>
<thead>
<tr>
<th style="text-align:left">伪类选择器</th>
<th style="text-align:left">示例</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>:checked</code></td>
<td style="text-align:left"><code>input:checked</code></td>
<td style="text-align:left">选择所有选中的表单元素</td>
</tr>
<tr>
<td style="text-align:left"><code>:disabled</code></td>
<td style="text-align:left"><code>input:disabled</code></td>
<td style="text-align:left">选择所有禁用的表单元素</td>
</tr>
<tr>
<td style="text-align:left"><code>:enabled</code></td>
<td style="text-align:left"><code>input:enabled</code></td>
<td style="text-align:left">选择所有启用的表单元素</td>
</tr>
</tbody>
</table>
<h3>元素单选</h3>
<table>
<thead>
<tr>
<th style="text-align:left">伪类选择器</th>
<th style="text-align:left">示例</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>:first-of-type</code></td>
<td style="text-align:left"><code>p:first-of-type</code></td>
<td style="text-align:left">选择的每个<code>&lt;p&gt;</code>元素是其父元素的第一个<code>&lt;p&gt;</code>元素</td>
</tr>
<tr>
<td style="text-align:left"><code>:last-child</code></td>
<td style="text-align:left"><code>p:last-child</code></td>
<td style="text-align:left">选择所有<code>&lt;p&gt;</code>元素的最后一个子元素</td>
</tr>
<tr>
<td style="text-align:left"><code>:last-of-type</code></td>
<td style="text-align:left"><code>p:last-of-type</code></td>
<td style="text-align:left">选择每个<code>&lt;p&gt;</code>元素是其母元素的最后一个<code>&lt;p&gt;</code>元素</td>
</tr>
<tr>
<td style="text-align:left"><code>:not(selector)</code></td>
<td style="text-align:left"><code>:not(p)</code></td>
<td style="text-align:left">选择所有p以外的元素</td>
</tr>
<tr>
<td style="text-align:left"><code>:nth-child(n)</code></td>
<td style="text-align:left"><code>p:nth-child(2)</code></td>
<td style="text-align:left">选择所有<code>&lt;p&gt;</code>元素的父元素的第二个子元素</td>
</tr>
<tr>
<td style="text-align:left"><code>:nth-last-child(n)</code></td>
<td style="text-align:left"><code>p:nth-last-child(2)</code></td>
<td style="text-align:left">选择所有<code>&lt;p&gt;</code>元素倒数的第二个子元素</td>
</tr>
<tr>
<td style="text-align:left"><code>:nth-last-of-type(n)</code></td>
<td style="text-align:left"><code>p:nth-last-of-type(2)</code></td>
<td style="text-align:left">选择所有<code>&lt;p&gt;</code>元素倒数的第二个为<code>&lt;p&gt;</code>的子元素</td>
</tr>
<tr>
<td style="text-align:left"><code>:nth-of-type(n)</code></td>
<td style="text-align:left"><code>p:nth-of-type(2)</code></td>
<td style="text-align:left">选择所有<code>&lt;p&gt;</code>元素第二个为<code>&lt;p&gt;</code>的子元素</td>
</tr>
<tr>
<td style="text-align:left"><code>:only-of-type</code></td>
<td style="text-align:left"><code>p:only-of-type</code></td>
<td style="text-align:left">选择所有仅有一个子元素为<code>&lt;p&gt;</code>的元素</td>
</tr>
<tr>
<td style="text-align:left"><code>:only-child</code></td>
<td style="text-align:left"><code>p:only-child</code></td>
<td style="text-align:left">选择所有仅有一个子元素的<code>&lt;p&gt;</code>元素</td>
</tr>
</tbody>
</table>
<h3>元素状态</h3>
<table>
<thead>
<tr>
<th style="text-align:left">伪类选择器</th>
<th style="text-align:left">示例</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>:link</code></td>
<td style="text-align:left"><code>a:link</code></td>
<td style="text-align:left"><code>&lt;a&gt;</code><strong>未访问过状态</strong></td>
</tr>
<tr>
<td style="text-align:left"><code>:visited</code></td>
<td style="text-align:left"><code>a:visited</code></td>
<td style="text-align:left"><code>&lt;a&gt;</code><strong>已访问过状态</strong></td>
</tr>
<tr>
<td style="text-align:left"><code>:active</code></td>
<td style="text-align:left"><code>a:active</code></td>
<td style="text-align:left"><code>&lt;a&gt;</code><strong>正在活动状态</strong></td>
</tr>
<tr>
<td style="text-align:left"><code>:hover</code></td>
<td style="text-align:left"><code>a:hover</code></td>
<td style="text-align:left"><code>&lt;a&gt;</code>将鼠标放在链接上的状态</td>
</tr>
<tr>
<td style="text-align:left"><code>:focus</code></td>
<td style="text-align:left"><code>input:focus</code></td>
<td style="text-align:left">选择元素输入后具有焦点</td>
</tr>
</tbody>
</table>
<table>
<thead>
<tr>
<th style="text-align:left">伪类选择器</th>
<th style="text-align:left">示例</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>:empty</code></td>
<td style="text-align:left"><code>p:empty</code></td>
<td style="text-align:left">选择所有没有子元素的<code>&lt;p&gt;</code>元素</td>
</tr>
<tr>
<td style="text-align:left"><code>:in-range</code></td>
<td style="text-align:left"><code>input:in-range</code></td>
<td style="text-align:left">选择元素指定范围内的值</td>
</tr>
<tr>
<td style="text-align:left"><code>:invalid</code></td>
<td style="text-align:left"><code>input:invalid</code></td>
<td style="text-align:left">选择所有无效的元素</td>
</tr>
<tr>
<td style="text-align:left"><code>:optional</code></td>
<td style="text-align:left"><code>input:optional</code></td>
<td style="text-align:left">选择没有"required"的元素属性</td>
</tr>
<tr>
<td style="text-align:left"><code>:out-of-range</code></td>
<td style="text-align:left"><code>input:out-of-range</code></td>
<td style="text-align:left">选择指定范围以外的值的元素属性</td>
</tr>
<tr>
<td style="text-align:left"><code>:read-only</code></td>
<td style="text-align:left"><code>input:read-only</code></td>
<td style="text-align:left">选择只读属性的元素属性</td>
</tr>
<tr>
<td style="text-align:left"><code>:read-write</code></td>
<td style="text-align:left"><code>input:read-write</code></td>
<td style="text-align:left">选择没有只读属性的元素属性</td>
</tr>
<tr>
<td style="text-align:left"><code>:required</code></td>
<td style="text-align:left"><code>input:required</code></td>
<td style="text-align:left">选择有"required"属性指定的元素属性</td>
</tr>
<tr>
<td style="text-align:left"><code>:root</code></td>
<td style="text-align:left"><code>root</code></td>
<td style="text-align:left">选择文档的根元素</td>
</tr>
<tr>
<td style="text-align:left"><code>:target</code></td>
<td style="text-align:left"><code>#news:target</code></td>
<td style="text-align:left">选择当前活动#news元素(点击URL包含锚的名字)</td>
</tr>
<tr>
<td style="text-align:left"><code>:valid</code></td>
<td style="text-align:left"><code>input:valid</code></td>
<td style="text-align:left">选择所有有效值的属性</td>
</tr>
<tr>
<td style="text-align:left"><code>:first-letter</code></td>
<td style="text-align:left"><code>p:first-letter</code></td>
<td style="text-align:left">选择<code>&lt;p&gt;</code>元素的第一个字母</td>
</tr>
<tr>
<td style="text-align:left"><code>:first-line</code></td>
<td style="text-align:left"><code>p:first-line</code></td>
<td style="text-align:left">选择<code>&lt;p&gt;</code>元素的第一行</td>
</tr>
<tr>
<td style="text-align:left"><code>:first-child</code></td>
<td style="text-align:left"><code>p:first-child</code></td>
<td style="text-align:left">选择器匹配属于任意元素的第一个子元素的<code>&lt;p&gt;</code>元素</td>
</tr>
<tr>
<td style="text-align:left"><code>:before</code></td>
<td style="text-align:left"><code>p:before</code></td>
<td style="text-align:left">在<code>&lt;p&gt;</code>元素之前插入内容</td>
</tr>
<tr>
<td style="text-align:left"><code>:after</code></td>
<td style="text-align:left"><code>p:after</code></td>
<td style="text-align:left">在<code>&lt;p&gt;</code>元素之后插入内容</td>
</tr>
<tr>
<td style="text-align:left"><code>:lang(language)</code></td>
<td style="text-align:left"><code>p:lang(it)</code></td>
<td style="text-align:left">为<code>&lt;p&gt;</code>元素的lang属性选择一个开始值</td>
</tr>
</tbody>
</table>
<p>案例</p>
<div class="language-css line-numbers-mode" data-highlighter="prismjs" data-ext="css"><pre><code class="language-css"><span class="line"><span class="token comment">/*外联样式*/</span></span>
<span class="line"><span class="token comment">/*选择`.class02`元素，是一个超链接元素的为访问链接状态*/</span></span>
<span class="line"><span class="token selector">.class02:link</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">/*定义该状态下的样式*/</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>伪元素选择器</h2>
<ul>
<li>创建虚拟元素（伪元素），用来摆放装饰性的内容。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">选择器</th>
<th style="text-align:left">示例</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>::before</code></td>
<td style="text-align:left"><code>E::before</code></td>
<td style="text-align:left">在E元素里面最前面添加一个伪元素</td>
</tr>
<tr>
<td style="text-align:left"><code>::after</code></td>
<td style="text-align:left"><code>E::after</code></td>
<td style="text-align:left">在E元素里面最后添加一个伪元素</td>
</tr>
</tbody>
</table>
]]></content:encoded>
    </item>
    <item>
      <title>Language - CSS</title>
      <link>https://blog.magictable.ha.cn/software/Language-CSS.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-CSS.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - CSS</source>
      <description>文章摘要： CSS是描述语言，网页标准三大组成部分之一的CSS，负责网页的表现效果（页面元素的外观、位置等页面样式，如：颜色、大小等）。 相关信息 外部相关文章 参考第三方网站教程：Mmdn web docs，前端知识查询网站。 有些标签有默认的CSS样式。 内部相关文章 简介 简要说明 CSS层叠样式表（Cascading Style Sheets）...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Mon, 20 May 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> CSS是描述语言，网页标准三大组成部分之一的CSS，负责网页的表现效果（页面元素的外观、位置等页面样式，如：颜色、大小等）。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li>参考第三方网站教程：<a href="https://developer.mozilla.org/zh-CN/docs/Web" target="_blank" rel="noopener noreferrer">Mmdn web docs</a>，前端知识查询网站。</li>
<li>有些标签有默认的CSS样式。</li>
</ul>
<p>内部相关文章</p>
<ul>
<li></li>
</ul>
</div>
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>CSS层叠样式表（Cascading Style Sheets）。</li>
<li>用来描述HTML或XML文档样式的语言。</li>
<li>将样式信息与结构化文档分离，使得网页的内容与其表现形式独立开来，从而可以更加灵活地控制页面的布局和外观。</li>
<li>外部样式表通常存储在css文件中。</li>
<li>CSS文件的扩展名为<code>.css</code>。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>样式定义</strong>：定义文本颜色、字体大小、边距、间距、背景图像等视觉效果。</li>
<li><strong>布局控制</strong>：控制元素的位置和大小，如使用Flexbox、Grid布局系统。</li>
<li><strong>响应式设计</strong>：通过媒体查询为不同设备和屏幕尺寸提供不同的样式。</li>
<li><strong>动画和过渡</strong>：创建平滑的动画效果和过渡效果，增强用户体验。</li>
<li><strong>主题定制</strong>：允许用户定义和应用不同的视觉主题。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>层叠顺序</strong>：理解CSS的层叠规则，确保样式按预期覆盖。</li>
<li><strong>浏览器兼容性</strong>：不同浏览器对CSS的支持程度不同，需要考虑兼容性前缀或备选方案。</li>
<li><strong>性能优化</strong>：避免过度使用复杂的选择器和嵌套规则，减少重绘和重排，提高页面性能。</li>
<li><strong>可维护性</strong>：编写清晰、有组织的CSS代码，使用注释和合理的命名约定。</li>
<li><strong>可访问性</strong>：确保样式不会影响内容的可访问性，如足够的对比度和适当的字体大小。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>网页设计</strong>：为网站提供一致的视觉风格和布局。</li>
<li><strong>用户界面设计</strong>：为Web应用程序和移动应用程序设计美观且功能性的用户界面。</li>
<li><strong>电子邮件设计</strong>：为电子邮件模板设计样式，尽管支持有限。</li>
<li><strong>打印样式</strong>：定义文档打印时的样式，以便打印输出与屏幕显示不同。</li>
<li><strong>跨平台应用</strong>：在构建跨平台应用程序时，CSS可用于确保在不同设备上的一致性表现。</li>
</ul>
<h2>语法格式</h2>
<ul>
<li>CSS每个语句结束后需要有<code>;</code>分号结尾。</li>
</ul>
<h2>注释</h2>
<div class="language-css line-numbers-mode" data-highlighter="prismjs" data-ext="css"><pre><code class="language-css"><span class="line"><span class="token comment">/* 这是一个注释*/</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>CSS样式查询手册</h2>
<p>详细总结：<a href="/software/Language-CSS-%E6%A0%B7%E5%BC%8F.html" target="_blank">CSS样式</a></p>
<h2>CSS样式引入方式</h2>
<h3>行内（内嵌）样式</h3>
<ul>
<li>在标签中写<code>style</code>属性，属性中写样式参数。</li>
<li>**代码冗余：**如果多个元素有相同的样式，你需要在每个元素上都添加相同的style属性，这会导致代码冗余。</li>
<li>**难以维护：**随着HTML文档的增长，内嵌样式的数量也会增加，这使得文档的维护变得更加困难。</li>
<li>**浏览器性能：**由于每个元素都有内嵌样式，浏览器需要为每个元素解析和应用样式，这可能会影响性能。</li>
<li>**可访问性问题：**内嵌样式可能不会被某些辅助技术（如屏幕阅读器）正确处理，这可能会影响可访问性。</li>
</ul>
<div class="language-html line-numbers-mode" data-highlighter="prismjs" data-ext="html"><pre><code class="language-html"><span class="line"><span class="token comment">&lt;!--在一个元素标签中添加`style`属性--&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>label</span> <span class="token special-attr"><span class="token attr-name">style</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token value css language-css"><span class="token property">font-size</span><span class="token punctuation">:</span> 100px<span class="token punctuation">;</span></span><span class="token punctuation">"</span></span></span><span class="token punctuation">&gt;</span></span>测试文本内容<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>label</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h3>内联样式</h3>
<ul>
<li>当单个文档需要特殊的样式时，就应该使用内联样式表。你可以使用<code>&lt;style&gt; &lt;/style&gt;</code>标签在文档<code>&lt;head&gt; &lt;/head&gt;</code>头部定义内部样式表。</li>
</ul>
<div class="language-html line-numbers-mode" data-highlighter="prismjs" data-ext="html"><pre><code class="language-html"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>head</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token comment">&lt;!--内联样式--&gt;</span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>style</span><span class="token punctuation">&gt;</span></span><span class="token style"><span class="token language-css"></span>
<span class="line">        <span class="token selector">lable</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token property">font-size</span><span class="token punctuation">:</span> 100px<span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">    </span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>style</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>head</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>body</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>label</span><span class="token punctuation">&gt;</span></span>测试文本内容<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>label</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>body</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>外联样式</h3>
<ul>
<li>将样式放在外部，内容与样式分离。</li>
</ul>
<div class="language-css line-numbers-mode" data-highlighter="prismjs" data-ext="css"><pre><code class="language-css"><span class="line"><span class="token comment">/* 外联样式*/</span></span>
<span class="line"><span class="token selector">lable</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token property">font-size</span><span class="token punctuation">:</span> 100px<span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-html line-numbers-mode" data-highlighter="prismjs" data-ext="html"><pre><code class="language-html"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>head</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token comment">&lt;!--外联样式--&gt;</span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>link</span> <span class="token attr-name">rel</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>stylesheet<span class="token punctuation">"</span></span> <span class="token attr-name">href</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>./style.css<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>head</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>body</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>label</span><span class="token punctuation">&gt;</span></span>测试文本内容<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>label</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>body</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>样式优先级</h2>
<ul>
<li>就近原则</li>
<li>行内 &gt; 内联 &gt; 外联</li>
</ul>
<h2>选择器</h2>
<p>详细总结：<a href="/software/Language-CSS-%E9%80%89%E6%8B%A9%E5%99%A8.html" target="_blank">CSS选择器</a></p>
<div class="language-html line-numbers-mode" data-highlighter="prismjs" data-ext="html"><pre><code class="language-html"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>head</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token comment">&lt;!--外联样式--&gt;</span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>link</span> <span class="token attr-name">rel</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>stylesheet<span class="token punctuation">"</span></span> <span class="token attr-name">href</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>./style.css<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>head</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>body</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>label</span><span class="token punctuation">&gt;</span></span>测试文本内容<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>label</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>label</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>ID01<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>测试文本内容<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>label</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>label</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>class01<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>测试文本内容<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>label</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>a</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>class02<span class="token punctuation">"</span></span> <span class="token attr-name">href</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>https://www.baidu.com/<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>百度搜索<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>a</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>body</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>元素（标签）选择器</h3>
<ul>
<li>选择器的名字必须是标签的名字。</li>
<li>作用是选择器中的样式会作用于所有相同标签上。</li>
</ul>
<div class="language-css line-numbers-mode" data-highlighter="prismjs" data-ext="css"><pre><code class="language-css"><span class="line"><span class="token selector">label</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">/*样式属性和参数*/</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>id选择器</h3>
<ul>
<li>id 选择器可以为标有特定 id 的 HTML 元素指定特定的样式。</li>
<li>HTML元素以id属性来设置id选择器。</li>
<li>CSS 中 id 选择器以<code>#</code>井号来表示。</li>
<li>id名称不能重复，即不能重复在不同的元素中使用同一个id名称。</li>
</ul>
<div class="language-css line-numbers-mode" data-highlighter="prismjs" data-ext="css"><pre><code class="language-css"><span class="line"><span class="token selector">#ID01</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">/*样式属性和参数*/</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-html line-numbers-mode" data-highlighter="prismjs" data-ext="html"><pre><code class="language-html"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>head</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token comment">&lt;!--外联样式--&gt;</span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>link</span> <span class="token attr-name">rel</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>stylesheet<span class="token punctuation">"</span></span> <span class="token attr-name">href</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>./style.css<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>head</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>class选择器</h3>
<ul>
<li>class 选择器用于描述一组元素的样式，class 选择器有别于id选择器，class可以在多个元素中使用。</li>
<li>class 选择器在 HTML 中以 class 属性表示。</li>
<li>在 CSS 中，class选择器以一个<code>.</code>点号表示。</li>
</ul>
<div class="language-css line-numbers-mode" data-highlighter="prismjs" data-ext="css"><pre><code class="language-css"><span class="line"><span class="token selector">.class01</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">/*样式属性和参数*/</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>组合选择器</h2>
<h3>并列选择器</h3>
<ul>
<li>使用<code>,</code>逗号隔开。</li>
</ul>
<div class="language-css line-numbers-mode" data-highlighter="prismjs" data-ext="css"><pre><code class="language-css"><span class="line"><span class="token selector">.class01, .class02</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">/*样式属性和参数*/</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>后代选择器</h3>
<ul>
<li>选择指定元素内的所有后代元素。</li>
<li>使用``空格分割。</li>
</ul>
<div class="language-css line-numbers-mode" data-highlighter="prismjs" data-ext="css"><pre><code class="language-css"><span class="line"><span class="token selector">body .class02</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">/*样式属性和参数*/</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>子元素选择器</h3>
<ul>
<li>选择指定元素的直接子元素/儿子级。</li>
<li>使用<code>&gt;</code>大于号表示。</li>
</ul>
<div class="language-css line-numbers-mode" data-highlighter="prismjs" data-ext="css"><pre><code class="language-css"><span class="line"><span class="token selector">body &gt; .class02</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">/*样式属性和参数*/</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>相邻同胞选择器</h3>
<ul>
<li>选择紧随其后的第一个同胞元素。</li>
<li>使用<code>+</code>加号。</li>
</ul>
<div class="language-css line-numbers-mode" data-highlighter="prismjs" data-ext="css"><pre><code class="language-css"><span class="line"><span class="token selector">label + .class02</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">/*样式属性和参数*/</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>后续同胞选择器</h3>
<ul>
<li>选择所有跟随其后的同胞元素。</li>
<li>使用<code>~</code>波浪号。</li>
</ul>
<div class="language-css line-numbers-mode" data-highlighter="prismjs" data-ext="css"><pre><code class="language-css"><span class="line"><span class="token selector">label ~ .class02</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">/*样式属性和参数*/</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>伪类选择器</h3>
<ul>
<li>CSS伪类是用来添加一些选择器的特殊效果。</li>
</ul>
<div class="language-css line-numbers-mode" data-highlighter="prismjs" data-ext="css"><pre><code class="language-css"><span class="line"><span class="token comment">/*外联样式*/</span></span>
<span class="line"><span class="token comment">/*选择`.class02`元素，是一个超链接元素的为访问链接状态*/</span></span>
<span class="line"><span class="token selector">.class02: link</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">/*定义该状态下的样式*/</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>伪元素选择器</h3>
<ul>
<li>创建虚拟元素（伪元素），用来摆放装饰性的内容。</li>
</ul>
<h2>盒子模型</h2>
<ul>
<li>所有HTML元素都可以看作一个盒子，并且占据着一定的页面空间。</li>
<li>CSS盒子模型本质上是一个盒子，封装周围的HTML元素。包含了边距、边框、填充、实际内容。、</li>
<li>盒子模型允许我们在其他元素和周围元素边框之间的空间放置元素。</li>
</ul>
<p>盒子模型的组成部分</p>
<ul>
<li>**<code>content</code>内容：**盒子模型中最内部分，显示文本和图像，有宽度<code>width</code>和高度<code>height</code>的属性。</li>
<li>**<code>padding</code>内边距：**直接包围内容，默认透明，内边距呈现了元素的背景，它的边缘是边框。</li>
<li>**<code>border</code>边框：**围绕在内边距以外的是边框。</li>
<li>**<code>margin</code>外边距：**清除边框外的区域，外边距默认是透明的，不会遮挡其后的任何元素。
==盒子模型的图片==</li>
</ul>
<p>一个页面有很多这样的盒子组成，这些盒子之间会互相影响，需要从一下两个方面进行理解：</p>
<ol>
<li>理解单独一个盒子的内部结构。</li>
<li>理解多个盒子之间的相互关系。</li>
</ol>
<ul>
<li>内边距影响其他元素与自身的边距。</li>
<li>内边距影响自身的尺寸。</li>
<li>内边距会影响<code>尺寸设置</code>。</li>
<li>盒子中的内容尺寸会影响<code>尺寸设置</code>。</li>
</ul>
<h2>文档流</h2>
<ul>
<li>文档流是元素排版布局过程中，元素会默认自动从左往右，从上往下的流式排列方式排列。</li>
<li>块级元素：有宽度和高度，独占一行，默认按照从上而下的方式布局。</li>
<li>行内元素：没有宽度和高度，默认的宽度就是文字的宽度，与其他元素并排，遇到边界或宽度不够时自动换行。</li>
</ul>
<h2>显示模式/布局</h2>
<p>显示模式分为：<code>none</code>隐藏、<code>inline</code>行内、<code>block</code>块级、<code>inline-block</code>行内块级、<code>flex</code>弹性。</p>
<p><code>none</code>隐藏</p>
<ul>
<li>隐藏不显示，且不占空间。</li>
</ul>
<p><code>inline</code>行内</p>
<ul>
<li>不能设置宽高属性。</li>
</ul>
<p><code>block</code>块级</p>
<ul>
<li>能够设置宽高属性，且独占一行。</li>
<li>宽度默认是父级的100%。</li>
</ul>
<p><code>inline-block</code>行内块级</p>
<ul>
<li>能够设置宽高属性，且不会独占一行。</li>
</ul>
<p><code>flex</code>弹性</p>
<ul>
<li>适合结构化布局，提供空间分布和对齐能力。</li>
<li>不会产生浮动布局中脱标现象。</li>
<li>弹性容器，当尺寸不够时，会对元素尺寸进行拉伸。</li>
</ul>
<h2>定位</h2>
<ul>
<li>定位就是把指定的元素放在页面任意位置，允许定义的元素框相对于其正常位置应该出现的位置，或相对浏览器窗口本身的位置。</li>
</ul>
<p><code>static</code>默认定位</p>
<ul>
<li>HTML 元素的默认值，即没有定位，遵循正常的文档流对象。</li>
<li>块级元素：自上而下，垂直排列（自动换行），可以改变宽度和高度。</li>
<li>行内元素：从左往右，水平排列（不会换行），不能改变宽度和高度。</li>
<li>行内块元素：从左往右，水平排列（不会换行），可以改变宽度和高度。</li>
</ul>
<p><code>fixed</code>固定定位</p>
<ul>
<li>元素的位置相对于浏览器窗口是固定位置。</li>
<li>即使窗口是滚动的它也不会移动。</li>
<li>固定定位使元素的位置与文档流无关，因此不占据空间。</li>
<li>固定定位的元素和其他元素重叠。</li>
</ul>
<p><strong><code>relative</code>相对定位</strong></p>
<ul>
<li>针对父极元素的位置进行定位。</li>
</ul>
<p><strong><code>absolute</code>绝对定位</strong></p>
<ul>
<li>绝对定位的元素的位置是针对顶级父极（<code>&lt;html&gt;</code>）元素的位置进行定位。</li>
<li>绝对定位使元素的位置与文档流无关，因此不占据空间。</li>
<li>绝对定位的元素和其他元素重叠。</li>
</ul>
<p><strong><code>sticky</code>粘性定位</strong></p>
<ul>
<li>粘性定位的元素是依赖于用户的滚动，在<code>相对定位</code>与<code>固定定位</code>之间切换。</li>
<li>一开始处于<code>相对定位</code>，当页面滚动超出目标区域时，将切换为<code>固定定位</code>固定在一个位置。</li>
</ul>
<h2>浮动</h2>
<ul>
<li>CSS 的 Float（浮动），会使元素向左或向右移动，其周围的元素也会重新排列。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Language - HTML - 标签</title>
      <link>https://blog.magictable.ha.cn/software/Language-HTML-%E6%A0%87%E7%AD%BE.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-HTML-%E6%A0%87%E7%AD%BE.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - HTML - 标签</source>
      <description>文章摘要： 本文章只整理常用的标签和属性。 提示：建议通过浏览器中自带的的网页关键词搜索来快速定位。 相关信息 外部相关文章 菜鸟教程网站 内部相关文章 文本标签 提示 标签可以嵌套叠加来实现多种不同效果。 &amp;lt;h1&amp;gt; ~ &amp;lt;h6&amp;gt; &amp;lt;h1&amp;gt; &amp;lt;/h1&amp;gt; ~ &amp;lt;h6&amp;gt; &amp;lt;/h6&amp;gt;定义网页标题。 表单标签 &amp;lt;form&amp;gt; &amp;lt;form&amp;gt; &amp;lt;/form&amp;gt; 定义一...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Sat, 18 May 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 本文章只整理常用的标签和属性。</p>
<ul>
<li>提示：建议通过浏览器中自带的的网页关键词搜索来快速定位。</li>
</ul>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li><a href="https://www.runoob.com/html/html-tutorial.html" target="_blank" rel="noopener noreferrer">菜鸟教程网站</a></li>
</ul>
<p>内部相关文章</p>
<ul>
<li></li>
</ul>
</div>
<h2>文本标签</h2>
<p>提示</p>
<blockquote>
<ul>
<li>标签可以嵌套叠加来实现多种不同效果。</li>
</ul>
</blockquote>
<h3><code>&lt;h1&gt; ~ &lt;h6&gt;</code></h3>
<ul>
<li><code>&lt;h1&gt; &lt;/h1&gt; ~ &lt;h6&gt; &lt;/h6&gt;</code>定义网页标题。</li>
</ul>
<h2>表单标签</h2>
<h3><code>&lt;form&gt;</code></h3>
<blockquote>
<ul>
<li><code>&lt;form&gt; &lt;/form&gt;</code></li>
<li>定义一个 HTML 表单，用于接收用户输入。</li>
</ul>
</blockquote>
<p>属性</p>
<blockquote>
<p><code>action</code></p>
<ul>
<li>功能：数据提交的URL地址。</li>
<li>参数：</li>
</ul>
<p><code>method</code></p>
<ul>
<li>功能：提交方式。</li>
<li>参数：get、post</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-html line-numbers-mode" data-highlighter="prismjs" data-ext="html"><pre><code class="language-html"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2><code>&lt;input&gt;</code></h2>
<blockquote>
<ul>
<li><code>&lt;input/&gt;</code></li>
<li>定义一个输入控件。</li>
<li>需要写在<code>&lt;form&gt; &lt;/form&gt;</code>表单标签中。</li>
</ul>
</blockquote>
<p>属性</p>
<blockquote>
<p><code>type</code></p>
<ul>
<li>功能：选择类型。</li>
<li>参数：<code>text</code>文本框、<code>password</code>密码框、<code>radio</code>单选框、<code>checkbox</code>多选框、<code>button</code>按钮、<code>file</code> 选择文件按钮、<code>submit</code>提交按钮、<code>reset</code>重置按钮</li>
</ul>
<p><code>name</code></p>
<ul>
<li>功能：取一个变量名。</li>
<li>参数：字符串。</li>
</ul>
<p><code>value</code></p>
<ul>
<li>功能：显示文字。</li>
<li>参数：数字、字符串、布尔。</li>
</ul>
<p><code>placeholder</code></p>
<ul>
<li>功能：提示文字，用户不可修改，且在输入值时会消失。</li>
<li>参数：字符串</li>
</ul>
<p><code>checked</code></p>
<ul>
<li>功能：是否被选中。</li>
<li>参数：</li>
</ul>
<p><code>maxlength</code></p>
<ul>
<li>功能：设定最大长度。</li>
<li>参数：</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-html line-numbers-mode" data-highlighter="prismjs" data-ext="html"><pre><code class="language-html"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>form</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"> <span class="token comment">&lt;!--文本框--&gt;</span></span>
<span class="line"> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>input</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>text<span class="token punctuation">"</span></span> <span class="token punctuation">/&gt;</span></span></span>
<span class="line"> <span class="token comment">&lt;!--密码框--&gt;</span></span>
<span class="line"> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>input</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>password<span class="token punctuation">"</span></span> <span class="token punctuation">/&gt;</span></span></span>
<span class="line"> <span class="token comment">&lt;!--单选框 设置相同`name`属性的参数--&gt;</span></span>
<span class="line"> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>input</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>radio<span class="token punctuation">"</span></span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>int<span class="token punctuation">"</span></span> <span class="token attr-name">checked</span><span class="token punctuation">/&gt;</span></span>一年级</span>
<span class="line"> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>input</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>radio<span class="token punctuation">"</span></span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>int<span class="token punctuation">"</span></span><span class="token punctuation">/&gt;</span></span>二年级</span>
<span class="line"> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>input</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>radio<span class="token punctuation">"</span></span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>int<span class="token punctuation">"</span></span><span class="token punctuation">/&gt;</span></span>三年级</span>
<span class="line"> <span class="token comment">&lt;!--多选框--&gt;</span></span>
<span class="line"> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>input</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>checkbox<span class="token punctuation">"</span></span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>task<span class="token punctuation">"</span></span><span class="token punctuation">/&gt;</span></span>吃饭</span>
<span class="line"> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>input</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>checkbox<span class="token punctuation">"</span></span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>task<span class="token punctuation">"</span></span><span class="token punctuation">/&gt;</span></span>睡觉</span>
<span class="line"> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>input</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>checkbox<span class="token punctuation">"</span></span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>task<span class="token punctuation">"</span></span><span class="token punctuation">/&gt;</span></span>打游戏</span>
<span class="line"> <span class="token comment">&lt;!--按钮--&gt;</span></span>
<span class="line"> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>input</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>button<span class="token punctuation">"</span></span> <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>按钮<span class="token punctuation">"</span></span> <span class="token punctuation">/&gt;</span></span></span>
<span class="line"> <span class="token comment">&lt;!--提交按钮--&gt;</span></span>
<span class="line"> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>input</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>submit<span class="token punctuation">"</span></span> <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>提交按钮<span class="token punctuation">"</span></span> <span class="token punctuation">/&gt;</span></span></span>
<span class="line"> <span class="token comment">&lt;!--清空按钮--&gt;</span></span>
<span class="line"> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>input</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>reset<span class="token punctuation">"</span></span> <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>清空按钮<span class="token punctuation">"</span></span> <span class="token punctuation">/&gt;</span></span></span>
<span class="line"> <span class="token comment">&lt;!--选择文件按钮--&gt;</span></span>
<span class="line"> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>input</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>file<span class="token punctuation">"</span></span> <span class="token punctuation">/&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>form</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3><code>&lt;textarea&gt;</code></h3>
<blockquote>
<ul>
<li><code>&lt;textarea&gt; &lt;/textarea&gt;</code></li>
<li>定义多行的文本输入控件。</li>
</ul>
</blockquote>
<h2><code>&lt;button&gt;</code></h2>
<blockquote>
<ul>
<li><code>&lt;button&gt; &lt;/button&gt;</code>定义按钮。</li>
</ul>
</blockquote>
<h2><code>&lt;select&gt;</code></h2>
<blockquote>
<ul>
<li><code>&lt;select&gt; &lt;/select&gt;</code></li>
<li>定义选择列表（下拉列表）。</li>
</ul>
</blockquote>
<p>属性</p>
<blockquote>
<p><code>selected</code></p>
<ul>
<li>功能：</li>
<li>参数：<code>selected</code>默认。</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-html line-numbers-mode" data-highlighter="prismjs" data-ext="html"><pre><code class="language-html"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>select</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>option</span><span class="token punctuation">&gt;</span></span>困难<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>option</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>option</span> <span class="token attr-name">selected</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>selected<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>正常<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>option</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>option</span><span class="token punctuation">&gt;</span></span>简单<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>option</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>select</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3><code>&lt;optgroup&gt;</code></h3>
<blockquote>
<ul>
<li><code>&lt;optgroup&gt; &lt;/optgroup&gt;</code>定义选择列表中相关选项的组合。</li>
</ul>
</blockquote>
<h3><code>&lt;option&gt;</code></h3>
<blockquote>
<ul>
<li><code>&lt;option&gt; &lt;/option&gt;</code>定义选择列表中的选项。</li>
</ul>
</blockquote>
<h3><code>&lt;label&gt;</code></h3>
<blockquote>
<ul>
<li><code>&lt;label&gt; &lt;/label&gt;</code>定义 input 元素的标注。</li>
<li>作用：<code>&lt;label&gt;</code>标签用于与表单控件（如输入字段、复选框、单选按钮等）相关联。当用户点击<code>&lt;label&gt;</code>标签时，浏览器会自动将焦点转移到与之关联的表单控件上。这对于提高表单的可访问性和用户体验非常有用。</li>
<li>提示：为了确保<code>&lt;label&gt;</code>与表单控件正确关联，请确保<code>for</code>属性的值与相关表单控件的<code>id</code>属性值完全匹配。</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-html line-numbers-mode" data-highlighter="prismjs" data-ext="html"><pre><code class="language-html"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>label</span> <span class="token attr-name">for</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>username<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>用户名：<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>label</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>input</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>text<span class="token punctuation">"</span></span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>username<span class="token punctuation">"</span></span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>username<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h3><code>&lt;fieldset&gt;</code></h3>
<blockquote>
<ul>
<li><code>&lt;fieldset&gt; &lt;/fieldset&gt;</code>区域块，围绕<code>&lt;form&gt;</code>表单中元素的边框。</li>
</ul>
</blockquote>
<h3><code>&lt;legend&gt;</code></h3>
<blockquote>
<ul>
<li><code>&lt;legend&gt; &lt;/legend&gt;</code>定义 <code>&lt;fieldset&gt;</code>区域块标签的标题。</li>
</ul>
</blockquote>
<h3><code>&lt;datalist&gt;</code></h3>
<blockquote>
<ul>
<li><code>&lt;datalist&gt; &lt;/datalist&gt;</code>规定了 input 元素可能的选项列表。</li>
</ul>
</blockquote>
<h3><code>&lt;keygen&gt;</code></h3>
<blockquote>
<ul>
<li><code>&lt;keygen /&gt;</code>规定用于表单的密钥对生成器字段。</li>
</ul>
</blockquote>
<h3><code>&lt;output&gt;</code></h3>
<blockquote>
<ul>
<li><code>&lt;output&gt; &lt;/output&gt;</code>定义一个计算的结果</li>
</ul>
</blockquote>
<h2>框架标签</h2>
<h3><code>&lt;html&gt;</code></h3>
<blockquote>
<ul>
<li><code>&lt;html&gt; &lt;/html&gt;</code>：定义一个 HTML 文档。</li>
</ul>
</blockquote>
<h3><code>&lt;body&gt;</code></h3>
<blockquote>
<ul>
<li><code>&lt;body&gt; &lt;/body&gt;</code>：定义文档的主体。</li>
</ul>
</blockquote>
<h3><code>&lt;div&gt;</code></h3>
<blockquote>
<ul>
<li><code>&lt;div&gt; &lt;/div&gt;</code></li>
<li>定义文档中的节。</li>
<li>块级元素，常用于组合其他 HTML 元素的容器。</li>
</ul>
</blockquote>
<h3><code>&lt;br&gt;</code></h3>
<blockquote>
<ul>
<li><code>&lt;br /&gt;</code></li>
<li>换行。</li>
</ul>
</blockquote>
<p>属性</p>
<blockquote>
<p>``</p>
<ul>
<li>功能：</li>
<li>参数：</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-html line-numbers-mode" data-highlighter="prismjs" data-ext="html"><pre><code class="language-html"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>br</span> <span class="token punctuation">/&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3><code>&lt;hr&gt;</code></h3>
<blockquote>
<ul>
<li>分割的作用。</li>
<li>创建一条分割线。</li>
<li>提示：若不指定<code>width</code>长度属性，则默认是父级的画面宽度。</li>
</ul>
</blockquote>
<p>属性</p>
<blockquote>
<p><code>width</code></p>
<ul>
<li>功能：线条长度。</li>
<li>参数：数值。</li>
</ul>
<p><code>size</code></p>
<ul>
<li>功能：线条宽度。</li>
<li>参数：数值。</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-html line-numbers-mode" data-highlighter="prismjs" data-ext="html"><pre><code class="language-html"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>hr</span> <span class="token attr-name">width</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>50px<span class="token punctuation">"</span></span> <span class="token attr-name">size</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>2px<span class="token punctuation">"</span></span><span class="token punctuation">/&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2><code>&lt;iframe&gt;</code></h2>
<blockquote>
<ul>
<li><code>&lt;iframe&gt; &lt;/iframe&gt;</code></li>
<li>定义内联框架。</li>
<li>在当前网页中显示另一个网页的内容。</li>
</ul>
</blockquote>
<p>属性</p>
<blockquote>
<p><code>src</code></p>
<ul>
<li>功能：指向显示的位置。</li>
<li>参数：字符串类型的网址。</li>
</ul>
<p><code>width</code></p>
<ul>
<li>功能：设置宽度。</li>
<li>参数：数值。</li>
</ul>
<p><code>height</code></p>
<ul>
<li>功能：设置高度。</li>
<li>参数：数值。</li>
</ul>
<p><code>frameborder</code></p>
<ul>
<li>功能：边框宽度</li>
<li>参数：数值。</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-html line-numbers-mode" data-highlighter="prismjs" data-ext="html"><pre><code class="language-html"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>iframe</span> <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>https://www.baidu.com/<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>iframe</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>图像标签</h2>
<h3><code>&lt;img&gt;</code></h3>
<blockquote>
<ul>
<li><code>&lt;img /&gt;</code></li>
<li>定义图像。</li>
<li>提示：当只指定“宽度”或“高度”时，图像将自动等比缩放。</li>
</ul>
</blockquote>
<p>属性</p>
<blockquote>
<p><code>src</code></p>
<ul>
<li>功能：添加图片资源。</li>
<li>参数：字符串类型的“本地文件路径”或“网络URL地址”。</li>
</ul>
<p><code>alt</code></p>
<ul>
<li>功能：若图片未加载时，显示文本。</li>
<li>参数：字符串。</li>
</ul>
<p><code>width</code></p>
<ul>
<li>功能：设置图片宽度。</li>
<li>参数：数值。</li>
</ul>
<p><code>height</code></p>
<ul>
<li>功能：设置图片高度。</li>
<li>参数：数值。</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-html line-numbers-mode" data-highlighter="prismjs" data-ext="html"><pre><code class="language-html"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>img</span> <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>./头像.jpg<span class="token punctuation">"</span></span> <span class="token attr-name">alt</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>头像<span class="token punctuation">"</span></span> <span class="token attr-name">width</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>100px<span class="token punctuation">"</span></span> <span class="token attr-name">height</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>100px<span class="token punctuation">"</span></span> <span class="token punctuation">/&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>音视频标签</h2>
<h3><code>&lt;audio&gt;</code></h3>
<blockquote>
<ul>
<li><code>&lt;audio&gt; &lt;/audio&gt;</code></li>
<li>定义声音，比如音乐或其他音频流。</li>
</ul>
</blockquote>
<p>属性</p>
<blockquote>
<p><code>src</code></p>
<ul>
<li>功能：指定资源路径。</li>
<li>参数：字符串类型的文件路径。</li>
</ul>
<p><code>controls</code></p>
<ul>
<li>功能：为资源添加控制器。</li>
<li>参数：<code>false</code>不启用、<code>true</code>启用。（若不启用视频将无法播放）</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-html line-numbers-mode" data-highlighter="prismjs" data-ext="html"><pre><code class="language-html"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>audio</span> <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>./音频.mp3<span class="token punctuation">"</span></span> <span class="token attr-name">controls</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>true<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>audio</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3><code>&lt;video&gt;</code></h3>
<blockquote>
<ul>
<li><code>&lt;video&gt; &lt;/video&gt;</code></li>
<li>定义一个音频或者视频。</li>
</ul>
</blockquote>
<p>属性</p>
<blockquote>
<p><code>src</code></p>
<ul>
<li>功能：指定资源路径。</li>
<li>参数：字符串类型的文件路径。</li>
</ul>
<p><code>controls</code></p>
<ul>
<li>功能：为添加控制器。</li>
<li>参数：<code>false</code>不启用、<code>true</code>启用。（若不启用视频将无法播放）</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-html line-numbers-mode" data-highlighter="prismjs" data-ext="html"><pre><code class="language-html"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>video</span> <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>./视频.mp4<span class="token punctuation">"</span></span> <span class="token attr-name">controls</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>true<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>video</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3><code>&lt;source&gt;</code></h3>
<blockquote>
<ul>
<li><code>&lt;source /&gt;</code>定义media元素<code>&lt;video&gt;</code>和<code>&lt;audio&gt;</code>的媒体资源。</li>
</ul>
</blockquote>
<h3><code>&lt;track&gt;</code></h3>
<blockquote>
<ul>
<li><code>&lt;track /&gt;</code>为媒体<code>&lt;video</code>和<code>audio&gt;</code>元素定义外部文本轨道。</li>
</ul>
</blockquote>
<h2>链接标签</h2>
<h3><code>&lt;a&gt;</code></h3>
<blockquote>
<ul>
<li><code>&lt;a&gt; &lt;/a&gt;</code></li>
<li>定义一个超链接。</li>
</ul>
</blockquote>
<p>属性</p>
<blockquote>
<p><code>href</code></p>
<ul>
<li>功能：要链接的网址。</li>
<li>参数：字符串类型的网址。</li>
</ul>
<p><code>target</code></p>
<ul>
<li>功能：要如何打开链接的页面。</li>
<li>参数：<code>_blank</code>新页面打开、<code>_parent</code>当前页面跳出父框架打开、<code>_self</code>当前页面打开、<code>_top</code>当前页面最外层框架打开。</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-html line-numbers-mode" data-highlighter="prismjs" data-ext="html"><pre><code class="language-html"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>a</span> <span class="token attr-name">href</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>https://www.baidu.com/<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>百度搜索<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>a</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3><code>&lt;link&gt;</code></h3>
<blockquote>
<ul>
<li><code>&lt;link /&gt;</code>定义文档与外部资源的关系，导入CSS样式文件。</li>
</ul>
</blockquote>
<h2>列表标签</h2>
<h3><code>&lt;ul&gt;</code></h3>
<blockquote>
<ul>
<li><code>&lt;ul&gt; &lt;/ul&gt;</code></li>
<li>定义一个无序列表</li>
</ul>
</blockquote>
<p>属性</p>
<blockquote>
<ul>
<li>功能：</li>
<li>参数：</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-html line-numbers-mode" data-highlighter="prismjs" data-ext="html"><pre><code class="language-html"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>ul</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>li</span><span class="token punctuation">&gt;</span></span>无序列表元素01<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>li</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>li</span><span class="token punctuation">&gt;</span></span>无序列表元素02<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>li</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>li</span><span class="token punctuation">&gt;</span></span>无序列表元素03<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>li</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>ul</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3><code>&lt;ol&gt;</code></h3>
<blockquote>
<ul>
<li><code>&lt;ol&gt; &lt;/ol&gt;</code></li>
<li>定义一个有序列表</li>
</ul>
</blockquote>
<p>属性</p>
<blockquote>
<p>``</p>
<ul>
<li>功能：</li>
<li>参数：</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-html line-numbers-mode" data-highlighter="prismjs" data-ext="html"><pre><code class="language-html"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>ol</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>li</span><span class="token punctuation">&gt;</span></span>有序列表元素01<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>li</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>li</span><span class="token punctuation">&gt;</span></span>有序列表元素02<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>li</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>li</span><span class="token punctuation">&gt;</span></span>有序列表元素03<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>li</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>ol</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3><code>&lt;li&gt;</code></h3>
<blockquote>
<ul>
<li><code>&lt;li&gt; &lt;/li&gt;</code></li>
<li>定义一个列表项/列表元素。</li>
<li><code>&lt;li&gt;</code>需要写在<code>&lt;ul&gt;</code>无序列表/<code>&lt;ol&gt;</code>有序列表中。</li>
</ul>
</blockquote>
<p>属性</p>
<blockquote>
<p>``</p>
<ul>
<li>功能：</li>
<li>参数：</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-html line-numbers-mode" data-highlighter="prismjs" data-ext="html"><pre><code class="language-html"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>ul</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>li</span><span class="token punctuation">&gt;</span></span>有序列表元素01<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>li</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>li</span><span class="token punctuation">&gt;</span></span>有序列表元素02<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>li</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>ul</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>ol</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>li</span><span class="token punctuation">&gt;</span></span>有序列表元素01<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>li</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>li</span><span class="token punctuation">&gt;</span></span>有序列表元素02<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>li</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>ol</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3><code>&lt;dl&gt;</code></h3>
<blockquote>
<ul>
<li><code>&lt;dl&gt; &lt;/dl&gt;</code>定义一个定义列表</li>
</ul>
</blockquote>
<h3><code>&lt;dt&gt;</code></h3>
<blockquote>
<ul>
<li><code>&lt;dt&gt; &lt;/dt&gt;</code>定义一个定义定义列表中的项目，标题部分。</li>
</ul>
</blockquote>
<h3><code>&lt;dd&gt;</code></h3>
<blockquote>
<ul>
<li><code>&lt;dd&gt; &lt;/dd&gt;</code>定义定义列表中项目的描述，内容部分。</li>
</ul>
</blockquote>
<h3><code>&lt;menu&gt;</code></h3>
<blockquote>
<ul>
<li><code>&lt;menu&gt; &lt;/menu&gt;</code>定义菜单列表。</li>
</ul>
</blockquote>
<h2>表格标签</h2>
<blockquote>
<p>提示：按需使用。</p>
</blockquote>
<blockquote>
<ul>
<li><code>&lt;table&gt; &lt;/table&gt;</code>定义一个表格</li>
<li><code>&lt;caption&gt; &lt;/caption&gt;</code>定义表格标题。</li>
<li><code>&lt;th&gt; &lt;/th&gt;</code>定义表格中的列/表头单元格。（居中+加粗）</li>
<li><code>&lt;tr&gt; &lt;/tr&gt;</code>定义表格中的行。</li>
<li><code>&lt;td&gt; &lt;/td&gt;</code>定义表格中的列/单元格。</li>
<li><code>&lt;thead&gt; &lt;/thead&gt;</code>定义表格中的表头内容。</li>
<li><code>&lt;tbody&gt; &lt;/tbody&gt;</code>定义表格中的主体内容。</li>
<li><code>&lt;tfoot&gt; &lt;/tfoot&gt;</code>定义表格中的表注内容（脚注）。</li>
<li><code>&lt;col /&gt;</code>定义表格中一个或多个列的属性值。</li>
<li><code>&lt;colgroup&gt; &lt;/colgroup&gt;</code>定义表格中供格式化的列组。</li>
</ul>
</blockquote>
<p>属性</p>
<blockquote>
<ul>
<li>
<p><code>border</code></p>
</li>
<li>
<p>功能：表格的外部线框宽度。</p>
</li>
<li>
<p>参数：数值。</p>
</li>
<li>
<p><code>cellpadding</code></p>
</li>
<li>
<p>功能：单元格的内边距。</p>
</li>
<li>
<p>参数：数值。</p>
</li>
<li>
<p><code>cellspacing</code></p>
</li>
<li>
<p>功能：单元格的外边距。</p>
</li>
<li>
<p>参数：数值。</p>
</li>
<li>
<p><code>align</code></p>
</li>
<li>
<p>功能：表格中的内容对齐方式。</p>
</li>
<li>
<p>参数：<code>left</code>左对齐、<code>right</code>右对齐、<code>center</code>居中对齐</p>
</li>
<li>
<p><code>colspan</code></p>
</li>
<li>
<p>功能：向右合并，跨列合并。</p>
</li>
<li>
<p>参数：正整数。</p>
</li>
<li>
<p><code>rowspan</code></p>
</li>
<li>
<p>功能：向下合并，跨行合并。</p>
</li>
<li>
<p>参数：正整数。</p>
</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-html line-numbers-mode" data-highlighter="prismjs" data-ext="html"><pre><code class="language-html"><span class="line"><span class="token comment">&lt;!-- 表格 --&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>table</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"> <span class="token comment">&lt;!-- 表格标题 --&gt;</span></span>
<span class="line"> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>caption</span><span class="token punctuation">&gt;</span></span> 表格标题 <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>caption</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"> <span class="token comment">&lt;!-- 表头 --&gt;</span></span>
<span class="line"> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>thead</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">  <span class="token comment">&lt;!--表格的行--&gt;</span></span>
<span class="line">  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>tr</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">   <span class="token comment">&lt;!-- 列/表头单元格 --&gt;</span></span>
<span class="line">   <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>th</span><span class="token punctuation">&gt;</span></span>标头01<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>th</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">   <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>th</span><span class="token punctuation">&gt;</span></span>标头02<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>th</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">   <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>th</span><span class="token punctuation">&gt;</span></span>标头03<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>th</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>tr</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>thead</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line"> <span class="token comment">&lt;!-- 主体 --&gt;</span></span>
<span class="line"> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>tbody</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">  <span class="token comment">&lt;!--表格的行--&gt;</span></span>
<span class="line">  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>tr</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">   <span class="token comment">&lt;!-- 列/单元格 --&gt;</span></span>
<span class="line">   <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>td</span><span class="token punctuation">&gt;</span></span>1行1列<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>td</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">   <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>td</span><span class="token punctuation">&gt;</span></span>1行2列<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>td</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">   <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>td</span><span class="token punctuation">&gt;</span></span>1行3列<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>td</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>tr</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">  <span class="token comment">&lt;!--表格的行--&gt;</span></span>
<span class="line">  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>tr</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">   <span class="token comment">&lt;!-- 列/单元格 --&gt;</span></span>
<span class="line">   <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>td</span><span class="token punctuation">&gt;</span></span>2行1列<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>td</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">   <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>td</span><span class="token punctuation">&gt;</span></span>2行2列<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>td</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">   <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>td</span><span class="token punctuation">&gt;</span></span>2行3列<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>td</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>tr</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>tbody</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line"> <span class="token comment">&lt;!-- 表注/脚注 --&gt;</span></span>
<span class="line"> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>tfoot</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">  <span class="token comment">&lt;!--向右合并3个单元格--&gt;</span></span>
<span class="line">  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>td</span> <span class="token attr-name">colspan</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>3<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>总计：<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>td</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>tfoot</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>table</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>样式/节标签</h2>
<h3><code>&lt;style&gt;</code></h3>
<blockquote>
<ul>
<li><code>&lt;style&gt; &lt;/style&gt;</code>定义文档的样式信息,内联样式。</li>
</ul>
</blockquote>
<h3><code>&lt;span&gt;</code></h3>
<blockquote>
<ul>
<li><code>&lt;span&gt; &lt;/span&gt;</code></li>
<li>定义文档中的节。</li>
<li>行级元素。</li>
</ul>
</blockquote>
<h2>元信息（数据）标签</h2>
<h3><code>&lt;!--  --&gt;</code></h3>
<blockquote>
<ul>
<li><code>&lt;!--  --&gt;</code>：定义一个注释。</li>
</ul>
</blockquote>
<h3><code>&lt;!DOCTYPE&gt;</code></h3>
<blockquote>
<ul>
<li><code>&lt;!DOCTYPE&gt;</code>：定义文档类型。</li>
</ul>
</blockquote>
<h3><code>&lt;head&gt;</code></h3>
<blockquote>
<ul>
<li><code>&lt;head&gt; &lt;/head&gt;</code>定义关于文档的信息。</li>
</ul>
</blockquote>
<h3><code>&lt;meta&gt;</code></h3>
<blockquote>
<ul>
<li><code>&lt;meta&gt; &lt;/meta&gt;</code>定义关于 HTML 文档的元信息。</li>
</ul>
</blockquote>
<h3><code>&lt;base&gt;</code></h3>
<blockquote>
<ul>
<li><code>&lt;base /&gt;</code>定义页面中所有链接的默认地址或默认目标。</li>
</ul>
</blockquote>
<h3><code>&lt;title&gt;</code></h3>
<blockquote>
<ul>
<li><code>&lt;title&gt;</code>：为网页的标题定义一个名称。</li>
</ul>
</blockquote>
<h2>程序标签</h2>
<h3><code>&lt;script&gt;</code></h3>
<blockquote>
<ul>
<li><code>&lt;script&gt; &lt;/script&gt;</code>定义客户端脚本。</li>
</ul>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Language - HTML</title>
      <link>https://blog.magictable.ha.cn/software/Language-HTML.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-HTML.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - HTML</source>
      <description>文章摘要： HTML是描述语言，网页标准三大组成部分之一的HTML，负责网页的基本结构（页面元素和内容）。 超文本标记语言（英语：HyperText Markup Language，简称：HTML）是一种用于创建网页的标准标记语言。 相关信息 外部相关文章 参考第三方网站教程：Mmdn web docs，前端知识查询网站。 第三方学习教程视频：B站“P...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Sat, 18 May 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> HTML是描述语言，网页标准三大组成部分之一的HTML，负责网页的基本结构（页面元素和内容）。</p>
<ul>
<li>超文本标记语言（英语：HyperText Markup Language，简称：HTML）是一种用于创建网页的标准标记语言。</li>
</ul>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li>参考第三方网站教程：<a href="https://developer.mozilla.org/zh-CN/docs/Web" target="_blank" rel="noopener noreferrer">Mmdn web docs</a>，前端知识查询网站。</li>
<li>第三方学习教程视频：<a href="https://www.bilibili.com/video/BV1np4y1C7rP?p=1&amp;vd_source=262edcbbd8e80915a7dff074a0e165a1" target="_blank" rel="noopener noreferrer">B站“POUR_OVER”UP的视频</a></li>
</ul>
<p>内部相关文章</p>
<ul>
<li></li>
</ul>
</div>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>避免使用样式相关的标签，建议使用<code>style</code>属性实现对样式的修改，即通过<code>style</code>属性写在操作对象的开始标签中。</li>
<li>HTML标签中的属性可以自定义，（重大发现）</li>
</ul>
</div>
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>HTML 是用来描述网页的一种语言。</li>
<li>HTML 指的是超文本标记语言: HyperText Markup Language</li>
<li>标记语言是一套标记标签 (markup tag)。</li>
<li>HTML 使用标记标签来描述网页。</li>
<li>HTML 文档包含了HTML 标签及文本内容。</li>
<li>HTML文档也叫做 web 页面。</li>
<li>HTML用于定义整个页面的框架。</li>
</ul>
<blockquote>
<p></p>
</blockquote>
<div class="language-html line-numbers-mode" data-highlighter="prismjs" data-ext="html"><pre><code class="language-html"><span class="line"><span class="token comment">&lt;!-- 声明文档类型是HTML文件 --&gt;</span></span>
<span class="line"><span class="token doctype"><span class="token punctuation">&lt;!</span><span class="token doctype-tag">DOCTYPE</span> <span class="token name">html</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line"><span class="token comment">&lt;!-- HTML最外层 主要存放`&lt;head&gt;`和`&lt;body&gt;` --&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>html</span> <span class="token attr-name">lang</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>en<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line"><span class="token comment">&lt;!-- 头部 --&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>head</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>meta</span> <span class="token attr-name">charset</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>UTF-8<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>meta</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>viewport<span class="token punctuation">"</span></span> <span class="token attr-name">content</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>width=device-width, initial-scale=1.0<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>title</span><span class="token punctuation">&gt;</span></span>网页标题名<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>title</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>head</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line"><span class="token comment">&lt;!-- 内容 --&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>body</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>h1</span><span class="token punctuation">&gt;</span></span>标题<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>h1</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>p</span><span class="token punctuation">&gt;</span></span>段落<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>p</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>body</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>html</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul>
<li><code>&lt;!DOCTYPE html&gt;</code>：称为DTD（文档类型定义），描述当前的文件是一个HTML格式的文件。</li>
<li><code>&lt;meta charset="UTF-8"&gt;</code>：描述页面的字符编码方式，不指定编码格式会导致中文乱码。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>内容结构化</strong>：通过标签（tags）定义文档的结构，如标题、段落、列表等。</li>
<li><strong>链接创建</strong>：使用<code>&lt;a&gt;</code>标签创建指向其他网页或文件的超链接。</li>
<li><strong>媒体嵌入</strong>：允许嵌入图片（<code>&lt;img&gt;</code>）、视频（<code>&lt;video&gt;</code>）和音频（<code>&lt;audio&gt;</code>）等多媒体内容。</li>
<li><strong>表单处理</strong>：通过<code>&lt;form&gt;</code>和相关输入标签（<code>&lt;input&gt;</code>）实现用户输入和数据提交。</li>
<li><strong>样式应用</strong>：与CSS（Cascading Style Sheets）结合使用，定义网页的视觉效果和布局。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>语义化标签</strong>：使用正确的HTML标签来提高可访问性和搜索引擎优化（SEO）。</li>
<li><strong>兼容性</strong>：不同浏览器可能对HTML的支持程度不同，编写代码时需考虑兼容性问题。</li>
<li><strong>可维护性</strong>：保持代码的清晰和结构化，便于后续维护和更新。</li>
<li><strong>安全性</strong>：避免在HTML中直接嵌入敏感信息，防止跨站脚本攻击（XSS）。</li>
<li><strong>性能优化</strong>：优化HTML代码，减少不必要的标签和嵌套，提高页面加载速度。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>网页开发</strong>：构建和设计静态或动态网页的基础。</li>
<li><strong>网站布局</strong>：定义网站的整体布局和结构。</li>
<li><strong>Web应用界面</strong>：为Web应用程序创建用户界面。</li>
<li><strong>电子邮件模板</strong>：编写用于发送新闻稿、营销邮件等的电子邮件模板。</li>
<li><strong>内容管理系统</strong>：在内容管理系统中，HTML用于定义页面模板和内容显示格式。</li>
<li><strong>移动开发</strong>：在移动应用中嵌入Web视图时，HTML用于显示Web内容。</li>
</ul>
<h2>注释</h2>
<ul>
<li>程序员在代码中加入的辅助说明，不能被计算机执行，不受语法的限制，可以写任何内容。</li>
<li>格式：内容写在<code>&lt;!--</code>和<code>--&gt;</code>之间。</li>
</ul>
<h2>HTML标签</h2>
<p>详细总结：<a href="/software/Language-HTML-%E6%A0%87%E7%AD%BE.html" target="_blank">HTML标签</a></p>
<ul>
<li>HTML 标记标签通常被称为 HTML 标签 (HTML tag)。</li>
<li>HTML 标签是由尖括号包围的关键词，比如 <code>&lt;html&gt;</code>。</li>
<li>标签是用于定义HTML元素和元素的属性的。</li>
</ul>
<p><strong>单标签</strong></p>
<ul>
<li>单标签是由一个标签单独构成的，不需要开始和结束标签之间的内容。</li>
<li>通常用于插入或引用元数据，或者执行某些无需包裹内容的操作。</li>
</ul>
<p><strong>双标签</strong></p>
<ul>
<li>双标签由开始标签和结束标签组成，比如 <code>&lt;b&gt;</code> 和 <code>&lt;/b&gt;</code>。</li>
<li>标签对中的第一个标签是开始标签，第二个标签是结束标签。</li>
<li>开始和结束标签也被称为开放标签和闭合标签。</li>
</ul>
<p><strong>块级元素</strong></p>
<ul>
<li>块级元素在其前后都会开始新的一行（独占一行）。</li>
<li>它们会尽可能地占据其父元素的整个宽度（除非设置了特定的宽度）。</li>
<li>常见的块级元素包括：<code>&lt;div&gt;</code>、<code>&lt;p&gt;</code>、<code>&lt;h1&gt;-&lt;h6&gt;</code>、<code>&lt;ol&gt;</code>、<code>&lt;ul&gt;</code>、<code>&lt;li&gt;</code>、<code>&lt;form&gt;</code>、<code>&lt;table&gt;</code>等。</li>
</ul>
<p><strong>行级元素</strong></p>
<ul>
<li>行级元素不会在其前后开始新的一行（不会独占一行）。</li>
<li>它们只会占据内容所需的空间（不能手动设置宽高）。</li>
<li>常见的行级元素包括：<code>&lt;span&gt;</code>、<code>&lt;a&gt;</code>、<code>&lt;button&gt;</code>、<code>&lt;label&gt;</code>、<code>&lt;strong&gt;</code>、<code>&lt;em&gt;</code>等。</li>
</ul>
<p><strong>行内块级元素</strong></p>
<ul>
<li>不会独占一行。</li>
<li>宽度和高度可以手动设置。</li>
<li>常见行内块级元素包括：<code>&lt;input&gt;</code>、<code>&lt;button&gt;</code>、<code>&lt;img&gt;</code>等。</li>
</ul>
<h2>元信息（数据）标签</h2>
<ul>
<li><code>&lt;meta&gt;</code>标签提供了当前HTML文档的元数据。</li>
<li>用于被浏览器解析，这类似标记该文件的配置信息。</li>
<li>元数据效果不会显示在浏览器页面。</li>
</ul>
<h2>HTML属性</h2>
<ul>
<li>定义元素的行为、外观、与其他元素的关系。</li>
<li>属性写在HTML元素的“开始标签”中。</li>
<li>每个HTML元素可以同时具有多个不同的属性。</li>
<li>属性名不区分大小写。</li>
<li>属性值对大小写敏感。</li>
<li>属性的值需要用引号<code>" "</code>括起来。</li>
<li>多个属性之间用空格``隔开。</li>
<li>单个属性中有多个值时用分号<code>;</code>隔开。</li>
</ul>
<p><strong>基本语法</strong></p>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">&lt;!-- 单标签 --&gt;</span>
<span class="line">&lt;标签 [属性名="属性值" ...] /&gt;</span>
<span class="line"></span>
<span class="line">&lt;!-- 双标签 --&gt;</span>
<span class="line">&lt;标签 [属性名="属性值" ...]&gt;  &lt;/标签&gt;</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>HTML特殊字符</h2>
<p>有些特殊字符在html文件中不能直接显示。</p>
<ul>
<li><code>&amp;nbsq;</code>空格</li>
<li><code>&amp;lt;</code>小于号</li>
<li><code>&amp;gt;</code>大于号</li>
<li><code>amp;</code>按位与</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Algorithm - 排序 - 二叉树排序</title>
      <link>https://blog.magictable.ha.cn/software/Algorithm-%E6%8E%92%E5%BA%8F-%E4%BA%8C%E5%8F%89%E6%A0%91%E6%8E%92%E5%BA%8F.html</link>
      <guid>https://blog.magictable.ha.cn/software/Algorithm-%E6%8E%92%E5%BA%8F-%E4%BA%8C%E5%8F%89%E6%A0%91%E6%8E%92%E5%BA%8F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Algorithm - 排序 - 二叉树排序</source>
      <description>文章摘要： 二叉树排序算法通常指的是通过构建一棵二叉搜索树（BST）来进行排序。 简介 简要说明 二叉树排序算法通常指的是通过构建一棵二叉搜索树（BST）来进行排序。在这种方法中，数据元素被插入到二叉搜索树中，树的每个节点都遵循左子树小于父节点，右子树大于父节点的规则。 排序过程是通过中序遍历这棵树来完成的，因为中序遍历会按照升序访问所有节点。 主要功...</description>
      <category>软件程序/算法设计</category>
      <pubDate>Wed, 01 May 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 二叉树排序算法通常指的是通过构建一棵二叉搜索树（BST）来进行排序。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>二叉树排序算法通常指的是通过构建一棵二叉搜索树（BST）来进行排序。在这种方法中，数据元素被插入到二叉搜索树中，树的每个节点都遵循左子树小于父节点，右子树大于父节点的规则。</li>
<li>排序过程是通过中序遍历这棵树来完成的，因为中序遍历会按照升序访问所有节点。</li>
</ul>
<p>主要功能</p>
<ul>
<li>对一组数据进行排序。</li>
<li>通过构建二叉搜索树，将数据元素插入到适当的位置。</li>
<li>通过中序遍历二叉搜索树来获取有序的数据序列。</li>
</ul>
<p>注意事项</p>
<ul>
<li>二叉树排序的性能依赖于树的结构。如果树极度不平衡，性能会下降到接近O(n^2)。</li>
<li>为了避免性能问题，有时会使用平衡二叉树（如AVL树或红黑树）来保证排序的效率。</li>
</ul>
<p>适用场景</p>
<ul>
<li>适用于不需要稳定排序的场景。</li>
<li>适用于数据动态插入和删除的场景，因为二叉搜索树可以高效地进行这些操作。</li>
</ul>
<p>时间复杂度</p>
<ul>
<li>最坏情况：O(n^2)，当树退化成链表时。</li>
<li>平均情况：O(n log n)，在平衡树的情况下。</li>
<li>最好情况：O(n log n)，在平衡树的情况下。</li>
</ul>
<p>空间复杂度</p>
<ul>
<li>O(n)，因为需要存储整个数据集。</li>
</ul>
<h2>Java 8</h2>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">class</span> <span class="token class-name">Node</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">int</span> value<span class="token punctuation">;</span></span>
<span class="line">    <span class="token class-name">Node</span> left<span class="token punctuation">,</span> right<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">Node</span><span class="token punctuation">(</span><span class="token keyword">int</span> item<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        value <span class="token operator">=</span> item<span class="token punctuation">;</span></span>
<span class="line">        left <span class="token operator">=</span> right <span class="token operator">=</span> <span class="token keyword">null</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">BinaryTreeSort</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token class-name">Node</span> root<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 插入节点到二叉搜索树</span></span>
<span class="line">    <span class="token class-name">Node</span> <span class="token function">insert</span><span class="token punctuation">(</span><span class="token class-name">Node</span> node<span class="token punctuation">,</span> <span class="token keyword">int</span> value<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 如果树为空，返回新的节点</span></span>
<span class="line">        <span class="token keyword">if</span> <span class="token punctuation">(</span>node <span class="token operator">==</span> <span class="token keyword">null</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">Node</span><span class="token punctuation">(</span>value<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 否则，递归地插入到左子树或右子树</span></span>
<span class="line">        <span class="token keyword">if</span> <span class="token punctuation">(</span>value <span class="token operator">&lt;</span> node<span class="token punctuation">.</span>value<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            node<span class="token punctuation">.</span>left <span class="token operator">=</span> <span class="token function">insert</span><span class="token punctuation">(</span>node<span class="token punctuation">.</span>left<span class="token punctuation">,</span> value<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>value <span class="token operator">&gt;</span> node<span class="token punctuation">.</span>value<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            node<span class="token punctuation">.</span>right <span class="token operator">=</span> <span class="token function">insert</span><span class="token punctuation">(</span>node<span class="token punctuation">.</span>right<span class="token punctuation">,</span> value<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 返回节点指针</span></span>
<span class="line">        <span class="token keyword">return</span> node<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 中序遍历二叉搜索树，打印排序后的结果</span></span>
<span class="line">    <span class="token keyword">void</span> <span class="token function">inorderTraversal</span><span class="token punctuation">(</span><span class="token class-name">Node</span> node<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">if</span> <span class="token punctuation">(</span>node <span class="token operator">!=</span> <span class="token keyword">null</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token function">inorderTraversal</span><span class="token punctuation">(</span>node<span class="token punctuation">.</span>left<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span>node<span class="token punctuation">.</span>value <span class="token operator">+</span> <span class="token string">" "</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token function">inorderTraversal</span><span class="token punctuation">(</span>node<span class="token punctuation">.</span>right<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">BinaryTreeSort</span> tree <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">BinaryTreeSort</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span> values <span class="token operator">=</span> <span class="token punctuation">{</span> <span class="token number">20</span><span class="token punctuation">,</span> <span class="token number">15</span><span class="token punctuation">,</span> <span class="token number">25</span><span class="token punctuation">,</span> <span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">18</span><span class="token punctuation">,</span> <span class="token number">30</span> <span class="token punctuation">}</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 将值插入到二叉搜索树</span></span>
<span class="line">        <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> value <span class="token operator">:</span> values<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            tree<span class="token punctuation">.</span>root <span class="token operator">=</span> tree<span class="token punctuation">.</span><span class="token function">insert</span><span class="token punctuation">(</span>tree<span class="token punctuation">.</span>root<span class="token punctuation">,</span> value<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 中序遍历二叉搜索树并打印排序后的数组</span></span>
<span class="line">        tree<span class="token punctuation">.</span><span class="token function">inorderTraversal</span><span class="token punctuation">(</span>tree<span class="token punctuation">.</span>root<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>在这个Java案例中，我们定义了一个<code>Node</code>类来表示二叉树的节点，以及一个<code>BinaryTreeSort</code>类来执行二叉树排序。<code>insert</code>方法用于将新值插入到二叉搜索树中，而<code>inorderTraversal</code>方法用于中序遍历树并打印排序后的值。</p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Algorithm - 排序 - 冒泡排序</title>
      <link>https://blog.magictable.ha.cn/software/Algorithm-%E6%8E%92%E5%BA%8F-%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F.html</link>
      <guid>https://blog.magictable.ha.cn/software/Algorithm-%E6%8E%92%E5%BA%8F-%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Algorithm - 排序 - 冒泡排序</source>
      <description>文章摘要： 冒泡排序算法是把较小的元素往前调或者把较大的元素往后调。 简介 简要说明 通过重复遍历要排序的数列，一次比较两个元素，如果它们的顺序错误就把它们交换过来。 遍历数列的工作是重复地进行，直到没有再需要交换的元素为止。 主要功能 对一组数据进行排序，使得数据按照升序或降序排列。 通过相邻元素的比较和交换，逐步将最大或最小的元素“冒泡”到数列的一...</description>
      <category>软件程序/算法设计</category>
      <pubDate>Wed, 01 May 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 冒泡排序算法是把较小的元素往前调或者把较大的元素往后调。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>通过重复遍历要排序的数列，一次比较两个元素，如果它们的顺序错误就把它们交换过来。</li>
<li>遍历数列的工作是重复地进行，直到没有再需要交换的元素为止。</li>
</ul>
<p>主要功能</p>
<ul>
<li>对一组数据进行排序，使得数据按照升序或降序排列。</li>
<li>通过相邻元素的比较和交换，逐步将最大或最小的元素“冒泡”到数列的一端。</li>
</ul>
<p>注意事项</p>
<ul>
<li>冒泡排序的时间复杂度较高，不适合大数据集。</li>
<li>它是一种稳定的排序算法，即相等的元素在排序后不会改变它们的相对顺序。</li>
<li>在实践中，通常会加入一个标志位来检测某一趟排序是否发生了交换，从而优化算法。</li>
</ul>
<p>适用场景</p>
<ul>
<li>适用于数据量较小的情况。</li>
<li>适用于需要稳定排序的场合。</li>
</ul>
<p>时间复杂度</p>
<ul>
<li>最坏情况：O(n^2)</li>
<li>平均情况：O(n^2)</li>
<li>最好情况（已排序）：O(n)</li>
</ul>
<p>空间复杂度</p>
<ul>
<li>O(1)，冒泡排序是原地排序算法。</li>
</ul>
<h2>Java 8</h2>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">BubbleSort</span> <span class="token punctuation">{</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 主方法调用冒泡排序</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span> array <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token number">64</span><span class="token punctuation">,</span> <span class="token number">34</span><span class="token punctuation">,</span> <span class="token number">25</span><span class="token punctuation">,</span> <span class="token number">12</span><span class="token punctuation">,</span> <span class="token number">22</span><span class="token punctuation">,</span> <span class="token number">11</span><span class="token punctuation">,</span> <span class="token number">90</span><span class="token punctuation">}</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token function">bubbleSort</span><span class="token punctuation">(</span>array<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Sorted array: "</span> <span class="token operator">+</span> <span class="token class-name">Arrays</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span>array<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 冒泡排序方法</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">bubbleSort</span><span class="token punctuation">(</span><span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span> array<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">int</span> n <span class="token operator">=</span> array<span class="token punctuation">.</span>length<span class="token punctuation">;</span></span>
<span class="line">        <span class="token keyword">boolean</span> swapped <span class="token operator">=</span> <span class="token boolean">false</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 遍历所有数组元素</span></span>
<span class="line">        <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator">&lt;</span> n <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token comment">// 最后i个元素已经到位，无需比较</span></span>
<span class="line">            <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> j <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> j <span class="token operator">&lt;</span> n <span class="token operator">-</span> i <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">;</span> j<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                <span class="token comment">// 交换找到的相邻元素</span></span>
<span class="line">                <span class="token keyword">if</span> <span class="token punctuation">(</span>array<span class="token punctuation">[</span>j<span class="token punctuation">]</span> <span class="token operator">&gt;</span> array<span class="token punctuation">[</span>j <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                    <span class="token keyword">int</span> temp <span class="token operator">=</span> array<span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line">                    array<span class="token punctuation">[</span>j<span class="token punctuation">]</span> <span class="token operator">=</span> array<span class="token punctuation">[</span>j <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line">                    array<span class="token punctuation">[</span>j <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">=</span> temp<span class="token punctuation">;</span></span>
<span class="line">                    swapped <span class="token operator">=</span> <span class="token boolean">true</span><span class="token punctuation">;</span></span>
<span class="line">                <span class="token punctuation">}</span></span>
<span class="line">            <span class="token punctuation">}</span></span>
<span class="line">            <span class="token comment">// 如果内循环没有进行交换，说明数组已经排序完成</span></span>
<span class="line">            <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>swapped<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                <span class="token keyword">break</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token punctuation">}</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>在这个Java案例中，<code>bubbleSort</code> 方法实现了冒泡排序算法。它通过两层循环来遍历数组，并在内层循环中进行相邻元素的比较和交换。<code>swapped</code> 标志用于检测某一趟排序是否发生了交换，如果没有交换，则数组已经排序完成，可以提前终止排序。</li>
</ul>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Algorithm - 排序 - 基数排序</title>
      <link>https://blog.magictable.ha.cn/software/Algorithm-%E6%8E%92%E5%BA%8F-%E5%9F%BA%E6%95%B0%E6%8E%92%E5%BA%8F.html</link>
      <guid>https://blog.magictable.ha.cn/software/Algorithm-%E6%8E%92%E5%BA%8F-%E5%9F%BA%E6%95%B0%E6%8E%92%E5%BA%8F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Algorithm - 排序 - 基数排序</source>
      <description>文章摘要： 基数排序是一种非比较型整数排序算法。 简介 简要说明 基数排序是一种非比较型整数排序算法。 将整数按位数切割成不同的数字，然后按每个位数进行比较排序。排序过程是通过分配和收集来完成的，其中分配是将数字按照某位的大小放入桶中，收集是将桶中的数字再放回原数组。 主要功能 对一组非负整数进行排序。 可以按照个位、十位、百位等顺序进行排序，直到最高...</description>
      <category>软件程序/算法设计</category>
      <pubDate>Wed, 01 May 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 基数排序是一种非比较型整数排序算法。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>基数排序是一种非比较型整数排序算法。</li>
<li>将整数按位数切割成不同的数字，然后按每个位数进行比较排序。排序过程是通过分配和收集来完成的，其中分配是将数字按照某位的大小放入桶中，收集是将桶中的数字再放回原数组。</li>
</ul>
<p>主要功能</p>
<ul>
<li>对一组非负整数进行排序。</li>
<li>可以按照个位、十位、百位等顺序进行排序，直到最高位。</li>
</ul>
<p>注意事项</p>
<ul>
<li>基数排序适用于整数或者字符串排序。</li>
<li>如果要排序的数据包含负数，则需要特殊处理，例如可以添加一个偏移量使得所有数都成为非负数。</li>
<li>基数排序的性能很大程度上取决于桶的实现和数据的分布。</li>
</ul>
<p>适用场景</p>
<ul>
<li>数据范围不大，但数据量很大时，基数排序非常有效。</li>
<li>适用于整数排序，特别是当数字的位数较少时。</li>
</ul>
<p>时间复杂度</p>
<ul>
<li>平均情况：O(nk)，其中n是待排序元素的数量，k是数字的最大位数。</li>
</ul>
<p>空间复杂度</p>
<ul>
<li>O(n + k)，其中n是待排序元素的数量，k是数字的最大位数。</li>
</ul>
<h2>Java 8</h2>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>util<span class="token punctuation">.</span></span><span class="token class-name">Arrays</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">RadixSort</span> <span class="token punctuation">{</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 主方法调用基数排序</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span> array <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token number">170</span><span class="token punctuation">,</span> <span class="token number">45</span><span class="token punctuation">,</span> <span class="token number">75</span><span class="token punctuation">,</span> <span class="token number">90</span><span class="token punctuation">,</span> <span class="token number">802</span><span class="token punctuation">,</span> <span class="token number">24</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">66</span><span class="token punctuation">}</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Original array: "</span> <span class="token operator">+</span> <span class="token class-name">Arrays</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span>array<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token function">radixSort</span><span class="token punctuation">(</span>array<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Sorted array: "</span> <span class="token operator">+</span> <span class="token class-name">Arrays</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span>array<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 基数排序方法</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">radixSort</span><span class="token punctuation">(</span><span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span> array<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 找到最大值以确定位数</span></span>
<span class="line">        <span class="token keyword">int</span> max <span class="token operator">=</span> <span class="token class-name">Arrays</span><span class="token punctuation">.</span><span class="token function">stream</span><span class="token punctuation">(</span>array<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">max</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getAsInt</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 对每一位进行排序，从个位开始</span></span>
<span class="line">        <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> exp <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span> max <span class="token operator">/</span> exp <span class="token operator">&gt;</span> <span class="token number">0</span><span class="token punctuation">;</span> exp <span class="token operator">*=</span> <span class="token number">10</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token function">countingSortByDigit</span><span class="token punctuation">(</span>array<span class="token punctuation">,</span> exp<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 根据当前位进行计数排序</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">countingSortByDigit</span><span class="token punctuation">(</span><span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span> array<span class="token punctuation">,</span> <span class="token keyword">int</span> exp<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">int</span> n <span class="token operator">=</span> array<span class="token punctuation">.</span>length<span class="token punctuation">;</span></span>
<span class="line">        <span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span> output <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token keyword">int</span><span class="token punctuation">[</span>n<span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token comment">// 输出数组</span></span>
<span class="line">        <span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span> count <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token keyword">int</span><span class="token punctuation">[</span><span class="token number">10</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token comment">// 计数数组，范围0-9</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 初始化计数数组</span></span>
<span class="line">        <span class="token class-name">Arrays</span><span class="token punctuation">.</span><span class="token function">fill</span><span class="token punctuation">(</span>count<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 计算每个桶的元素个数</span></span>
<span class="line">        <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> value <span class="token operator">:</span> array<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            count<span class="token punctuation">[</span><span class="token punctuation">(</span>value <span class="token operator">/</span> exp<span class="token punctuation">)</span> <span class="token operator">%</span> <span class="token number">10</span><span class="token punctuation">]</span><span class="token operator">++</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 更改count[i]，使count[i]包含位置信息</span></span>
<span class="line">        <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span> i <span class="token operator">&lt;</span> <span class="token number">10</span><span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            count<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">+=</span> count<span class="token punctuation">[</span>i <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 构建输出数组</span></span>
<span class="line">        <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i <span class="token operator">=</span> n <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">;</span> i <span class="token operator">&gt;=</span> <span class="token number">0</span><span class="token punctuation">;</span> i<span class="token operator">--</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            output<span class="token punctuation">[</span>count<span class="token punctuation">[</span><span class="token punctuation">(</span>array<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">/</span> exp<span class="token punctuation">)</span> <span class="token operator">%</span> <span class="token number">10</span><span class="token punctuation">]</span> <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">=</span> array<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line">            count<span class="token punctuation">[</span><span class="token punctuation">(</span>array<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">/</span> exp<span class="token punctuation">)</span> <span class="token operator">%</span> <span class="token number">10</span><span class="token punctuation">]</span><span class="token operator">--</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 将排序好的数组复制回原数组</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span><span class="token function">arraycopy</span><span class="token punctuation">(</span>output<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> array<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> n<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>在这个Java案例中，<code>radixSort</code> 方法实现了基数排序算法。它首先找到数组中的最大值以确定位数，然后对每一位进行计数排序。<code>countingSortByDigit</code> 方法是一个辅助方法，用于根据当前位进行计数排序。</p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Algorithm - 排序 - 堆排序</title>
      <link>https://blog.magictable.ha.cn/software/Algorithm-%E6%8E%92%E5%BA%8F-%E5%A0%86%E6%8E%92%E5%BA%8F.html</link>
      <guid>https://blog.magictable.ha.cn/software/Algorithm-%E6%8E%92%E5%BA%8F-%E5%A0%86%E6%8E%92%E5%BA%8F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Algorithm - 排序 - 堆排序</source>
      <description>文章摘要： 堆排序是一种基于比较的排序算法，利用堆这种数据结构进行排序。 简介 简要说明 堆排序是一种基于比较的排序算法，利用堆这种数据结构进行排序。 堆是一种近似完全二叉树的结构，并同时满足堆积的性质：即子节点的键值或索引总是小于（或者大于）它的父节点。 主要功能 对一组数据进行排序，使得数据按照升序或降序排列。 通过构建最大堆或最小堆，将最大（或最...</description>
      <category>软件程序/算法设计</category>
      <pubDate>Wed, 01 May 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 堆排序是一种基于比较的排序算法，利用堆这种数据结构进行排序。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>堆排序是一种基于比较的排序算法，利用堆这种数据结构进行排序。</li>
<li>堆是一种近似完全二叉树的结构，并同时满足堆积的性质：即子节点的键值或索引总是小于（或者大于）它的父节点。</li>
</ul>
<p>主要功能</p>
<ul>
<li>对一组数据进行排序，使得数据按照升序或降序排列。</li>
<li>通过构建最大堆或最小堆，将最大（或最小）元素移动到数组的起始位置，然后与最后一个元素交换，逐步缩小堆的大小，最终得到排序数组。</li>
</ul>
<p>注意事项</p>
<ul>
<li>堆排序不是稳定的排序算法，因为它会改变相等元素的相对顺序。</li>
<li>在实现堆排序时，需要注意维护堆的性质。</li>
</ul>
<p>适用场景</p>
<ul>
<li>适用于数据量较大的情况。</li>
<li>适用于需要非稳定排序的场景。</li>
<li>适用于对时间复杂度有较高要求的场景。</li>
</ul>
<p>时间复杂度</p>
<ul>
<li>最坏情况：O(n log n)，因为每次调整堆的时间复杂度是O(log n)，需要调整n次。</li>
<li>平均情况：O(n log n)。</li>
<li>最好情况：O(n log n)。</li>
</ul>
<p>空间复杂度</p>
<ul>
<li>O(1)，堆排序是在原地进行的，不需要额外的存储空间。</li>
</ul>
<h2>Java 8</h2>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">HeapSortExample</span> <span class="token punctuation">{</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span> array <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token number">12</span><span class="token punctuation">,</span> <span class="token number">11</span><span class="token punctuation">,</span> <span class="token number">13</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">,</span> <span class="token number">7</span><span class="token punctuation">}</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token function">heapSort</span><span class="token punctuation">(</span>array<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 对数组进行堆排序</span></span>
<span class="line">        <span class="token function">printArray</span><span class="token punctuation">(</span>array<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 打印排序后的数组</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 堆排序方法</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">heapSort</span><span class="token punctuation">(</span><span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span> arr<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">int</span> n <span class="token operator">=</span> arr<span class="token punctuation">.</span>length<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 构建最大堆</span></span>
<span class="line">        <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i <span class="token operator">=</span> n <span class="token operator">/</span> <span class="token number">2</span> <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">;</span> i <span class="token operator">&gt;=</span> <span class="token number">0</span><span class="token punctuation">;</span> i<span class="token operator">--</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token function">heapify</span><span class="token punctuation">(</span>arr<span class="token punctuation">,</span> n<span class="token punctuation">,</span> i<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 一个个从堆顶取出元素</span></span>
<span class="line">        <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i <span class="token operator">=</span> n <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">;</span> i <span class="token operator">&gt;=</span> <span class="token number">0</span><span class="token punctuation">;</span> i<span class="token operator">--</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token comment">// 当前根元素与最后一个元素交换</span></span>
<span class="line">            <span class="token keyword">int</span> temp <span class="token operator">=</span> arr<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line">            arr<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">=</span> arr<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line">            arr<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">=</span> temp<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">            <span class="token comment">// 调整剩余堆</span></span>
<span class="line">            <span class="token function">heapify</span><span class="token punctuation">(</span>arr<span class="token punctuation">,</span> i<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 调整堆的方法</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">heapify</span><span class="token punctuation">(</span><span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span> arr<span class="token punctuation">,</span> <span class="token keyword">int</span> n<span class="token punctuation">,</span> <span class="token keyword">int</span> i<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">int</span> largest <span class="token operator">=</span> i<span class="token punctuation">;</span> <span class="token comment">// 初始化最大元素索引为根节点</span></span>
<span class="line">        <span class="token keyword">int</span> left <span class="token operator">=</span> <span class="token number">2</span> <span class="token operator">*</span> i <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">;</span> <span class="token comment">// 左子节点</span></span>
<span class="line">        <span class="token keyword">int</span> right <span class="token operator">=</span> <span class="token number">2</span> <span class="token operator">*</span> i <span class="token operator">+</span> <span class="token number">2</span><span class="token punctuation">;</span> <span class="token comment">// 右子节点</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 如果左子节点大于根节点</span></span>
<span class="line">        <span class="token keyword">if</span> <span class="token punctuation">(</span>left <span class="token operator">&lt;</span> n <span class="token operator">&amp;&amp;</span> arr<span class="token punctuation">[</span>left<span class="token punctuation">]</span> <span class="token operator">&gt;</span> arr<span class="token punctuation">[</span>largest<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            largest <span class="token operator">=</span> left<span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 如果右子节点比最大元素还大</span></span>
<span class="line">        <span class="token keyword">if</span> <span class="token punctuation">(</span>right <span class="token operator">&lt;</span> n <span class="token operator">&amp;&amp;</span> arr<span class="token punctuation">[</span>right<span class="token punctuation">]</span> <span class="token operator">&gt;</span> arr<span class="token punctuation">[</span>largest<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            largest <span class="token operator">=</span> right<span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 如果最大元素不是根节点</span></span>
<span class="line">        <span class="token keyword">if</span> <span class="token punctuation">(</span>largest <span class="token operator">!=</span> i<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token keyword">int</span> swap <span class="token operator">=</span> arr<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line">            arr<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">=</span> arr<span class="token punctuation">[</span>largest<span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line">            arr<span class="token punctuation">[</span>largest<span class="token punctuation">]</span> <span class="token operator">=</span> swap<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">            <span class="token comment">// 递归地调整受影响的子堆</span></span>
<span class="line">            <span class="token function">heapify</span><span class="token punctuation">(</span>arr<span class="token punctuation">,</span> n<span class="token punctuation">,</span> largest<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 打印数组方法</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">printArray</span><span class="token punctuation">(</span><span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span> arr<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> value <span class="token operator">:</span> arr<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span>value <span class="token operator">+</span> <span class="token string">" "</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 打印数组元素，后面跟一个空格</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 打印完数组后换行</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>在这个Java案例中，<code>heapSort</code>方法实现了堆排序算法。首先通过<code>heapify</code>方法构建最大堆，然后将堆顶元素（最大值）与最后一个元素交换，并重新调整剩余元素构成的堆，重复这个过程直到堆的大小为1。<code>printArray</code>方法用于打印排序后的数组。</p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Algorithm - 排序 - 希尔排序</title>
      <link>https://blog.magictable.ha.cn/software/Algorithm-%E6%8E%92%E5%BA%8F-%E5%B8%8C%E5%B0%94%E6%8E%92%E5%BA%8F.html</link>
      <guid>https://blog.magictable.ha.cn/software/Algorithm-%E6%8E%92%E5%BA%8F-%E5%B8%8C%E5%B0%94%E6%8E%92%E5%BA%8F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Algorithm - 排序 - 希尔排序</source>
      <description>文章摘要： 通过比较距离较远的数据来工作，其核心理念是使数组中任意间隔为h的元素都是有序的。 简介 简要说明 希尔排序是插入排序的一种更高效的改进版本。 通过比较距离较远的数据来工作，其核心理念是使数组中任意间隔为h的元素都是有序的。 希尔排序也称递减增量排序，因为它会优先比较距离较远的元素。 主要功能 对数组进行排序，通过比较较远距离的元素来减少数据...</description>
      <category>软件程序/算法设计</category>
      <pubDate>Wed, 01 May 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 通过比较距离较远的数据来工作，其核心理念是使数组中任意间隔为h的元素都是有序的。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>希尔排序是插入排序的一种更高效的改进版本。</li>
<li>通过比较距离较远的数据来工作，其核心理念是使数组中任意间隔为h的元素都是有序的。</li>
<li>希尔排序也称递减增量排序，因为它会优先比较距离较远的元素。</li>
</ul>
<p>主要功能</p>
<ul>
<li>对数组进行排序，通过比较较远距离的元素来减少数据移动次数。</li>
<li>逐步缩小比较间隔，最终使用插入排序来完成排序。</li>
</ul>
<p>注意事项</p>
<ul>
<li>希尔排序的性能很大程度取决于间隔序列的选择，没有最好的序列，不同的序列会有不同的性能。</li>
<li>希尔排序不是稳定的排序算法，可能会改变相同元素之间的相对顺序。</li>
</ul>
<p>适用场景</p>
<ul>
<li>数据量大且部分有序时，希尔排序比简单插入排序更高效。</li>
<li>适用于中等大小的数组。</li>
</ul>
<p>时间复杂度</p>
<ul>
<li>最优情况：取决于间隔序列，通常优于O(n^2)</li>
<li>平均情况：取决于间隔序列，通常在O(n^(1.3))到O(n^2)之间</li>
<li>最坏情况：O(n^2)</li>
</ul>
<p>空间复杂度</p>
<ul>
<li>O(1)，希尔排序是原地排序算法。</li>
</ul>
<h2>Java 8</h2>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">ShellSort</span> <span class="token punctuation">{</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 主方法调用希尔排序</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span> array <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token number">64</span><span class="token punctuation">,</span> <span class="token number">34</span><span class="token punctuation">,</span> <span class="token number">25</span><span class="token punctuation">,</span> <span class="token number">12</span><span class="token punctuation">,</span> <span class="token number">22</span><span class="token punctuation">,</span> <span class="token number">11</span><span class="token punctuation">,</span> <span class="token number">90</span><span class="token punctuation">}</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token function">shellSort</span><span class="token punctuation">(</span>array<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Sorted array: "</span> <span class="token operator">+</span> <span class="token class-name">Arrays</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span>array<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 希尔排序方法</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">shellSort</span><span class="token punctuation">(</span><span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span> array<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">int</span> n <span class="token operator">=</span> array<span class="token punctuation">.</span>length<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 开始时，间隔设置为n/2，然后每次减半，直到间隔为1</span></span>
<span class="line">        <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> gap <span class="token operator">=</span> n <span class="token operator">/</span> <span class="token number">2</span><span class="token punctuation">;</span> gap <span class="token operator">&gt;</span> <span class="token number">0</span><span class="token punctuation">;</span> gap <span class="token operator">/=</span> <span class="token number">2</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token comment">// 使用插入排序的思想，对间隔为gap的元素进行排序</span></span>
<span class="line">            <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i <span class="token operator">=</span> gap<span class="token punctuation">;</span> i <span class="token operator">&lt;</span> n<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                <span class="token comment">// 将array[i]插入到已排序的间隔序列中</span></span>
<span class="line">                <span class="token keyword">int</span> temp <span class="token operator">=</span> array<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line">                <span class="token keyword">int</span> j<span class="token punctuation">;</span></span>
<span class="line">                <span class="token keyword">for</span> <span class="token punctuation">(</span>j <span class="token operator">=</span> i<span class="token punctuation">;</span> j <span class="token operator">&gt;=</span> gap <span class="token operator">&amp;&amp;</span> array<span class="token punctuation">[</span>j <span class="token operator">-</span> gap<span class="token punctuation">]</span> <span class="token operator">&gt;</span> temp<span class="token punctuation">;</span> j <span class="token operator">-=</span> gap<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                    array<span class="token punctuation">[</span>j<span class="token punctuation">]</span> <span class="token operator">=</span> array<span class="token punctuation">[</span>j <span class="token operator">-</span> gap<span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token comment">// 移动元素</span></span>
<span class="line">                <span class="token punctuation">}</span></span>
<span class="line">                array<span class="token punctuation">[</span>j<span class="token punctuation">]</span> <span class="token operator">=</span> temp<span class="token punctuation">;</span> <span class="token comment">// 插入元素到正确的位置</span></span>
<span class="line">            <span class="token punctuation">}</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>在这个Java案例中，<code>shellSort</code> 方法实现了希尔排序算法。首先，设置一个间隔<code>gap</code>，它从数组长度的一半开始，并每次减半，直到间隔为1。然后，对于每个间隔，使用插入排序的思想对间隔为<code>gap</code>的元素进行排序。在内部循环中，将当前元素与其前面的元素进行比较，如果需要，则交换它们的位置。</p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Algorithm - 排序 - 归并排序</title>
      <link>https://blog.magictable.ha.cn/software/Algorithm-%E6%8E%92%E5%BA%8F-%E5%BD%92%E5%B9%B6%E6%8E%92%E5%BA%8F.html</link>
      <guid>https://blog.magictable.ha.cn/software/Algorithm-%E6%8E%92%E5%BA%8F-%E5%BD%92%E5%B9%B6%E6%8E%92%E5%BA%8F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Algorithm - 排序 - 归并排序</source>
      <description>文章摘要： 归并排序是一种分治算法。 简介 简要说明 归并排序是一种分治算法。 将数组分成两半，分别对它们进行排序，然后将排序好的两部分合并在一起。这个过程递归地进行，直到每个子部分只有一个位置，然后开始合并。 主要功能 将一个无序的数组分割成多个小数组，直到每个小数组只有一个位置。 将小数组两两合并，在合并的过程中进行排序。 重复合并操作，直到最终得...</description>
      <category>软件程序/算法设计</category>
      <pubDate>Wed, 01 May 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 归并排序是一种分治算法。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>归并排序是一种分治算法。</li>
<li>将数组分成两半，分别对它们进行排序，然后将排序好的两部分合并在一起。这个过程递归地进行，直到每个子部分只有一个位置，然后开始合并。</li>
</ul>
<p>主要功能</p>
<ul>
<li>将一个无序的数组分割成多个小数组，直到每个小数组只有一个位置。</li>
<li>将小数组两两合并，在合并的过程中进行排序。</li>
<li>重复合并操作，直到最终得到一个有序的数组。</li>
</ul>
<p>注意事项</p>
<ul>
<li>归并排序不是原地排序算法，因为它需要额外的存储空间来合并子数组。</li>
<li>合并过程中需要谨慎处理，以确保合并后的数组仍然有序。</li>
</ul>
<p>适用场景</p>
<ul>
<li>适用于需要稳定排序的场景。</li>
<li>适用于数据量大且对排序稳定性有要求的场景。</li>
<li>适用于外部排序，即数据量太大，无法全部加载到内存中的情况。</li>
</ul>
<p>时间复杂度</p>
<ul>
<li>平均情况：O(n log n)</li>
<li>最坏情况：O(n log n)</li>
<li>最佳情况：O(n log n)</li>
</ul>
<p>空间复杂度</p>
<ul>
<li>O(n)，因为需要与原数组相同长度的额外空间来存储合并过程中的临时数组。</li>
</ul>
<h2>Java 8</h2>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">MergeSort</span> <span class="token punctuation">{</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 主方法调用归并排序</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span> array <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token number">12</span><span class="token punctuation">,</span> <span class="token number">11</span><span class="token punctuation">,</span> <span class="token number">13</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">,</span> <span class="token number">7</span><span class="token punctuation">}</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Given Array"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token function">printArray</span><span class="token punctuation">(</span>array<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token function">mergeSort</span><span class="token punctuation">(</span>array<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> array<span class="token punctuation">.</span>length <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"\nSorted array"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token function">printArray</span><span class="token punctuation">(</span>array<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 归并排序方法</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">mergeSort</span><span class="token punctuation">(</span><span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span> array<span class="token punctuation">,</span> <span class="token keyword">int</span> left<span class="token punctuation">,</span> <span class="token keyword">int</span> right<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">if</span> <span class="token punctuation">(</span>left <span class="token operator">&lt;</span> right<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token comment">// 找到中间索引</span></span>
<span class="line">            <span class="token keyword">int</span> mid <span class="token operator">=</span> <span class="token punctuation">(</span>left <span class="token operator">+</span> right<span class="token punctuation">)</span> <span class="token operator">/</span> <span class="token number">2</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">            <span class="token comment">// 分别对左右两半进行排序</span></span>
<span class="line">            <span class="token function">mergeSort</span><span class="token punctuation">(</span>array<span class="token punctuation">,</span> left<span class="token punctuation">,</span> mid<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token function">mergeSort</span><span class="token punctuation">(</span>array<span class="token punctuation">,</span> mid <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">,</span> right<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">            <span class="token comment">// 合并两个排序好的子数组</span></span>
<span class="line">            <span class="token function">merge</span><span class="token punctuation">(</span>array<span class="token punctuation">,</span> left<span class="token punctuation">,</span> mid<span class="token punctuation">,</span> right<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 合并两个子数组的方法</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">merge</span><span class="token punctuation">(</span><span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span> array<span class="token punctuation">,</span> <span class="token keyword">int</span> left<span class="token punctuation">,</span> <span class="token keyword">int</span> mid<span class="token punctuation">,</span> <span class="token keyword">int</span> right<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 找到两个子数组的长度</span></span>
<span class="line">        <span class="token keyword">int</span> n1 <span class="token operator">=</span> mid <span class="token operator">-</span> left <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token keyword">int</span> n2 <span class="token operator">=</span> right <span class="token operator">-</span> mid<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 创建临时数组</span></span>
<span class="line">        <span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token class-name">L</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token keyword">int</span><span class="token punctuation">[</span>n1<span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token class-name">R</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token keyword">int</span><span class="token punctuation">[</span>n2<span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 将数据复制到临时数组中</span></span>
<span class="line">        <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator">&lt;</span> n1<span class="token punctuation">;</span> <span class="token operator">++</span>i<span class="token punctuation">)</span></span>
<span class="line">            <span class="token class-name">L</span><span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">=</span> array<span class="token punctuation">[</span>left <span class="token operator">+</span> i<span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> j <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> j <span class="token operator">&lt;</span> n2<span class="token punctuation">;</span> <span class="token operator">++</span>j<span class="token punctuation">)</span></span>
<span class="line">            <span class="token class-name">R</span><span class="token punctuation">[</span>j<span class="token punctuation">]</span> <span class="token operator">=</span> array<span class="token punctuation">[</span>mid <span class="token operator">+</span> <span class="token number">1</span> <span class="token operator">+</span> j<span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 合并临时数组回到原数组</span></span>
<span class="line">        <span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">,</span> j <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token keyword">int</span> k <span class="token operator">=</span> left<span class="token punctuation">;</span></span>
<span class="line">        <span class="token keyword">while</span> <span class="token punctuation">(</span>i <span class="token operator">&lt;</span> n1 <span class="token operator">&amp;&amp;</span> j <span class="token operator">&lt;</span> n2<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token class-name">L</span><span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">&lt;=</span> <span class="token class-name">R</span><span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                array<span class="token punctuation">[</span>k<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token class-name">L</span><span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line">                i<span class="token operator">++</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span></span>
<span class="line">                array<span class="token punctuation">[</span>k<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token class-name">R</span><span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line">                j<span class="token operator">++</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token punctuation">}</span></span>
<span class="line">            k<span class="token operator">++</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 复制L[]剩余的元素</span></span>
<span class="line">        <span class="token keyword">while</span> <span class="token punctuation">(</span>i <span class="token operator">&lt;</span> n1<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            array<span class="token punctuation">[</span>k<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token class-name">L</span><span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line">            i<span class="token operator">++</span><span class="token punctuation">;</span></span>
<span class="line">            k<span class="token operator">++</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 复制R[]剩余的元素</span></span>
<span class="line">        <span class="token keyword">while</span> <span class="token punctuation">(</span>j <span class="token operator">&lt;</span> n2<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            array<span class="token punctuation">[</span>k<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token class-name">R</span><span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line">            j<span class="token operator">++</span><span class="token punctuation">;</span></span>
<span class="line">            k<span class="token operator">++</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 打印数组的方法</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">printArray</span><span class="token punctuation">(</span><span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span> array<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> value <span class="token operator">:</span> array<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span>value <span class="token operator">+</span> <span class="token string">" "</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>在这个Java案例中，<code>mergeSort</code> 方法是递归地将数组分割成更小的部分，而 <code>merge</code> 方法则是将两个已排序的子数组合并成一个排序的数组。<code>printArray</code> 方法用于打印数组。</p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Algorithm - 排序 - 快速排序</title>
      <link>https://blog.magictable.ha.cn/software/Algorithm-%E6%8E%92%E5%BA%8F-%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F.html</link>
      <guid>https://blog.magictable.ha.cn/software/Algorithm-%E6%8E%92%E5%BA%8F-%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Algorithm - 排序 - 快速排序</source>
      <description>文章摘要： 快速排序是一种高效的排序算法，采用分治法的一个典例。 简介 简要说明 快速排序是一种高效的排序算法，采用分治法的一个典例。 通过选取一个“基准”元素，将数组分为两个子数组，一个包含小于基准的元素，另一个包含大于基准的元素，然后递归地对这两个子数组进行快速排序。 主要功能 对数组进行就地排序，不需要额外的存储空间。 通过递归将大问题分解为小问...</description>
      <category>软件程序/算法设计</category>
      <pubDate>Wed, 01 May 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 快速排序是一种高效的排序算法，采用分治法的一个典例。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>快速排序是一种高效的排序算法，采用分治法的一个典例。</li>
<li>通过选取一个“基准”元素，将数组分为两个子数组，一个包含小于基准的元素，另一个包含大于基准的元素，然后递归地对这两个子数组进行快速排序。</li>
</ul>
<p>主要功能</p>
<ul>
<li>对数组进行就地排序，不需要额外的存储空间。</li>
<li>通过递归将大问题分解为小问题，并合并结果。</li>
</ul>
<p>注意事项</p>
<ul>
<li>快速排序在最坏情况下的时间复杂度为O(n^2)，但通常情况下平均时间复杂度为O(n log n)。</li>
<li>选择合适的基准（pivot）对于算法的性能至关重要。</li>
<li>快速排序是不稳定的排序算法，相等的元素可能会因为排序而改变它们的相对顺序。</li>
</ul>
<p>适用场景</p>
<ul>
<li>适用于大量数据的排序，尤其是当内存空间有限时。</li>
<li>当数据不能全部载入内存时，可以考虑使用外部排序，其中快速排序是一个很好的候选算法。</li>
</ul>
<p>时间复杂度</p>
<ul>
<li>最坏情况：O(n^2)</li>
<li>平均情况：O(n log n)</li>
</ul>
<p>空间复杂度</p>
<ul>
<li>O(log n)，这是因为递归的深度平均为log n。</li>
</ul>
<h2>Java 8</h2>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">QuickSort</span> <span class="token punctuation">{</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 主方法调用快速排序</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span> array <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">7</span><span class="token punctuation">,</span> <span class="token number">8</span><span class="token punctuation">,</span> <span class="token number">9</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">}</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token keyword">int</span> n <span class="token operator">=</span> array<span class="token punctuation">.</span>length<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token function">quickSort</span><span class="token punctuation">(</span>array<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> n <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Sorted array: "</span> <span class="token operator">+</span> <span class="token class-name">Arrays</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span>array<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 快速排序方法</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">quickSort</span><span class="token punctuation">(</span><span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span> array<span class="token punctuation">,</span> <span class="token keyword">int</span> low<span class="token punctuation">,</span> <span class="token keyword">int</span> high<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">if</span> <span class="token punctuation">(</span>low <span class="token operator">&lt;</span> high<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token comment">// pi是划分后的索引，array[pi]现在在正确的位置</span></span>
<span class="line">            <span class="token keyword">int</span> pi <span class="token operator">=</span> <span class="token function">partition</span><span class="token punctuation">(</span>array<span class="token punctuation">,</span> low<span class="token punctuation">,</span> high<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">            <span class="token comment">// 递归地分别对划分后的两个子数组进行快速排序</span></span>
<span class="line">            <span class="token function">quickSort</span><span class="token punctuation">(</span>array<span class="token punctuation">,</span> low<span class="token punctuation">,</span> pi <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token comment">// 递归左子数组</span></span>
<span class="line">            <span class="token function">quickSort</span><span class="token punctuation">(</span>array<span class="token punctuation">,</span> pi <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">,</span> high<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 递归右子数组</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 划分方法，返回划分后的索引</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token keyword">static</span> <span class="token keyword">int</span> <span class="token function">partition</span><span class="token punctuation">(</span><span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span> array<span class="token punctuation">,</span> <span class="token keyword">int</span> low<span class="token punctuation">,</span> <span class="token keyword">int</span> high<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">int</span> pivot <span class="token operator">=</span> array<span class="token punctuation">[</span>high<span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token comment">// 选择最后一个元素作为基准</span></span>
<span class="line">        <span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token punctuation">(</span>low <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 较小元素的索引</span></span>
<span class="line"></span>
<span class="line">        <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> j <span class="token operator">=</span> low<span class="token punctuation">;</span> j <span class="token operator">&lt;</span> high<span class="token punctuation">;</span> j<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token comment">// 如果当前元素小于或等于pivot</span></span>
<span class="line">            <span class="token keyword">if</span> <span class="token punctuation">(</span>array<span class="token punctuation">[</span>j<span class="token punctuation">]</span> <span class="token operator">&lt;=</span> pivot<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                i<span class="token operator">++</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">                <span class="token comment">// 交换array[i]和array[j]</span></span>
<span class="line">                <span class="token keyword">int</span> temp <span class="token operator">=</span> array<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line">                array<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">=</span> array<span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line">                array<span class="token punctuation">[</span>j<span class="token punctuation">]</span> <span class="token operator">=</span> temp<span class="token punctuation">;</span></span>
<span class="line">            <span class="token punctuation">}</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 交换array[i+1]和array[high]（或pivot）</span></span>
<span class="line">        <span class="token keyword">int</span> temp <span class="token operator">=</span> array<span class="token punctuation">[</span>i <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line">        array<span class="token punctuation">[</span>i <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">=</span> array<span class="token punctuation">[</span>high<span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line">        array<span class="token punctuation">[</span>high<span class="token punctuation">]</span> <span class="token operator">=</span> temp<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token keyword">return</span> i <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">;</span> <span class="token comment">// 返回划分后的索引</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>在这个Java案例中，<code>quickSort</code> 方法实现了快速排序算法。它首先调用 <code>partition</code> 方法来找到基准元素的正确位置，并将数组划分为两个子数组。然后，它递归地对这两个子数组进行快速排序。<code>partition</code> 方法负责将数组划分为两部分，并返回基准元素的索引。</p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Algorithm - 排序 - 插入排序</title>
      <link>https://blog.magictable.ha.cn/software/Algorithm-%E6%8E%92%E5%BA%8F-%E6%8F%92%E5%85%A5%E6%8E%92%E5%BA%8F.html</link>
      <guid>https://blog.magictable.ha.cn/software/Algorithm-%E6%8E%92%E5%BA%8F-%E6%8F%92%E5%85%A5%E6%8E%92%E5%BA%8F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Algorithm - 排序 - 插入排序</source>
      <description>文章摘要： 通过构建有序序列，对于未排序数据，在已排序序列中从后向前扫描，找到相应位置并插入。 简介 简要说明 通过构建有序序列，对于未排序数据，在已排序序列中从后向前扫描，找到相应位置并插入。 插入排序在实现上，通常采用in-place排序（即只需用到O(1)的额外空间的排序）。 主要功能 将一个记录插入到已排好序的有序表中，从而得到一个新的、记录数...</description>
      <category>软件程序/算法设计</category>
      <pubDate>Wed, 01 May 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 通过构建有序序列，对于未排序数据，在已排序序列中从后向前扫描，找到相应位置并插入。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>通过构建有序序列，对于未排序数据，在已排序序列中从后向前扫描，找到相应位置并插入。</li>
<li>插入排序在实现上，通常采用in-place排序（即只需用到O(1)的额外空间的排序）。</li>
</ul>
<p>主要功能</p>
<ul>
<li>将一个记录插入到已排好序的有序表中，从而得到一个新的、记录数增加1的有序表。</li>
</ul>
<p>注意事项</p>
<ul>
<li>插入排序对于小数据集是效率很高的，在数据量较小的情况下，这是一个很好的排序算法。</li>
<li>插入排序是稳定的排序算法，不会改变相同元素的相对顺序。</li>
</ul>
<p>适用场景</p>
<ul>
<li>数据量小。</li>
<li>部分有序的数组。</li>
</ul>
<p>时间复杂度</p>
<ul>
<li>最优情况（已排序）：O(n)</li>
<li>平均、最坏情况：O(n^2)</li>
</ul>
<p>空间复杂度</p>
<ul>
<li>O(1)，插入排序是原地排序算法。</li>
</ul>
<h2>Java 8</h2>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">InsertionSort</span> <span class="token punctuation">{</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 主方法调用插入排序</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span> array <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token number">12</span><span class="token punctuation">,</span> <span class="token number">11</span><span class="token punctuation">,</span> <span class="token number">13</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">}</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token function">insertionSort</span><span class="token punctuation">(</span>array<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Sorted array: "</span> <span class="token operator">+</span> <span class="token class-name">Arrays</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span>array<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 插入排序方法</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">insertionSort</span><span class="token punctuation">(</span><span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span> array<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">int</span> n <span class="token operator">=</span> array<span class="token punctuation">.</span>length<span class="token punctuation">;</span></span>
<span class="line">        <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span> i <span class="token operator">&lt;</span> n<span class="token punctuation">;</span> <span class="token operator">++</span>i<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token keyword">int</span> key <span class="token operator">=</span> array<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token comment">// 当前要插入的元素</span></span>
<span class="line">            <span class="token keyword">int</span> j <span class="token operator">=</span> i <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">            <span class="token comment">// 将array[i]与已排序好的array[0...i-1]中的元素比较，找到合适的位置插入</span></span>
<span class="line">            <span class="token keyword">while</span> <span class="token punctuation">(</span>j <span class="token operator">&gt;=</span> <span class="token number">0</span> <span class="token operator">&amp;&amp;</span> array<span class="token punctuation">[</span>j<span class="token punctuation">]</span> <span class="token operator">&gt;</span> key<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                array<span class="token punctuation">[</span>j <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">=</span> array<span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token comment">// 将元素向后移动，为插入元素腾出空间</span></span>
<span class="line">                j <span class="token operator">=</span> j <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token punctuation">}</span></span>
<span class="line">            array<span class="token punctuation">[</span>j <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">=</span> key<span class="token punctuation">;</span> <span class="token comment">// 将元素插入到正确的位置</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>在这个Java案例中，<code>insertionSort</code> 方法实现了插入排序算法。从数组的第二个元素开始，将其与前面的元素比较，如果当前元素小于比较的元素，则将比较的元素向后移动，直到找到正确的插入位置。这个过程一直重复，直到整个数组排序完成。</p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Algorithm - 排序 - 桶排序</title>
      <link>https://blog.magictable.ha.cn/software/Algorithm-%E6%8E%92%E5%BA%8F-%E6%A1%B6%E6%8E%92%E5%BA%8F.html</link>
      <guid>https://blog.magictable.ha.cn/software/Algorithm-%E6%8E%92%E5%BA%8F-%E6%A1%B6%E6%8E%92%E5%BA%8F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Algorithm - 排序 - 桶排序</source>
      <description>文章摘要： 对数据进行排序，特别是当输入数据服从均匀分布时，可以线性时间完成排序。。 简介 简要说明 桶排序是一种将待排序数据分到几个有序的桶里，每个桶里的数据再分别排序（有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序），最后将各桶的数据合并成有序数列的排序算法。 主要功能 对数据进行排序，特别是当输入数据服从均匀分布时，可以线性时间完成...</description>
      <category>软件程序/算法设计</category>
      <pubDate>Wed, 01 May 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 对数据进行排序，特别是当输入数据服从均匀分布时，可以线性时间完成排序。。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>桶排序是一种将待排序数据分到几个有序的桶里，每个桶里的数据再分别排序（有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序），最后将各桶的数据合并成有序数列的排序算法。</li>
</ul>
<p>主要功能</p>
<ul>
<li>对数据进行排序，特别是当输入数据服从均匀分布时，可以线性时间完成排序。</li>
</ul>
<p>注意事项</p>
<ul>
<li>桶排序需要额外的大量空间，如果输入数据非常庞大，而桶的数量也很大，则空间代价高昂。</li>
<li>数据的分布对桶排序的性能影响很大，如果数据分布不均匀，可能会导致某些桶特别大，影响效率。</li>
</ul>
<p>适用场景</p>
<ul>
<li>数据量较大，且可以很容易地划分为几个桶。</li>
<li>数据在某个范围内均匀分布。</li>
</ul>
<p>时间复杂度</p>
<ul>
<li>最优情况：O(n+k)，其中n是数据个数，k是桶的个数。</li>
<li>平均情况：O(n+k)</li>
<li>最坏情况：O(n^2)，当所有数据都落在同一个桶中时。</li>
</ul>
<p>空间复杂度</p>
<ul>
<li>O(n+k)，因为需要额外的空间来存储桶和桶内的数据。</li>
</ul>
<h2>Java 8</h2>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>util<span class="token punctuation">.</span></span><span class="token class-name">ArrayList</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>util<span class="token punctuation">.</span></span><span class="token class-name">Collections</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">BucketSort</span> <span class="token punctuation">{</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 主方法调用桶排序</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span> array <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token number">22</span><span class="token punctuation">,</span> <span class="token number">45</span><span class="token punctuation">,</span> <span class="token number">12</span><span class="token punctuation">,</span> <span class="token number">8</span><span class="token punctuation">,</span> <span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">,</span> <span class="token number">72</span><span class="token punctuation">,</span> <span class="token number">81</span><span class="token punctuation">,</span> <span class="token number">33</span><span class="token punctuation">,</span> <span class="token number">18</span><span class="token punctuation">,</span> <span class="token number">50</span><span class="token punctuation">,</span> <span class="token number">14</span><span class="token punctuation">}</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token keyword">int</span> bucketSize <span class="token operator">=</span> <span class="token number">5</span><span class="token punctuation">;</span> <span class="token comment">// 定义桶的大小</span></span>
<span class="line">        <span class="token function">bucketSort</span><span class="token punctuation">(</span>array<span class="token punctuation">,</span> bucketSize<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Sorted array: "</span> <span class="token operator">+</span> <span class="token class-name">Arrays</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span>array<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 桶排序方法</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">bucketSort</span><span class="token punctuation">(</span><span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span> array<span class="token punctuation">,</span> <span class="token keyword">int</span> bucketSize<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">if</span> <span class="token punctuation">(</span>array<span class="token punctuation">.</span>length <span class="token operator">==</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token keyword">return</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 找到数组中的最大值和最小值</span></span>
<span class="line">        <span class="token keyword">int</span> minValue <span class="token operator">=</span> array<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token keyword">int</span> maxValue <span class="token operator">=</span> array<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> value <span class="token operator">:</span> array<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token keyword">if</span> <span class="token punctuation">(</span>value <span class="token operator">&lt;</span> minValue<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                minValue <span class="token operator">=</span> value<span class="token punctuation">;</span></span>
<span class="line">            <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>value <span class="token operator">&gt;</span> maxValue<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                maxValue <span class="token operator">=</span> value<span class="token punctuation">;</span></span>
<span class="line">            <span class="token punctuation">}</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 初始化桶的数量</span></span>
<span class="line">        <span class="token keyword">int</span> bucketCount <span class="token operator">=</span> <span class="token punctuation">(</span>maxValue <span class="token operator">-</span> minValue<span class="token punctuation">)</span> <span class="token operator">/</span> bucketSize <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token class-name">ArrayList</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">ArrayList</span><span class="token punctuation">&lt;</span><span class="token class-name">Integer</span><span class="token punctuation">&gt;</span><span class="token punctuation">&gt;</span></span> buckets <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ArrayList</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token punctuation">&gt;</span></span><span class="token punctuation">(</span>bucketCount<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator">&lt;</span> bucketCount<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            buckets<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">ArrayList</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token punctuation">&gt;</span></span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 将数组中的值分配到桶中</span></span>
<span class="line">        <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> value <span class="token operator">:</span> array<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            buckets<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token punctuation">(</span>value <span class="token operator">-</span> minValue<span class="token punctuation">)</span> <span class="token operator">/</span> bucketSize<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span>value<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 对每个桶进行排序，并合并结果</span></span>
<span class="line">        <span class="token keyword">int</span> currentIndex <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token class-name">ArrayList</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">Integer</span><span class="token punctuation">&gt;</span></span> bucket <span class="token operator">:</span> buckets<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token class-name">Collections</span><span class="token punctuation">.</span><span class="token function">sort</span><span class="token punctuation">(</span>bucket<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 使用Java内置的排序方法对桶内的数据进行排序</span></span>
<span class="line">            <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> value <span class="token operator">:</span> bucket<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                array<span class="token punctuation">[</span>currentIndex<span class="token operator">++</span><span class="token punctuation">]</span> <span class="token operator">=</span> value<span class="token punctuation">;</span></span>
<span class="line">            <span class="token punctuation">}</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>在这个Java案例中，<code>bucketSort</code> 方法实现了桶排序算法。首先，找到数组中的最大值和最小值，然后根据桶的大小计算出需要多少个桶。每个桶是一个<code>ArrayList</code>，用于存储落在该桶范围内的数据。接着，将数组中的每个元素分配到相应的桶中。最后，对每个桶进行排序（这里使用了Java内置的排序方法），并将排序后的数据合并回原数组。</p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Algorithm - 排序 - 计数排序</title>
      <link>https://blog.magictable.ha.cn/software/Algorithm-%E6%8E%92%E5%BA%8F-%E8%AE%A1%E6%95%B0%E6%8E%92%E5%BA%8F.html</link>
      <guid>https://blog.magictable.ha.cn/software/Algorithm-%E6%8E%92%E5%BA%8F-%E8%AE%A1%E6%95%B0%E6%8E%92%E5%BA%8F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Algorithm - 排序 - 计数排序</source>
      <description>文章摘要： 计数排序是一种非比较型整数排序算法。 简介 简要说明 计数排序是一种非比较型整数排序算法。 使用一个额外的数组来计算每个元素的出现次数，然后根据计数数组来将元素放到正确的位置。计数排序适用于小范围整数的排序。 主要功能 对整数进行排序，特别是当整数范围不大时。 通过计数每个元素的出现次数，确定每个元素在排序后数组中的位置。 注意事项 计数排...</description>
      <category>软件程序/算法设计</category>
      <pubDate>Wed, 01 May 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 计数排序是一种非比较型整数排序算法。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>计数排序是一种非比较型整数排序算法。</li>
<li>使用一个额外的数组来计算每个元素的出现次数，然后根据计数数组来将元素放到正确的位置。计数排序适用于小范围整数的排序。</li>
</ul>
<p>主要功能</p>
<ul>
<li>对整数进行排序，特别是当整数范围不大时。</li>
<li>通过计数每个元素的出现次数，确定每个元素在排序后数组中的位置。</li>
</ul>
<p>注意事项</p>
<ul>
<li>计数排序只适用于非负整数排序。</li>
<li>如果要排序的数据范围很大，计数排序的空间复杂度会非常高。</li>
<li>计数排序不是比较排序，因此其时间复杂度不受输入数据分布的影响。</li>
</ul>
<p>适用场景</p>
<ul>
<li>数据范围较小，即最大值和最小值的差值不是很大。</li>
<li>数据量较大，但可以接受额外的空间开销。</li>
</ul>
<p>时间复杂度</p>
<ul>
<li>平均情况：O(n + k)，其中n是待排序元素的数量，k是最大元素值与最小元素值的差。</li>
</ul>
<p>空间复杂度</p>
<ul>
<li>O(n + k)，其中n是待排序元素的数量，k是最大元素值与最小元素值的差。</li>
</ul>
<h2>Java 8</h2>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">CountingSort</span> <span class="token punctuation">{</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 主方法调用计数排序</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span> array <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">8</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">}</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Original array: "</span> <span class="token operator">+</span> <span class="token class-name">Arrays</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span>array<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token function">countingSort</span><span class="token punctuation">(</span>array<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Sorted array: "</span> <span class="token operator">+</span> <span class="token class-name">Arrays</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span>array<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 计数排序方法</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">countingSort</span><span class="token punctuation">(</span><span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span> array<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 找到数组中的最大值</span></span>
<span class="line">        <span class="token keyword">int</span> max <span class="token operator">=</span> <span class="token class-name">Arrays</span><span class="token punctuation">.</span><span class="token function">stream</span><span class="token punctuation">(</span>array<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">max</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getAsInt</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        </span>
<span class="line">        <span class="token comment">// 创建计数数组，大小为max+1</span></span>
<span class="line">        <span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span> count <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token keyword">int</span><span class="token punctuation">[</span>max <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line">        </span>
<span class="line">        <span class="token comment">// 计算每个元素的出现次数</span></span>
<span class="line">        <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> number <span class="token operator">:</span> array<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            count<span class="token punctuation">[</span>number<span class="token punctuation">]</span><span class="token operator">++</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">        </span>
<span class="line">        <span class="token comment">// 修改计数数组，每个位置存储小于等于该值的元素个数</span></span>
<span class="line">        <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span> i <span class="token operator">&lt;</span> count<span class="token punctuation">.</span>length<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            count<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">+=</span> count<span class="token punctuation">[</span>i <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">        </span>
<span class="line">        <span class="token comment">// 构建输出数组</span></span>
<span class="line">        <span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span> output <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token keyword">int</span><span class="token punctuation">[</span>array<span class="token punctuation">.</span>length<span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i <span class="token operator">=</span> array<span class="token punctuation">.</span>length <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">;</span> i <span class="token operator">&gt;=</span> <span class="token number">0</span><span class="token punctuation">;</span> i<span class="token operator">--</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            output<span class="token punctuation">[</span>count<span class="token punctuation">[</span>array<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">]</span> <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">=</span> array<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token comment">// 放置元素</span></span>
<span class="line">            count<span class="token punctuation">[</span>array<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token operator">--</span><span class="token punctuation">;</span> <span class="token comment">// 减少计数</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">        </span>
<span class="line">        <span class="token comment">// 将排序好的数组复制回原数组</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span><span class="token function">arraycopy</span><span class="token punctuation">(</span>output<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> array<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> array<span class="token punctuation">.</span>length<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>在这个Java案例中，<code>countingSort</code> 方法实现了计数排序算法。首先，它找到数组中的最大值以确定计数数组的大小。然后，它计算每个元素的出现次数，并修改计数数组以存储小于等于每个值的元素个数。最后，它构建输出数组，并将排序好的数组复制回原数组。</p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Algorithm - 排序 - 选择排序</title>
      <link>https://blog.magictable.ha.cn/software/Algorithm-%E6%8E%92%E5%BA%8F-%E9%80%89%E6%8B%A9%E6%8E%92%E5%BA%8F.html</link>
      <guid>https://blog.magictable.ha.cn/software/Algorithm-%E6%8E%92%E5%BA%8F-%E9%80%89%E6%8B%A9%E6%8E%92%E5%BA%8F.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Algorithm - 排序 - 选择排序</source>
      <description>文章摘要： 工作原理是首先在未排序序列中找到最小（或最大）元素，存放到排序序列的起始位置，然后，再从剩余未排序元素中继续寻找最小（或最大）元素，然后放到已排序序列的末尾。以此类推，直到所有元素均排序完毕。 简介 简要说明 工作原理是首先在未排序序列中找到最小（或最大）元素，存放到排序序列的起始位置，然后，再从剩余未排序元素中继续寻找最小（或最大）元素，...</description>
      <category>软件程序/算法设计</category>
      <pubDate>Wed, 01 May 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 工作原理是首先在未排序序列中找到最小（或最大）元素，存放到排序序列的起始位置，然后，再从剩余未排序元素中继续寻找最小（或最大）元素，然后放到已排序序列的末尾。以此类推，直到所有元素均排序完毕。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>工作原理是首先在未排序序列中找到最小（或最大）元素，存放到排序序列的起始位置，然后，再从剩余未排序元素中继续寻找最小（或最大）元素，然后放到已排序序列的末尾。以此类推，直到所有元素均排序完毕。</li>
</ul>
<p>主要功能</p>
<ul>
<li>在未排序的数组中找到最小（或最大）元素，并将其放到正确的位置。</li>
<li>通过重复选择剩余元素中的最小（或最大）元素，逐步构建有序序列。</li>
</ul>
<p>注意事项</p>
<ul>
<li>选择排序是不稳定的排序算法，因为在选择最小元素时可能会改变相同元素的相对顺序。</li>
<li>它不适用于数据量大的情况，因为其时间复杂度较高。</li>
</ul>
<p>适用场景</p>
<ul>
<li>数据量较小的排序场景。</li>
<li>教学或演示排序算法原理时。</li>
</ul>
<p>时间复杂度</p>
<ul>
<li>最优、平均、最坏情况：O(n^2)</li>
</ul>
<p>空间复杂度</p>
<ul>
<li>O(1)，选择排序是原地排序算法。</li>
</ul>
<h2>Java 8</h2>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">SelectionSort</span> <span class="token punctuation">{</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 主方法调用选择排序</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span> array <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token number">64</span><span class="token punctuation">,</span> <span class="token number">25</span><span class="token punctuation">,</span> <span class="token number">12</span><span class="token punctuation">,</span> <span class="token number">22</span><span class="token punctuation">,</span> <span class="token number">11</span><span class="token punctuation">}</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token function">selectionSort</span><span class="token punctuation">(</span>array<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Sorted array: "</span> <span class="token operator">+</span> <span class="token class-name">Arrays</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span>array<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 选择排序方法</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">selectionSort</span><span class="token punctuation">(</span><span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span> array<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">int</span> n <span class="token operator">=</span> array<span class="token punctuation">.</span>length<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 遍历数组所有元素</span></span>
<span class="line">        <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator">&lt;</span> n <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token comment">// 找到从i到n-1中最小元素的索引</span></span>
<span class="line">            <span class="token keyword">int</span> minIndex <span class="token operator">=</span> i<span class="token punctuation">;</span></span>
<span class="line">            <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> j <span class="token operator">=</span> i <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">;</span> j <span class="token operator">&lt;</span> n<span class="token punctuation">;</span> j<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                <span class="token keyword">if</span> <span class="token punctuation">(</span>array<span class="token punctuation">[</span>j<span class="token punctuation">]</span> <span class="token operator">&lt;</span> array<span class="token punctuation">[</span>minIndex<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                    minIndex <span class="token operator">=</span> j<span class="token punctuation">;</span></span>
<span class="line">                <span class="token punctuation">}</span></span>
<span class="line">            <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">            <span class="token comment">// 将找到的最小元素与第i个位置的元素交换</span></span>
<span class="line">            <span class="token keyword">int</span> temp <span class="token operator">=</span> array<span class="token punctuation">[</span>minIndex<span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line">            array<span class="token punctuation">[</span>minIndex<span class="token punctuation">]</span> <span class="token operator">=</span> array<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span></span>
<span class="line">            array<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">=</span> temp<span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>在这个Java案例中，<code>selectionSort</code> 方法实现了选择排序算法。外层循环控制排序的趟数，内层循环负责在未排序的元素中找到最小元素的索引。找到最小元素后，将其与未排序序列的第一个元素交换。这个过程一直重复，直到整个数组排序完成。</p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Algorithm - 查找 - 二分查找</title>
      <link>https://blog.magictable.ha.cn/software/Algorithm-%E6%9F%A5%E6%89%BE-%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html</link>
      <guid>https://blog.magictable.ha.cn/software/Algorithm-%E6%9F%A5%E6%89%BE-%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Algorithm - 查找 - 二分查找</source>
      <description>文章摘要： 摘要内容。 简介 简要说明 主要功能 注意事项 适用场景 时间复杂度 最坏情况：O(log n) 最好情况：若带查找元素恰好在数组中央位置，只需要循环一次 O(1) 空间复杂度 需要常数个指针i、j、m，因此额外占用的空间是O(1) Java 8 提示：将(i + j) / 2改为(i + j) &amp;gt;&amp;gt;&amp;gt; 1。 当j的取值范围非常大，比如j达...</description>
      <category>软件程序/算法设计</category>
      <pubDate>Wed, 01 May 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li></li>
</ul>
<p>时间复杂度</p>
<ul>
<li>最坏情况：<code>O(log n)</code></li>
<li>最好情况：若带查找元素恰好在数组中央位置，只需要循环一次 <code>O(1)</code></li>
</ul>
<p>空间复杂度</p>
<ul>
<li>需要常数个指针<code>i、j、m</code>，因此额外占用的空间是<code>O(1)</code></li>
</ul>
<h2>Java 8</h2>
<p>提示：将<code>(i + j) / 2</code>改为<code>(i + j) &gt;&gt;&gt; 1</code>。</p>
<ul>
<li>当<code>j</code>的取值范围非常大，比如<code>j</code>达到了整数数据类型规定的最大值，当进行第一次区中间值后，在取第二个中间值时，<code>i</code>将等于中间值，这时会进行<code>i + j</code>的操作，数值将超出整数数据类型规定的最大值，最终得到的结果会变成负数，问题就此出现。</li>
<li>java将一个数的二进制表示时，会把最高位的一个二进制数作为符号位。当二进制的最高位为1的时候就代表是负数。</li>
<li>该符号<code>&gt;&gt;&gt;</code>代表无符号右移运算符，将在二进制数下将所有0和1向右移，高位补零。</li>
</ul>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Main</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 待查找的数组</span></span>
<span class="line">        <span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span> array <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">,</span> <span class="token number">7</span><span class="token punctuation">,</span> <span class="token number">8</span><span class="token punctuation">,</span> <span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">12</span><span class="token punctuation">}</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token comment">// 调用算法函数</span></span>
<span class="line">        <span class="token keyword">int</span> index <span class="token operator">=</span> <span class="token function">binarySearch</span><span class="token punctuation">(</span>array<span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token comment">// 显示结果</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>index<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token doc-comment comment">/**</span>
<span class="line">     * 算法</span>
<span class="line">     * Params:</span>
<span class="line">     *     - array：待查找的数组</span>
<span class="line">     *     - target：待查找的目标值</span>
<span class="line">     * Returns:</span>
<span class="line">     *     - 若找到则返回索引</span>
<span class="line">     *     - 若没找到则返回-1</span>
<span class="line">     */</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">int</span> <span class="token function">binarySearch</span><span class="token punctuation">(</span><span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span> array<span class="token punctuation">,</span> <span class="token keyword">int</span> target<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>                  <span class="token comment">// 数组左边边界的下标</span></span>
<span class="line">        <span class="token keyword">int</span> j <span class="token operator">=</span> array<span class="token punctuation">.</span>length <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">;</span>   <span class="token comment">// 数组右边边界的下标</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// i~j 将要查找的范围内还有数值</span></span>
<span class="line">        <span class="token keyword">while</span> <span class="token punctuation">(</span>i <span class="token operator">&lt;=</span> j<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token comment">// `(i + j) &gt;&gt;&gt; 1`代表转换为二进制下进行无符号右移1位</span></span>
<span class="line">            <span class="token comment">// 二进制右移1位相当于除以2并取整的功能</span></span>
<span class="line">            <span class="token keyword">int</span> m <span class="token operator">=</span> <span class="token punctuation">(</span>i <span class="token operator">+</span> j<span class="token punctuation">)</span> <span class="token operator">&gt;&gt;&gt;</span> <span class="token number">1</span><span class="token punctuation">;</span>           <span class="token comment">// 创建一个中间值</span></span>
<span class="line"></span>
<span class="line">            <span class="token keyword">if</span> <span class="token punctuation">(</span>target <span class="token operator">&lt;</span> array<span class="token punctuation">[</span>m<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>           <span class="token comment">// 目标在中间值的左边</span></span>
<span class="line">                j <span class="token operator">=</span> m <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>array<span class="token punctuation">[</span>m<span class="token punctuation">]</span> <span class="token operator">&lt;</span> target<span class="token punctuation">)</span> <span class="token punctuation">{</span>    <span class="token comment">// 目标在中间值的右边</span></span>
<span class="line">                i <span class="token operator">=</span> m <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">;</span></span>
<span class="line">            <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span>                       <span class="token comment">// 目标正好就是中间值</span></span>
<span class="line">                <span class="token comment">// 在数组成功中找到需要查找的值，返回值在该数组中的下标</span></span>
<span class="line">                <span class="token keyword">return</span> m<span class="token punctuation">;</span></span>
<span class="line">            <span class="token punctuation">}</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">        <span class="token comment">// 在数组中并没有找到需要查找的值，值不在该数组中</span></span>
<span class="line">        <span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Language - SQL - 语句语法</title>
      <link>https://blog.magictable.ha.cn/software/Language-SQL-%E8%AF%AD%E5%8F%A5%E8%AF%AD%E6%B3%95.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-SQL-%E8%AF%AD%E5%8F%A5%E8%AF%AD%E6%B3%95.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - SQL - 语句语法</source>
      <description>文章摘要： SQL关系型数据库查询语言的命令格式总结。 相关信息 外部相关文章 内部相关文章 数据库设计方案： 提示 SQL关键字不区分大小写。 SQL语句可以以单行或多行书写，以;分号结束。 SQL中的注释不要使用#作为单行注释，这会导致数据迁移时导致错误。推荐使用-- 两个横杠加一个空格。 注释 本文章命令中的[ ]括起来的表示可选的内容。 在使用...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Sat, 20 Apr 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> SQL关系型数据库查询语言的命令格式总结。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li></li>
</ul>
<p>内部相关文章</p>
<ul>
<li>数据库设计方案：<a href="/software/Language-SQL-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E8%AE%BE%E8%AE%A1%E6%96%B9%E6%A1%88-%E6%99%BA%E4%BD%93%E6%A0%B8%E5%BF%83.html" target="_blank">Language-SQL-热门推荐-设计方案-智体核心</a></li>
</ul>
</div>
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<ul>
<li>SQL关键字不区分大小写。</li>
<li>SQL语句可以以单行或多行书写，以<code>;</code>分号结束。</li>
<li>SQL中的注释<strong>不要</strong>使用<code>#</code>作为单行注释，这会导致数据迁移时导致错误。推荐使用<code>-- </code>两个横杠加一个空格。</li>
</ul>
</div>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>本文章命令中的<code>[ ]</code>括起来的表示可选的内容。</li>
<li>在使用语法时需要时刻确定自己所在的“数据库”、再给出具体的“表”来查数据。</li>
<li>查询的语法比较常用，且比较复杂，查询与“添加、修改、删除”的语法分开记忆。</li>
<li>字符串、日期类型、数据中间有空格，都需要将数据包含在引号中。</li>
<li><code>COMMENT &lt;注释&gt;</code>参数是可选项，用于为表名和字段名提供注释。</li>
<li><code>&lt;约束&gt;</code>参数是可选项，允许同时支持多个约束，约束之间用空格``分割。（请参考本文<code>约束</code>标题的知识进行查询具体写法）</li>
<li>支持同时创建多个字段，字段之间用英文逗号<code>,</code>分割。</li>
</ul>
</div>
<h2>退出命令</h2>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token keyword">EXIT</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>切换数据库</h2>
<ul>
<li>在登录数据库后，以及在操作表时，都需要先使用以下命令切换到相应的数据库中才执行后续操作。</li>
</ul>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 切换数据库</span></span>
<span class="line"><span class="token keyword">USE</span> <span class="token operator">&lt;</span>数据库名<span class="token operator">&gt;</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>数据 - 定义语言（DDL）</h2>
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<ul>
<li>主要针对<code>数据库</code>、<code>表</code>、<code>字段</code>进行增、删、改、查的操作命令。</li>
<li><code>字段</code>是表的每列数据的标识。</li>
<li>这些不是实际真正存储的数据信息，此处不操作实际存储的数据。</li>
</ul>
</div>
<h3>创建-数据库</h3>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 创建数据库</span></span>
<span class="line"><span class="token keyword">CREATE</span></span>
<span class="line"><span class="token keyword">DATABASE</span> <span class="token operator">&lt;</span>数据库名<span class="token operator">&gt;</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>删除-数据库</h3>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token keyword">DROP</span></span>
<span class="line"><span class="token keyword">DATABASE</span> <span class="token operator">&lt;</span>库名<span class="token operator">&gt;</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>修改-数据库</h3>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 修改数据库的字符集</span></span>
<span class="line"><span class="token keyword">ALTER</span></span>
<span class="line"><span class="token keyword">DATABASE</span> <span class="token operator">&lt;</span>数据库名<span class="token operator">&gt;</span></span>
<span class="line"><span class="token keyword">CHARACTER</span> <span class="token keyword">SET</span></span>
<span class="line">    <span class="token operator">&lt;</span>字符集名称<span class="token operator">&gt;</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">-- 修改数据库的校验规则</span></span>
<span class="line"><span class="token keyword">ALTER</span></span>
<span class="line"><span class="token keyword">DATABASE</span> <span class="token operator">&lt;</span>数据库名<span class="token operator">&gt;</span></span>
<span class="line"><span class="token keyword">COLLATE</span></span>
<span class="line">    <span class="token operator">&lt;</span>校对规则名称<span class="token operator">&gt;</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>查询-数据库</h3>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 列出当前用户下的所有数据库</span></span>
<span class="line"><span class="token keyword">SHOW</span> <span class="token keyword">DATABASES</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">-- 显示当前正在使用的数据库</span></span>
<span class="line"><span class="token keyword">SELECT</span> <span class="token keyword">DATABASE</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>创建-表</h3>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 创建表。</span></span>
<span class="line"><span class="token keyword">CREATE</span></span>
<span class="line"><span class="token keyword">TABLE</span> <span class="token operator">&lt;</span>表名<span class="token operator">&gt;</span> <span class="token punctuation">[</span><span class="token keyword">COMMENT</span> <span class="token operator">&lt;</span>注释<span class="token operator">&gt;</span><span class="token punctuation">]</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">-- 创建表时并创建字段。</span></span>
<span class="line"><span class="token keyword">CREATE</span></span>
<span class="line"><span class="token keyword">TABLE</span> <span class="token operator">&lt;</span>表名<span class="token operator">&gt;</span> <span class="token punctuation">(</span></span>
<span class="line">	<span class="token operator">&lt;</span>字段名<span class="token operator">&gt;</span> <span class="token operator">&lt;</span>数据类型<span class="token operator">&gt;</span> <span class="token punctuation">[</span><span class="token keyword">COMMENT</span> <span class="token operator">&lt;</span>注释<span class="token operator">&gt;</span><span class="token punctuation">]</span><span class="token punctuation">,</span></span>
<span class="line">	<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"><span class="token punctuation">)</span> <span class="token punctuation">[</span><span class="token keyword">COMMENT</span> <span class="token operator">&lt;</span>注释<span class="token operator">&gt;</span><span class="token punctuation">]</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">-- 创建表时并创建字段，并且为字段添加约束。</span></span>
<span class="line"><span class="token keyword">CREATE</span></span>
<span class="line"><span class="token keyword">TABLE</span> <span class="token operator">&lt;</span>表名<span class="token operator">&gt;</span> <span class="token punctuation">(</span></span>
<span class="line">	<span class="token operator">&lt;</span>字段名<span class="token operator">&gt;</span> <span class="token operator">&lt;</span>数据类型<span class="token operator">&gt;</span> <span class="token punctuation">[</span><span class="token operator">&lt;</span>约束<span class="token operator">&gt;</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">]</span> <span class="token punctuation">[</span><span class="token keyword">COMMENT</span> <span class="token operator">&lt;</span>注释<span class="token operator">&gt;</span><span class="token punctuation">]</span><span class="token punctuation">,</span></span>
<span class="line">	<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"><span class="token punctuation">)</span> <span class="token punctuation">[</span><span class="token keyword">COMMENT</span> <span class="token operator">&lt;</span>注释<span class="token operator">&gt;</span><span class="token punctuation">]</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">-- 创建表时并创建字段，并且为字段添加外键约束，顺便关联外表。</span></span>
<span class="line"><span class="token comment">-- 关联外表的约束条件是：需要确保另一个表的字段名的约束条件是主键约束`PRIMARY KEY`。</span></span>
<span class="line"><span class="token keyword">CREATE</span></span>
<span class="line"><span class="token keyword">TABLE</span> <span class="token operator">&lt;</span>表名<span class="token operator">&gt;</span> <span class="token punctuation">(</span></span>
<span class="line">	<span class="token operator">&lt;</span>字段名<span class="token operator">&gt;</span> <span class="token operator">&lt;</span>数据类型<span class="token operator">&gt;</span> <span class="token punctuation">[</span><span class="token operator">&lt;</span>约束<span class="token operator">&gt;</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">]</span> <span class="token punctuation">[</span><span class="token keyword">COMMENT</span> <span class="token operator">&lt;</span>注释<span class="token operator">&gt;</span><span class="token punctuation">]</span><span class="token punctuation">,</span></span>
<span class="line">	<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line">	<span class="token punctuation">[</span><span class="token keyword">CONSTRAINT</span> <span class="token operator">&lt;</span>约束注释<span class="token operator">/</span>别名<span class="token operator">&gt;</span><span class="token punctuation">]</span> <span class="token keyword">FOREIGN</span> <span class="token keyword">KEY</span> <span class="token operator">&lt;</span>字段<span class="token operator">&gt;</span> <span class="token keyword">REFERENCES</span> <span class="token operator">&lt;</span>表名<span class="token operator">&gt;</span><span class="token punctuation">(</span><span class="token operator">&lt;</span>字段名<span class="token operator">&gt;</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token punctuation">)</span> <span class="token punctuation">[</span><span class="token keyword">COMMENT</span> <span class="token operator">&lt;</span>注释<span class="token operator">&gt;</span><span class="token punctuation">]</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>删除-表</h3>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token keyword">DROP</span></span>
<span class="line"><span class="token keyword">TABLE</span> <span class="token operator">&lt;</span>表名<span class="token operator">&gt;</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>修改-表</h3>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 修改表名</span></span>
<span class="line"><span class="token keyword">ALTER</span></span>
<span class="line"><span class="token keyword">TABLE</span> <span class="token operator">&lt;</span>表名<span class="token operator">&gt;</span> </span>
<span class="line"><span class="token keyword">RENAME</span> <span class="token keyword">TO</span> </span>
<span class="line">    <span class="token operator">&lt;</span>新表名<span class="token operator">&gt;</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">-- 将原数据库中的所有表移动到新数据库中，可同时修改表名。</span></span>
<span class="line"><span class="token keyword">RENAME</span></span>
<span class="line"><span class="token keyword">TABLE</span> <span class="token operator">&lt;</span>数据库名<span class="token punctuation">.</span>表名<span class="token operator">&gt;</span> </span>
<span class="line"><span class="token keyword">TO</span> </span>
<span class="line">    <span class="token operator">&lt;</span>新数据库名<span class="token punctuation">.</span>新表名<span class="token operator">&gt;</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>查询-表</h3>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 列出当前数据库下的所有表</span></span>
<span class="line"><span class="token keyword">SHOW</span> <span class="token keyword">TABLES</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">-- 查询指定数据库下的所有表</span></span>
<span class="line"><span class="token keyword">SHOW</span> <span class="token keyword">TABLES</span></span>
<span class="line"><span class="token keyword">FROM</span> <span class="token operator">&lt;</span>表名<span class="token operator">&gt;</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>添加-表字段</h3>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 添加字段</span></span>
<span class="line"><span class="token keyword">ALTER</span></span>
<span class="line"><span class="token keyword">TABLE</span> <span class="token operator">&lt;</span>表名<span class="token operator">&gt;</span></span>
<span class="line"><span class="token keyword">ADD</span> </span>
<span class="line">    <span class="token operator">&lt;</span>字段名<span class="token operator">&gt;</span> <span class="token operator">&lt;</span>数据类型<span class="token operator">&gt;</span> <span class="token punctuation">[</span><span class="token operator">&lt;</span>约束<span class="token operator">&gt;</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">]</span> <span class="token punctuation">[</span><span class="token keyword">COMMENT</span> <span class="token operator">&lt;</span>注释<span class="token operator">&gt;</span><span class="token punctuation">]</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>删除-表字段</h3>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 删除字段</span></span>
<span class="line"><span class="token keyword">ALTER</span></span>
<span class="line"><span class="token keyword">TABLE</span> <span class="token operator">&lt;</span>表名<span class="token operator">&gt;</span></span>
<span class="line"><span class="token keyword">DROP</span> </span>
<span class="line">    <span class="token operator">&lt;</span>字段名<span class="token operator">&gt;</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>修改-表字段</h3>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 修改字段的数据类型</span></span>
<span class="line"><span class="token keyword">ALTER</span></span>
<span class="line"><span class="token keyword">TABLE</span> <span class="token operator">&lt;</span>表名<span class="token operator">&gt;</span></span>
<span class="line"><span class="token keyword">MODIFY</span> </span>
<span class="line">    <span class="token operator">&lt;</span>字段名<span class="token operator">&gt;</span> <span class="token operator">&lt;</span>新数据类型<span class="token operator">&gt;</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">-- 修改字段的名称和数据类型</span></span>
<span class="line"><span class="token keyword">ALTER</span></span>
<span class="line"><span class="token keyword">TABLE</span> <span class="token operator">&lt;</span>表名<span class="token operator">&gt;</span></span>
<span class="line">CHANGE </span>
<span class="line">    <span class="token operator">&lt;</span>旧字段名<span class="token operator">&gt;</span> <span class="token operator">&lt;</span>新字段名<span class="token operator">&gt;</span> <span class="token operator">&lt;</span>新数据类型<span class="token operator">&gt;</span> <span class="token punctuation">[</span><span class="token operator">&lt;</span>约束<span class="token operator">&gt;</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">]</span> <span class="token punctuation">[</span><span class="token keyword">COMMENT</span> 注释<span class="token punctuation">]</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>查询-表结构</h3>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 显示表中字段的相关参数</span></span>
<span class="line"><span class="token keyword">DESC</span> <span class="token operator">&lt;</span>表名<span class="token operator">&gt;</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">-- 显示指定表的建表语句（获取可重复创建该表的命令语句）</span></span>
<span class="line"><span class="token keyword">SHOW</span></span>
<span class="line"><span class="token keyword">CREATE</span></span>
<span class="line"><span class="token keyword">TABLE</span> <span class="token operator">&lt;</span>表名<span class="token operator">&gt;</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>案例</h3>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 创建数据库</span></span>
<span class="line"><span class="token keyword">CREATE</span> <span class="token keyword">DATABASE</span> test<span class="token punctuation">;</span></span>
<span class="line"><span class="token comment">-- 切换到该数据库</span></span>
<span class="line"><span class="token keyword">USE</span> test<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">-- 创建"用户"表</span></span>
<span class="line"><span class="token keyword">CREATE</span> <span class="token keyword">TABLE</span> <span class="token keyword">user</span> <span class="token punctuation">(</span></span>
<span class="line">    id <span class="token keyword">INT</span> <span class="token keyword">PRIMARY</span> <span class="token keyword">KEY</span> <span class="token keyword">AUTO_INCREMENT</span> <span class="token keyword">COMMENT</span> <span class="token string">'ID'</span><span class="token punctuation">,</span>                       <span class="token comment">-- 自动增长</span></span>
<span class="line">    account <span class="token keyword">VARCHAR</span><span class="token punctuation">(</span><span class="token number">20</span><span class="token punctuation">)</span> <span class="token operator">NOT</span> <span class="token boolean">NULL</span> <span class="token keyword">COMMENT</span> <span class="token string">'账号'</span><span class="token punctuation">,</span></span>
<span class="line">    password <span class="token keyword">VARCHAR</span><span class="token punctuation">(</span><span class="token number">20</span><span class="token punctuation">)</span> <span class="token operator">NOT</span> <span class="token boolean">NULL</span> <span class="token keyword">COMMENT</span> <span class="token string">'密码'</span><span class="token punctuation">,</span></span>
<span class="line">    name <span class="token keyword">VARCHAR</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">)</span> <span class="token operator">NOT</span> <span class="token boolean">NULL</span> <span class="token keyword">COMMENT</span> <span class="token string">'昵称'</span><span class="token punctuation">,</span></span>
<span class="line">    phone <span class="token keyword">CHAR</span><span class="token punctuation">(</span><span class="token number">11</span><span class="token punctuation">)</span> <span class="token operator">NOT</span> <span class="token boolean">NULL</span> <span class="token keyword">COMMENT</span> <span class="token string">'电话'</span><span class="token punctuation">,</span></span>
<span class="line">    balance <span class="token keyword">DECIMAL</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">)</span> <span class="token keyword">DEFAULT</span> <span class="token number">0.00</span> <span class="token keyword">COMMENT</span> <span class="token string">'余额'</span><span class="token punctuation">,</span>                   <span class="token comment">-- 默认0.00</span></span>
<span class="line">    avatar_path <span class="token keyword">VARCHAR</span><span class="token punctuation">(</span><span class="token number">255</span><span class="token punctuation">)</span> <span class="token keyword">COMMENT</span> <span class="token string">'头像路径'</span><span class="token punctuation">,</span>                          <span class="token comment">-- 存储头像图片的路径或URL</span></span>
<span class="line">    register_time <span class="token keyword">TIMESTAMP</span> <span class="token keyword">DEFAULT</span> <span class="token keyword">CURRENT_TIMESTAMP</span> <span class="token keyword">COMMENT</span> <span class="token string">'注册时间'</span><span class="token punctuation">,</span> <span class="token comment">-- 存储注册时间</span></span>
<span class="line">    state <span class="token keyword">TINYINT</span> <span class="token keyword">DEFAULT</span> <span class="token number">1</span> <span class="token keyword">COMMENT</span> <span class="token string">'用户状态'</span>                           <span class="token comment">-- 表示用户的状态，0（禁用）、1（可用）</span></span>
<span class="line"><span class="token punctuation">)</span> <span class="token keyword">COMMENT</span> <span class="token string">'用户信息'</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">-- 创建“收货地址”表</span></span>
<span class="line"><span class="token keyword">CREATE</span> <span class="token keyword">TABLE</span> address <span class="token punctuation">(</span></span>
<span class="line">    id <span class="token keyword">INT</span> <span class="token keyword">PRIMARY</span> <span class="token keyword">KEY</span> <span class="token keyword">AUTO_INCREMENT</span> <span class="token keyword">COMMENT</span> <span class="token string">'ID'</span><span class="token punctuation">,</span></span>
<span class="line">    user_id <span class="token keyword">INT</span> <span class="token operator">NOT</span> <span class="token boolean">NULL</span> <span class="token keyword">COMMENT</span> <span class="token string">'用户ID'</span><span class="token punctuation">,</span>              <span class="token comment">-- 外键</span></span>
<span class="line">    address <span class="token keyword">VARCHAR</span><span class="token punctuation">(</span><span class="token number">255</span><span class="token punctuation">)</span> <span class="token operator">NOT</span> <span class="token boolean">NULL</span> <span class="token keyword">COMMENT</span> <span class="token string">'收货地址'</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token keyword">FOREIGN</span> <span class="token keyword">KEY</span><span class="token punctuation">(</span>user_id<span class="token punctuation">)</span> <span class="token keyword">REFERENCES</span> <span class="token keyword">user</span><span class="token punctuation">(</span>id<span class="token punctuation">)</span>           <span class="token comment">-- 关联外表 此处进行关联另一张表</span></span>
<span class="line"><span class="token punctuation">)</span> <span class="token keyword">COMMENT</span> <span class="token string">'收货地址'</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>数据 - 操作语言（DML）</h2>
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<ul>
<li>用于对表的<code>数据</code>进行增加、删除、修改的操作操作命令。</li>
<li>提示：此处没有查询命令。</li>
<li>需要根据已经定义创建完的数据库、表、表中的字段后，再进行操作的。</li>
</ul>
</div>
<h3>添加数据</h3>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>插入数据时，字段顺序需要一一对应。</li>
<li>字符串、日期类型、数据中间有空格，都需要将数据包含在引号中。</li>
<li>插入的数据大小，应该在字段的规定范围中。</li>
</ul>
</div>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- `INTO`：指定某个表中的字段</span></span>
<span class="line"><span class="token comment">-- `VALUES`：指定添加的新值</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">-- 批量添加数据，字段与新值的顺序需要一一对应</span></span>
<span class="line"><span class="token keyword">INSERT</span></span>
<span class="line"><span class="token keyword">INTO</span> <span class="token operator">&lt;</span>表名<span class="token operator">&gt;</span></span>
<span class="line">    <span class="token punctuation">(</span><span class="token operator">&lt;</span>字段名<span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">)</span> </span>
<span class="line"><span class="token keyword">VALUES</span></span>
<span class="line">	<span class="token punctuation">(</span><span class="token operator">&lt;</span>值<span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">)</span><span class="token punctuation">,</span></span>
<span class="line">	<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">-- 给全部字段添加数据（在不指定某个表中需要修改的具体字段时，表示全部字段添加数据）</span></span>
<span class="line"><span class="token keyword">INSERT</span></span>
<span class="line"><span class="token keyword">INTO</span> <span class="token operator">&lt;</span>表名<span class="token operator">&gt;</span></span>
<span class="line"><span class="token keyword">VALUES</span></span>
<span class="line">    <span class="token punctuation">(</span><span class="token operator">&lt;</span>值<span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">)</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>删除数据</h3>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- `WHERE &lt;条件&gt;`：可选参数，若没有指定条件将删除该表中的所有数据</span></span>
<span class="line"><span class="token comment">-- `DELETE`：不能删除表中的字段，仅负责删除数据</span></span>
<span class="line"><span class="token keyword">DELETE</span></span>
<span class="line"><span class="token keyword">FROM</span> <span class="token operator">&lt;</span>表名<span class="token operator">&gt;</span></span>
<span class="line"><span class="token keyword">WHERE</span></span>
<span class="line">	<span class="token operator">&lt;</span>条件<span class="token operator">&gt;</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">-- 清空表</span></span>
<span class="line"><span class="token keyword">TRUNCATE</span> <span class="token operator">&lt;</span>表名<span class="token operator">&gt;</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>修改数据</h3>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- `WHERE &lt;条件&gt;`：条件，可选参数</span></span>
<span class="line"><span class="token keyword">UPDATE</span> <span class="token operator">&lt;</span>表名<span class="token operator">&gt;</span> </span>
<span class="line"><span class="token keyword">SET</span> </span>
<span class="line">	<span class="token operator">&lt;</span>字段<span class="token operator">&gt;=</span><span class="token operator">&lt;</span>值<span class="token operator">&gt;</span><span class="token punctuation">,</span></span>
<span class="line">	<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"><span class="token keyword">WHERE</span> </span>
<span class="line">	<span class="token operator">&lt;</span>条件<span class="token operator">&gt;</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>数据 - 查询语言（DQL）</h2>
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<ul>
<li>专注于查询表中的数据。</li>
<li>查询数据库中的数据，与数学中的集合类似。</li>
<li>提示：查询语法有严格的顺序要求。</li>
</ul>
</div>
<p>查询语法完整编写顺序如下：</p>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 第一、基本查询语法，必须</span></span>
<span class="line"><span class="token keyword">SELECT</span></span>
<span class="line">	<span class="token operator">&lt;</span>字段名<span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"><span class="token keyword">FROM</span></span>
<span class="line">	<span class="token operator">&lt;</span>表名<span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">-- 第二、条件查询语法，可选</span></span>
<span class="line"><span class="token keyword">WHERE</span></span>
<span class="line">	<span class="token operator">&lt;</span>条件<span class="token operator">&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">-- 第三、分组查询语法，可选</span></span>
<span class="line"><span class="token keyword">GROUP</span> <span class="token keyword">BY</span></span>
<span class="line">	<span class="token operator">&lt;</span>分组字段<span class="token operator">&gt;</span></span>
<span class="line"><span class="token keyword">HAVING</span></span>
<span class="line">	<span class="token operator">&lt;</span>分组后字段条件<span class="token operator">&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">-- 第四、排序查询语法，可选</span></span>
<span class="line"><span class="token keyword">ORDER</span> <span class="token keyword">BY</span></span>
<span class="line">	<span class="token operator">&lt;</span>字段名<span class="token operator">&gt;</span> <span class="token operator">&lt;</span>排序方法<span class="token operator">&gt;</span><span class="token punctuation">,</span></span>
<span class="line">	<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">-- 第五、分页查询语法，可选</span></span>
<span class="line"><span class="token keyword">LIMIT</span></span>
<span class="line">	<span class="token operator">&lt;</span>起始索引数<span class="token operator">&gt;</span>，<span class="token operator">&lt;</span>查询记录数<span class="token operator">&gt;</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>可以配合SQL聚合函数进行更多查询方式。</p>
<p>SQL聚合函数相关文章：<a href="/software/Language-SQL-%E5%87%BD%E6%95%B0.html" target="_blank">Language-SQL-函数</a></p>
</div>
<h3>基本查询</h3>
<ul>
<li>关键字：<code>SELECT</code>、<code>FROM</code></li>
</ul>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 查询所有的数据</span></span>
<span class="line"><span class="token keyword">SELECT</span></span>
<span class="line">    <span class="token operator">*</span></span>
<span class="line"><span class="token keyword">FROM</span></span>
<span class="line">	<span class="token operator">&lt;</span>表名<span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">-- 查询表中的所有记录中指定字段数据</span></span>
<span class="line"><span class="token keyword">SELECT</span></span>
<span class="line">	<span class="token operator">&lt;</span>字段名<span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"><span class="token keyword">FROM</span></span>
<span class="line">	<span class="token operator">&lt;</span>表名<span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">-- 为字段在显示时取别名显示，`AS`关键字可以省略不写</span></span>
<span class="line"><span class="token keyword">SELECT</span></span>
<span class="line">	<span class="token operator">&lt;</span>字段名<span class="token operator">&gt;</span> <span class="token keyword">AS</span> <span class="token string">"&lt;别名&gt;"</span>，</span>
<span class="line">	<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"><span class="token keyword">FROM</span> <span class="token operator">&lt;</span>表名<span class="token operator">&gt;</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>基本查询-去重</h3>
<ul>
<li>在某个字段的前面添加<code>DISTINCT</code>关键字，执行去重操作。</li>
</ul>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 去除重复记录</span></span>
<span class="line"><span class="token keyword">SELECT</span></span>
<span class="line"><span class="token keyword">DISTINCT</span></span>
<span class="line">	<span class="token operator">&lt;</span>字段名<span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"><span class="token keyword">FROM</span></span>
<span class="line">	<span class="token operator">&lt;</span>表名<span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>条件查询</h3>
<ul>
<li>关键字：<code>WHERE</code></li>
<li><code>WHERE</code>的条件设定方法，可以查看<strong>运算符</strong>标题一栏。</li>
</ul>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 查询指定过滤条件后的记录</span></span>
<span class="line"><span class="token keyword">SELECT</span></span>
<span class="line">	<span class="token operator">&lt;</span>字段名<span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"><span class="token keyword">FROM</span></span>
<span class="line">	<span class="token operator">&lt;</span>表名<span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"><span class="token keyword">WHERE</span></span>
<span class="line">	<span class="token operator">&lt;</span>条件<span class="token operator">&gt;</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>分组查询</h3>
<ul>
<li>关键字：<code>GROUP BY</code>、<code>HAVING</code></li>
</ul>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token keyword">SELECT</span></span>
<span class="line">	<span class="token operator">&lt;</span>字段名<span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"><span class="token keyword">FROM</span></span>
<span class="line">	<span class="token operator">&lt;</span>表名<span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"><span class="token keyword">GROUP</span> <span class="token keyword">BY</span></span>
<span class="line">	<span class="token operator">&lt;</span>字段名<span class="token operator">&gt;</span> </span>
<span class="line"><span class="token keyword">HAVING</span></span>
<span class="line">	<span class="token operator">&lt;</span>分组后条件<span class="token operator">&gt;</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>排序查询</h3>
<ul>
<li>关键字：<code>ORDER BY</code></li>
</ul>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- `ORDER BY &lt;排序方法&gt;`支持参数：`ASC`升序（默认），`DESC`降序。</span></span>
<span class="line"><span class="token keyword">SELECT</span></span>
<span class="line">	<span class="token operator">&lt;</span>字段名<span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"><span class="token keyword">FROM</span></span>
<span class="line">	<span class="token operator">&lt;</span>表名<span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"><span class="token keyword">ORDER</span> <span class="token keyword">BY</span></span>
<span class="line">	<span class="token operator">&lt;</span>字段名<span class="token operator">&gt;</span> <span class="token operator">&lt;</span>排序方法<span class="token operator">&gt;</span><span class="token punctuation">,</span></span>
<span class="line">	<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>分页查询</h3>
<ul>
<li>关键字：<code>LIMIT</code></li>
<li><code>LIMIT</code>的起始索引计算公式：<code>起始索引数 = (查询页码 - 1) * 每页显示记录数</code></li>
<li>提示：查询页码从1开始计算，起始索引数是从0开计算。</li>
</ul>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- `LIMIT`：起始索引是从0开始</span></span>
<span class="line"><span class="token keyword">SELECT</span></span>
<span class="line">	<span class="token operator">&lt;</span>字段名<span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"><span class="token keyword">FROM</span></span>
<span class="line">	<span class="token operator">&lt;</span>表名<span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"><span class="token keyword">LIMIT</span></span>
<span class="line">	<span class="token operator">&lt;</span>起始索引数<span class="token operator">&gt;</span>，<span class="token operator">&lt;</span>查询记录数<span class="token operator">&gt;</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>多表查询-交叉查询</h3>
<ul>
<li>笛卡尔积（Cartesian Product）：列出两个（或更多）表中所有可能的组合。</li>
<li>如果你执行了一个没有连接条件的查询，就会得到一个笛卡尔积。</li>
</ul>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 没有筛选条件</span></span>
<span class="line"><span class="token keyword">SELECT</span></span>
<span class="line">    <span class="token operator">&lt;</span>字段名<span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"><span class="token keyword">FROM</span></span>
<span class="line">	<span class="token operator">&lt;</span>表<span class="token number">1</span><span class="token operator">&gt;</span><span class="token punctuation">,</span><span class="token operator">&lt;</span>表<span class="token number">2</span><span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>多表查询-内连接</h3>
<ul>
<li>相当于查询A、B交集部分的数据。（会剔除不符合条件的数据）</li>
</ul>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 隐式内连接</span></span>
<span class="line"><span class="token keyword">SELECT</span></span>
<span class="line">    <span class="token operator">&lt;</span>字段名<span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"><span class="token keyword">FROM</span></span>
<span class="line">	<span class="token operator">&lt;</span>表<span class="token number">1</span><span class="token operator">&gt;</span><span class="token punctuation">,</span><span class="token operator">&lt;</span>表<span class="token number">2</span><span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"><span class="token keyword">WHERE</span></span>
<span class="line">	<span class="token operator">&lt;</span>条件<span class="token operator">&gt;</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">-- 显示内连接</span></span>
<span class="line"><span class="token keyword">SELECT</span></span>
<span class="line">    <span class="token operator">&lt;</span>字段名<span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"><span class="token keyword">FROM</span> <span class="token operator">&lt;</span>表<span class="token number">1</span><span class="token operator">&gt;</span> </span>
<span class="line">    <span class="token punctuation">[</span><span class="token keyword">INNER</span><span class="token punctuation">]</span> <span class="token keyword">JOIN</span> <span class="token operator">&lt;</span>表<span class="token number">2</span><span class="token operator">&gt;</span> <span class="token keyword">ON</span> <span class="token operator">&lt;</span>连接条件<span class="token operator">&gt;</span></span>
<span class="line">    <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>案例</p>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 隐式内连接</span></span>
<span class="line"><span class="token keyword">SELECT</span></span>
<span class="line">    agents<span class="token punctuation">.</span>name<span class="token punctuation">,</span> agents<span class="token punctuation">.</span>region</span>
<span class="line"><span class="token keyword">FROM</span></span>
<span class="line">    agents<span class="token punctuation">,</span> sales</span>
<span class="line"><span class="token keyword">WHERE</span></span>
<span class="line">    agents<span class="token punctuation">.</span>agent_id <span class="token operator">=</span> sales<span class="token punctuation">.</span>agent_id</span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">-- 显示内连接</span></span>
<span class="line"><span class="token keyword">SELECT</span></span>
<span class="line">    agents<span class="token punctuation">.</span>name<span class="token punctuation">,</span> agents<span class="token punctuation">.</span>region</span>
<span class="line"><span class="token keyword">FROM</span> agents</span>
<span class="line">    <span class="token keyword">INNER</span> <span class="token keyword">JOIN</span> sales <span class="token keyword">ON</span> agents<span class="token punctuation">.</span>agent_id <span class="token operator">=</span> sales<span class="token punctuation">.</span>agent_id</span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>多表查询-外连接</h3>
<p>（会将查询没有值的数据也算进去）</p>
<ul>
<li>左外连接：查询左表所有数据（包括两张表交集部分数据）</li>
<li>右外连接：查询右表所有数据（包括两张表交集部分数据）</li>
<li>满外连接：并集。</li>
</ul>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 左外连接</span></span>
<span class="line"><span class="token keyword">SELECT</span></span>
<span class="line">    <span class="token operator">&lt;</span>字段名<span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"><span class="token keyword">FROM</span> <span class="token operator">&lt;</span>表<span class="token number">1</span><span class="token operator">&gt;</span></span>
<span class="line">    <span class="token keyword">LEFT</span> <span class="token punctuation">[</span><span class="token keyword">OUTER</span><span class="token punctuation">]</span> <span class="token keyword">JOIN</span> <span class="token operator">&lt;</span>表<span class="token number">2</span><span class="token operator">&gt;</span> <span class="token keyword">ON</span> <span class="token operator">&lt;</span>连接条件<span class="token operator">&gt;</span></span>
<span class="line">    <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">-- 右外连接</span></span>
<span class="line"><span class="token keyword">SELECT</span></span>
<span class="line">    <span class="token operator">&lt;</span>字段名<span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"><span class="token keyword">FROM</span> <span class="token operator">&lt;</span>表<span class="token number">1</span><span class="token operator">&gt;</span></span>
<span class="line">    <span class="token keyword">RIGHT</span> <span class="token punctuation">[</span><span class="token keyword">OUTER</span><span class="token punctuation">]</span> <span class="token keyword">JOIN</span> <span class="token operator">&lt;</span>表<span class="token number">2</span><span class="token operator">&gt;</span> <span class="token keyword">ON</span> <span class="token operator">&lt;</span>连接条件<span class="token operator">&gt;</span></span>
<span class="line">    <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">-- 满外连接</span></span>
<span class="line"><span class="token keyword">SELECT</span></span>
<span class="line">    <span class="token operator">&lt;</span>字段名<span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"><span class="token keyword">FROM</span> <span class="token operator">&lt;</span>表<span class="token number">1</span><span class="token operator">&gt;</span></span>
<span class="line">    <span class="token keyword">FULL</span> <span class="token punctuation">[</span><span class="token keyword">OUTER</span><span class="token punctuation">]</span> <span class="token keyword">JOIN</span> <span class="token operator">&lt;</span>表<span class="token number">2</span><span class="token operator">&gt;</span> <span class="token keyword">ON</span> <span class="token operator">&lt;</span>连接条件<span class="token operator">&gt;</span></span>
<span class="line">    <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>多表查询-子查询（嵌套查询）</h3>
<ul>
<li>子查询：在一个SQL语句的基础上查询另一个表格的SQL语句。</li>
<li>将条件的判断使用另一个查询语句的结果。</li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>查询关键字</p>
<ul>
<li><code>ALL</code>：指定条件必须满足子查询返回的所有结果。</li>
<li><code>ANY</code>：比较操作。只要有一个满足即可。</li>
<li><code>SOME</code>：比较操作。只要有一个满足即可。</li>
<li><code>IN</code>：指定一个字段值是否在子查询返回的结果集中。</li>
<li><code>EXISTS</code>：检查子查询是否有返回结果，返回一个布尔值。</li>
</ul>
</div>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 子查询</span></span>
<span class="line"><span class="token keyword">SELECT</span></span>
<span class="line">	<span class="token operator">&lt;</span>字段名<span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"><span class="token keyword">FROM</span></span>
<span class="line">	<span class="token operator">&lt;</span>表<span class="token operator">&gt;</span></span>
<span class="line"><span class="token keyword">WHERE</span></span>
<span class="line">	<span class="token punctuation">[</span><span class="token operator">&lt;</span>字段名<span class="token operator">&gt;</span><span class="token punctuation">]</span> <span class="token punctuation">[</span><span class="token operator">&lt;</span>判断运算符<span class="token operator">&gt;</span><span class="token punctuation">]</span> <span class="token punctuation">[</span><span class="token operator">&lt;</span>查询关键字<span class="token operator">&gt;</span><span class="token punctuation">]</span> <span class="token punctuation">(</span><span class="token operator">&lt;</span>子查询语句<span class="token operator">&gt;</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>多表查询-自关联</h3>
<ul>
<li>一张表中的 “字段的数据” 关联的是当前表中的 “另一个字段中的数据”。</li>
</ul>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 查询同一张表中的两个字段的数据是否相同</span></span>
<span class="line"><span class="token keyword">SELECT</span></span>
<span class="line">    <span class="token operator">&lt;</span>字段名<span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"><span class="token keyword">FROM</span></span>
<span class="line">    <span class="token operator">&lt;</span>表<span class="token number">1</span><span class="token operator">&gt;</span> <span class="token operator">&lt;</span>别名<span class="token number">1</span><span class="token operator">&gt;</span></span>
<span class="line"><span class="token punctuation">[</span><span class="token keyword">INNER</span><span class="token punctuation">]</span> <span class="token keyword">JOIN</span></span>
<span class="line">    <span class="token operator">&lt;</span>表<span class="token number">2</span><span class="token operator">&gt;</span> <span class="token operator">&lt;</span>别名<span class="token number">2</span><span class="token operator">&gt;</span></span>
<span class="line"><span class="token keyword">ON</span></span>
<span class="line"><span class="token operator">&lt;</span>别名<span class="token number">1</span><span class="token operator">&gt;</span><span class="token punctuation">.</span><span class="token operator">&lt;</span>字段名<span class="token operator">&gt;=</span><span class="token operator">&lt;</span>别名<span class="token number">2</span><span class="token operator">&gt;</span><span class="token punctuation">.</span><span class="token operator">&lt;</span>字段名<span class="token operator">&gt;</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>用户 - 控制语言（DCL）</h2>
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<ul>
<li>用来管理数据库用户、控制数据库的访问权限。</li>
</ul>
</div>
<h3>用户管理-创建用户</h3>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 若将"用户名@主机名"的主机名改为`%`，则表示任意主机都可访问。</span></span>
<span class="line"><span class="token keyword">CREATE</span></span>
<span class="line"><span class="token keyword">USER</span> </span>
<span class="line">	<span class="token string">"用户名"</span><span class="token variable">@"主机名"</span> </span>
<span class="line">IDENTIFIED <span class="token keyword">BY</span> </span>
<span class="line">	<span class="token string">"密码"</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>用户管理-删除用户</h3>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token keyword">DROP</span></span>
<span class="line"><span class="token keyword">USER</span></span>
<span class="line">	<span class="token string">"用户名"</span><span class="token variable">@"主机名"</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>用户管理-修改用户</h3>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 修改用户密码</span></span>
<span class="line"><span class="token comment">-- `mysql_native_password`：是MySQL的加密方式</span></span>
<span class="line"><span class="token keyword">ALTER</span></span>
<span class="line"><span class="token keyword">USER</span></span>
<span class="line">	<span class="token string">"用户名"</span><span class="token variable">@"主机名"</span></span>
<span class="line">IDENTIFIED <span class="token keyword">WITH</span></span>
<span class="line">	mysql_native_password</span>
<span class="line"><span class="token keyword">BY</span></span>
<span class="line">	<span class="token string">"新密码"</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>用户管理-查询用户表</h3>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 提示：MySQL的用户信息都存放在`root用户中的mysql数据库下的user表中`。</span></span>
<span class="line"><span class="token keyword">USE</span> mysql</span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">SELECT</span> <span class="token operator">*</span> <span class="token keyword">FROM</span> <span class="token keyword">user</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>权限控制-授予权限</h3>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token keyword">GRANT</span></span>
<span class="line">	<span class="token operator">&lt;</span>权限<span class="token operator">&gt;</span><span class="token punctuation">,</span></span>
<span class="line">	<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"><span class="token keyword">ON</span></span>
<span class="line">	<span class="token operator">&lt;</span>数据库名<span class="token punctuation">.</span>表名<span class="token operator">&gt;</span><span class="token punctuation">,</span></span>
<span class="line">	<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"><span class="token keyword">TO</span></span>
<span class="line">	<span class="token string">"用户名"</span><span class="token variable">@"主机名"</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>权限控制-撤销权限</h3>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token keyword">REVOKE</span></span>
<span class="line">	<span class="token operator">&lt;</span>权限<span class="token operator">&gt;</span><span class="token punctuation">,</span></span>
<span class="line">	<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"><span class="token keyword">ON</span></span>
<span class="line">	<span class="token operator">&lt;</span>数据库名<span class="token punctuation">.</span>表名<span class="token operator">&gt;</span></span>
<span class="line"><span class="token keyword">FROM</span></span>
<span class="line">	<span class="token string">"用户名"</span><span class="token variable">@"主机名"</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>权限控制-查询权限</h3>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token keyword">SHOW</span></span>
<span class="line">GRANTS <span class="token keyword">FOR</span></span>
<span class="line">	<span class="token string">"用户名"</span><span class="token variable">@"主机名"</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>权限控制-刷新权限表</h3>
<ul>
<li>用于刷新权限表，重新加载MySQL服务器上的权限数据。</li>
<li>以确保MySQL服务器上的权限更改立即生效。</li>
</ul>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line">FLUSH <span class="token keyword">PRIVILEGES</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>事务 - 控制语言（TCT）</h2>
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<ul>
<li>事务是一组操作的集合，是一个不可分割的工作单位。</li>
<li>事务是一个抽象的<strong>对象</strong>在<strong>监听</strong>对数据库做的任何操作。</li>
<li>事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求，即这些操作要么同时成功，要么同时失败。</li>
</ul>
<p></p>
</div>
<h3>开启事务</h3>
<ul>
<li>开启一个事务（对象）,建立一个新存档。为操作的表上加锁，防止其他用户修改该表。</li>
<li><code>START TRANSACTION;</code></li>
</ul>
<h3>保存点</h3>
<ul>
<li>用于保存一个中间存档。可以有多个中间存档。</li>
<li><code>SAVEPOINT &lt;保存点名称&gt;;</code></li>
</ul>
<h3>回滚保存点</h3>
<ul>
<li>用于回退到上一个中间存档。</li>
<li><code>ROLLBACK TO &lt;保存点名称&gt;;</code></li>
</ul>
<h3>提交事务</h3>
<ul>
<li>保存数据、删除中间存档/历史记录。释放锁、关闭事务。</li>
<li><code>COMMIT;</code></li>
</ul>
<h3>回滚事务</h3>
<ul>
<li>撤回全部操作、回到原始存档。释放锁、关闭事务。</li>
<li><code>ROLLBACK;</code></li>
</ul>
<h3>隔离级别</h3>
<table>
<thead>
<tr>
<th style="text-align:left">隔离级别</th>
<th style="text-align:center">脏读</th>
<th style="text-align:center">不可重复读</th>
<th style="text-align:center">幻读</th>
<th style="text-align:center">加锁读</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>read uncommitted</code>（未提交读）</td>
<td style="text-align:center">Y</td>
<td style="text-align:center">Y</td>
<td style="text-align:center">Y</td>
<td style="text-align:center">不加锁</td>
</tr>
<tr>
<td style="text-align:left"><code>read committed</code>（提交读）</td>
<td style="text-align:center"></td>
<td style="text-align:center">Y</td>
<td style="text-align:center">Y</td>
<td style="text-align:center">不加锁</td>
</tr>
<tr>
<td style="text-align:left"><code>repeatable read</code>（重复读）</td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center">不加锁</td>
</tr>
<tr>
<td style="text-align:left"><code>serialize</code>（串行化）</td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center">加锁</td>
</tr>
</tbody>
</table>
<p>查询</p>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 查看当前“会话”的隔离级别</span></span>
<span class="line"><span class="token keyword">SELECT</span> </span>
<span class="line">	@<span class="token variable">@transaction_isolation</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">-- 查看当前“系统”的隔离级别</span></span>
<span class="line"><span class="token keyword">SELECT</span> </span>
<span class="line">	@<span class="token variable">@global.transaction_isolation</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>修改</p>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 设置当前“会话”的隔离级别</span></span>
<span class="line"><span class="token keyword">SET</span> <span class="token keyword">SESSION</span> <span class="token keyword">TRANSACTION</span> <span class="token keyword">ISOLATION</span> <span class="token keyword">LEVEL</span></span>
<span class="line">	<span class="token operator">&lt;</span>隔离级别<span class="token operator">&gt;</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">-- 设置当前“系统”的隔离级别</span></span>
<span class="line"><span class="token keyword">SET</span> <span class="token keyword">GLOBAL</span> <span class="token keyword">TRANSACTION</span> <span class="token keyword">ISOLATION</span> <span class="token keyword">LEVEL</span></span>
<span class="line">	<span class="token operator">&lt;</span>隔离级别<span class="token operator">&gt;</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>索引</h2>
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<ul>
<li>索引（index）是一种数据结构。</li>
<li>优点：用于帮助数据库提高查询数据的效率，降低数据库的IO成本。</li>
<li>缺点：索引会占用磁盘空间，对数据进行增加、删除、修改时需要同时维护索引，因此会降低该操作的效率。</li>
</ul>
</div>
<h3>创建索引</h3>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 创建普通索引</span></span>
<span class="line"><span class="token keyword">CREATE</span> <span class="token keyword">INDEX</span></span>
<span class="line">	<span class="token operator">&lt;</span>索引名<span class="token operator">&gt;</span></span>
<span class="line"><span class="token keyword">ON</span></span>
<span class="line">	<span class="token operator">&lt;</span>表名<span class="token operator">&gt;</span><span class="token punctuation">(</span><span class="token operator">&lt;</span>字段名<span class="token operator">&gt;</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">-- 创建唯一索引，确保索引列中的值是唯一的，`UNIQUE`代表唯一的约束。</span></span>
<span class="line"><span class="token keyword">CREATE</span> <span class="token keyword">UNIQUE</span> <span class="token keyword">INDEX</span></span>
<span class="line">	<span class="token operator">&lt;</span>索引名<span class="token operator">&gt;</span></span>
<span class="line"><span class="token keyword">ON</span></span>
<span class="line">	<span class="token operator">&lt;</span>表名<span class="token operator">&gt;</span><span class="token punctuation">(</span><span class="token operator">&lt;</span>字段名<span class="token operator">&gt;</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">-- 创建复合索引，在多个列上创建一个索引。</span></span>
<span class="line"><span class="token keyword">CREATE</span> <span class="token keyword">UNIQUE</span> <span class="token keyword">INDEX</span></span>
<span class="line">	<span class="token operator">&lt;</span>索引名<span class="token operator">&gt;</span></span>
<span class="line"><span class="token keyword">ON</span></span>
<span class="line">	<span class="token operator">&lt;</span>表名<span class="token operator">&gt;</span><span class="token punctuation">(</span><span class="token operator">&lt;</span>字段名<span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>查看索引</h3>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 查看表上所有索引的详细信息。</span></span>
<span class="line"><span class="token keyword">SHOW</span> <span class="token keyword">INDEX</span> <span class="token keyword">FROM</span></span>
<span class="line">	<span class="token operator">&lt;</span>表名<span class="token operator">&gt;</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>删除索引</h3>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token keyword">DROP</span> <span class="token keyword">INDEX</span></span>
<span class="line">	<span class="token operator">&lt;</span>索引名<span class="token operator">&gt;</span></span>
<span class="line"><span class="token keyword">ON</span></span>
<span class="line">	<span class="token operator">&lt;</span>表名<span class="token operator">&gt;</span></span>
<span class="line"><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Language - SQL</title>
      <link>https://blog.magictable.ha.cn/software/Language-SQL.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-SQL.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - SQL</source>
      <description>文章摘要： 结构化查询语言（Structured Query Language），简称SQL。是一种用于特殊目的的编程语言，用于存取数据以及查询、更新和管理关系数据库系统。 提示 SQL中的注释不要使用#作为单行注释，这会导致数据迁移时导致错误。 本文章命令中的[ ]括起来的表示可选的内容。 在使用语法时需要时刻确定自己所在的“数据库”、再给出具体的“...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Sat, 20 Apr 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 结构化查询语言（Structured Query Language），简称SQL。是一种用于特殊目的的编程语言，用于存取数据以及查询、更新和管理关系数据库系统。</p>
<!-- more -->
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<ul>
<li>SQL中的注释<strong>不要</strong>使用<code>#</code>作为单行注释，这会导致数据迁移时导致错误。</li>
<li>本文章命令中的<code>[ ]</code>括起来的表示可选的内容。</li>
<li>在使用语法时需要时刻确定自己所在的“数据库”、再给出具体的“表”来查数据。</li>
<li>查询的语法比较常用，且比较复杂，查询与“添加、修改、删除”的语法分开记忆。</li>
<li>字符串、日期类型、数据中间有空格，都需要将数据包含在引号中。</li>
</ul>
</div>
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>结构化查询语言（Structured Query Language），简称SQL。</li>
<li>是一种用于特殊目的的编程语言，用于存取数据以及查询、更新和管理关系数据库系统。</li>
<li>SQL是所有关系型数据库的统一操作规范。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>数据查询</strong>：允许用户从数据库中检索数据。</li>
<li><strong>数据操作</strong>：可以插入、更新和删除数据库中的记录。</li>
<li><strong>数据定义</strong>：用于创建、修改和删除数据库中的表格和其他对象。</li>
<li><strong>数据控制</strong>：提供权限和访问控制，以保护数据库中的数据。</li>
<li><strong>事务管理</strong>：支持事务，确保数据库操作的原子性、一致性、隔离性和持久性（ACID属性）。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>安全性</strong>：编写SQL查询时要注意防止SQL注入攻击，确保数据安全。</li>
<li><strong>性能优化</strong>：复杂的查询可能会影响数据库性能，应优化SQL语句和数据库结构。</li>
<li><strong>数据完整性</strong>：在设计数据库时，应确保数据的完整性和一致性。</li>
<li><strong>标准遵从性</strong>：不同的数据库系统可能有不同的SQL方言，应了解所使用系统的特定语法和功能。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>数据管理</strong>：在企业和组织中管理大量数据。</li>
<li><strong>数据分析</strong>：进行数据分析和报告，支持决策制定。</li>
<li><strong>应用程序开发</strong>：为需要数据存储和检索的应用程序提供后端支持。</li>
<li><strong>网站开发</strong>：管理网站后端数据库，如用户信息、内容管理等。</li>
<li><strong>数据科学</strong>：在数据科学项目中，用于数据清洗、准备和探索性数据分析。</li>
<li><strong>商业智能</strong>：构建商业智能报告和仪表板，以监控业务关键指标。</li>
</ul>
<h2>基本概念</h2>
<ul>
<li><code>数据</code>写在数据库中的<code>表</code>中。</li>
<li><code>数据库</code>和<code>表</code>是<code>数据</code>的载体。</li>
</ul>
<h2>通用语法</h2>
<ul>
<li>可以单行或多行书写，以分号<code>;</code>表示一句SQL的结尾。</li>
<li>可以使用空格和缩进来增强语句的可读性。</li>
<li>不区分大小写，关键字建议使用大写。</li>
</ul>
<h2>注释格式</h2>
<ul>
<li>单行注释：<code>-- 注释内容</code></li>
<li>多行注释：<code>/* 注释内容 */</code></li>
</ul>
<h2>对象</h2>
<table>
<thead>
<tr>
<th style="text-align:center">数据库对象</th>
<th style="text-align:center">对应关键字</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">表</td>
<td style="text-align:center">table</td>
<td style="text-align:left">- 表是存储数据的逻辑单元。<br>- 以行和列的形式存在。<br>- 列是字段，行是记录。</td>
</tr>
<tr>
<td style="text-align:center">数据字典</td>
<td style="text-align:center"></td>
<td style="text-align:left">- 系统表，存放数据库相关的表。<br>- 内容通常由数据库系统维护。<br>- 程序员通常不该手动修改表和数据。</td>
</tr>
<tr>
<td style="text-align:center">约束</td>
<td style="text-align:center">constraint</td>
<td style="text-align:left">- 执行数据校验的规则。<br>- 用于保证数据完整性的规则。</td>
</tr>
<tr>
<td style="text-align:center">视图</td>
<td style="text-align:center">view</td>
<td style="text-align:left">- 一个或多个数据表的逻辑显示。<br>- 视图不存储数据。</td>
</tr>
<tr>
<td style="text-align:center">索引</td>
<td style="text-align:center">index</td>
<td style="text-align:left">- 用于提高查询性能。<br>- 类似书的目录。</td>
</tr>
<tr>
<td style="text-align:center">函数</td>
<td style="text-align:center">function</td>
<td style="text-align:left">- 用于完成一次特定的计算。<br>- 具有一个返回值。</td>
</tr>
<tr>
<td style="text-align:center">存储过程</td>
<td style="text-align:center">procedure</td>
<td style="text-align:left">- 用于完成一次完整的业务逻辑。<br>- 没有返回值。<br>- 但可以同传出参数将多个值传给调用环境。</td>
</tr>
<tr>
<td style="text-align:center">触发器</td>
<td style="text-align:center">trigger</td>
<td style="text-align:left">- 相当于一个事件监听器。<br>- 当数据库发生特定的事件后，触发器被触发完成相应的处理。</td>
</tr>
</tbody>
</table>
<h2>SQL语句和语法</h2>
<p>详细总结：<a href="/software/Language-SQL-%E8%AF%AD%E5%8F%A5%E8%AF%AD%E6%B3%95.html" target="_blank">Language-SQL-语句语法</a></p>
<h3>数据 - 定义语言（DDL）</h3>
<ul>
<li>数据定义语言</li>
<li>用于定义数据库对象（数据库、表、字段）。</li>
<li>主要针对<code>数据库</code>、<code>表</code>、<code>字段</code>进行增、删、改、查的操作命令。</li>
<li><code>字段</code>是表的每列数据的标识。</li>
<li>这些不是实际真正存储的数据信息，此处不操作实际存储的数据。</li>
</ul>
<h3>数据 - 操作语言（DML）</h3>
<ul>
<li>数据操作语言</li>
<li>用于对表的<code>数据</code>进行增加、删除、修改的操作操作命令。</li>
<li>提示：此处没有查询命令。</li>
<li>需要根据已经定义创建完的数据库、表、表中的字段后，再进行操作的。</li>
</ul>
<h3>数据 - 查询语言（DQL）</h3>
<ul>
<li>数据查询语言</li>
<li>用于查询数据库表中的数据</li>
</ul>
<h3>权限 - 控制语言（DCL）</h3>
<ul>
<li>用于管理数据库用户、控制数据库的访问权限。</li>
</ul>
<h3>事务 - 控制语言（TCT）</h3>
<ul>
<li>用于控制SQL执行的提交和回滚。</li>
<li><strong>原子性</strong>：事务是不可分割的最小单元，要么全部成功，要么全部失败。</li>
<li><strong>一致性</strong>：事务完成时，必须使所有的数据都保持一致状态。</li>
<li><strong>隔离性</strong>：数据库系统提供的隔离机制，保证事务在不受外部并发操作影响的独立环境下运行。</li>
<li><strong>持久性</strong>：事务一旦提交或回滚，它对数据库中的数据的改变就是永久的。</li>
</ul>
<p>事务产生的问题</p>
<ul>
<li><strong>脏读（dirty read）</strong>：当一个事务读取另一个事务尚未提交的修改时，产生脏读。</li>
<li><strong>不可重复读（nonrepeatable read）</strong>：同一个查询在同一个事务中多次进行，由于其他提交事务所做的修改或删除，每次返回不同的结果集，此时发生不可重复读。</li>
<li><strong>幻读（phantom read）</strong>：同一个查询在同一事务中多次进行，由于其他提交事务所做的插入或删除操作，每次返回不同的结果集，此时返回幻读。</li>
</ul>
<p>事务的隔离界别</p>
<ul>
<li><strong>Read Uncommitted（未提交读）</strong>：事务中的修改，即使没有提交，对其他事务也是可见的。</li>
<li><strong>Read Committed（提交读）</strong>：一个事务只能看见已经提交的事务所做的修改。</li>
<li><strong>Repeatable Read（重复读）</strong>：在同一事务中，查询同一个记录会返回相同的结果，即使在这个事务中其他地方已经修改过这个记录。</li>
<li><strong>Serialize（串行化）</strong>：所有事务依次逐个执行，这样每个事务都感觉不到其他事务的存在。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">隔离级别</th>
<th style="text-align:center">脏读</th>
<th style="text-align:center">不可重复读</th>
<th style="text-align:center">幻读</th>
<th style="text-align:center">加锁读</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>Read Uncommitted</code>（未提交读）</td>
<td style="text-align:center">Y</td>
<td style="text-align:center">Y</td>
<td style="text-align:center">Y</td>
<td style="text-align:center">不加锁</td>
</tr>
<tr>
<td style="text-align:left"><code>Read Committed</code>（提交读）</td>
<td style="text-align:center"></td>
<td style="text-align:center">Y</td>
<td style="text-align:center">Y</td>
<td style="text-align:center">不加锁</td>
</tr>
<tr>
<td style="text-align:left"><code>Repeatable Read</code>（重复读）</td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center">不加锁</td>
</tr>
<tr>
<td style="text-align:left"><code>Serialize</code>（串行化）</td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center">加锁</td>
</tr>
</tbody>
</table>
<h2>运算符</h2>
<p>详细总结：<a href="/software/Language-SQL-%E8%BF%90%E7%AE%97%E7%AC%A6.html" target="_blank">Language-SQL-运算符</a></p>
<h2>数据类型</h2>
<p>详细总结：<a href="/software/Language-SQL-%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B.html" target="_blank">Language-SQL-数据类型</a></p>
<h2>约束</h2>
<ul>
<li>约束作用于表中字段上的规则。</li>
<li>用于限制存储在表中的数据。</li>
<li>保证数据库中数据的正确性、有效性和完整性。</li>
</ul>
<p>详细总结：<a href="/software/Language-SQL-%E7%BA%A6%E6%9D%9F.html" target="_blank">Language-SQL-约束</a></p>
<h2>权限</h2>
<ul>
<li>权限管理是数据库管理系统（DBMS）中非常重要的一个方面，它确保了数据库的安全性、完整性和一致性。</li>
</ul>
<p>详细总结：<a href="/software/Language-SQL-%E6%9D%83%E9%99%90.html" target="_blank">Language-SQL-权限</a></p>
<h2>函数</h2>
<ul>
<li>提高代码重用性和隐藏实现细节。</li>
<li>函数即别人封装好的模板代码。</li>
</ul>
<p>详细总结：<a href="/software/Language-SQL-%E5%87%BD%E6%95%B0.html" target="_blank">Language-SQL-函数</a></p>
<h2>字符集</h2>
<ul>
<li></li>
</ul>
<h2>校验规则</h2>
<ul>
<li></li>
</ul>
<h2>索引</h2>
<ul>
<li>数据库索引是一种数据结构。</li>
<li>用于帮助数据库高效地执行查询操作。（类似于书籍的目录，快速定位到想要查找的信息）</li>
</ul>
<p>优点</p>
<ul>
<li>提高查询性能。</li>
<li>保证数据的唯一性。</li>
<li>加速排序和分组操作。</li>
</ul>
<p>缺点</p>
<ul>
<li>降低写入性能，因为索引需要更新。</li>
<li>占用额外的存储空间。</li>
<li>增加数据库的维护复杂度。</li>
</ul>
<p>作用</p>
<ul>
<li><strong>提高查询速度</strong>：通过索引，数据库可以快速定位到数据行，而不需要扫描整个表。</li>
<li><strong>确保数据的唯一性</strong>：唯一索引可以保证表中某一列或列组合的数据是唯一的。</li>
<li><strong>帮助排序和分组</strong>：索引可以存储数据的排序顺序，从而加快排序和分组操作。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>选择性</strong>：为高选择性的列创建索引，即列中具有大量唯一值的列。</li>
<li><strong>列顺序</strong>：在复合索引中，根据查询条件将最常使用的列放在索引的前面。</li>
<li><strong>维护成本</strong>：索引可以提高查询速度，但也会增加插入、更新和删除操作的成本。</li>
<li><strong>空间占用</strong>：索引需要额外的磁盘空间来存储。</li>
<li><strong>性能监控</strong>：定期检查索引的性能，必要时进行优化或重建。</li>
</ul>
<p>索引的类型</p>
<ul>
<li><strong>B-Tree索引</strong>：最常用的索引类型，适用于各种查询类型。</li>
<li><strong>哈希索引</strong>：基于哈希表实现，适用于精确匹配查询。</li>
<li><strong>全文索引</strong>：用于文本搜索，可以快速查找文本中的关键词。</li>
<li><strong>空间索引</strong>：用于地理空间数据的搜索。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Package - MySQL - 安装与卸载</title>
      <link>https://blog.magictable.ha.cn/software/Package-MySQL-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-MySQL-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - MySQL - 安装与卸载</source>
      <description>文章摘要： MySQL数据库管理软件的安装与卸载，主要讲解在 Debian Linux 12 操作系统上的总结。 相关信息 下载的版本推荐名称后面有加LTS的版本。 源代码编译安装的位置在/usr/local目录，手动创建的mysql文件夹中。 软件获取 官方网站细节图示： MySQL官方下载地址：https://dev.mysql.com/downl...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 20 Apr 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> MySQL数据库管理软件的安装与卸载，主要讲解在 Debian Linux 12 操作系统上的总结。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<ul>
<li>下载的版本推荐名称后面有加<code>LTS</code>的版本。</li>
<li>源代码编译安装的位置在<code>/usr/local</code>目录，手动创建的<code>mysql</code>文件夹中。</li>
</ul>
</div>
<h2>软件获取</h2>
<ul>
<li>官方网站细节图示：</li>
</ul>
<blockquote>
<p></p>
</blockquote>
<ul>
<li>MySQL官方下载地址：https://dev.mysql.com/downloads/mysql/</li>
<li>下载<strong>源码包版本</strong>时选择：操作系统选择<code>Linux - Generic</code></li>
<li>下载<strong>预编译版本</strong>：操作系统选择对应操作系统。</li>
</ul>
<blockquote>
<p></p>
</blockquote>
<h2>安装 - apt包管理器</h2>
<ul>
<li>apt安装MySQL官方教程文档：<a href="https://dev.mysql.com/doc/mysql-apt-repo-quick-guide/en/" target="_blank" rel="noopener noreferrer">https://dev.mysql.com/doc/mysql-apt-repo-quick-guide/en/</a></li>
</ul>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 下载 MySQL 主要组件的源代码，然后构建它们（在您希望下载的文件和构建所在的文件夹中运行此命令）：</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">apt</span> <span class="token builtin class-name">source</span> <span class="token parameter variable">-b</span> mysql-server</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h2>卸载 - apt包管理器</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>安装 - 预编译</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>卸载 - 预编译</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>安装 - 源代码</h2>
<ul>
<li>源码安装MySQL官方教程文档：<a href="https://dev.mysql.com/doc/refman/8.0/en/source-installation.html" target="_blank" rel="noopener noreferrer">https://dev.mysql.com/doc/refman/8.0/en/source-installation.html</a></li>
</ul>
<p>前置依赖条件</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 通过apt包管理器安装所需依赖</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">apt</span> <span class="token function">install</span> cmake <span class="token function">make</span> gcc build-essential libssl-dev libncurses5-dev pkg-config bison libudev-dev libsasl2-dev libldap2-dev</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><p>下载并解压源代码包</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 下载源码包</span></span>
<span class="line"><span class="token function">sudo</span> wagt https://dev.mysql.com/get/Downloads/MySQL-8.4/mysql-8.4.2-linux-glibc2.28-x86_64.tar.xz</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 解压文件</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">tar</span> <span class="token parameter variable">-xvf</span> mysql-8.4.2-linux-glibc2.28-x86_64-源代码包.tar.xz <span class="token parameter variable">-C</span> /usr/local</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 重命名文件夹，简化文件夹名称</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">mv</span> mysql-8.4.2-linux-glibc2.28-x86_64/ mysql-8.4.2</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>编译MySQL</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 切换到mysql目录下</span></span>
<span class="line"><span class="token builtin class-name">cd</span> /usr/local/mysql-8.4.2</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 配置编译选项，提示编译位置在`/usr/local/mysql8.4.2`</span></span>
<span class="line">cmake /usr/local/mysql-8.4.2 <span class="token parameter variable">-DCMAKE_INSTALL_PREFIX</span><span class="token operator">=</span>/usr/local/mysql8.4.2 <span class="token parameter variable">-DDEFAULT_CHARSET</span><span class="token operator">=</span>utf8mb4 <span class="token parameter variable">-DDEFAULT_COLLATION</span><span class="token operator">=</span>utf8mb4_general_ci <span class="token parameter variable">-DWITH_INNOBASE_STORAGE_ENGINE</span><span class="token operator">=</span><span class="token number">1</span> <span class="token parameter variable">-DWITH_ARCHIVE_STORAGE_ENGINE</span><span class="token operator">=</span><span class="token number">1</span> <span class="token parameter variable">-DWITH_BLACKHOLE_STORAGE_ENGINE</span><span class="token operator">=</span><span class="token number">1</span> <span class="token parameter variable">-DWITH_PARTITION_STORAGE_ENGINE</span><span class="token operator">=</span><span class="token number">1</span> <span class="token parameter variable">-DWITH_PERFSCHEMA_STORAGE_ENGINE</span><span class="token operator">=</span><span class="token number">1</span> <span class="token parameter variable">-DWITHOUT_EXAMPLES</span><span class="token operator">=</span><span class="token number">1</span> <span class="token parameter variable">-DWITHOUT_TEST_SQL_DISCOVERY</span><span class="token operator">=</span><span class="token number">1</span> <span class="token parameter variable">-DWITH_SSL</span><span class="token operator">=</span>system</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 编译和安装</span></span>
<span class="line"><span class="token function">make</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">make</span> <span class="token function">install</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>创建配置文件和系统用户</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 创建配置文件</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">mkdir</span> /etc/mysql</span>
<span class="line"><span class="token function">sudo</span> <span class="token function">cp</span> /usr/local/mysql/support-files/my-default.cnf /etc/mysql/my.cnf</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 创建一个名为mysql的系统用户和用户组</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">groupadd</span> mysql</span>
<span class="line"><span class="token function">sudo</span> <span class="token function">useradd</span> <span class="token parameter variable">-r</span> <span class="token parameter variable">-g</span> mysql <span class="token parameter variable">-s</span> /bin/false mysql</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 初始化数据目录并赋予所有权</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">mkdir</span> /var/lib/mysql</span>
<span class="line"><span class="token function">sudo</span> <span class="token function">chown</span> mysql:mysql /var/lib/mysql</span>
<span class="line"><span class="token function">sudo</span> <span class="token function">chmod</span> <span class="token number">750</span> /var/lib/mysql</span>
<span class="line"><span class="token function">sudo</span> bin/mysqld <span class="token parameter variable">--initialize</span> <span class="token parameter variable">--user</span><span class="token operator">=</span>mysql</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>配置mysql</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 运行mysql</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 是否使用已经存在的root密码，或重新设置密码</span></span>
<span class="line"><span class="token comment"># 是否移除匿名用户</span></span>
<span class="line"><span class="token comment"># 是否禁止root用户远程访问</span></span>
<span class="line"><span class="token comment"># 是否移除test数据库</span></span>
<span class="line"><span class="token comment"># 是否立即加载权限表</span></span>
<span class="line"><span class="token function">sudo</span> /usr/local/mysql8.4.2/bin/mysql_secure_installation</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>添加软连接（快捷方式）</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">cp</span> support-files/mysql.server /etc/init.d/mysql.server</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>卸载 - 源代码</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - MySQL - 终端命令</title>
      <link>https://blog.magictable.ha.cn/software/Package-MySQL-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-MySQL-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - MySQL - 终端命令</source>
      <description>文章摘要： MySQL数据库管理软件的命令总结。 相关信息 请重点关注分清MySQL命令和SQL结构化查询语言的语法的区分。 请认真记录MySQL数据库管理软件的root用户名和密码。 提示：在命令中会以空格为分割，若一个名字出现空格，可以将其用英文引号&amp;quot; &amp;quot;包裹起来，形成一个整体看待。 成功连接进入数据库后，命令格式将有所变化：（所有文本命令都必须位...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 20 Apr 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> MySQL数据库管理软件的命令总结。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<ul>
<li>请重点关注分清<strong>MySQL命令</strong>和<strong>SQL结构化查询语言的语法</strong>的区分。</li>
<li>请认真记录MySQL数据库管理软件的<code>root</code>用户名和密码。</li>
<li>提示：在命令中会以空格为分割，若一个名字出现空格，可以将其用英文引号<code>" "</code>包裹起来，形成一个整体看待。</li>
<li>成功连接进入数据库后，命令格式将有所变化：（所有文本命令都必须位于第一行，并以<code>;</code>结尾）</li>
</ul>
</div>
<h2>未登陆数据库时的命令</h2>
<h3>查看版本</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 简称写法：mysql -V</span></span>
<span class="line">mysql <span class="token parameter variable">--version</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h3>启动MySQL服务</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># Linux系统命令</span></span>
<span class="line"><span class="token function">sudo</span> systemctl start mysql</span>
<span class="line"></span>
<span class="line"><span class="token comment">#  Windows系统命令（以管理员身份运行）</span></span>
<span class="line"><span class="token comment"># 提示：服务名称可能因安装方式和版本而异（例如：MySQL80）</span></span>
<span class="line">net start <span class="token operator">&lt;</span>服务名称<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>停止MySQL服务</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># Linux系统命令</span></span>
<span class="line"><span class="token function">sudo</span> systemctl stop mysql</span>
<span class="line"></span>
<span class="line"><span class="token comment">#  Windows系统命令（以管理员身份运行）</span></span>
<span class="line"><span class="token comment"># 提示：服务名称可能因安装方式和版本而异（例如：MySQL80）</span></span>
<span class="line">net stop <span class="token string">"&lt;服务名称&gt;"</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>重启MySQL服务</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># Linux系统命令</span></span>
<span class="line"><span class="token function">sudo</span> systemctl restart mysql</span>
<span class="line"></span>
<span class="line"><span class="token comment"># Windows系统命令（暂无）</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>查看MySQL运行状态</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># Linux系统命令</span></span>
<span class="line"><span class="token function">sudo</span> systemctl status mysql</span>
<span class="line"><span class="token comment">#  Windows系统命令（以管理员身份运行）</span></span>
<span class="line"><span class="token comment"># 提示：服务名称可能因安装方式和版本而异（例如：MySQL80）</span></span>
<span class="line"><span class="token comment"># 讲解：`start`获列出所有正在运行的服务，通过管道`|`符号附加命令，`findstr`筛选满足条件的服务名称。</span></span>
<span class="line">net start <span class="token operator">|</span> findstr <span class="token string">"&lt;服务名称&gt;"</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>客户端连接MySQL</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># `-h`：要连接的计算机IP地址</span></span>
<span class="line"><span class="token comment"># `-P`：（大写P）目标电脑上运行的数据库管理软件的运行端口号</span></span>
<span class="line"><span class="token comment"># `-u`：用户名</span></span>
<span class="line"><span class="token comment"># `-p`：（小写p）密码</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 方案一：本机登入方案</span></span>
<span class="line">mysql <span class="token parameter variable">-u</span> <span class="token operator">&lt;</span>用户名<span class="token operator">&gt;</span> <span class="token parameter variable">-p</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 方案二：通过IP地址来登入方案</span></span>
<span class="line">mysql <span class="token parameter variable">-h</span> <span class="token operator">&lt;</span>目标IP地址<span class="token operator">&gt;</span> <span class="token parameter variable">-P</span> <span class="token operator">&lt;</span>数据库服务的端口号<span class="token operator">&gt;</span> <span class="token parameter variable">-u</span> <span class="token operator">&lt;</span>用户名<span class="token operator">&gt;</span> <span class="token parameter variable">-p</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container tip">
<p class="hint-container-title">提示</p>
<p>提示：root用户连接需要在管理员权限的情况下运行该命令。</p>
</div>
<h2>已登录数据库时的命令</h2>
<ul>
<li>提示：以下所有命令都必须位于第一行，并以<code>;</code>结尾。</li>
</ul>
<p>退出MySQL</p>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 写法一</span></span>
<span class="line"><span class="token keyword">exit</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token comment">-- 写法二，简称：`\q;`</span></span>
<span class="line">quit<span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>重新连接到服务器（可选参数为db和host）</p>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 简称：`\r;`</span></span>
<span class="line"><span class="token keyword">connect</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><p>帮助</p>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 写法一，简称：`\h;`</span></span>
<span class="line">help<span class="token punctuation">;</span></span>
<span class="line"><span class="token comment">-- 写法二</span></span>
<span class="line">?<span class="token punctuation">;</span></span>
<span class="line"><span class="token comment">-- 写法三</span></span>
<span class="line">\?<span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>清空当前输入语句（不是清空命令行页面）</p>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 简称：`\c;`</span></span>
<span class="line">clear<span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><p>设置语句分隔符</p>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 简称：`\d;`</span></span>
<span class="line"><span class="token keyword">delimiter</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><p>使用$EDITOR编辑命令</p>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 简称：`\e;`</span></span>
<span class="line">edit<span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><p>向MySQL服务器发送命令，垂直显示结果</p>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 简称：`\G;`</span></span>
<span class="line">ego<span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><p>将命令发送到MySQL服务器</p>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 简称：`\g;`</span></span>
<span class="line">go<span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><p>禁止寻呼机，打印到stdout</p>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 简称：`\n;`</span></span>
<span class="line">nopage<span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><p>不要写入outfile</p>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 简称：`\t;`</span></span>
<span class="line">notee<span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><p>设置PAGER[to_pager]，通过PAGER打印查询结果</p>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 简称：`\P;`</span></span>
<span class="line">pager<span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><p>打印当前命令</p>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 简称：`\p;`</span></span>
<span class="line"><span class="token keyword">print</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><p>更改MySQL提示</p>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 简称：`\R;`</span></span>
<span class="line">prompt<span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><p>重新生成完成hash</p>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 简称：`\#;`</span></span>
<span class="line">rehash<span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><p>执行SQL脚本文件（将文件名作为参数）</p>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 简称：`\.;`</span></span>
<span class="line">source<span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><p>从服务器获取状态信息</p>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 简称：`\s;`</span></span>
<span class="line"><span class="token keyword">status</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><p>执行系统shell命令</p>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 简称：`\!;`</span></span>
<span class="line">system<span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><p>设置outfile[to_outfile]，将说有内容附加到给定的outfile中</p>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 简称：`\T;`</span></span>
<span class="line">tee<span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><p>使用其他数据库，将数据库名作为参数</p>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 简称：`\u;`</span></span>
<span class="line"><span class="token keyword">use</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><p>切换到另一个字符集，可能需要处理具有多字节字符集的binlog</p>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 简称：`\C;`</span></span>
<span class="line"><span class="token keyword">charset</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><p>在每条语句后显示警告</p>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 简称：`\W;`</span></span>
<span class="line"><span class="token keyword">warnings</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><p>不要在每条语句后面都显示警告</p>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 简称：`\w;`</span></span>
<span class="line">nowarning<span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><p>清除会话上下文</p>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line"><span class="token comment">-- 简称：`\x;`</span></span>
<span class="line">resetconnection<span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><p>为下一个要提取的查询设置字符串参数（名称1值1名称2值2…）</p>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line">query_attributes<span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p>将当前SSL会话数据序列化到stdout或文件</p>
<div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql"><pre><code class="language-sql"><span class="line">ssl_session_data_print<span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - MySQL - 问题总结 - 重置用户密码</title>
      <link>https://blog.magictable.ha.cn/software/Package-MySQL-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E9%87%8D%E7%BD%AE%E7%94%A8%E6%88%B7%E5%AF%86%E7%A0%81.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-MySQL-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E9%87%8D%E7%BD%AE%E7%94%A8%E6%88%B7%E5%AF%86%E7%A0%81.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - MySQL - 问题总结 - 重置用户密码</source>
      <description>文章摘要： 忘记用户密码，重置密码解决方案。 注释 无密码状态root登录数据库。 用于在忘记密码的时候重置MySQL数据库。 windows用户需要进入管理员模式。 （命令行窗口01）关闭MySQL数据库服务器 （命令行窗口01）运行mysql服务，跳过权限检查 （命令行窗口02）开启新的命令行窗口，进行重置密码 （命令行窗口01）手动关闭mysql...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 20 Apr 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 忘记用户密码，重置密码解决方案。</p>
<!-- more -->
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>无密码状态root登录数据库。</li>
<li>用于在忘记密码的时候重置MySQL数据库。</li>
<li>windows用户需要进入管理员模式。</li>
</ul>
</div>
<ol>
<li>（命令行窗口01）关闭MySQL数据库服务器</li>
</ol>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># Linux系统命令</span></span>
<span class="line"><span class="token function">sudo</span> systemctl stop mysql</span>
<span class="line"></span>
<span class="line"><span class="token comment">#  Windows系统命令（以管理员身份运行）</span></span>
<span class="line"><span class="token comment"># 提示：服务名称可能因安装方式和版本而异（例如：MySQL80）</span></span>
<span class="line">net stop <span class="token string">"&lt;服务名称&gt;"</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ol start="2">
<li>（命令行窗口01）运行mysql服务，跳过权限检查</li>
</ol>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 运行mysql服务，跳过权限检查</span></span>
<span class="line"><span class="token function">sudo</span> mysqld_safe --skip-grant-tables <span class="token operator">&amp;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 运行上述一条命令后，需要持续处于运行状态</span></span>
<span class="line"><span class="token comment"># 需要在新的命令行窗口，执行下面的操作</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ol start="3">
<li>（命令行窗口02）开启新的命令行窗口，进行重置密码</li>
</ol>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 无需密码，直接通过root用户登录数据库</span></span>
<span class="line">mysql <span class="token parameter variable">-u</span> root</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 为root用户设置新的密码</span></span>
<span class="line">ALTER <span class="token environment constant">USER</span> <span class="token string">'root'</span>@<span class="token string">'localhost'</span> IDENTIFIED BY <span class="token string">'新密码'</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 刷新权限</span></span>
<span class="line">FLUSH PRIVILEGES<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 退出</span></span>
<span class="line">EXIT<span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ol start="4">
<li>（命令行窗口01）手动关闭mysql的安全模式服务进程</li>
</ol>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>提示：若不会或没有成功，可以选择重启计算机即可。</p>
</div>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 关闭命令运行，并需要通过手动强制关闭进程服务</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 找到MySQL安全模式的服务进程ID</span></span>
<span class="line"><span class="token function">ps</span> aux <span class="token operator">|</span> <span class="token function">grep</span> mysqld_safe</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 关闭MySQL的安全模式服务进程</span></span>
<span class="line"><span class="token function">kill</span> <span class="token operator">&lt;</span>进程ID<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ol start="5">
<li>启动mysql</li>
</ol>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># Linux系统命令</span></span>
<span class="line"><span class="token function">sudo</span> systemctl start mysql</span>
<span class="line"></span>
<span class="line"><span class="token comment">#  Windows系统命令（以管理员身份运行）</span></span>
<span class="line"><span class="token comment"># 提示：服务名称可能因安装方式和版本而异（例如：MySQL80）</span></span>
<span class="line">net start <span class="token operator">&lt;</span>服务名称<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ol start="6">
<li>登录mysql</li>
</ol>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line">mysql <span class="token parameter variable">-u</span> root <span class="token parameter variable">-p</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - MySQL - 问题总结</title>
      <link>https://blog.magictable.ha.cn/software/Package-MySQL-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-MySQL-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - MySQL - 问题总结</source>
      <description>文章摘要： MySQL数据库管理软件的命令总结。 忘记密码重置用户密码 详细总结： 安全管理方案 创建非root用户的用户，并基于合适的权限，比如创建、修改数据库等权限。 尽可能不使用root用户进行操作。</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 20 Apr 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> MySQL数据库管理软件的命令总结。</p>
<!-- more -->
<h2>忘记密码重置用户密码</h2>
<p>详细总结：<a href="/software/Package-MySQL-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E9%87%8D%E7%BD%AE%E7%94%A8%E6%88%B7%E5%AF%86%E7%A0%81.html" target="_blank">Package-MySQL-问题总结-重置用户密码</a></p>
<h2>安全管理方案</h2>
<ul>
<li>创建非root用户的用户，并基于合适的权限，比如创建、修改数据库等权限。</li>
<li>尽可能不使用root用户进行操作。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Package - MySQL</title>
      <link>https://blog.magictable.ha.cn/software/Package-MySQL.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-MySQL.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - MySQL</source>
      <description>文章摘要： 关系型数据库管理系统，使用结构化查询语言(SQL)进行数据库管理。 相关信息 外部相关文档 MySQL官方文档：https://dev.mysql.com/doc/refman/8.0/en/installing.html 内部相关文档 SQL管理关系型数据库语言： 简介 简要说明 MySQL是一个开源的关系数据库管理系统。 基于Struc...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 20 Apr 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 关系型数据库管理系统，使用结构化查询语言(SQL)进行数据库管理。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文档</p>
<ul>
<li>MySQL官方文档：<a href="https://dev.mysql.com/doc/refman/8.0/en/installing.html" target="_blank" rel="noopener noreferrer">https://dev.mysql.com/doc/refman/8.0/en/installing.html</a></li>
</ul>
<p>内部相关文档</p>
<ul>
<li>SQL管理关系型数据库语言：<a href="/software/Language-SQL.html" target="_blank">Language-SQL</a></li>
</ul>
</div>
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>MySQL是一个开源的关系数据库管理系统。</li>
<li>基于Structured Query Language (SQL)结构化查询语言进行数据管理。</li>
<li>MySQL因其高性能、可靠性、易用性和适用性广泛而广受欢迎。</li>
<li>由Oracle公司拥有，并提供社区版和企业版。</li>
<li>存在本地的数据表文件的后缀是 “.idb” 文件。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>数据存储与检索</strong>：MySQL提供数据存储、更新、查询和删除等基本数据库操作。</li>
<li><strong>事务支持</strong>：支持事务的ACID属性（原子性、一致性、隔离性、持久性），确保数据的安全性和一致性。</li>
<li><strong>数据备份与恢复</strong>：支持多种数据备份和恢复方法，保证数据不会丢失。</li>
<li><strong>高可用性</strong>：支持主从复制、读写分离等高可用性解决方案。</li>
<li><strong>安全性</strong>：提供用户权限管理和访问控制，保障数据库的安全性。</li>
<li><strong>支持多种存储引擎</strong>：例如InnoDB、MyISAM等，不同的存储引擎适用于不同的应用场景。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>性能优化</strong>：MySQL的性能需要根据具体应用进行优化，包括但不限于索引优化、查询优化、配置优化等。</li>
<li><strong>数据备份</strong>：定期进行数据备份，以防止数据丢失。</li>
<li><strong>安全性</strong>：确保数据库的安全性，包括使用强密码、定期更新补丁、限制不必要的访问等。</li>
<li><strong>版本兼容性</strong>：在升级MySQL版本时，需要注意版本之间的兼容性问题。</li>
<li><strong>资源分配</strong>：合理分配系统资源，如内存、CPU等，以确保MySQL运行稳定。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>Web应用</strong>：MySQL常用于Web应用程序，尤其是那些需要处理大量数据的网站和应用。</li>
<li><strong>内容管理系统</strong>：许多内容管理系统（CMS）如WordPress、Joomla等都支持MySQL作为后端数据库。</li>
<li><strong>数据分析</strong>：适用于数据分析和报告系统，可以存储和分析大量数据。</li>
<li><strong>电子商务</strong>：许多电子商务平台使用MySQL来处理交易数据。</li>
<li><strong>移动应用</strong>：移动应用后端服务经常使用MySQL来存储用户数据和应用状态。</li>
<li><strong>企业级应用</strong>：由于其稳定性和可扩展性，MySQL也适用于企业级应用的数据存储需求。</li>
</ul>
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<p>数据库（DB）</p>
<ul>
<li>DataBase</li>
<li>数据库是表的集合，是存储数据的仓库。</li>
<li>将数据组织成结构化的形式组织、存储和管理起来的仓库。</li>
<li>可以方便地对数据进行查询、更新、删除等操作。</li>
</ul>
<p>关系型数据库（RDBMS）</p>
<ul>
<li>概念：建立在关系模型的基础上，由多张相互连接的二维表组成的数据库。</li>
<li>特点：使用<code>表</code>存储数据，使用SQL语言操作。</li>
</ul>
<p>数据库管理系统（DBMS）</p>
<ul>
<li>DataBase Management System</li>
<li>实现对数据库资源有效组织、管理和存取的系统软件。</li>
<li>负责数据库的建立和维护、数据定义、数据操纵、数据库的运行管理以及通信等功能。</li>
</ul>
<p>SQL</p>
<ul>
<li>Structured Query Language</li>
<li>SQL是操作<strong>关系型数据库</strong>的编程语言，定义了统一的标准。</li>
</ul>
</div>
<h2>安装与卸载</h2>
<p>详细总结：<a href="/software/Package-MySQL-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html" target="_blank">Package-MySQL-安装与卸载</a></p>
<h2>终端命令</h2>
<p>详细总结：<a href="/software/Package-MySQL-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4.html" target="_blank">Package-MySQL-终端命令</a></p>
<h2>配置文件</h2>
<p>==在目录中添加一个<code>my.ini</code>文件作为配置文件？？？==</p>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">[mysqld]</span>
<span class="line"># 设置3306端口</span>
<span class="line">port=3306</span>
<span class="line"># 服务端使用的字符集默认为UTF8</span>
<span class="line">character-set-server=utf8</span>
<span class="line"># 创建新表时将使用的默认存储引擎</span>
<span class="line">default-storage-engine=INNODB</span>
<span class="line">[mysql]</span>
<span class="line"># 设置mysql客户端默认字符集</span>
<span class="line">default-character-set=utf8</span>
<span class="line">[client]</span>
<span class="line"># 设置mysql客户端连接服务端时默认使用的端口</span>
<span class="line">port=3306</span>
<span class="line">default-character-set=utf8</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>详细总结：<a href=""></a></p>
<h2>热门推荐</h2>
<p>详细总结：<a href="/software/Package-MySQL-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90.html" target="_blank">Package-MySQL-热门推荐</a></p>
<h2>问题总结</h2>
<p>详细总结：<a href="/software/Package-MySQL-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93.html" target="_blank">Package-MySQL-问题总结</a></p>
<h3>默认数据库</h3>
<p>MySQL默认会自动创建4个数据库</p>
<ul>
<li><code>information_schema</code></li>
<li><code>mysql</code></li>
<li><code>performance_schema</code></li>
<li><code>sys</code></li>
</ul>
<h2>MySQL的版本</h2>
<p>针对不同的用户，MySQL分为以下版本：</p>
<ul>
<li><strong>MySQL Community Server</strong>：单机版，社区版，免费，但不提供官方技术支持。</li>
<li>MySQL Enterprise Edition：单机版，商业版，收费，提供官方技术支持。</li>
<li>MySQL Cluster：集群版，社区版，免费，将多个MySQL服务封装成一个服务。</li>
<li>MySQL Cluster CGE：集群版，商业版，收费，将多个MySQL服务封装成一个服务。</li>
<li>MySQL Workbench（GUI TOOL）：为MySQL设计的ER/数据库建模工具。</li>
</ul>
<p>版本号的详细知识请参考内部文章，semver语义化版本控制规范：<a href="/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E8%A7%84%E8%8C%83-semver%E8%AF%AD%E4%B9%89%E5%8C%96%E7%89%88%E6%9C%AC%E6%8E%A7%E5%88%B6%E8%A7%84%E8%8C%83.html" target="_blank">基础知识-规范-semver语义化版本控制规范</a></p>
<h2>关系数据库的底层逻辑</h2>
<ul>
<li><strong>表（Table）</strong>：表是数据库中的基本单位，用于存储具有相同属性的数据记录。每个表都由行和列组成。</li>
<li><strong>字段（Field）或列（Column）</strong>：字段是表中的一个数据项，定义了表中数据的属性和类型。每个字段都有一个唯一的字段名，用于标识和引用该字段。</li>
<li><strong>记录（Record）或行（Row）</strong>：记录是表中的一行数据，代表一个具体的数据实体。每个记录包含与表中字段相对应的数据值。</li>
<li><strong>实体（Entily）</strong>：客观存在的、可以被描述的事物。</li>
<li><strong>属性（Attribute）</strong>：用于描述实体所具有的特征或特性。</li>
<li><strong>表（Table）</strong>：将不同的记录组织在一起，用来存储具体数据。表是数据库的基本组成单位。</li>
<li><strong>关系（Relationship）</strong>：实体之间的联系。</li>
<li><strong>事务</strong>：MySQL中的事务是确保数据库从一个一致性状态转变到另一个一致性状态的过程。它具有四个基本特性，即原子性（不可分割的工作单元）、一致性（系统始终处于一致状态）、隔离性（并发事务互不干扰）和持久性（提交后对数据库的修改是永久性的）。</li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>CRUD 是一个缩写，代表 Create（创建）、Read（读取）、Update（更新）和 Delete（删除）这四种基本的数据库操作。以下是每个操作的简要说明：</p>
<ul>
<li><strong>Create（创建）</strong>：在数据库中创建新的数据记录。</li>
<li><strong>Read（读取）</strong>：从数据库中检索数据记录。</li>
<li><strong>Update（更新）</strong>：在数据库中修改现有数据记录。</li>
<li><strong>Delete（删除）</strong>：从数据库中删除数据记录。</li>
</ul>
</div>
<h2>B+树查询</h2>
<h2>Buffer Pool</h2>
<h2>自适应哈希索引</h2>
<h2>Change Buffer</h2>
<h2>Undo Log</h2>
<h2>Buffer Pool</h2>
<h2>InnoDB</h2>
<p>存储引擎</p>
<p>提供接口函数</p>
<h2>函数</h2>
<ul>
<li>函数是一段可以直接被另一段程序调用的程序或代码。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - API - 「javax.swing」</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjavax.swing%E3%80%8D.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API-%E3%80%8Cjavax.swing%E3%80%8D.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - API - 「javax.swing」</source>
      <description>文章摘要： 提供了一个用于创建图形用户界面（GUI）应用程序的丰富组件集合，是 AWT (Abstract Window Toolkit) 的后续产品。 简介 简要说明 提供了一个用于创建图形用户界面（GUI）应用程序的丰富组件集合。 是 Java Foundation Classes (JFC) 的一部分，也被称为 Swing，是 AWT (Abst...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Wed, 10 Apr 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 提供了一个用于创建图形用户界面（GUI）应用程序的丰富组件集合，是 AWT (Abstract Window Toolkit) 的后续产品。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>提供了一个用于创建图形用户界面（GUI）应用程序的丰富组件集合。</li>
<li>是 Java Foundation Classes (JFC) 的一部分，也被称为 Swing，是 AWT (Abstract Window Toolkit) 的后续产品，提供了更加强大和灵活的 GUI 功能。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>组件库</strong>：提供按钮、标签、文本框、列表、表格、树、菜单等丰富的 GUI 组件。</li>
<li><strong>布局管理器</strong>：允许开发者以多种方式对组件进行布局，如流布局、网格布局、边界布局等。</li>
<li><strong>事件处理</strong>：通过监听器模式支持事件处理，使得用户交互成为可能。</li>
<li><strong>可定制性</strong>：支持外观和感觉（LookAndFeel）的更换，以适应不同的操作系统风格。</li>
<li><strong>绘图和图像处理</strong>：提供基本的绘图功能，支持图像的加载、显示和处理。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>线程安全</strong>：Swing 组件不是线程安全的，所有的 GUI 操作都应该在事件调度线程（Event Dispatch Thread, EDT）中执行。</li>
<li><strong>性能问题</strong>：Swing 应用程序可能会因为复杂的 GUI 操作而遇到性能问题，尤其是在处理大量数据时。</li>
<li><strong>内存占用</strong>：Swing 组件相对较重，可能会占用较多内存。</li>
<li><strong>兼容性</strong>：虽然 Swing 旨在提供跨平台的 GUI 解决方案，但在不同平台上的表现可能会有所不同。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>桌面应用程序</strong>：适用于开发跨平台的桌面应用程序，特别是在需要复杂用户界面的情况下。</li>
<li><strong>企业级应用</strong>：在企业级应用中，Swing 可用于创建管理控制台或配置工具。</li>
<li><strong>教育软件</strong>：由于其丰富的组件和易于使用的特性，Swing 也常用于教育软件的开发。</li>
<li><strong>个人项目</strong>：对于个人项目或小型项目，Swing 提供了足够的工具来构建用户友好的界面。</li>
</ul>
<h2><code>javax.swing.border</code></h2>
<p>提供用于在 Swing 组件周围绘制专用边框的类和接口。</p>
<h2><code>javax.swing.colorchooset</code></h2>
<p>包含 <code>JColorChooser</code> 使用的类和接口 元件。</p>
<h2><code>javax.swing.event</code></h2>
<p>提供由 Swing 组件触发的事件。</p>
<h2><code>javax.swing.filechooser</code></h2>
<p>包含 <code>JFileChooser</code> 组件使用的类和接口。</p>
<h2><code>javax.swing.plaf</code></h2>
<p>提供一个接口和许多抽象类，Swing 使用这些抽象类来提供其可插入的外观功能。</p>
<h2><code>javax.swing.plaf.basic</code></h2>
<p>提供根据 Basic 外观构建的用户界面对象。</p>
<h2><code>javax.swing.plaf.metal</code></h2>
<p>提供根据 Java 外观（曾经代号为 <em>Metal</em>）构建的用户界面对象，这是默认外观。</p>
<h2><code>javax.swing.plaf.multi</code></h2>
<p>提供组合两种或多种外观的用户界面对象。</p>
<h2><code>javax.swing.plaf.nimbus</code></h2>
<p>提供根据跨平台 Nimbus 外观构建的用户界面对象。</p>
<h2><code>javax.swing.plaf.synth</code></h2>
<p>Synth 是一种可蒙皮的外观和感觉，其中所有绘制都被委托。</p>
<h2><code>javax.swing.table</code></h2>
<p>提供用于处理 <code>javax.swing.JTable</code> 中。</p>
<h2><code>javax.swing.text</code></h2>
<p>提供处理可编辑和不可编辑文本组件的类和接口。</p>
<h2><code>javax.swing.text.html</code></h2>
<p>提供用于创建 HTML 文本编辑器的类 <code>HTMLEditorKit</code> 和支持类。</p>
<h2><code>javax.swing.text.html.parser</code></h2>
<p>提供默认的 HTML 解析器以及支持类。</p>
<h2><code>javax.swing.text.rtf</code></h2>
<p>提供用于创建 Rich-Text-Format 文本编辑器的类 （<code>RTFEditorKit</code>）。</p>
<h2><code>javax.swing.tree</code></h2>
<p>提供用于处理 <code>javax.swing.JTree</code> 中。</p>
<h2><code>javax.swing.undo</code></h2>
<p>允许开发人员在应用程序（如文本编辑器）中提供对撤消/重做的支持。</p>
<h1>cache</h1>
<h2>Swing简介</h2>
<ul>
<li>Swing是AWT的扩展。</li>
<li>AWT，抽象窗口工具包（Abstract Windows Toolkit，简称<code>AWT</code>），是Java中包含的一个用于基本GUI程序设计的类库（工具包），该工具包依附于操作系统提供的UI，具体样式会根据不同操作系统提供的界面元素进行展示。</li>
<li>swing包路径：<code>javax.swing</code></li>
<li>awt包路径：<code>javax.awt</code></li>
<li>组件使用<code>swing</code></li>
<li>布局使用<code>awt</code></li>
</ul>
<h2>组件</h2>
<p><strong>注意事项</strong></p>
<ul>
<li>默认情况下窗口是不可见的，需要将窗口对象修改为<code>对象.setVisible(true)</code>。</li>
<li>窗口默认没有大小，需要使用<code>对象.setSize(&lt;宽度&gt;, &lt;高度&gt;)</code>来设置窗口大小。</li>
<li>组件在实例化对象后，需要添加到窗口中才能显示，需要使用<code>对象.add(&lt;组件对象名&gt;)</code>来添加。</li>
<li>在容器组件有设置布局的情况下，在其中的组件最好不要使用位置方法。</li>
<li>窗口和面板都属于<code>容器</code>类型的组件。</li>
</ul>
<h3>公共方法</h3>
<p>| 方法名 | 介绍 |
| :</p>
]]></content:encoded>
    </item>
    <item>
      <title>OS - OpenHarmony</title>
      <link>https://blog.magictable.ha.cn/software/OS-OpenHarmony.html</link>
      <guid>https://blog.magictable.ha.cn/software/OS-OpenHarmony.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">OS - OpenHarmony</source>
      <description>文章摘要： OpenHarmony 操作系统是全场景、多设备类型、分布式操作系统。 相关信息 外部相关文章 OpenHarmony官方文档：https://www.openharmony.cn/mainPlay 内部相关文章 注释 官方教学文档非常完善且详细。 警示：路径中不要出现中文字符。 简介 简要说明 OpenHarmony是由华为发起，开放原子...</description>
      <category>软件程序/操作系统</category>
      <pubDate>Mon, 01 Apr 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong>  OpenHarmony 操作系统是全场景、多设备类型、分布式操作系统。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li>OpenHarmony官方文档：<a href="https://www.openharmony.cn/mainPlay" target="_blank" rel="noopener noreferrer">https://www.openharmony.cn/mainPlay</a></li>
</ul>
<p>内部相关文章</p>
<ul>
<li></li>
</ul>
</div>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>官方教学文档非常完善且详细。</li>
<li>警示：路径中不要出现中文字符。</li>
</ul>
</div>
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>OpenHarmony是由华为发起，开放原子开源基金会（OpenAtom Foundation）孵化及运营的开源项目。</li>
<li>OpenHarmony是一个全场景、多设备类型的分布式操作系统，旨在通过一套操作系统满足不同硬件设备的需求。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>分布式架构</strong>：支持多设备之间的无缝协作和数据流转。</li>
<li><strong>轻量级</strong>：针对不同设备，提供轻量级、小型化的操作系统版本。</li>
<li><strong>组件化</strong>：系统由多个组件构成，可以根据设备需要进行定制化。</li>
<li><strong>安全性</strong>：提供系统级的安全保障，包括数据加密和访问控制。</li>
<li><strong>兼容性</strong>：支持多种编程语言和框架，便于开发者进行应用开发。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>生态系统</strong>：作为一个相对较新的操作系统，其生态系统还在发展中，应用和开发者资源可能不如成熟操作系统丰富。</li>
<li><strong>兼容性测试</strong>：由于硬件设备的多样性，应用和设备兼容性需要充分测试。</li>
<li><strong>技术支持</strong>：虽然社区活跃，但官方技术支持可能有限，特别是在初期阶段。</li>
<li><strong>开源协议</strong>：遵循开源协议，使用和贡献代码时需遵守相关规则。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>智能家居</strong>：适用于各种智能家居设备，如智能音箱、智能电视等。</li>
<li><strong>穿戴设备</strong>：适用于智能手表、健康监测设备等。</li>
<li><strong>工业自动化</strong>：适用于工业控制、机器人等工业自动化场景。</li>
<li><strong>车载系统</strong>：适用于智能车载系统，提供车辆与设备之间的互联互通。</li>
<li><strong>教育办公</strong>：适用于教育平板、智能办公设备等，支持多设备协同工作。</li>
</ul>
<h2>技术框架</h2>
<p>架构图</p>
<blockquote>
<p></p>
</blockquote>
<p>HarmonyOS是基于OpenHarmony的发行版并提供了一些华为的特色能力，因此基于OpenHarmony SDK开发鸿蒙应用可在HarmonyOS上兼容运行。</p>
<h2>搭建开发环境流程（Debian Linux）</h2>
<p>获取命令行工具集合 - HarmonyOS应用开发所用到的系列工具</p>
<blockquote>
<p>初始化ohpm</p>
</blockquote>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 切换路径</span></span>
<span class="line"><span class="token builtin class-name">cd</span> /<span class="token operator">&lt;</span>具体路径<span class="token operator">&gt;</span>/ohpm/bin</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 执行`/ohpm/bin`目录下的init文件，进程初始化</span></span>
<span class="line"><span class="token function">bash</span> ./init</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>安装Node.js并配置npm（包管理工具）</p>
<blockquote>
<ul>
<li>下载Node.js，下载地址：<a href="https://nodejs.org/en/download/package-manager" target="_blank" rel="noopener noreferrer">https://nodejs.org/en/download/package-manager</a></li>
<li>将npm（包管理工具）镜像源仓库改为华为云镜像源<code>https://repo.huaweicloud.com/repository/npm/</code>，执行如下<code>bash</code>命令。</li>
</ul>
</blockquote>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 修改npm镜像源为华为云镜像源，来准确获取最新Harmony数据。</span></span>
<span class="line"><span class="token function">npm</span> config <span class="token builtin class-name">set</span> registry https://repo.huaweicloud.com/repository/npm/</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><p>安装ohpm</p>
<blockquote>
<ul>
<li>配置:"<a href="https://repo.harmonyos.com/npm/" target="_blank" rel="noopener noreferrer">https://repo.harmonyos.com/npm/</a>"</li>
</ul>
</blockquote>
<p>下载HarmonyOS SDK</p>
<p>创建工程</p>
<h2>工具链</h2>
<p>Native：C/C++语言SDK包
ArkTS：ArkTS语言SDK包
Emulator：本地模拟器工具包
Previewer：应用/服务预览器，在开发过程中可以动态预览Phone、TV、Wearable、LiteWearable等设备的应用/服务效果，支持JS、ArkTS和Java应用/服务预览。
Toolchains：SDK工具链，应用/服务开发必备工具集，包括编译、打包、签名、数据库管理等工具的集合。</p>
<h2>Cache</h2>
<p><strong>ArkTS</strong>：ArkTS是鸿蒙生态的应用开发语言。它在保持TypeScript（简称TS）基本语法风格的基础上，对TS的动态类型特性施加更严格的约束，引入静态类型。
<strong>ArkUI</strong>：ArkUI是一套构建分布式应用界面的声明式UI开发框架，方舟开发框架
<strong>ArkCompiler</strong>：华为自研的统一编程平台，包含编译器、工具链、运行时等关键部件。</p>
<p><strong>DevEco Studio</strong>：面向HarmonyOS应用及元服务开发者提供的集成开发环境(IDE)
<strong>DevEco Testing</strong>：提供 HarmonyOS 应用及元服务的兼容性、稳定性、性能、功耗、安全、跨端流转等测试标准和测试服务。
<strong>DevEco Device Tool</strong>：是vscode插件</p>
<p>图标库、音乐库</p>
<p><strong>Native</strong>：
<strong>Previewer</strong>：
<strong>Toolchains</strong>：</p>
<p>HarmonyOS：内聚AOSP、宏内核+微内核
OpenHarmony：开源、微内核</p>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Intellij IDEA - 问题总结 - 导入项目检查流程</title>
      <link>https://blog.magictable.ha.cn/software/Package-IntellijIDEA-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E5%AF%BC%E5%85%A5%E9%A1%B9%E7%9B%AE%E6%A3%80%E6%9F%A5%E6%B5%81%E7%A8%8B.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-IntellijIDEA-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E5%AF%BC%E5%85%A5%E9%A1%B9%E7%9B%AE%E6%A3%80%E6%9F%A5%E6%B5%81%E7%A8%8B.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Intellij IDEA - 问题总结 - 导入项目检查流程</source>
      <description>文章摘要： 导入第三方项目时检查是否配置正确，及时发现错误配置和被恶意修改的IDEA设置。 警告 打开第三方项目后需要注意的点 关注 “设置” 中的 “构建、执行、部署” 相关的设置是否属于本计算机中的配置。 关注 “项目构建” 中的编程语言和依赖等是否正常。 设置 - Maven配置检查 打开 “文件-&amp;gt;设置-&amp;gt;构建、执行、部署-&amp;gt;构建工具-&amp;gt;Mav...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sun, 31 Mar 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 导入第三方项目时检查是否配置正确，及时发现错误配置和被恶意修改的IDEA设置。</p>
<!-- more -->
<div class="hint-container warning">
<p class="hint-container-title">警告</p>
<p>打开第三方项目后需要注意的点</p>
<ul>
<li>关注 “设置” 中的 “构建、执行、部署” 相关的设置是否属于本计算机中的配置。</li>
<li>关注 “项目构建” 中的编程语言和依赖等是否正常。</li>
</ul>
</div>
<h2>设置 - Maven配置检查</h2>
<ul>
<li>打开 “文件-&gt;设置-&gt;构建、执行、部署-&gt;构建工具-&gt;Maven” 窗口页面，查看 “Maven主路径”、“用户设置文件”、“本地仓库” 是否正确或被修改。</li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>当导入的项目中修改了其中的 “Maven主路径” 时。请亲自修改回自己计算机中的配置。</li>
<li>然后手动删除本地被恶意创建的文件夹和文件。</li>
<li>提示：在 Debian linux 系统中，一般会恶意创建在用户根目录下。</li>
</ul>
</div>
<h2>项目结构</h2>
<ul>
<li>请确认 “项目” 的 “SDK”、“语言级别”。</li>
<li>请同时确认 “模块” 中的每个模块是否正确。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Maven - 安装与卸载</title>
      <link>https://blog.magictable.ha.cn/software/Package-Maven-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Maven-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Maven - 安装与卸载</source>
      <description>文章摘要： Maven 是一个Java项目管理和构建工具，在Debian Linux 12 操作系统中的安装与卸载。 软件获取 官方下载地址：https://maven.apache.org/ 安装 - apt包管理器 卸载 - apt包管理器 安装 - 预编译 卸载 - 预编译 安装 - 源代码 卸载 - 源代码</description>
      <category>软件程序/软件包</category>
      <pubDate>Sun, 31 Mar 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Maven 是一个Java项目管理和构建工具，在Debian Linux 12 操作系统中的安装与卸载。</p>
<!-- more -->
<h2>软件获取</h2>
<ul>
<li>官方下载地址：<a href="https://maven.apache.org/" target="_blank" rel="noopener noreferrer">https://maven.apache.org/</a></li>
</ul>
<h2>安装 - apt包管理器</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 运行依赖</span></span>
<span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>卸载 - apt包管理器</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>安装 - 预编译</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 运行依赖</span></span>
<span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>卸载 - 预编译</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>安装 - 源代码</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 编译依赖</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 运行依赖</span></span>
<span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>卸载 - 源代码</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 清理不必要的依赖包、配置、数据</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Maven - 热门推荐 - 模块化拆分原则和规范</title>
      <link>https://blog.magictable.ha.cn/software/Package-Maven-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E6%A8%A1%E5%9D%97%E5%8C%96%E6%8B%86%E5%88%86%E5%8E%9F%E5%88%99%E5%92%8C%E8%A7%84%E8%8C%83.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Maven-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E6%A8%A1%E5%9D%97%E5%8C%96%E6%8B%86%E5%88%86%E5%8E%9F%E5%88%99%E5%92%8C%E8%A7%84%E8%8C%83.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Maven - 热门推荐 - 模块化拆分原则和规范</source>
      <description>文章摘要： 项目的组件/模块化拆分方案。 模块化拆分是提高项目可维护性和扩展性的重要手段。以下是一些拆分方案的指导原则： 按功能拆分： 将具有相同业务功能的代码组织在同一个模块中。 例如，一个电商系统可以分为订单模块、用户模块、商品模块等。 按层拆分： 将不同层次的代码分开，如将持久层、服务层、表现层分别放在不同的模块中。 例如，可以将数据访问逻辑放在...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sun, 31 Mar 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 项目的组件/模块化拆分方案。</p>
<!-- more -->
<p>模块化拆分是提高项目可维护性和扩展性的重要手段。以下是一些拆分方案的指导原则：</p>
<ol>
<li><strong>按功能拆分：</strong></li>
</ol>
<ul>
<li>将具有相同业务功能的代码组织在同一个模块中。</li>
<li>例如，一个电商系统可以分为订单模块、用户模块、商品模块等。</li>
</ul>
<ol start="2">
<li><strong>按层拆分：</strong></li>
</ol>
<ul>
<li>将不同层次的代码分开，如将持久层、服务层、表现层分别放在不同的模块中。</li>
<li>例如，可以将数据访问逻辑放在 <code>dao</code> 模块，业务逻辑放在 <code>service</code> 模块。</li>
</ul>
<ol start="3">
<li><strong>按技术拆分：</strong></li>
</ol>
<ul>
<li>如果项目使用了多种技术栈，可以根据技术类型将相关代码分开。</li>
<li>例如，前端代码可以放在一个模块，后端逻辑放在另一个模块。</li>
</ul>
<ol start="4">
<li><strong>按部署拆分：</strong></li>
</ol>
<ul>
<li>根据部署的需要拆分模块，比如将公共的配置和服务模块分开，以便于独立部署。</li>
</ul>
<ol start="5">
<li><strong>通用模块：</strong></li>
</ol>
<ul>
<li>抽取项目中通用的代码和资源，形成工具类模块或公共组件模块，供其他模块使用。</li>
</ul>
<ol start="6">
<li><strong>依赖管理：</strong></li>
</ol>
<ul>
<li>确保模块间的依赖关系清晰明确，避免循环依赖。</li>
<li>使用 Maven 的聚合和继承特性管理模块。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Maven - 约定</title>
      <link>https://blog.magictable.ha.cn/software/Package-Maven-%E7%BA%A6%E5%AE%9A.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Maven-%E7%BA%A6%E5%AE%9A.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Maven - 约定</source>
      <description>文章摘要： 约定大于配置，Mvaen也有约定，该文章将整理Maven相关的约定。 项目结构 src/main/java/：存放项目的Java源代码。 src/main/resources/：存放项目的资源文件，如配置文件、属性文件等。 src/test/java/：存放项目的测试Java源代码。 src/test/resources/：存放测试用的资源...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sun, 31 Mar 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 约定大于配置，Mvaen也有约定，该文章将整理Maven相关的约定。</p>
<!-- more -->
<h2>项目结构</h2>
<ul>
<li><code>src/main/java/</code>：存放项目的Java源代码。</li>
<li><code>src/main/resources/</code>：存放项目的资源文件，如配置文件、属性文件等。</li>
<li><code>src/test/java/</code>：存放项目的测试Java源代码。</li>
<li><code>src/test/resources/</code>：存放测试用的资源文件。</li>
<li><code>target/</code>：构建结果的输出目录，如编译后的class文件、打包的jar文件等。</li>
<li><code>pom.xml</code>：项目的Project Object Model文件，定义了项目的构建配置、依赖管理等。</li>
</ul>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">project/   # 项目名 #</span>
<span class="line">|-- src/        # 项目文件夹</span>
<span class="line">	|-- main/        # 程序文件 #</span>
<span class="line">		|-- java/          # 源代码根目录 #</span>
<span class="line">		|-- resources/     # 资源根目录 #</span>
<span class="line">	|-- test/        # 测试文件 #</span>
<span class="line">		|-- java/          # 测试源代码根目录 #</span>
<span class="line">		|-- resources/     # 测试资源根目录 #</span>
<span class="line">|-- target/      # 打包后的文件 #</span>
<span class="line">|-- pom.xml      # maven的配置文件 #</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container warning">
<p class="hint-container-title">警告</p>
<ul>
<li>在编译后，<code>src/main/java/</code>与<code>src/main/resources/</code>会保存在同一个目录中。</li>
<li><code>src/main/java/</code>和<code>src/main/resources/</code>目录在编译后的目录是 <code>classpath/</code>。</li>
<li>同时在配置文件中或项目中编写时也是使用<code>classpath/</code>作为查找文件的路径名。</li>
</ul>
</div>
<h2>坐标系统</h2>
<ul>
<li>Maven使用groupId, artifactId, version三个元素来唯一标识一个项目或依赖。</li>
<li><code>groupId</code>：定义项目所属的组织或公司，通常使用反向域名表示。</li>
<li><code>artifactId</code>：定义项目名称。</li>
<li><code>version</code>：定义项目版本号。</li>
</ul>
<h2>版本管理</h2>
<ul>
<li>Maven使用 SNAPSHOT 和 RELEASE 来区分项目的开发版和稳定版。</li>
<li>SNAPSHOT 版本表示项目处于开发阶段，可能每次构建都会发生变化。</li>
<li>RELEASE 版本表示项目是一个稳定的发布版本。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Maven - 终端命令 - mvn</title>
      <link>https://blog.magictable.ha.cn/software/Package-Maven-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-mvn.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Maven-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-mvn.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Maven - 终端命令 - mvn</source>
      <description>文章摘要： 摘要内容。 信息查询 生命周期相关 该工具的命令是按声明周期，即有顺序的执行，如执行部署命令，则会自动完成面前的步骤后再进行部署。 创建工程 命令格式 案例</description>
      <category>软件程序/软件包</category>
      <pubDate>Sun, 31 Mar 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>信息查询</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 查询版本信息</span></span>
<span class="line">mvn <span class="token parameter variable">-v</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h2>生命周期相关</h2>
<p>该工具的命令是按声明周期，即有顺序的执行，如执行部署命令，则会自动完成面前的步骤后再进行部署。</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 清理</span></span>
<span class="line">mvn clean</span>
<span class="line"><span class="token comment">#</span></span>
<span class="line">mvn validate</span>
<span class="line"><span class="token comment"># 编译</span></span>
<span class="line">mvn compile</span>
<span class="line"><span class="token comment"># 测试</span></span>
<span class="line">mvn <span class="token builtin class-name">test</span></span>
<span class="line"><span class="token comment"># 打包</span></span>
<span class="line">mvn package</span>
<span class="line"><span class="token comment">#</span></span>
<span class="line">mvn verify</span>
<span class="line"><span class="token comment"># 打包保存到本地仓库</span></span>
<span class="line">mvn <span class="token function">install</span></span>
<span class="line"><span class="token comment">#</span></span>
<span class="line">mvn site</span>
<span class="line"><span class="token comment"># 打包上传到maven私服仓库</span></span>
<span class="line">mvn deploy</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>创建工程</h2>
<p>命令格式</p>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">mvn archetype:generate</span>
<span class="line">    -DgroupId={project-packaging}</span>
<span class="line">    -DartifactId={project-name}</span>
<span class="line">    -DarchetypeArtifactId=maven-archetype-quickstart</span>
<span class="line">    -DinteractiveMode=false</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>案例</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 创建java项目</span></span>
<span class="line">mvn archetype:generate <span class="token parameter variable">-DgroupId</span><span class="token operator">=</span>com.magictable <span class="token parameter variable">-DartifactId</span><span class="token operator">=</span>agent_jar <span class="token parameter variable">-DarchetypeArtifactId</span><span class="token operator">=</span>maven-archetype-quickstart <span class="token parameter variable">-DinteractiveMode</span><span class="token operator">=</span>false</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 创建web项目</span></span>
<span class="line">mvn archetype:generate <span class="token parameter variable">-DgroupId</span><span class="token operator">=</span>com.magictable <span class="token parameter variable">-DartifactId</span><span class="token operator">=</span>agent_web <span class="token parameter variable">-DarchetypeArtifactId</span><span class="token operator">=</span>maven-archetype-webapp <span class="token parameter variable">-DinteractiveMode</span><span class="token operator">=</span>false</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Maven</title>
      <link>https://blog.magictable.ha.cn/software/Package-Maven.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Maven.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Maven</source>
      <description>文章摘要： Java项目管理和构建工具。 相关信息 外部相关文章 Maven官方依赖查询网站：Maven Repository 参考教程：黑马程序员B站视频 内部相关文章 Java 8 编程语言： Java 17 编程语言： Maven第三方类库热门推荐： 模块化拆分原则和规范： 注释 由于依赖有传递性，因此在项目中需要尽可能不出现重复的依赖，或者说通...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sun, 31 Mar 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Java项目管理和构建工具。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li>Maven官方依赖查询网站：<a href="https://www.mvnrepository.com/" target="_blank" rel="noopener noreferrer">Maven Repository</a></li>
<li>参考教程：<a href="https://www.bilibili.com/video/BV1Ah411S7ZE/?p=14&amp;spm_id_from=pageDriver&amp;vd_source=262edcbbd8e80915a7dff074a0e165a1" target="_blank" rel="noopener noreferrer">黑马程序员B站视频</a></li>
</ul>
<p>内部相关文章</p>
<ul>
<li>Java 8 编程语言：<a href="/software/Language-Java-JavaSE-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-JavaSE8.html" target="_blank">Language-Java-JavaSE-查询手册-JavaSE8</a></li>
<li>Java 17 编程语言：<a href="/software/Language-Java-JavaSE-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-JavaSE21.html" target="_blank">Language-Java-JavaSE-查询手册-JavaSE21</a></li>
<li>Maven第三方类库热门推荐：<a href="/software/Package-Maven-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E7%AC%AC%E4%B8%89%E6%96%B9%E7%B1%BB%E5%BA%93.html" target="_blank">Package-Maven-热门推荐-第三方类库</a></li>
<li>模块化拆分原则和规范：<a href="/software/Package-Maven-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E6%A8%A1%E5%9D%97%E5%8C%96%E6%8B%86%E5%88%86%E5%8E%9F%E5%88%99%E5%92%8C%E8%A7%84%E8%8C%83.html" target="_blank">Package-Maven-热门推荐-模块化拆分原则和规范</a></li>
</ul>
</div>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>由于依赖有传递性，因此在项目中需要尽可能不出现重复的依赖，或者说通过依赖传递的方式来少写一个依赖。</li>
<li>Maven的不足之处：下载jar包的中途发生下载不全时需要手动删除，若不手动删除本地仓库中的jar包，会造成无法向“远程仓库”获取jar包。</li>
<li>提示：<code>java/</code>文件夹和<code>resources/</code>文件夹，在编译后会变成同一个文件夹。</li>
</ul>
</div>
<h2>简介</h2>
<p>简要说明</p>
<p>Maven 是一个Java项目管理和构建工具。</p>
<ul>
<li>提供一套标准化的项目结构。</li>
<li>使用统一的方式进行自动化构建。</li>
<li>管理项目依赖的jar包。</li>
<li>Maven 的命令名称叫<code>mvn</code>。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>依赖管理</strong>：自动处理项目依赖，通过简单的配置即可下载和管理所需的库。</li>
<li><strong>构建管理</strong>：通过定义生命周期和插件，可以自动化项目的编译、测试、打包、部署等过程。</li>
<li><strong>项目信息管理</strong>：通过POM文件，可以管理项目的版本、开发者、许可证等信息。</li>
<li><strong>项目文档生成</strong>：可以生成项目文档，如API文档等。</li>
<li><strong>项目报告</strong>：提供多种内置报告，如测试覆盖率、代码质量等。</li>
<li><strong>插件系统</strong>：Maven拥有丰富的插件，可以扩展其功能，用于执行各种任务。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>POM配置</strong>：正确配置POM文件对于Maven的使用至关重要，错误的配置可能导致构建失败。</li>
<li><strong>依赖冲突</strong>：需要注意依赖的版本和范围，避免版本冲突。</li>
<li><strong>插件版本</strong>：插件版本的选择也很重要，不同的版本可能会有不同的行为。</li>
<li><strong>构建性能</strong>：Maven构建可能会消耗较多时间，特别是大型项目，需要优化构建配置。</li>
<li><strong>网络问题</strong>：由于依赖管理需要从中央仓库下载资源，网络问题可能会影响构建过程。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>Java项目构建</strong>：适用于各种Java项目的构建和管理，特别是大型和多模块项目。</li>
<li><strong>多模块项目</strong>：Maven的模块化支持使得它非常适合管理具有多个模块的项目。</li>
<li><strong>标准化构建</strong>：在团队协作中，Maven可以提供标准化的构建流程，确保项目的一致性。</li>
<li><strong>依赖管理</strong>：当项目依赖众多第三方库时，Maven的依赖管理功能尤为有用。</li>
<li><strong>持续集成</strong>：在持续集成（CI）环境中，Maven可以自动化构建和测试过程。</li>
<li><strong>企业级应用</strong>：在企业级应用开发中，Maven的插件和扩展能力可以帮助管理和构建复杂的软件系统。</li>
</ul>
<h2>安装与卸载</h2>
<p>详细总结：<a href="/software/Package-Maven-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html" target="_blank">Package-Maven-安装与卸载</a></p>
<h2>终端命令</h2>
<p>详细总结：<a href="/software/Package-Maven-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-mvn.html" target="_blank">Package-Maven-终端命令-mvn</a></p>
<h2>配置文件</h2>
<p>详细总结：<a href="/software/Package-Maven-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6.html" target="_blank">Package-Maven-配置文件</a></p>
<p>项目“pom.xml”配置文件总结：<a href="/software/Package-Maven-%E2%80%9Cpom.xml%E2%80%9D%E6%96%87%E4%BB%B6.html" target="_blank">Package-Maven-“pom.xml”文件</a></p>
<h2>热门推荐</h2>
<p>详细总结：<a href=""></a></p>
<h2>问题总结</h2>
<p>详细总结：<a href="/software/Package-Maven-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93.html" target="_blank">Package-Maven-问题总结</a></p>
<h2>仓库</h2>
<ul>
<li>用于存储资源，包含各种jar包。</li>
</ul>
<p>仓库分类</p>
<ul>
<li><strong>本地仓库</strong>：自己电脑上存放资源的仓库，连接远程仓库获取资源。</li>
<li><strong>远程仓库</strong>：非本机电脑上的仓库，为本地仓库提供资源。</li>
<li><strong>中央仓库</strong>：Maven团队维护，存储所有资源的仓库。</li>
<li><strong>私服仓库</strong>：部门/公司范围内存储资源的仓库，从中央仓库获取资源。</li>
</ul>
<p>本地仓库默认存储位置</p>
<ul>
<li>Debian Linux 系统默认下载到本地仓库的保存位置在：<code>/home/&lt;用户名&gt;/.m2/repository/</code></li>
<li>Windows 系统默认下载到本地仓库的保存位置在：<code>C:\&lt;用户名&gt;\.m2\repository\</code></li>
</ul>
<h2>坐标</h2>
<ul>
<li>用于描述仓库中资源的位置，使用唯一标识，唯一性定位资源位置。</li>
<li>通过标识可以将资源的识别与下载工作交由机器完成。</li>
</ul>
<p>Maven坐标的主要组成部分</p>
<ul>
<li>组织ID：定义当前Maven项目隶属组织名称（通常是域名反写，例如：com.baidu）。</li>
<li>项目ID：定义当前Maven项目名称（通常是模块名称，例如：AI）。</li>
<li>版本号：定义当前项目版本号。</li>
</ul>
<h2>约定</h2>
<ul>
<li>约定大于配置，有约定（默认值）需要了解一下。</li>
</ul>
<p>详细总结：<a href="/software/Package-Maven-%E7%BA%A6%E5%AE%9A.html" target="_blank">Package-Maven-约定</a></p>
<h2>pom.xml文件</h2>
<ul>
<li><code>pom.xml</code>文件是 Maven 项目的核心配置文件，全称为 Project Object Model (项目对象模型)。</li>
<li>它定义了项目的构建、依赖、插件和其他项目信息的配置。</li>
<li><code>pom.xml</code>文件位于 Maven 项目的根目录下，Maven 构建工具通过解析这个文件来执行项目的构建和依赖管理。</li>
</ul>
<p>详细总结：<a href="/software/Package-Maven-%E2%80%9Cpom.xml%E2%80%9D%E6%96%87%E4%BB%B6.html" target="_blank">pom.xml配置文件</a></p>
<h2>依赖管理</h2>
<p>依赖具有传递性</p>
<ul>
<li><strong>直接依赖</strong>：在当前项目中通过依赖配置建立的依赖关系。</li>
<li><strong>间接依赖</strong>：被依赖的资源如果依赖其他资源，当前项目间接依赖其他资源。</li>
</ul>
<p>依赖传递冲突问题</p>
<ul>
<li><strong>路径优先</strong>：当依赖中出现相同的资源时，层级越深，优先级越低，层级越浅，优先级越高。</li>
<li><strong>声明优先</strong>：当资源的相同层级被依赖时，配置顺序靠前的覆盖配置顺序靠后的。</li>
<li><strong>特殊优先</strong>：当同级配置了相同资源的不同版本，后配置的覆盖先配置的。</li>
</ul>
<h3>可选依赖</h3>
<ul>
<li>对外隐藏当前所依赖的资源，即改为透明不可见。</li>
</ul>
<p>案例</p>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token comment">&lt;!-- 暂无 --&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>排除依赖</h3>
<ul>
<li>主动断开依赖的资源，被排除的资源无需指定版本，即不需要。</li>
</ul>
<p>案例</p>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token comment">&lt;!-- 项目依赖 --&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependencies</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token comment">&lt;!-- Deeplearning4j 深度学习框架 --&gt;</span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.deeplearning4j<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>deeplearning4j-core<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>1.0.0-beta6<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">		<span class="token comment">&lt;!-- 排除依赖 --&gt;</span></span>
<span class="line">		<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>exclusions</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">			<span class="token comment">&lt;!-- 排除具体依赖 --&gt;</span></span>
<span class="line">			<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>exclusion</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">		        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>logging-parent<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">		        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.apache.logging<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">		    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>exclusion</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">		<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>exclusions</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">		</span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    </span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependencies</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>依赖范围</h3>
<ul>
<li>依赖的jar默认情况可以在任何地方使用。</li>
<li>可以通过<code>&lt;scope&gt; &lt;/scope&gt;</code>标签设定其作用范围。</li>
</ul>
<p>作用范围</p>
<ul>
<li>主程序范围有效（main文件夹范围内）</li>
<li>测试程序范围有效（test文件夹范围内）</li>
<li>是否参与打包（package指令范围内）</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:center">范围</th>
<th style="text-align:center">编译</th>
<th style="text-align:center">测试</th>
<th style="text-align:center">打包</th>
<th style="text-align:center">例子</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">compile</td>
<td style="text-align:center">Y</td>
<td style="text-align:center">Y</td>
<td style="text-align:center">Y</td>
<td style="text-align:center">日志</td>
</tr>
<tr>
<td style="text-align:center">test</td>
<td style="text-align:center"></td>
<td style="text-align:center">Y</td>
<td style="text-align:center"></td>
<td style="text-align:center">测试代码</td>
</tr>
<tr>
<td style="text-align:center">provided</td>
<td style="text-align:center">Y</td>
<td style="text-align:center">Y</td>
<td style="text-align:center"></td>
<td style="text-align:center">依赖的jar包</td>
</tr>
<tr>
<td style="text-align:center">runtime</td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center">Y</td>
<td style="text-align:center">jdbc</td>
</tr>
</tbody>
</table>
<p>案例</p>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token comment">&lt;!-- 项目依赖 --&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependencies</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- Deeplearning4j 深度学习框架 --&gt;</span></span>
<span class="line">	    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.deeplearning4j<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>deeplearning4j-core<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>1.0.0-beta6<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	    <span class="token comment">&lt;!-- 设置依赖范围 --&gt;</span></span>
<span class="line">	    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>scope</span><span class="token punctuation">&gt;</span></span>compile<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>scope</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    </span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependencies</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>依赖传递</h3>
<ul>
<li>默认情况下，所有依赖都是可传递的，这意味着如果你依赖了一个库，那么这个库所依赖的其他库也会被包含在你的项目中。</li>
<li><code>&lt;optional&gt;true&lt;/optional&gt;</code>：为<code>true</code>时不会传递给子模块。</li>
</ul>
<p>案例</p>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token comment">&lt;!-- 项目依赖 --&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependencies</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- Deeplearning4j 深度学习框架 --&gt;</span></span>
<span class="line">		<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.deeplearning4j<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>deeplearning4j-core<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>1.0.0-beta6<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	    <span class="token comment">&lt;!-- 是否不允许传递给子模块 --&gt;</span></span>
<span class="line">	    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>optional</span><span class="token punctuation">&gt;</span></span>true<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>optional</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">    </span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependencies</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>项目构建生命周期</h2>
<ul>
<li>通过定义项目生命周期和构建过程的各个阶段来管理项目的构建、测试和部署。</li>
<li>Maven 的项目生命周期主要分为三个内置的生命周期：default（默认）、clean 和 site。每个生命周期都由一系列的阶段（Phase）组成，这些阶段是有序的，且后面的阶段依赖于前面的阶段。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:center">步骤</th>
<th style="text-align:left">英文</th>
<th style="text-align:left">中文</th>
<th style="text-align:left">功能</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">01</td>
<td style="text-align:left">validate</td>
<td style="text-align:left">校验</td>
<td style="text-align:left">校验项目是否正确并且所有必要的信息可以完成项目的构建过程</td>
</tr>
<tr>
<td style="text-align:center">02</td>
<td style="text-align:left">initialize</td>
<td style="text-align:left">初始化</td>
<td style="text-align:left">初始化构建状态，比如设置属性值</td>
</tr>
<tr>
<td style="text-align:center">03</td>
<td style="text-align:left">generate-sources</td>
<td style="text-align:left">生成源代码</td>
<td style="text-align:left">生成包含在编译阶段中的任何源代码</td>
</tr>
<tr>
<td style="text-align:center">04</td>
<td style="text-align:left">process-sources</td>
<td style="text-align:left">处理源代码</td>
<td style="text-align:left">处理源代码，比如过滤任意值</td>
</tr>
<tr>
<td style="text-align:center">05</td>
<td style="text-align:left">generate-resources</td>
<td style="text-align:left">生成资源文件</td>
<td style="text-align:left">生成将会包含在项目包中的资源文件</td>
</tr>
<tr>
<td style="text-align:center">06</td>
<td style="text-align:left">process-resources</td>
<td style="text-align:left">处理资源文件</td>
<td style="text-align:left">复制和处理资源到目标目录，为打包阶段做好准备</td>
</tr>
<tr>
<td style="text-align:center">07</td>
<td style="text-align:left">compile</td>
<td style="text-align:left">编译</td>
<td style="text-align:left">编译项目的源代码</td>
</tr>
<tr>
<td style="text-align:center">08</td>
<td style="text-align:left">process-classes</td>
<td style="text-align:left">处理类文件</td>
<td style="text-align:left">处理编译生成的文件，比如对class文件的字节码改善优化</td>
</tr>
<tr>
<td style="text-align:center">09</td>
<td style="text-align:left">generate-test-sources</td>
<td style="text-align:left">生成测试源代码</td>
<td style="text-align:left">生成包含在编译阶段中的任何测试源代码</td>
</tr>
<tr>
<td style="text-align:center">10</td>
<td style="text-align:left">process-test-sources</td>
<td style="text-align:left">处理测试源代码</td>
<td style="text-align:left">处理测试源代码，比如过滤任意值</td>
</tr>
<tr>
<td style="text-align:center">11</td>
<td style="text-align:left">generate-test-resources</td>
<td style="text-align:left">生成测试资源文件</td>
<td style="text-align:left">为测试创建资源文件</td>
</tr>
<tr>
<td style="text-align:center">12</td>
<td style="text-align:left">process-test-resources</td>
<td style="text-align:left">处理测试资源文件</td>
<td style="text-align:left">复制和处理测试资源到目标目录</td>
</tr>
<tr>
<td style="text-align:center">13</td>
<td style="text-align:left">test-compile</td>
<td style="text-align:left">编译测试源码</td>
<td style="text-align:left">编译测试源代码到测试目标目录</td>
</tr>
<tr>
<td style="text-align:center">14</td>
<td style="text-align:left">process-test-classes</td>
<td style="text-align:left">处理测试类文件</td>
<td style="text-align:left">处理测试源代码编译生成的文件</td>
</tr>
<tr>
<td style="text-align:center">15</td>
<td style="text-align:left">test</td>
<td style="text-align:left">测试</td>
<td style="text-align:left">使用适合的单元测试框架运行测试</td>
</tr>
<tr>
<td style="text-align:center">16</td>
<td style="text-align:left">prepare-package</td>
<td style="text-align:left">准备打包</td>
<td style="text-align:left">在实际打包之前，执行任何的必要的操作为打包做准备</td>
</tr>
<tr>
<td style="text-align:center">17</td>
<td style="text-align:left">package</td>
<td style="text-align:left">打包</td>
<td style="text-align:left">将编译好的代码打包成可分发格式的文件，比如jar文件等</td>
</tr>
<tr>
<td style="text-align:center">18</td>
<td style="text-align:left">pre-integration-test</td>
<td style="text-align:left">集成测试前</td>
<td style="text-align:left">在执行集成测试前进行必要的动作，比如搭建需要的环境</td>
</tr>
<tr>
<td style="text-align:center">19</td>
<td style="text-align:left">integration-test</td>
<td style="text-align:left">集成测试</td>
<td style="text-align:left">处理和部署项目到可以运行集成测试环境中</td>
</tr>
<tr>
<td style="text-align:center">20</td>
<td style="text-align:left">post-integration-test</td>
<td style="text-align:left">集成测试后</td>
<td style="text-align:left">在执行集成测试完成后进行必要的动作，比如清理集成测试环境</td>
</tr>
<tr>
<td style="text-align:center">21</td>
<td style="text-align:left">verify</td>
<td style="text-align:left">验证</td>
<td style="text-align:left">运行任意的检查来验证项目包有效且达到质量标准</td>
</tr>
<tr>
<td style="text-align:center">22</td>
<td style="text-align:left">install</td>
<td style="text-align:left">安装</td>
<td style="text-align:left">安装项目到本地仓库，这样项目包可以作为其他本地项目的依赖</td>
</tr>
<tr>
<td style="text-align:center">23</td>
<td style="text-align:left">deploy</td>
<td style="text-align:left">部署</td>
<td style="text-align:left">将最终的项目包复制到远程仓库中与其他开发者和项目共享</td>
</tr>
</tbody>
</table>
<h2>修改Maven软件配置</h2>
<h3>配置文件位置</h3>
<ul>
<li>Maven配置文件位置：<code>Maven安装位置/conf/settings.xml</code></li>
</ul>
<p>修改本地仓库存储位置</p>
<ul>
<li>在配置文件中添加<code>&lt;localRepository&gt; &lt;/localRepository&gt;</code>标签。</li>
<li>在标签对中写仓库的存储位置。</li>
</ul>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token comment">&lt;!-- localRepository</span>
<span class="line">| The path to the local repository maven will use to store artifacts.</span>
<span class="line">|</span>
<span class="line">| Default: ${user.home}/.m2/repository</span>
<span class="line">&lt;localRepository&gt;/path/to/local/repo&lt;/localRepository&gt;</span>
<span class="line">--&gt;</span></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>localRepository</span><span class="token punctuation">&gt;</span></span>（仓库路径）<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>localRepository</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>修改镜像源</h3>
<ul>
<li>修改 maven 的默认软件仓库为“华为镜像源”仓库。</li>
<li>华为官方文档：<a href="https://mirrors.huaweicloud.com/mirrorDetail/5ea0025f2ab89b484a4dd5ce?mirrorName=maven&amp;catalog=language" target="_blank" rel="noopener noreferrer">网址连接</a></li>
<li>修改用户配置的Maven镜像源<code>/home/&lt;用户名&gt;/.m2/</code>目录下的<code>settings.xml</code>文件。（若没有该文件则手动创建该文件）</li>
<li>修改全局配置的Maven镜像源<code>/etc/maven/</code>目录下的<code>settings.xml</code>文件。</li>
</ul>
<p>修改内容如下：</p>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml"><pre><code class="language-xml"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>settings</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>mirrors</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">		<span class="token comment">&lt;!--配置具体的仓库的下载镜像--&gt;</span></span>
<span class="line">		<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>mirror</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">			<span class="token comment">&lt;!--镜像的唯一标识符，用来区分不同的mirror元素--&gt;</span></span>
<span class="line">			<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>id</span><span class="token punctuation">&gt;</span></span>huaweicloud<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>id</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">			<span class="token comment">&lt;!--对哪种仓库进行镜像，即替代哪个仓库--&gt;</span></span>
<span class="line">			<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>mirrorOf</span><span class="token punctuation">&gt;</span></span>central<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>mirrorOf</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">			<span class="token comment">&lt;!--镜像名称--&gt;</span></span>
<span class="line">			<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>name</span><span class="token punctuation">&gt;</span></span>华为云镜像源<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>name</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">			<span class="token comment">&lt;!--镜像URL--&gt;</span></span>
<span class="line">			<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>url</span><span class="token punctuation">&gt;</span></span>https://mirrors.huaweicloud.com/repository/maven/<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>url</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">		<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>mirror</span><span class="token punctuation">&gt;</span></span></span>
<span class="line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>mirrors</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span>
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>settings</span><span class="token punctuation">&gt;</span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - API</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-API.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - API</source>
      <description>文章摘要： Java 平台，标准版（Java SE）API 定义了通用计算的核心 Java 平台。 相关信息 外部相关文章 API详细查询：oracle官方文档，JavaSE 21版本的API文档。 内部相关文章 java.base 定义了 Java SE 平台的 foundational APIs。 java.compiler 定义了语言模型、注解处...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Mon, 18 Mar 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Java 平台，标准版（Java SE）API 定义了通用计算的核心 Java 平台。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li>API详细查询：<a href="https://docs.oracle.com/en/java/javase/21/docs/api/index.html" target="_blank" rel="noopener noreferrer">oracle官方文档</a>，JavaSE 21版本的API文档。</li>
</ul>
<p>内部相关文章</p>
<ul>
<li></li>
</ul>
</div>
<h2><code>java.base</code></h2>
<ul>
<li>定义了 Java SE 平台的 foundational APIs。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">包</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
<h2><code>java.compiler</code></h2>
<ul>
<li>定义了语言模型、注解处理和 Java 编译器 APIs。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">包</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
<h2><code>java.datatransfer</code></h2>
<ul>
<li>定义了在应用程序之间以及应用程序内部传输数据的 API。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">包</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
<h2><code>java.desktop</code></h2>
<ul>
<li>定义了 AWT 和 Swing 用户界面工具包，以及用于可访问性、音频、图像、打印和 JavaBeans 的 API。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">包</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
<h2><code>java.instrument</code></h2>
<ul>
<li>定义允许代理在 JVM 上运行的程序进行插装的服务的接口。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">包</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
<h2><code>java.logging</code></h2>
<ul>
<li>定义 Java 日志 API。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">包</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
<h2><code>java.management</code></h2>
<ul>
<li>定义了 Java 管理扩展（JMX）API。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">包</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
<h2><code>java.management.rmi</code></h2>
<ul>
<li>定义了 Java 管理扩展（JMX）远程 API 的 RMI 连接器。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">包</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
<h2><code>java.naming</code></h2>
<ul>
<li>定义了 Java 命名和目录接口（JNDI）API。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">包</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
<h2><code>java.net.http</code></h2>
<ul>
<li>定义了 HTTP 客户端和 WebSocket API。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">包</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
<h2><code>java.prefs</code></h2>
<ul>
<li>定义了 Preferences API。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">包</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
<h2><code>java.rmi</code></h2>
<ul>
<li>定义了远程方法调用（RMI）API。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">包</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
<h2><code>java.scripting</code></h2>
<ul>
<li>定义了脚本 API。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">包</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
<h2><code>java.se</code></h2>
<ul>
<li>定义了 Java SE 平台的 API。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">包</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
<h2><code>java.security.jgss</code></h2>
<ul>
<li>定义了 IETF 通用安全服务 API（GSS-API）的 Java 绑定。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">包</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
<h2><code>java.security.sasl</code></h2>
<ul>
<li>定义了 IETF 简单认证和安全层（SASL）的 Java 支持。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">包</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
<h2><code>java.sql</code></h2>
<ul>
<li>定义了 JDBC API。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">包</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
<h2><code>java.sql.rowset</code></h2>
<ul>
<li>定义了 JDBC RowSet API。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">包</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
<h2><code>java.transaction.xa</code></h2>
<ul>
<li>定义了一个用于在 JDBC 中支持分布式事务的 API。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">包</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
<h2><code>java.xml</code></h2>
<ul>
<li>定义了用于 XML 处理的 Java API（JAXP）。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">包</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
<h2><code>java.xml.crypto</code></h2>
<ul>
<li>定义了 XML 加密的 API。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">包</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - 关键字</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-%E5%85%B3%E9%94%AE%E5%AD%97.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-%E5%85%B3%E9%94%AE%E5%AD%97.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - 关键字</source>
      <description>文章摘要： 关键字是Java编程语言中的语法规则语句，具有特殊含义，用于定义程序的基本结构和元素。 访问修饰符 类、接口、方法、抽象、变量、代码块 流程控制 instanceof instanceof运算符的前一个操作数通常是一个引用类型变量，后一个操作数通常是一个类。 用于判断运算符前面的引用变量是否是运算符后面的类型，即是否是其自类型的实例。 判断...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Mon, 18 Mar 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 关键字是Java编程语言中的语法规则语句，具有特殊含义，用于定义程序的基本结构和元素。</p>
<!-- more -->
<h2>访问修饰符</h2>
<table>
<thead>
<tr>
<th style="text-align:left">标识符</th>
<th style="text-align:left">说明</th>
<th style="text-align:left">详情</th>
<th style="text-align:left">最早版本</th>
<th style="text-align:left">最后版本</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">private</td>
<td style="text-align:left">当前类访问级别</td>
<td style="text-align:left">私有的，<code>本类</code>可见</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">default</td>
<td style="text-align:left">包访问级别</td>
<td style="text-align:left">默认（可不写），<code>本类</code>、<code>同包</code>可见</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">protected</td>
<td style="text-align:left">子类访问级别</td>
<td style="text-align:left">受保护的，<code>本类</code>、<code>同包</code>、<code>子类</code>可见</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">public</td>
<td style="text-align:left">公共访问级别</td>
<td style="text-align:left">公共的，<code>本类</code>、<code>同包</code>、<code>子类</code>、<code>任何地方</code>对任何类可见</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
<h2>类、接口、方法、抽象、变量、代码块</h2>
<table>
<thead>
<tr>
<th style="text-align:left">标识符</th>
<th style="text-align:left">说明</th>
<th style="text-align:left">详情</th>
<th style="text-align:left">最早版本</th>
<th style="text-align:left">最后版本</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">class</td>
<td style="text-align:left">定义类</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">abstract</td>
<td style="text-align:left">定义抽象类</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">extends</td>
<td style="text-align:left">类继承抽象类/实现类</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">interface</td>
<td style="text-align:left">定义接口类</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">implements</td>
<td style="text-align:left">类继承接口类</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">static</td>
<td style="text-align:left">声明静态</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">final</td>
<td style="text-align:left">最终，不可改变的</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">synchronized</td>
<td style="text-align:left">线程、同步</td>
<td style="text-align:left">线程安全</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">volatile</td>
<td style="text-align:left">修饰变量</td>
<td style="text-align:left">表示该变量的值可能会被多个线程同时修改</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">transient</td>
<td style="text-align:left">修饰变量</td>
<td style="text-align:left">表示该变量不需要被序列化</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">native</td>
<td style="text-align:left">本地、原生方法（非java实现）</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">strictfp</td>
<td style="text-align:left">严格浮点、精准浮点</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">enum</td>
<td style="text-align:left">枚举类型</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
<h2>流程控制</h2>
<table>
<thead>
<tr>
<th style="text-align:left">标识符</th>
<th style="text-align:left">说明</th>
<th style="text-align:left">详情</th>
<th style="text-align:left">最早版本</th>
<th style="text-align:left">最后版本</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">if</td>
<td style="text-align:left">如果</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">else</td>
<td style="text-align:left">否则</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">switch</td>
<td style="text-align:left">根据值选择执行</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">case</td>
<td style="text-align:left">定义一个值以供switch选择</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">default</td>
<td style="text-align:left">在switch语句中定义默认分支</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">while</td>
<td style="text-align:left">循环</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">do</td>
<td style="text-align:left">运行</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">for</td>
<td style="text-align:left">循环</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">break</td>
<td style="text-align:left">跳出本层整个循环</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">continue</td>
<td style="text-align:left">跳出本层当前循环</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">return</td>
<td style="text-align:left">返回</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">assert</td>
<td style="text-align:left">断言表达式是否为真</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">instanceof</td>
<td style="text-align:left">判断某一个对象的类型是否继承自另一个类型中</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
<p><strong>instanceof</strong></p>
<ul>
<li><code>instanceof</code>运算符的前一个操作数通常是一个引用类型变量，后一个操作数通常是一个类。</li>
<li>用于判断运算符前面的引用变量是否是运算符后面的类型，即是否是其自类型的实例。</li>
<li>判断类型：<code>boolean</code></li>
</ul>
<p><strong>案例</strong></p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 定义一个字符串类型的变量。</span></span>
<span class="line"><span class="token class-name">String</span> s <span class="token operator">=</span> <span class="token string">"字符串类型"</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token comment">// 判断变量`s`是否是`String`字符串类型</span></span>
<span class="line"><span class="token keyword">boolean</span> bool <span class="token operator">=</span> s <span class="token keyword">instanceof</span> <span class="token class-name">String</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 结果是：true</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>异常处理</h2>
<table>
<thead>
<tr>
<th style="text-align:left">标识符</th>
<th style="text-align:left">说明</th>
<th style="text-align:left">详情</th>
<th style="text-align:left">最早版本</th>
<th style="text-align:left">最后版本</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">try</td>
<td style="text-align:left">抛出异常</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">catch</td>
<td style="text-align:left">捕获异常</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">finally</td>
<td style="text-align:left">垃圾回收器</td>
<td style="text-align:left">有没有异常都执行</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">throw</td>
<td style="text-align:left">手动抛出异常对象</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">throws</td>
<td style="text-align:left">声明一个方法中可能会抛出异常</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
<h2>包相关</h2>
<table>
<thead>
<tr>
<th style="text-align:left">标识符</th>
<th style="text-align:left">说明</th>
<th style="text-align:left">详情</th>
<th style="text-align:left">最早版本</th>
<th style="text-align:left">最后版本</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">package</td>
<td style="text-align:left">定义包</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">import</td>
<td style="text-align:left">引入包</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
<h2>基本数据类型</h2>
<table>
<thead>
<tr>
<th style="text-align:left">标识符</th>
<th style="text-align:left">说明</th>
<th style="text-align:left">详情</th>
<th style="text-align:left">最早版本</th>
<th style="text-align:left">最后版本</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">byte</td>
<td style="text-align:left">字节型</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">short</td>
<td style="text-align:left">短整型</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">int</td>
<td style="text-align:left">整型</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">long</td>
<td style="text-align:left">长整型</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">float</td>
<td style="text-align:left">单精度浮点</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">double</td>
<td style="text-align:left">双精度浮点</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">char</td>
<td style="text-align:left">字符型</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">boolean</td>
<td style="text-align:left">布尔型</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
<h2>变量引用</h2>
<table>
<thead>
<tr>
<th style="text-align:left">标识符</th>
<th style="text-align:left">说明</th>
<th style="text-align:left">详情</th>
<th style="text-align:left">最早版本</th>
<th style="text-align:left">最后版本</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">new</td>
<td style="text-align:left">实例化对象</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">this</td>
<td style="text-align:left">当前对象</td>
<td style="text-align:left">本身调用者当前对象</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">super</td>
<td style="text-align:left">引用基类（父类、超类）</td>
<td style="text-align:left">父类对象的引用</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">void</td>
<td style="text-align:left">无返回值</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">null</td>
<td style="text-align:left">空值</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">true</td>
<td style="text-align:left">真</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">false</td>
<td style="text-align:left">假</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - 占位符</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-%E5%8D%A0%E4%BD%8D%E7%AC%A6.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-%E5%8D%A0%E4%BD%8D%E7%AC%A6.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - 占位符</source>
      <description>文章摘要： 占位符主要用于格式化字符串。 类型占位符 %d - 整数型（十进制） %f - 浮点型 %e 或 %E - 指数型 %s - 字符串 %c - 字符 %b - 布尔值 %t - 日期/时间（需要结合具体的格式化指令，如 %tc） 宽度占位符 %10d - 指定整数至少占用10个字符的宽度，如果不足则在前面补空格 %-10d - 指定整数至少...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Mon, 18 Mar 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 占位符主要用于格式化字符串。</p>
<!-- more -->
<h2>类型占位符</h2>
<ul>
<li><code>%d</code> - 整数型（十进制）</li>
<li><code>%f</code> - 浮点型</li>
<li><code>%e</code> 或 <code>%E</code> - 指数型</li>
<li><code>%s</code> - 字符串</li>
<li><code>%c</code> - 字符</li>
<li><code>%b</code> - 布尔值</li>
<li><code>%t</code> - 日期/时间（需要结合具体的格式化指令，如 <code>%tc</code>）</li>
</ul>
<h2>宽度占位符</h2>
<ul>
<li><code>%10d</code> - 指定整数至少占用10个字符的宽度，如果不足则在前面补空格</li>
<li><code>%-10d</code> - 指定整数至少占用10个字符的宽度，如果不足则在后面补空格</li>
<li><code>%8.2f</code> - 指定浮点数至少占用8个字符的宽度，其中小数部分占用2位</li>
</ul>
<h2>精度占位符</h2>
<ul>
<li><code>%.2f</code> - 指定浮点数小数部分只显示两位</li>
<li><code>%10.2f</code> - 指定浮点数至少占用10个字符的宽度，小数部分占用2位</li>
</ul>
<h2>案例</h2>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">int</span> num <span class="token operator">=</span> <span class="token number">42</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">double</span> pi <span class="token operator">=</span> <span class="token number">3.14159</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token class-name">String</span> name <span class="token operator">=</span> <span class="token string">"Alice"</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"整数: %d\n"</span><span class="token punctuation">,</span> num<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 输出：整数 42</span></span>
<span class="line"><span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"浮点数: %.2f\n"</span><span class="token punctuation">,</span> pi<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 输出：浮点数：3.14</span></span>
<span class="line"><span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"字符串: %s\n"</span><span class="token punctuation">,</span> name<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 输出：字符串：Alice</span></span>
<span class="line"><span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"宽度与精度: %10.3f\n"</span><span class="token punctuation">,</span> pi<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 输出：宽度与精度：3.142</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - 查询手册 - Java SE 8</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-JavaSE8.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-JavaSE8.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - 查询手册 - Java SE 8</source>
      <description>文章摘要： Java是编程语言，跨平台、强类型、多线程、面向对象编程的编程语言。 相关信息 外部相关文章 官方Java文档：Java 8 开发工具包文档，（强烈推荐）官方提供的java文档。 内部相关文章 Java SE API： OracleJDK（Java 开发工具包），JDK工具和实用程序的使用总结。 Java 代码风格： 注释 学习java编程...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Mon, 18 Mar 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Java是编程语言，跨平台、强类型、多线程、面向对象编程的编程语言。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li>官方Java文档：<a href="https://www.oracle.com/java/technologies/javase-jdk8-doc-downloads.html" target="_blank" rel="noopener noreferrer">Java 8 开发工具包文档</a>，（强烈推荐）官方提供的java文档。</li>
</ul>
<p>内部相关文章</p>
<ul>
<li>Java SE API：<a href="/software/Language-Java-JavaSE-API.html" target="_blank">Language-Java-JavaSE-API</a></li>
<li>OracleJDK（Java 开发工具包）<a href="/software/Package-OracleJDK.html" target="_blank">Package-OracleJDK</a>，JDK工具和实用程序的使用总结。</li>
<li>Java 代码风格：<a href="/software/Language-Java-JavaSE-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E4%BB%A3%E7%A0%81%E9%A3%8E%E6%A0%BC.html" target="_blank">Language-Java-JavaSE-热门推荐-代码风格</a></li>
</ul>
</div>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>学习java编程语言，需要关注 “基础语法” 和 “进阶语法”。</li>
<li>编写代码大部分时间主要在学习 “官方封装好的API接口” 和 “第三方类库中提供的API接口”。</li>
<li>为了提高代码质量请将 “设计模式”、“算法设计”、“数据结构”、“软件架构” 加入到编写代码的思考过程中。</li>
</ul>
</div>
<h2>介绍</h2>
<ul>
<li>Java 8（也称为JDK 1.8）是Java语言发展史上的一个重要里程碑，于2014年3月发布。‌</li>
</ul>
<h2>标准API查询</h2>
<p>Java标准API整理手册：<a href="/software/Language-Java-JavaSE-API.html" target="_blank">Language-Java-JavaSE-API</a></p>
]]></content:encoded>
      <enclosure url="https://www.oracle.com/a/ocom/img/rc30v1-java-se.png" type="image/png"/>
    </item>
    <item>
      <title>Language - Java - Java SE - 运算符</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-%E8%BF%90%E7%AE%97%E7%AC%A6.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-%E8%BF%90%E7%AE%97%E7%AC%A6.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - 运算符</source>
      <description>文章摘要： 运算符用于对变量和值的执行操作。 Java运算符共分为6类：算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、条件运算符（三元运算符） 算术运算符（共7个） 注释 %计算公式：a % b = a - a / b * b 自增自减（前）：1 = 1++，先取值后运算。 自增自减（后）：1 = ++1，先运算后取值。 关系（比较）运算符...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Mon, 18 Mar 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 运算符用于对变量和值的执行操作。</p>
<ul>
<li>Java运算符共分为6类：算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、条件运算符（三元运算符）</li>
</ul>
<!-- more -->
<h2>算术运算符（共7个）</h2>
<table>
<thead>
<tr>
<th style="text-align:center">运算符</th>
<th style="text-align:left">名称</th>
<th style="text-align:left">例子</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">+</td>
<td style="text-align:left">加（求和） | 正号</td>
<td style="text-align:left">x + y | +1</td>
</tr>
<tr>
<td style="text-align:center">-</td>
<td style="text-align:left">减（求差） | 负号</td>
<td style="text-align:left">x - y | -1</td>
</tr>
<tr>
<td style="text-align:center">*</td>
<td style="text-align:left">乘（求积）</td>
<td style="text-align:left">x * y</td>
</tr>
<tr>
<td style="text-align:center">/</td>
<td style="text-align:left">除（取整）</td>
<td style="text-align:left">x / y</td>
</tr>
<tr>
<td style="text-align:center">%</td>
<td style="text-align:left">模（取余）</td>
<td style="text-align:left">x % y</td>
</tr>
<tr>
<td style="text-align:center">++</td>
<td style="text-align:left">自增</td>
<td style="text-align:left">1 = 1++， 2 = ++1</td>
</tr>
<tr>
<td style="text-align:center">--</td>
<td style="text-align:left">自减</td>
<td style="text-align:left">1 = 1--， 0 = --1</td>
</tr>
</tbody>
</table>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li><code>%</code>计算公式：<code>a % b = a - a / b * b</code></li>
<li>自增自减（前）：<code>1 = 1++</code>，先取值后运算。</li>
<li>自增自减（后）：<code>1 = ++1</code>，先运算后取值。</li>
</ul>
</div>
<h2>关系（比较）运算符（共6个）</h2>
<table>
<thead>
<tr>
<th style="text-align:center">运算符</th>
<th style="text-align:left">名称</th>
<th style="text-align:left">例子</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">==</td>
<td style="text-align:left">全等</td>
<td style="text-align:left">x == y</td>
</tr>
<tr>
<td style="text-align:center">!=</td>
<td style="text-align:left">不等</td>
<td style="text-align:left">x != y</td>
</tr>
<tr>
<td style="text-align:center">&lt;</td>
<td style="text-align:left">小于</td>
<td style="text-align:left">x &lt; y</td>
</tr>
<tr>
<td style="text-align:center">&gt;</td>
<td style="text-align:left">大于</td>
<td style="text-align:left">x &gt; y</td>
</tr>
<tr>
<td style="text-align:center">&lt;=</td>
<td style="text-align:left">小于等于</td>
<td style="text-align:left">x &lt;= y</td>
</tr>
<tr>
<td style="text-align:center">&gt;=</td>
<td style="text-align:left">大于等于</td>
<td style="text-align:left">x &gt;= y</td>
</tr>
</tbody>
</table>
<h2>逻辑运算符（共3个）</h2>
<table>
<thead>
<tr>
<th style="text-align:center">运算符</th>
<th style="text-align:left">名称</th>
<th style="text-align:left">描述</th>
<th style="text-align:left">例子</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">&amp;</td>
<td style="text-align:left">逻辑与（并且）</td>
<td style="text-align:left">若两个条件都为<code>true</code>，则返回<code>true</code></td>
<td style="text-align:left">0&amp;0=0, 1&amp;1=1, 0&amp;1=0</td>
</tr>
<tr>
<td style="text-align:center">&amp;&amp;</td>
<td style="text-align:left">短路与（并且）</td>
<td style="text-align:left">若两个条件都为<code>true</code>，则返回<code>true</code></td>
<td style="text-align:left">0&amp;&amp;0=0, 1&amp;&amp;1=1, 0&amp;&amp;1=0</td>
</tr>
<tr>
<td style="text-align:center">|</td>
<td style="text-align:left">逻辑或</td>
<td style="text-align:left">两个条件中有1个或2个为<code>true</code>，则返回<code>true</code></td>
<td style="text-align:left">0|0=0, 1|1=1, 0|1=1</td>
</tr>
<tr>
<td style="text-align:center">||</td>
<td style="text-align:left">短路或</td>
<td style="text-align:left">两个条件中有1个或2个为<code>true</code>，则返回<code>true</code></td>
<td style="text-align:left">0||0=0, 1||1=1, 0||1=1</td>
</tr>
<tr>
<td style="text-align:center">!</td>
<td style="text-align:left">逻辑非（逻辑与取反）</td>
<td style="text-align:left">“逻辑与”的反转结果，若结果为<code>false</code>，则返回<code>true</code></td>
<td style="text-align:left">!(0&amp;0)=1, !(1&amp;1)=0, !(0&amp;1)=1</td>
</tr>
<tr>
<td style="text-align:center">^</td>
<td style="text-align:left">逻辑异或（逻辑或取反）</td>
<td style="text-align:left">“逻辑或”的反转结果，若结果为<code>false</code>，则返回<code>true</code></td>
<td style="text-align:left">!(0|0)=1, !(1|1)=0, !(0|1)=0</td>
</tr>
</tbody>
</table>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p><code>&amp;</code>（逻辑与），<code>|</code>（逻辑或）</p>
<ul>
<li>即使第一个条件为<code>false</code>，也会继续判断第二个条件，效率低。</li>
</ul>
<p><code>&amp;&amp;</code>（短路与），<code>||</code>（短路或）</p>
<ul>
<li>如果第一个条件为<code>false</code>，就不会再判断第二个条件，效率高。</li>
</ul>
</div>
<h2>位运算符（共8个）</h2>
<ul>
<li>位运算符操作的对象是二进制数，因此需要将数据转换为二进制数再进行运算，特别注意进制转换相关知识。<a href="/note/Diary-%E8%BF%9B%E5%88%B6.html" target="_blank">Diary-进制</a></li>
<li>位运算符比除法、乘法计算速度快很多。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:center">运算符</th>
<th style="text-align:left">名称</th>
<th style="text-align:left">描述</th>
<th style="text-align:left">例子</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">&amp;</td>
<td style="text-align:left">按位与</td>
<td style="text-align:left">相对应的位都是1，则结果为1，否则为0</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">|</td>
<td style="text-align:left">按位或</td>
<td style="text-align:left">相对应的位有1个或2个是1，则结果为1，否则为0</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">^</td>
<td style="text-align:left">按位异或</td>
<td style="text-align:left">相对应的位有1个或2个是1，则反转后为0；若都是0，则反转后为1</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">~</td>
<td style="text-align:left">按位取反</td>
<td style="text-align:left">按位取反每一位操作数，即0改成1，1改成0</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">&gt;&gt;</td>
<td style="text-align:left">右移</td>
<td style="text-align:left">低位溢出，符号位不变，并用符号位补溢出的高位</td>
<td style="text-align:left"><span v-pre="" class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>100</mn><mo>&gt;</mo><mo>&gt;</mo><mn>2</mn></mrow><annotation encoding="application/x-tex">100&gt;&gt;2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6835em;vertical-align:-0.0391em;"></span><span class="mord">100</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span></span></span></span> 等价于 <span v-pre="" class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>100</mn><mi mathvariant="normal">/</mi><mn>2</mn><mi mathvariant="normal">/</mi><mn>2</mn></mrow><annotation encoding="application/x-tex">100/2/2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">100/2/2</span></span></span></span></td>
</tr>
<tr>
<td style="text-align:center">&lt;&lt;</td>
<td style="text-align:left">左移</td>
<td style="text-align:left">符号位不变，低位补0</td>
<td style="text-align:left"><span v-pre="" class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>100</mn><mo>&gt;</mo><mo>&gt;</mo><mn>2</mn></mrow><annotation encoding="application/x-tex">100&gt;&gt;2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6835em;vertical-align:-0.0391em;"></span><span class="mord">100</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span></span></span></span> 等价于 <span v-pre="" class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>100</mn><mo>∗</mo><mn>2</mn><mo>∗</mo><mn>2</mn></mrow><annotation encoding="application/x-tex">100*2*2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">100</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">∗</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">∗</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span></span></span></span></td>
</tr>
<tr>
<td style="text-align:center">&gt;&gt;&gt;</td>
<td style="text-align:left">无符号右移</td>
<td style="text-align:left">忽略符号位，低位溢出，高位补0</td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
<h2>赋值运算符（共13个）</h2>
<table>
<thead>
<tr>
<th style="text-align:center">运算符</th>
<th style="text-align:left">名称</th>
<th style="text-align:left">例子</th>
<th style="text-align:left">等效于</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">=</td>
<td style="text-align:left">赋值</td>
<td style="text-align:left">x = 1</td>
<td style="text-align:left">x = 1</td>
</tr>
<tr>
<td style="text-align:center">+=</td>
<td style="text-align:left">加法赋值</td>
<td style="text-align:left">x += 1</td>
<td style="text-align:left">x = x + 1</td>
</tr>
<tr>
<td style="text-align:center">-=</td>
<td style="text-align:left">减法赋值</td>
<td style="text-align:left">x -= 1</td>
<td style="text-align:left">x = x - 1</td>
</tr>
<tr>
<td style="text-align:center">*=</td>
<td style="text-align:left">乘法赋值</td>
<td style="text-align:left">x *= 1</td>
<td style="text-align:left">x = x * 1</td>
</tr>
<tr>
<td style="text-align:center">/=</td>
<td style="text-align:left">取整赋值</td>
<td style="text-align:left">x /= 1</td>
<td style="text-align:left">x = x / 1</td>
</tr>
<tr>
<td style="text-align:center">%=</td>
<td style="text-align:left">取余赋值</td>
<td style="text-align:left">x %= 1</td>
<td style="text-align:left">x = x % 1</td>
</tr>
<tr>
<td style="text-align:center">&amp;=</td>
<td style="text-align:left">位与赋值</td>
<td style="text-align:left">二进制A &amp;= 二进制B</td>
<td style="text-align:left">二进制B = 二进制A &amp; 二进制B</td>
</tr>
<tr>
<td style="text-align:center">|=</td>
<td style="text-align:left">位或赋值</td>
<td style="text-align:left">二进制A |= 二进制B</td>
<td style="text-align:left">二进制B = 二进制A | 二进制B</td>
</tr>
<tr>
<td style="text-align:center">^=</td>
<td style="text-align:left">位异或赋值</td>
<td style="text-align:left">二进制A ^= 二进制B</td>
<td style="text-align:left">二进制B = 二进制A ^ 二进制B</td>
</tr>
<tr>
<td style="text-align:center">~=</td>
<td style="text-align:left">位取反赋值</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">&lt;&lt;=</td>
<td style="text-align:left">位左移赋值</td>
<td style="text-align:left">二进制A &lt;&lt;= 移动的位数</td>
<td style="text-align:left">二进制B = 二进制A &lt;&lt; 移动的位数</td>
</tr>
<tr>
<td style="text-align:center">&gt;&gt;=</td>
<td style="text-align:left">位右移赋值</td>
<td style="text-align:left">二进制A &gt;&gt;= 移动的位数</td>
<td style="text-align:left">二进制B = 二进制A &gt;&gt; 移动的位数</td>
</tr>
<tr>
<td style="text-align:center">&gt;&gt;&gt;=</td>
<td style="text-align:left">位右移补零赋值</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>复合赋值运算符会进行类型转换。</p>
</div>
<h2>三元（条件）运算符（共1个）</h2>
<ul>
<li>条件运算符又称为三元运算符。</li>
<li>运算符符号：<code>?</code>(问号)、<code>:</code>(冒号)。</li>
<li>运算时需要操作三个操作数。</li>
</ul>
<p><strong>案例</strong></p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// &lt;判断条件&gt; ? &lt;条件为`ture`执行&gt; : &lt;条件为`false`执行&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">//案例一</span></span>
<span class="line"><span class="token keyword">int</span> a <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span></span>
<span class="line">string data <span class="token operator">=</span> <span class="token punctuation">(</span>a <span class="token operator">&gt;</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token operator">?</span> <span class="token string">"正确"</span> ： <span class="token string">"错误"</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>data<span class="token punctuation">)</span></span>
<span class="line"><span class="token comment">// 结果是：正确</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 案例二</span></span>
<span class="line"><span class="token keyword">int</span> a <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span></span>
<span class="line">string data <span class="token operator">=</span> <span class="token punctuation">(</span>a <span class="token operator">&lt;</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token operator">?</span> <span class="token string">"正确"</span> ： <span class="token string">"错误"</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>data<span class="token punctuation">)</span></span>
<span class="line"><span class="token comment">// 结果是：错误</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE - 运算符优先级</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-%E8%BF%90%E7%AE%97%E7%AC%A6%E4%BC%98%E5%85%88%E7%BA%A7.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE-%E8%BF%90%E7%AE%97%E7%AC%A6%E4%BC%98%E5%85%88%E7%BA%A7.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE - 运算符优先级</source>
      <description>文章摘要： Java运算符优先级，是描述在计算机运算计算表达式时执行运算的先后顺序。先执行具有较高优先级的运算，然后执行较低优先级的运算。例如，我们常说的先执行相乘和除，再执行加减运算。 运算符优先级</description>
      <category>软件程序/程序语言</category>
      <pubDate>Mon, 18 Mar 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Java运算符优先级，是描述在计算机运算计算表达式时执行运算的先后顺序。先执行具有较高优先级的运算，然后执行较低优先级的运算。例如，我们常说的先执行相乘和除，再执行加减运算。</p>
<!-- more -->
<h2>运算符优先级</h2>
<table>
<thead>
<tr>
<th style="text-align:center">优先级序号</th>
<th style="text-align:left">运算符</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">01</td>
<td style="text-align:left">.<code>点号</code>、;<code>分号</code>、,<code>逗号</code>、()<code>圆括号</code>、[]<code>方括号</code>、{}<code>花括号</code></td>
<td style="text-align:left">优先级最高</td>
</tr>
<tr>
<td style="text-align:center">02</td>
<td style="text-align:left">!<code>逻辑非</code>、+<code>正</code>、-<code>负</code>、~<code>位取反</code>、++<code>自增</code>、--<code>自减</code></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">03</td>
<td style="text-align:left">*<code>乘</code>、/<code>除</code>、%<code>模</code></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">04</td>
<td style="text-align:left">+<code>加</code>、-<code>减</code></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">05</td>
<td style="text-align:left">&lt;&lt;<code>位左移</code>、&gt;&gt;<code>位右移</code>、&gt;&gt;&gt;<code>位右移补零</code></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">06</td>
<td style="text-align:left">&lt;<code>小于</code>、&gt;<code>大于</code>、&lt;=<code>小于等于</code>、&gt;=<code>大于等于</code>、instanceof<code>关键字</code></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">07</td>
<td style="text-align:left">==<code>全等</code>、!=<code>不等</code></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">08</td>
<td style="text-align:left">&amp;<code>逻辑与</code></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">09</td>
<td style="text-align:left">^<code>逻辑异或</code></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">10</td>
<td style="text-align:left">|<code>逻辑或</code></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">11</td>
<td style="text-align:left">&amp;&amp;<code>短路与</code></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">12</td>
<td style="text-align:left">||<code>短路或</code></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">13</td>
<td style="text-align:left">?<code>问号</code>、:<code>冒号</code></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">14</td>
<td style="text-align:left">=<code>赋值</code>、+=<code>加法赋值</code>、-=<code>减法赋值</code>、*=<code>乘法赋值</code>、/=<code>除法赋值</code>、%=<code>取余赋值</code>、&amp;=<code>位与赋值</code>、|=<code>位或赋值</code>、^=<code>位异或赋值</code>、~=<code>位取反赋值</code>、&lt;&lt;=<code>位左移赋值</code>、&gt;&gt;=<code>位右移赋值</code>、&gt;&gt;&gt;=<code>位右移补零赋值</code></td>
<td style="text-align:left">优先级最低</td>
</tr>
</tbody>
</table>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Java - Java SE</title>
      <link>https://blog.magictable.ha.cn/software/Language-Java-JavaSE.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Java-JavaSE.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Java - Java SE</source>
      <description>相关信息 外部相关文章 B站课程推荐：韩顺平 - Java SE 课程 内部相关文章 代码风格： 代码规范： 命名规范： 版本对比： 介绍 简要说明 ‌ 主要功能 注意事项 适用场景 云服务 重要概念 注释 Java官方在整理一份实现整个“世界”的底层代码类库，即封装代码对外调用。 Java不同的版本，本质是“迭代”和“修正”的过程，关注哪些“新增删除...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Mon, 18 Mar 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li>B站课程推荐：<a href="https://www.bilibili.com/video/BV1fh411y7R8" target="_blank" rel="noopener noreferrer">韩顺平 - Java SE 课程</a></li>
</ul>
<p>内部相关文章</p>
<ul>
<li>代码风格：<a href="/software/Language-Java-JavaSE-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E4%BB%A3%E7%A0%81%E9%A3%8E%E6%A0%BC.html" target="_blank">Language-Java-JavaSE-热门推荐-代码风格</a></li>
<li>代码规范：<a href="/software/Language-Java-JavaSE-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83.html" target="_blank">Language-Java-JavaSE-热门推荐-代码规范</a></li>
<li>命名规范：<a href="/software/Language-Java-JavaSE-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E5%91%BD%E5%90%8D%E8%A7%84%E8%8C%83.html" target="_blank">Language-Java-JavaSE-热门推荐-命名规范</a></li>
<li>版本对比：<a href="/software/Language-Java-JavaSE-%E6%9F%A5%E8%AF%A2%E6%89%8B%E5%86%8C-JavaSE%E7%89%88%E6%9C%AC%E5%AF%B9%E6%AF%94.html" target="_blank">Language-Java-JavaSE-查询手册-JavaSE版本对比</a></li>
<li><a href="/software/Language-Java-JavaSE-API.html" target="_blank">Language-Java-JavaSE-API</a></li>
</ul>
</div>
<h2>介绍</h2>
<p>简要说明</p>
<ul>
<li>‌</li>
</ul>
<p>主要功能</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li></li>
</ul>
<p>适用场景</p>
<ul>
<li>云服务</li>
</ul>
<h2>重要概念</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>Java官方在整理一份实现整个“世界”的底层代码类库，即封装代码对外调用。</li>
<li>Java不同的版本，本质是“迭代”和“修正”的过程，关注哪些“新增删除的功能”和“修订功能”。</li>
<li>我们应该“关注、学习、使用”这些公共标准基础类库，减少第三方类库的依赖。</li>
<li>所有“新功能/特性”、“语法规则”的底层都是封装好的代码类库，只不过有一些被设置为“默认导入”，即不需要手动导入代码类库。</li>
</ul>
</div>
<h3>JVM、JRE、JDK的关系</h3>
<p>详细总结：<a href="/software/Package-OracleJDK-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-JVM%E3%80%81JRE%E3%80%81JDK%E7%9A%84%E5%85%B3%E7%B3%BB.html" target="_blank">Package-OracleJDK-问题总结-JVM、JRE、JDK的关系</a></p>
<h3>编译与执行周期</h3>
<p>在 Java 编程语言中，所有源代码首先以纯文本文件编写，以 .java 扩展名结尾。然后，javac 编译器将这些源文件编译为 .class 文件。.class 文件不包含处理器原生的代码;它包含字节码 — Java 虚拟机1 （Java VM） 的机器语言。然后，java 启动器工具使用 Java 虚拟机的实例运行您的应用程序。</p>
<blockquote>
<p><img src="https://docs.oracle.com/javase/tutorial/figures/getStarted/getStarted-compiler.gif" alt=""></p>
</blockquote>
<p>由于 Java VM 在许多不同的操作系统上可用，因此相同的 .class 文件能够在 Microsoft Windows、Solaris™ 操作系统 （Solaris OS）、Linux 或 Mac OS 上运行。某些虚拟机（如 Java SE HotSpot 概览，在运行时执行其他步骤以提升应用程序的性能。这包括各种任务，例如查找性能瓶颈和重新编译 （到本机代码） 常用代码段。</p>
<blockquote>
<p><img src="https://docs.oracle.com/javase/tutorial/figures/getStarted/helloWorld.gif" alt=""></p>
</blockquote>
<h2>第一阶段 - 基础知识</h2>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">package</span> <span class="token namespace">tech<span class="token punctuation">.</span>magictable<span class="token punctuation">.</span>softwareagent<span class="token punctuation">.</span>service</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>boot<span class="token punctuation">.</span></span><span class="token class-name">SpringApplication</span></span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>boot<span class="token punctuation">.</span>autoconfigure<span class="token punctuation">.</span></span><span class="token class-name">SpringBootApplication</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token annotation punctuation">@SpringBootApplication</span> <span class="token comment">// 标记成SpringBoot的启动入口</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">App</span> <span class="token punctuation">{</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> ages<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">SpringApplication</span><span class="token punctuation">.</span><span class="token function">run</span><span class="token punctuation">(</span><span class="token class-name">App</span><span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">,</span> ages<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>缩进</h2>
<ul>
<li>缩进是4个空格。</li>
<li>每行结束需要用分号<code>;</code>结束。</li>
<li>java用花括号<code>{}</code>来界定代码范围，即局部作用范围或全局作用范围。</li>
</ul>
<h2>注释</h2>
<ul>
<li>用于在源代码中解释代码的作用，可以增强程序的可读性，可维护性。</li>
<li>注释不会被编译器包含在最终的可执行程序中，因此不会影响程序的运行。</li>
</ul>
<p>Java注释分为三种类型：单行注释、多行注释、文档注释</p>
<ul>
<li><strong>单行注释</strong>：以双斜杠<code>//</code>开始。</li>
<li><strong>多行注释</strong>：以<code>/*</code>开始，以<code>*/</code>结束。</li>
<li><strong>文档注释</strong>：以<code>/**</code>开始，以<code>*/</code>结束，通常出现在类、方法、字段的声明前面，用于生成代码文档，这种注释可以被<code>javadoc</code>命令提取并生成API文档。</li>
</ul>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 单行注释</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">/*</span>
<span class="line"> *多行注释</span>
<span class="line"> *多行注释</span>
<span class="line"> */</span></span>
<span class="line"></span>
<span class="line"><span class="token doc-comment comment">/**</span>
<span class="line"> *文档注释</span>
<span class="line"> *包含类、方法、字段的详细信息</span>
<span class="line"> */</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>标识符</h2>
<ul>
<li>用来给类名、变量名、方法名等对象定义的有效字符序列，称为标识符。</li>
</ul>
<p>标识符命名规范</p>
<ul>
<li>所有的标识符是允许使用字母（<code>A~Z</code>或者<code>a~z</code>）、数字（<code>0~9</code>）、美元符（<code>$</code>）、或者下划线（<code>_</code>）构成。</li>
<li>不能有空格。</li>
<li>不能以数字开头。</li>
<li>严格区分大小写。</li>
<li>不能与“关键字”、“保留字”重名。</li>
</ul>
<p>公共知识 - 代码命名规范：<a href="/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E8%A7%84%E8%8C%83-%E9%80%9A%E7%94%A8%E4%BB%A3%E7%A0%81%E5%91%BD%E5%90%8D%E8%A7%84%E8%8C%83.html" target="_blank">基础知识-规范-通用代码命名规范</a></p>
<p>Java 命名规范详细总结：<a href="/software/Language-Java-JavaSE-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E5%91%BD%E5%90%8D%E8%A7%84%E8%8C%83.html" target="_blank">Language-Java-JavaSE-热门推荐-命名规范</a></p>
<h2>关键字</h2>
<ul>
<li>关键字是Java编程语言中的语法规则语句，具有特殊含义，用于定义程序的基本结构和元素。</li>
<li>关键字是Java语言的一部分，其数量有限且固定，不能更改或重新定义。</li>
</ul>
<p>详细总结：<a href="/software/Language-Java-JavaSE-%E5%85%B3%E9%94%AE%E5%AD%97.html" target="_blank">Language-Java-JavaSE-关键字</a></p>
<h2>保留字</h2>
<ul>
<li>当前Java版本尚未使用，但以后版本可能会作为关键字使用的标识符被称为保留字。</li>
<li>==待完善==</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">标识符</th>
<th style="text-align:left">说明</th>
<th style="text-align:left">详情</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">goto</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">const</td>
<td style="text-align:left"></td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
<h2>变量</h2>
<ul>
<li>计算机内存中的一块存储空间，是存储数据的基本单元。</li>
<li>变量是程序中用于存储数据的容器。</li>
<li>变量的值在程序执行过程中可以被改变。</li>
<li>变量的三要素：数据类型、变量名、数值</li>
</ul>
<p>变量创建步骤</p>
<ol>
<li>声明变量，即根据数据类型向在内存中申请空间。</li>
<li>赋值，即将数据存储到对应的内存空间。</li>
</ol>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// &lt;数据类型&gt; &lt;变量名&gt; = &lt;数值&gt;;</span></span>
<span class="line"><span class="token keyword">int</span> value <span class="token operator">=</span> <span class="token number">100</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h2>作用域/范围</h2>
<ul>
<li>变量、方法或类在程序中可以被访问和使用的范围。</li>
<li>决定了变量或方法的可见性，以及它们在内存中的生命周期。</li>
</ul>
<p>作用域的分类</p>
<ul>
<li><strong>局部作用域</strong>：仅限于方法或代码块内部，生命周期短。</li>
<li><strong>实例作用域</strong>：与对象实例相关联，生命周期覆盖整个对象。</li>
<li><strong>类作用域</strong>：与类相关联，生命周期覆盖整个程序运行期间。</li>
<li><strong>块作用域</strong>：仅限于代码块内部，用于临时变量管理。</li>
</ul>
<h2>运算符</h2>
<ul>
<li>运算符：对常量或变量进行操作的符号。</li>
<li>Javad编程语言的运算符可分为一下6类：算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、条件运算符（三元运算符）</li>
</ul>
<p>详细总结：<a href="/software/Language-Java-JavaSE-%E8%BF%90%E7%AE%97%E7%AC%A6.html" target="_blank">Language-Java-JavaSE-运算符</a></p>
<h2>运算符优先级</h2>
<ul>
<li>运算符有规定优先级别等级，来防止冲突。</li>
</ul>
<p>详细总结：<a href="/software/Language-Java-JavaSE-%E8%BF%90%E7%AE%97%E7%AC%A6%E4%BC%98%E5%85%88%E7%BA%A7.html" target="_blank">Language-Java-JavaSE-运算符优先级</a></p>
<h2>数据类型</h2>
<ul>
<li>Java是强类型语言，对变量具有严格的数据类型区分。</li>
</ul>
<p>基本数据类型</p>
<ul>
<li>变量传递时，传递的是数据，即在内存中硬拷贝了一份数据。</li>
<li><strong>支持数据类型</strong>：字符整型<code>byte</code>、短整型<code>short</code>、整型<code>int</code>、长整型<code>long</code>、单精度浮点型<code>float</code>、双精度浮点型<code>double</code>、布尔型<code>boolean</code>、字符型<code>char</code></li>
</ul>
<p>引用（对象）数据类型</p>
<ul>
<li>引用类型存放的是某个对象在内存中的地址。</li>
<li>引用数据类型在被传递值时，传递的是内存地址，即软拷贝/软链接。</li>
<li>因此在修改值时，修改的都是同一个内存地址中的数据。</li>
<li><strong>支持数据类型</strong>：字符串<code>String</code>、数组<code>Array</code>、枚举<code>Enum</code></li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>在<code>C</code>或<code>C++</code>编程语言中通过指针操作内存中的元素，在Java中是通过“引用”。</li>
<li>在Java中一切被视为对象，但我们操作的标识符实际上是对象的一个引用。</li>
</ul>
</div>
<p>详细总结：<a href="/software/Language-Java-JavaSE-%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B.html" target="_blank">Language-Java-JavaSE-数据类型</a></p>
<h2>数据类型转换</h2>
<ul>
<li>Java是强数据类型的语言，因此在遇到不同数据类型同时操作时，需要进行数据类型转换。</li>
<li>是否满足转换要求，是根据数据类型的<code>存储位数</code>能否能容下转换后所需的存储空间，若存储不足则会丢失精度。</li>
<li>满足数据类型兼容时，会自动进行<code>自动类型转换</code>，若不兼容时需要手动进行<code>强制类型转换</code>。</li>
</ul>
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<p>类型转换表</p>
<ul>
<li>类型转换的兼容性和精度关系大致可以总结为以下表格（从小到大）。</li>
<li>char -&gt; int -&gt; long -&gt; float -&gt; double</li>
<li>byte -&gt; short -&gt; int -&gt; long -&gt; float -&gt; double</li>
</ul>
</div>
<h3>隐式转换（自动类型转换）</h3>
<ul>
<li>自动类型转换发生在两种类型的兼容性和精度存在差异时，从较低精度（或范围较小）的类型向较高精度（或范围较大）的类型转换。</li>
<li>在多种数据类型的数据混合计算时，会自动将所有数据转换为容量最大的那种数据类型，然后再进行计算。</li>
<li>位数低的类型数据可以自动转换位位数高的类型数据。</li>
<li>byte、short与char之间不会相互自动转换。</li>
<li>byte、short、char可以进行计算，再计算时会首先转换为int类型。</li>
<li>提示：boolean类型不参与计算/转换。</li>
</ul>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token number">100</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">double</span> d <span class="token operator">=</span> i<span class="token punctuation">;</span> <span class="token comment">// 自动将int类型的i转换为double类型的d</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h3>显式转换（强制类型转换）</h3>
<ul>
<li>将容量大的数据类型转换为容量小的数据类型。</li>
<li>使用时要加上强制转换符<code>()</code>。</li>
<li>强制类型转换可能会导致数据丢失或精度降低。</li>
</ul>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">double</span> d <span class="token operator">=</span> <span class="token number">3.14</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token keyword">int</span><span class="token punctuation">)</span>d<span class="token punctuation">;</span> <span class="token comment">// 显式将double类型的d转换为int类型的i，小数部分会被舍弃</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h2>第二阶段 - 流程控制</h2>
<h2>顺序结构</h2>
<ul>
<li>程序从上到下逐行执行，中间没有任何判断或跳转。</li>
</ul>
<h2>分支结构</h2>
<h3>if</h3>
<ul>
<li>先执行<code>if</code>语句中的条件。</li>
<li>若不满足条件，则会按顺序执行后续的<code>else if</code>语句中的条件。</li>
<li>若<code>if</code>和<code>else if</code>没有一个满足条件，则执行<code>else</code>语句。</li>
<li><strong>优点</strong>：能更精确的指定每个分支的判断条件。</li>
<li><strong>缺点</strong>：每个分支都需要手写判断条件。</li>
<li><strong>注意事项</strong>：<code>else if</code>是可以有多个。只执行其中最先满足条件的一个分支。</li>
<li><strong>适用场景</strong>：适用于范围区间内的判断、不确定具体值、判断条件多。</li>
</ul>
<p>格式</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">if</span> <span class="token punctuation">(</span>条件表达式<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 代码块</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"><span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>条件表达式<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 代码块</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"><span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>条件表达式<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 代码块</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"><span class="token keyword">else</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 代码块</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">int</span> score <span class="token operator">=</span> <span class="token number">60</span><span class="token punctuation">;</span> <span class="token comment">// 分数</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">if</span> <span class="token punctuation">(</span>score <span class="token operator">&gt;=</span> <span class="token number">90</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">	<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"优秀"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>score <span class="token operator">&gt;=</span> <span class="token number">70</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">	<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"良好"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>score <span class="token operator">&gt;=</span> <span class="token number">60</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">	<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"及格"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>score <span class="token operator">&lt;</span> <span class="token number">60</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">	<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"不及格"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span></span>
<span class="line">	<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"输入的分数有错误"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>switch</h3>
<ul>
<li><code>case</code>语句可以有一个或多个。</li>
<li>若<code>case</code>语句中的值有与<code>switch</code>语句的变量或表达式一致，则执行代码块。</li>
<li>若没有一个<code>case</code>语句的值被执行，则执行<code>default</code>语句。</li>
<li><strong>优点</strong>：不需要为每个分支都手动写判断语句，减少代码量。</li>
<li><strong>缺点</strong>：只能与确定的值进行判断是否相等。</li>
<li><strong>注意事项</strong>：<code>case</code>语句的值不能重复。 必须在<code>case</code>语句和<code>default</code>语句的代码块结尾添加<code>break</code>语句，否则会继续运行后续代码（称为<strong>穿透</strong>问题），直到碰到<code>break</code>语句为止。</li>
<li><strong>适用场景</strong>：适用于确定值的判断、条件必须确定、只需判断是否一致。</li>
</ul>
<p>格式</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">switch</span> <span class="token punctuation">(</span><span class="token operator">&lt;</span>变量或表达式<span class="token operator">&gt;</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">	<span class="token keyword">case</span> <span class="token operator">&lt;</span>值<span class="token number">1</span><span class="token operator">&gt;</span><span class="token operator">:</span></span>
<span class="line">		<span class="token comment">// 代码块</span></span>
<span class="line">		<span class="token keyword">break</span><span class="token punctuation">;</span></span>
<span class="line">	<span class="token keyword">case</span> <span class="token operator">&lt;</span>值<span class="token number">2</span><span class="token operator">&gt;</span><span class="token operator">:</span></span>
<span class="line">		<span class="token comment">// 代码块</span></span>
<span class="line">		<span class="token keyword">break</span><span class="token punctuation">;</span></span>
<span class="line">	<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"></span>
<span class="line">	<span class="token comment">// 若前面的`case`判断都不正确则执行`default`语句</span></span>
<span class="line">	<span class="token keyword">default</span><span class="token operator">:</span></span>
<span class="line">		<span class="token comment">// 代码块</span></span>
<span class="line">		<span class="token keyword">break</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">int</span> userInput <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">;</span>    <span class="token comment">// 用户输入</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">switch</span> <span class="token punctuation">(</span>userInput<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">	<span class="token keyword">case</span> <span class="token number">1</span><span class="token operator">:</span></span>
<span class="line">		<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"创建智能体"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">		<span class="token keyword">break</span><span class="token punctuation">;</span></span>
<span class="line">	<span class="token keyword">case</span> <span class="token number">2</span><span class="token operator">:</span></span>
<span class="line">		<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"删除智能体"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">		<span class="token keyword">break</span><span class="token punctuation">;</span></span>
<span class="line">	<span class="token keyword">case</span> <span class="token number">3</span><span class="token operator">:</span></span>
<span class="line">		<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"修改智能体"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">		<span class="token keyword">break</span><span class="token punctuation">;</span></span>
<span class="line">	<span class="token keyword">case</span> <span class="token number">4</span><span class="token operator">:</span></span>
<span class="line">		<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"查询智能体"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">		<span class="token keyword">break</span><span class="token punctuation">;</span></span>
<span class="line">	<span class="token keyword">default</span><span class="token operator">:</span></span>
<span class="line">		<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"暂无此功能"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">		<span class="token keyword">break</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>循环结构</h2>
<h3>for</h3>
<ul>
<li>在编程中用于遍历序列（如列表、元组、字符串）或其他可迭代对象，并在每次迭代中执行一段代码。</li>
<li><strong>优点</strong>：语法简洁、清晰。</li>
<li><strong>缺点</strong>：不能灵活更改迭代次数或条件、不支持无限循环。</li>
<li><strong>注意事项</strong>：避免死循环。</li>
<li><strong>适用场景</strong>：循环次数明确的情况、遍历序列类型、遍历字典、遍历集合、条件构成等差序列。</li>
</ul>
<p>格式</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token operator">&lt;</span>数据类型<span class="token operator">&gt;</span> <span class="token operator">&lt;</span>变量初始化<span class="token operator">&gt;</span><span class="token punctuation">;</span> <span class="token operator">&lt;</span>循环条件<span class="token operator">&gt;</span><span class="token punctuation">;</span> <span class="token operator">&lt;</span>变量迭代<span class="token operator">&gt;</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">	<span class="token comment">// 代码块</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">StartUp</span> <span class="token punctuation">{</span></span>
<span class="line">	<span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> ages<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line"></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"爱你三千遍"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token keyword">int</span> count <span class="token operator">=</span> <span class="token number">3000</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> x <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">,</span> y <span class="token operator">=</span> count <span class="token punctuation">;</span> x <span class="token operator">&lt;</span> count<span class="token punctuation">;</span> x<span class="token operator">++</span><span class="token punctuation">,</span> y<span class="token operator">--</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"第"</span> <span class="token operator">+</span> <span class="token punctuation">(</span>x<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token string">"次：我爱你，还剩下"</span> <span class="token operator">+</span> <span class="token punctuation">(</span>y<span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token string">"遍。"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">	<span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>for-each</h3>
<ul>
<li>使用for-each循环遍历数组或集合元素时，不用获取长度和索引来访问元素，该语句会自动遍历每一个元素。</li>
<li><strong>优点</strong>：简洁易读的方式来遍历集合或数组，避免了<code>for</code>循环的索引管理。</li>
<li><strong>缺点</strong>：不能对数组或集合索引的直接访问或修改，需要隐式地创建迭代器对象导致比<code>for</code>循环慢。</li>
<li><strong>注意事项</strong>：</li>
<li><strong>适用场景</strong>：遍历集合或数组中的所有元素、处理只读集合、代码简洁性和可读性要求高。</li>
</ul>
<p>格式</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 自增，且获取的是迭代部分的数值，而不是下标。</span></span>
<span class="line"><span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token operator">&lt;</span>数据类型<span class="token operator">&gt;</span> <span class="token operator">&lt;</span>变量<span class="token operator">&gt;</span> <span class="token operator">:</span> <span class="token operator">&lt;</span>迭代部分<span class="token operator">&gt;</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">	<span class="token comment">// 代码块</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">StartUp</span> <span class="token punctuation">{</span></span>
<span class="line">	<span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> ages<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line"></span>
<span class="line">		<span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> data <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token string">"看电影"</span><span class="token punctuation">,</span> <span class="token string">"打游戏"</span><span class="token punctuation">,</span> <span class="token string">"旅游"</span><span class="token punctuation">}</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">		<span class="token comment">// 循环遍历，拿到其中的值</span></span>
<span class="line">		<span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token class-name">String</span> i <span class="token operator">:</span> data<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">			<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"今天和智能体一起"</span> <span class="token operator">+</span> i<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">		<span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">	<span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>while</h3>
<ul>
<li>首先检查其后的条件表达式（布尔表达式）。</li>
<li>如果该条件表达式的结果为<code>true</code>，则执行循环体中的代码块。</li>
<li>执行完代码块后，再次回到循环的开头，重新检查条件表达式。</li>
<li>如果条件表达式仍为<code>true</code>，则继续执行代码块；如果为<code>false</code>，则退出循环。</li>
<li><strong>优点</strong>：简单直接，能够清晰地表达“当满足某个条件时，重复执行某段代码”的逻辑。</li>
<li><strong>缺点</strong>：循环条件、循环体、以及可能存在的步进操作（改变循环条件的状态）分散在代码的不同位置，对于复杂的循环逻辑，可能不太容易跟踪和理解。</li>
<li><strong>注意事项</strong>：需要特别关注条件表达式的设计，以确保循环能够在某个时刻自然结束，避免进入无限循环（死循环）。</li>
<li><strong>适用场景</strong>：循环次数不确定的情况、等待某个条件成立、游戏或模拟中的实时更新、与用户交互。</li>
</ul>
<p>格式</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token operator">&lt;</span>数据类型<span class="token operator">&gt;</span> <span class="token operator">&lt;</span>变量初始化<span class="token operator">&gt;</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token operator">&lt;</span>循环条件<span class="token operator">&gt;</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">	<span class="token comment">//代码块</span></span>
<span class="line">	</span>
<span class="line">	<span class="token operator">&lt;</span>变量迭代<span class="token operator">&gt;</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 导入接收输入的类</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>util<span class="token punctuation">.</span></span><span class="token class-name">Scanner</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">StartUp</span> <span class="token punctuation">{</span></span>
<span class="line">	<span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> ages<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">		<span class="token comment">// 实例化接收输入</span></span>
<span class="line">		<span class="token class-name">Scanner</span> scanner <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Scanner</span><span class="token punctuation">(</span><span class="token class-name">System</span><span class="token punctuation">.</span>in<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">	</span>
<span class="line">		<span class="token comment">// 提示信息</span></span>
<span class="line">		<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Agent："</span> <span class="token operator">+</span> <span class="token string">"你好，我是你的专属智能体，很高兴遇见你！"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">	</span>
<span class="line">		<span class="token comment">// 循环代码主体</span></span>
<span class="line">		<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">			<span class="token comment">// 提示信息</span></span>
<span class="line">			<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span><span class="token string">"User："</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">			<span class="token comment">// 接收用户输入</span></span>
<span class="line">			<span class="token class-name">String</span> userInput <span class="token operator">=</span> scanner<span class="token punctuation">.</span><span class="token function">next</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">			<span class="token comment">// 判断是否退出循环</span></span>
<span class="line">			<span class="token keyword">if</span><span class="token punctuation">(</span>userInput <span class="token operator">==</span> <span class="token string">"结束对话"</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">				<span class="token keyword">break</span><span class="token punctuation">;</span></span>
<span class="line">			<span class="token punctuation">}</span></span>
<span class="line">			<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Agent："</span> <span class="token operator">+</span> <span class="token string">"有什么事情需要我帮忙吗？"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">		<span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">	<span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>do-while</h3>
<ul>
<li>先执行一次循环代码块，然后才检查循环条件，若条件为<code>ture</code>则继续执行，为<code>false</code>则跳出循环。</li>
<li><strong>优点</strong>：至少执行一次，无论条件是否满足。</li>
<li><strong>缺点</strong>：若循环代码块需要根据循环条件来选择是否执行，则可能导致不必要的操作和资源浪费。</li>
<li><strong>注意事项</strong>：第一次不会执行判断条件，直接运行其中的代码。</li>
<li><strong>适用场景</strong>：需要至少执行一次、需要一开始就先执行一次，循环次数不确定的情况。</li>
</ul>
<p>格式</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token operator">&lt;</span>数据类型<span class="token operator">&gt;</span> <span class="token operator">&lt;</span>变量初始化<span class="token operator">&gt;</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">do</span> <span class="token punctuation">{</span></span>
<span class="line">	<span class="token comment">// 代码块</span></span>
<span class="line"></span>
<span class="line">    <span class="token operator">&lt;</span>变量迭代<span class="token operator">&gt;</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"><span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token operator">&lt;</span>循环条件<span class="token operator">&gt;</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 导入接收输入的类</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>util<span class="token punctuation">.</span></span><span class="token class-name">Scanner</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">StartUp</span> <span class="token punctuation">{</span></span>
<span class="line">	<span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> ages<span class="token punctuation">)</span> <span class="token punctuation">{</span> </span>
<span class="line">		<span class="token comment">// 实例化接收输入</span></span>
<span class="line">		<span class="token class-name">Scanner</span> scanner <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Scanner</span><span class="token punctuation">(</span><span class="token class-name">System</span><span class="token punctuation">.</span>in<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">		<span class="token comment">// 循环</span></span>
<span class="line">		<span class="token keyword">do</span> <span class="token punctuation">{</span></span>
<span class="line">			<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Agent："</span> <span class="token operator">+</span> <span class="token string">"你好，我是你的专属智能体，很高兴遇见你！"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">			<span class="token comment">// 提示信息</span></span>
<span class="line">			<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span><span class="token string">"User："</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">			<span class="token comment">// 接收用户输入</span></span>
<span class="line">			<span class="token class-name">String</span> userInput <span class="token operator">=</span> scanner<span class="token punctuation">.</span><span class="token function">next</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">			<span class="token comment">// 判断用户意图</span></span>
<span class="line">			<span class="token keyword">if</span> <span class="token punctuation">(</span>userInput <span class="token operator">==</span> <span class="token string">"结束对话"</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">				<span class="token keyword">break</span><span class="token punctuation">;</span></span>
<span class="line">			<span class="token punctuation">}</span></span>
<span class="line">		<span class="token punctuation">}</span> <span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">	<span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>结束语句</h2>
<ul>
<li>跳转语句是指打破程序的正常运行，跳转到其他部分的语句。</li>
<li>跳出语句有3种：<code>break</code>、<code>continue</code>、<code>return</code></li>
</ul>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">JumpStatementsExample</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// break 语句案例</span></span>
<span class="line">        <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator">&lt;</span> <span class="token number">10</span><span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token keyword">if</span> <span class="token punctuation">(</span>i <span class="token operator">==</span> <span class="token number">5</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                <span class="token keyword">break</span><span class="token punctuation">;</span> <span class="token comment">// 当 i 等于 5 时，跳出循环</span></span>
<span class="line">            <span class="token punctuation">}</span></span>
<span class="line">            <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"i: "</span> <span class="token operator">+</span> i<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 输出 0 到 4</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// continue 语句案例</span></span>
<span class="line">        <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> j <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> j <span class="token operator">&lt;</span> <span class="token number">10</span><span class="token punctuation">;</span> j<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token keyword">if</span> <span class="token punctuation">(</span>j <span class="token operator">%</span> <span class="token number">2</span> <span class="token operator">==</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">                <span class="token keyword">continue</span><span class="token punctuation">;</span> <span class="token comment">// 当 j 是偶数时，跳过本次循环</span></span>
<span class="line">            <span class="token punctuation">}</span></span>
<span class="line">            <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"j: "</span> <span class="token operator">+</span> j<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 输出 1, 3, 5, 7, 9</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// return 语句案例</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"返回值: "</span> <span class="token operator">+</span> <span class="token function">getValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 输出 "返回值: 42"</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">int</span> <span class="token function">getValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 方法执行到 return 语句时结束，并返回 42</span></span>
<span class="line">        <span class="token keyword">return</span> <span class="token number">42</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>break</h3>
<ul>
<li><strong><code>break</code>语句</strong>：结束整个循环。</li>
</ul>
<h3>continue</h3>
<ul>
<li><strong><code>continue</code>语句</strong>：结束本次循环，继续执行下一次循环。</li>
</ul>
<h3>return</h3>
<ul>
<li><strong><code>return</code>语句</strong>：结束该语句所在函数（方法）的执行，并在有指定返回值时返回对应数值。</li>
</ul>
<h2>第三阶段 - 面向对象</h2>
<ul>
<li>面向对象编程（OOP）主要用于提高代码的可读性、可维护性和可扩展性。</li>
<li>面向对象是描述某个事物在整个解决问题的步骤中的行为。</li>
<li>就是要<strong>提取</strong>现实世界对象的<code>特性</code>和<code>行为</code>，<strong>抽象</strong>成<code>属性（变量/常量）</code>和<code>方法（函数）</code>。</li>
<li>在编写代码中，主要在编写类和函数，而（构造函数、函数重载、函数重写）、（封装、继承、多态）、（静态、最终、抽象、接口）、（包）这些功能是为了协助函数和类，将代码写的更加合理。</li>
</ul>
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<table>
<thead>
<tr>
<th style="text-align:center">现实世界（事物）</th>
<th style="text-align:center">类（模板）</th>
<th style="text-align:center">对象（实例）</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">特性/状态</td>
<td style="text-align:center">变量/常量</td>
<td style="text-align:center">属性</td>
</tr>
<tr>
<td style="text-align:center">行为/操作</td>
<td style="text-align:center">函数</td>
<td style="text-align:center">方法</td>
</tr>
</tbody>
</table>
<p>交流约定</p>
<ul>
<li>本文章的内容将按照函数、类、构造函数、函数重载、函数重写等词汇，尽可能不使用面向对象的词汇。</li>
<li>与他人交谈时需要按照面向对象的词汇交流，如方法、构造方法、对象等，面向对象的方式交流。</li>
</ul>
</div>
<blockquote>
<p></p>
</blockquote>
<h2>类（对象）</h2>
<ul>
<li>在现实中，过程是易变的，对象是相对不变的，类是对现实世界理解和抽象的一种方法，这种方法也被称为<code>面向对象编程</code>（OOP）。</li>
<li>类是对象的模板或蓝图，可以理解为是对一类事物的归纳，定义了一组具有共同特性和行为的对象。</li>
<li><strong>提取</strong>现实世界对象的<code>特性</code>和<code>行为</code>，<strong>抽象</strong>成<code>属性（变量/常量）</code>和<code>方法（函数）</code>，而<code>属性（变量/常量）</code>和<code>方法（函数）</code>都写在<code>类</code>里，这个类可以理解为<code>对象</code>。</li>
</ul>
<p><strong>要求</strong></p>
<ul>
<li>命名规范：大写首字母开头，多个单词组成时每个单词首字母大写；类名与与文件名保持一致。</li>
</ul>
<p><strong>注意事项</strong></p>
<ul>
<li><code>类</code>只是一个模板，在被实例化之前，内存中并没有这个类的数据。</li>
<li>如果类被实例化（调用/使用）时，将会在内存中创建一个区域来存储这个类。</li>
<li>实例化时可顺便赋值给一个变量，这个变量将被称为<code>对象</code>，一个真实存在内存中的实体。</li>
<li>类可以被多次实例化（调用/使用），之间都是独立存在于内存中。</li>
<li><code>对象</code>是类的实例，对象拥有多个特征和行为的实体。</li>
</ul>
<p><strong>关键字</strong>：<code>class</code></p>
<h3>类的创建</h3>
<p>格式</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token punctuation">[</span><span class="token operator">&lt;</span>访问修饰符<span class="token operator">&gt;</span><span class="token punctuation">]</span> <span class="token keyword">class</span> <span class="token operator">&lt;</span>类名<span class="token operator">&gt;</span> <span class="token punctuation">{</span></span>
<span class="line"></span>
<span class="line"><span class="token punctuation">}</span> </span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 类</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">StartUp</span> <span class="token punctuation">{</span></span>
<span class="line">	<span class="token comment">// 函数</span></span>
<span class="line">	<span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">session</span><span class="token punctuation">(</span><span class="token class-name">String</span> txt<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">		<span class="token comment">// 代码块</span></span>
<span class="line">	<span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>类的调用（实例化类、创建对象）</h3>
<p>格式</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token operator">&lt;</span>类名数据类型<span class="token operator">&gt;</span> <span class="token operator">&lt;</span>对象名<span class="token operator">&gt;</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token operator">&lt;</span>类名<span class="token operator">&gt;</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token operator">&lt;</span>参数<span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token class-name">StartUp</span> startUp <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">StartUp</span><span class="token punctuation">(</span><span class="token string">"String字符串数值"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>函数（方法）</h2>
<ul>
<li>函数（方法）是一个命名的代码块，执行特定的任务。</li>
<li>函数封装特定功能的一段代码，可以通过调用来实现重复使用。</li>
<li>函数可以使代码更加模块化、可重用和易于维护。</li>
<li>减少代码冗余，提高复用性，提高可读性，提高可维护性，方便分工合作。</li>
</ul>
<p><strong>要求</strong></p>
<ul>
<li>命名规范：小写首字母开头，多个单词组成时每个单词首字母大写。</li>
</ul>
<p><strong>注意事项</strong></p>
<ul>
<li>函数里面不能再定义函数。一个函数只做一件事。</li>
<li>函数定义在类的内部。</li>
</ul>
<p><strong>参数</strong></p>
<ul>
<li>函数可以接受一个或多个输入值，这些输入值被称为<code>参数</code>。</li>
<li>参数允许我们将数据传递给函数，以便在函数内部使用。</li>
<li>**形式参数：**形参，写在函数上，用于规定参数</li>
<li>**实际参数：**实参，写在调用时的函数上，用于传入参数。</li>
<li>**参数传递的形式：**位置参数、不定长参数、</li>
</ul>
<p><strong>返回值</strong></p>
<ul>
<li>函数可以返回一个值。</li>
<li>返回值可以是任何数据类型，包括基本数据类型和对象类型。</li>
<li>如果函数不返回任何值，则其返回类型为<code>void</code>类型。</li>
</ul>
<h3>函数的创建</h3>
<p>格式</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token operator">&lt;</span>访问修饰符<span class="token operator">&gt;</span> <span class="token punctuation">[</span><span class="token keyword">static</span><span class="token punctuation">]</span> <span class="token operator">&lt;</span>返回值类型<span class="token operator">&gt;</span> <span class="token operator">&lt;</span>函数名<span class="token operator">&gt;</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token operator">&lt;</span>数据类型<span class="token operator">&gt;</span> <span class="token operator">&lt;</span>形式参数名<span class="token operator">&gt;</span><span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">	<span class="token comment">// 方法主体，代码块</span></span>
<span class="line"></span>
<span class="line">	<span class="token comment">// 根据&lt;返回值类型&gt;来返回对应的值。</span></span>
<span class="line">	<span class="token punctuation">[</span><span class="token keyword">return</span> <span class="token operator">&lt;</span>返回值<span class="token operator">&gt;</span><span class="token punctuation">]</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token doc-comment comment">/**</span>
<span class="line"> * 访问权限：public</span>
<span class="line"> * 返回值：data（String类型）</span>
<span class="line"> * 函数名：session</span>
<span class="line"> * 形参：txt（String类型）</span>
<span class="line"> * 形式参数是一个字符串类型的数组</span>
<span class="line"> */</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">public</span> <span class="token class-name">String</span> <span class="token function">session</span><span class="token punctuation">(</span><span class="token class-name">String</span> txt<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">	<span class="token comment">// 函数体中的代码块</span></span>
<span class="line"></span>
<span class="line">	<span class="token comment">// 返回值</span></span>
<span class="line">	<span class="token keyword">return</span> data<span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>构造函数（初始化函数）</h3>
<ul>
<li>类中的特殊函数（方法）。</li>
<li>主要是为了在实例化对象时顺便接收参数进行初始化所需变量。</li>
</ul>
<p><strong>要求</strong></p>
<ul>
<li>构造函数与类的（名称、访问权限）必须相同，没有返回值。</li>
<li>不是静态<code>static</code>，没有返回值<code>return</code>。</li>
</ul>
<p><strong>注意事项</strong></p>
<ul>
<li>构造函数可以<code>重载</code>，实现传入不同参数来执行不同构造函数。</li>
<li><code>this</code>关键字为构造方法中的局部变量声明，提供在一个类中的其他函数能够获取到变量。</li>
<li>构造函数不是手动调用的，是对象被<code>new</code>实例化的时候被JVM调用。</li>
<li>若一个类<strong>没有定义</strong>构造函数，JVM在编译的时候会给这个类默认隐式的添加一个无参构造函数。若一个类<strong>手动定义</strong>构造函数，就会将“默认的无参构造函数”覆盖掉。</li>
</ul>
<p><strong>适用场景</strong></p>
<ul>
<li>创建对象时初始化属性、设置默认值、执行必要的初始化逻辑。</li>
</ul>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 类</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">StartUp</span> <span class="token punctuation">{</span></span>
<span class="line">	<span class="token class-name">String</span> txt<span class="token punctuation">;</span></span>
<span class="line"> </span>
<span class="line">	<span class="token comment">// 构造函数需要写在类中</span></span>
<span class="line">	<span class="token comment">// 参数是可选的</span></span>
<span class="line">	<span class="token keyword">public</span> <span class="token class-name">StartUp</span><span class="token punctuation">(</span><span class="token class-name">String</span> txt<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">		<span class="token comment">// 这里使用`this`关键字来更新全局变量的值</span></span>
<span class="line">		<span class="token keyword">this</span><span class="token punctuation">.</span>txt <span class="token operator">=</span> txt<span class="token punctuation">;</span></span>
<span class="line">	<span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>函数的重载（编译时多态）</h3>
<ul>
<li>在一个类中定义多个名称相同的函数，根据传递的参数不同而选择不同的方法。</li>
<li>重载函数必须在同一个作用域内定义，通常是在同一个类或命名空间中。</li>
<li>当编译器看到对函数的调用时，它会根据提供的参数类型和数量在作用域内查找匹配的重载函数，如果找不到匹配的重载函数，编译器会报错。</li>
</ul>
<p><strong>要求</strong></p>
<ul>
<li>函数名必须相同。</li>
<li>参数列表（数据类型、参数个数、顺序）必须不同。</li>
</ul>
<p><strong>注意事项</strong></p>
<ul>
<li>函数中的（访问权限、返回值类型、参数名称）与函数的重载无关。</li>
</ul>
<p><strong>适用场景</strong></p>
<ul>
<li>构造函数重载、动态更改方法行为、处理不同类型或数量的参数。</li>
</ul>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 类</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">StartUp</span> <span class="token punctuation">{</span></span>
<span class="line">	<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">abc</span><span class="token punctuation">(</span><span class="token class-name">String</span> a<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">	<span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">	<span class="token comment">// 普通函数 - 数据类型不同</span></span>
<span class="line">	<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">abc</span><span class="token punctuation">(</span><span class="token keyword">int</span> a<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">	<span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">	<span class="token comment">// 普通函数 - 参数个数不同</span></span>
<span class="line">	<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">abc</span><span class="token punctuation">(</span><span class="token keyword">int</span> a<span class="token punctuation">,</span> <span class="token class-name">String</span> b<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">	<span class="token punctuation">}</span></span>
<span class="line"> </span>
<span class="line">	<span class="token comment">// 普通函数 - 顺序不同</span></span>
<span class="line">	<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">abc</span><span class="token punctuation">(</span><span class="token class-name">String</span> b<span class="token punctuation">,</span> <span class="token keyword">int</span> a<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">	<span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>函数的重写（覆盖）</h3>
<ul>
<li>方法重写允许子类提供与父类方法签名相同的方法，但具有不同的实现。</li>
<li>这种机制使得子类能够根据需要修改或扩展父类的行为。</li>
<li>重写是面向对象设计中的一个基本原则，符合开闭原则，即对扩展开放，对修改封闭。</li>
</ul>
<p><strong>要求</strong></p>
<ul>
<li>子类的方法（返回类型、参数列表&lt;类型、顺序、个数&gt;）与父类必须完全一致。</li>
<li>方法名只建议与父类的方法名一致。（因为重写只是为子类新添加一个方法，父类的方法依旧存在，只是方法名相同的情况下优先就近调用子类内的方法而已）</li>
</ul>
<p><strong>注意事项</strong></p>
<ul>
<li>提示（建议）使用<code>@Override</code>注解可以明确表明一个方法是重写的，在编译时如果父类中没有找到被重写的方法，编译器会有报错提示。</li>
<li>子类重写父类的方法时，访问权限不能比父类中被重写的方法的访问权限更低。</li>
<li>若父类的方法被<code>private</code>关键字修饰，则不能被重写。</li>
</ul>
<p><strong>适用场景</strong></p>
<ul>
<li>当需要修改或扩展父类的功能以适应子类的特定需求时。</li>
<li>当需要在不同的上下文中使用不同的实现时。</li>
<li>当需要隐藏或修改父类方法的实现细节时。</li>
<li>当需要实现多态性，使得同一个方法在不同对象上有不同的行为时。</li>
</ul>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 父类</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">Animal</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 父类中的方法</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">makeSound</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"动物发出声音"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 子类</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">Dog</span> <span class="token keyword">extends</span> <span class="token class-name">Animal</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 重写父类的方法</span></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">makeSound</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"狗吠"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 测试类</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">OverrideTest</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">Animal</span> myAnimal <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Animal</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 创建父类对象</span></span>
<span class="line">        <span class="token class-name">Animal</span> myDog <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Dog</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 创建子类对象，但以父类类型引用</span></span>
<span class="line"></span>
<span class="line">        myAnimal<span class="token punctuation">.</span><span class="token function">makeSound</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 输出 "动物发出声音"</span></span>
<span class="line">        myDog<span class="token punctuation">.</span><span class="token function">makeSound</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 输出 "狗吠"，这里发生了多态，调用了子类重写的方法</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>面向对象特性 - 封装</h2>
<ul>
<li>主要目的是增强代码的安全性和可维护性，尽可能隐藏类（对象）的内部实现细节，控制对象的修改和访问的权限，仅对外公开必要的接口。</li>
<li>保证数据安全性、减少外界对类的依赖。</li>
</ul>
<p><strong>要求</strong></p>
<ul>
<li>将类的变量（属性）声明为私有（private），只能通过该类<strong>专门提供的函数</strong>来访问和修改。</li>
<li>提供声明为公共（public）的<code>访问函数</code>和<code>修改函数</code>，专门用于<code>读取</code>和<code>修改</code>私有变量的值。</li>
</ul>
<p><strong>注意事项</strong></p>
<ul>
<li>为一个类中做好为变量或函数添加访问权限的关键字，定义好是否能被外部访问，减少外部对类的依赖。</li>
<li>外界不能直接访问对象（类）中的属性（变量），只能访问对象中创建的公共方法（函数），对象（类）会通过给属性添加<code>private</code>私有访问权限关键字来限制外界访问。</li>
</ul>
<p><strong>适用场景</strong></p>
<ul>
<li>实现业务逻辑、隐藏实现细节、防止意外修改、数据保护、实现多态。</li>
<li>高内聚：类内部数据操作细节自己完成，不允许外部干涉。</li>
<li>低耦合：仅暴露方法给外部使用。</li>
</ul>
<p><strong>关键字</strong>：<code>private</code>（私有）、<code>protected</code>（受保护）、<code>default</code>（默认）、<code>public</code>（公共）</p>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Test</span> <span class="token punctuation">{</span></span>
<span class="line">	<span class="token comment">// 成员变量（属性）</span></span>
<span class="line">	<span class="token keyword">private</span> <span class="token keyword">int</span> age<span class="token punctuation">;</span>  <span class="token comment">// 私有的年龄变量</span></span>
<span class="line"></span>
<span class="line">	<span class="token comment">// 构造函数</span></span>
<span class="line">	<span class="token keyword">public</span> <span class="token class-name">Test</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">	<span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">	<span class="token comment">// 普通函数</span></span>
<span class="line">	<span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">abc</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">	<span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">	<span class="token comment">// 类说明函数</span></span>
<span class="line">	<span class="token keyword">public</span> <span class="token class-name">String</span> <span class="token function">toString</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">	<span class="token keyword">return</span> <span class="token string">""</span></span>
<span class="line">	<span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">	<span class="token comment">// 公共的，接收参数的函数 - 无返回值、接收参数`年龄`</span></span>
<span class="line">	<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setAge</span><span class="token punctuation">(</span><span class="token keyword">int</span> age<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">		<span class="token keyword">this</span><span class="token punctuation">.</span>age <span class="token operator">=</span> age</span>
<span class="line">		<span class="token comment">// 做好错误异常处理的代码</span></span>
<span class="line">		<span class="token comment">// 判断传入的参数是否合理</span></span>
<span class="line">		<span class="token comment">// 若不合理则执行相应的代码块</span></span>
<span class="line"> <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">	<span class="token comment">// 公共的，查询参数的函数 - 有返回值、返回查询结果`年龄`</span></span>
<span class="line">	<span class="token keyword">public</span> <span class="token keyword">int</span> <span class="token function">getAge</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">		<span class="token keyword">return</span> <span class="token keyword">this</span><span class="token punctuation">.</span>age</span>
<span class="line">	<span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>面向对象特性 - 继承</h2>
<ul>
<li>继承允许一个类（称为子类或派生类）继承另一个类（称为父类或基类）的属性和方法。</li>
<li>产生继承关系之后，子类可以使用父类中的属性和方法，子类也可以新添加自己的属性和方法。</li>
</ul>
<p><strong>要求</strong></p>
<ul>
<li>单根性：一个类只能有一个直接父类，有助于保持代码的清晰和可维护性。</li>
<li>传递性：类之间可以多级继承，属性和方法逐级叠加。</li>
</ul>
<p><strong>注意事项</strong></p>
<ul>
<li>每个类都继承自<code>Object</code>类，该类是顶级父类，是所有类的始祖。</li>
<li>子类不能继承父类的构造函数，但可以通过<code>super</code>关键字调用父类的构造方法。</li>
</ul>
<p><strong>适用场景</strong></p>
<ul>
<li>
<p>当多个类具有共同的属性和方法时，可以使用继承来复用代码。</p>
</li>
<li>
<p>当需要扩展已有类的功能时，可以通过继承来添加新的特性。</p>
</li>
<li>
<p>继承是实现多态性的基础，允许使用父类类型的引用来调用子类的实现。</p>
</li>
<li>
<p>在设计和实现框架或库时，继承可以用来创建可扩展的体系结构。</p>
</li>
<li>
<p><strong>关键字</strong>：<code>extends</code></p>
</li>
</ul>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 父类</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">Vehicle</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 父类的属性</span></span>
<span class="line">    <span class="token keyword">protected</span> <span class="token class-name">String</span> brand <span class="token operator">=</span> <span class="token string">"未知品牌"</span><span class="token punctuation">;</span></span>
<span class="line">    </span>
<span class="line">    <span class="token comment">// 父类的方法</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">honk</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"车辆发出哔哔声"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 子类</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">Car</span> <span class="token keyword">extends</span> <span class="token class-name">Vehicle</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 子类的新属性</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">String</span> modelName <span class="token operator">=</span> <span class="token string">"未知型号"</span><span class="token punctuation">;</span></span>
<span class="line">    </span>
<span class="line">    <span class="token comment">// 子类的方法</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">displayInformation</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"品牌: "</span> <span class="token operator">+</span> brand <span class="token operator">+</span> <span class="token string">", 型号: "</span> <span class="token operator">+</span> modelName<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line">    </span>
<span class="line">    <span class="token comment">// 子类的构造函数</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">Car</span><span class="token punctuation">(</span><span class="token class-name">String</span> brand<span class="token punctuation">,</span> <span class="token class-name">String</span> modelName<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>brand <span class="token operator">=</span> brand<span class="token punctuation">;</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>modelName <span class="token operator">=</span> modelName<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 测试类</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">InheritanceTest</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">Car</span> myCar <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Car</span><span class="token punctuation">(</span><span class="token string">"Toyota"</span><span class="token punctuation">,</span> <span class="token string">"Corolla"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        myCar<span class="token punctuation">.</span><span class="token function">honk</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 输出 "车辆发出哔哔声"（继承自父类的方法）</span></span>
<span class="line">        myCar<span class="token punctuation">.</span><span class="token function">displayInformation</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 输出 "品牌: Toyota, 型号: Corolla"（子类自己的方法）</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3><code>this</code>关键字</h3>
<ul>
<li><code>this</code> 关键字代表当前对象的引用，可以用来访问当前对象的成员变量和方法。</li>
<li>格式：<code>this.&lt;成员变量名&gt;</code> 或 <code>this.&lt;方法名&gt;(参数列表)</code></li>
</ul>
<p><strong>要求</strong></p>
<ul>
<li>不需要特定的要求。</li>
</ul>
<p><strong>注意事项</strong></p>
<ul>
<li>当在一个类的构造函数中使用 <code>this</code> 来调用另一个构造函数时，这个调用必须是该构造函数的第一条语句。</li>
<li><code>this</code> 和 <code>super</code> 不能在同一个构造函数中同时用来调用构造函数，因为它们都必须是第一条语句。</li>
</ul>
<p><strong>适用场景</strong></p>
<ul>
<li>当需要在方法或构造函数中明确指出当前对象的成员变量或方法时。</li>
<li>当需要在构造函数中调用同一个类的另一个构造函数时。</li>
</ul>
<p><strong>关键字</strong>：<code>this</code></p>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 一个简单的类，使用 this 关键字</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">Person</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 成员变量</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">String</span> name<span class="token punctuation">;</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token keyword">int</span> age<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 构造函数</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">Person</span><span class="token punctuation">(</span><span class="token class-name">String</span> name<span class="token punctuation">,</span> <span class="token keyword">int</span> age<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>name <span class="token operator">=</span> name<span class="token punctuation">;</span> <span class="token comment">// 使用 this 来区分成员变量和构造函数参数</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>age <span class="token operator">=</span> age<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 另一个构造函数，使用 this 调用上面的构造函数</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">Person</span><span class="token punctuation">(</span><span class="token class-name">String</span> name<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">(</span>name<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 调用 Person(String name, int age) 构造函数</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 成员方法</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">displayInfo</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Name: "</span> <span class="token operator">+</span> <span class="token keyword">this</span><span class="token punctuation">.</span>name <span class="token operator">+</span> <span class="token string">", Age: "</span> <span class="token operator">+</span> <span class="token keyword">this</span><span class="token punctuation">.</span>age<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 设置名字的方法</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setName</span><span class="token punctuation">(</span><span class="token class-name">String</span> name<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>name <span class="token operator">=</span> name<span class="token punctuation">;</span> <span class="token comment">// 使用 this 来引用成员变量</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 设置年龄的方法</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setAge</span><span class="token punctuation">(</span><span class="token keyword">int</span> age<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>age <span class="token operator">=</span> age<span class="token punctuation">;</span> <span class="token comment">// 使用 this 来引用成员变量</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 测试类</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">ThisKeywordTest</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">Person</span> person1 <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Person</span><span class="token punctuation">(</span><span class="token string">"Alice"</span><span class="token punctuation">,</span> <span class="token number">30</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        person1<span class="token punctuation">.</span><span class="token function">displayInfo</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 输出 "Name: Alice, Age: 30"</span></span>
<span class="line"></span>
<span class="line">        <span class="token class-name">Person</span> person2 <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Person</span><span class="token punctuation">(</span><span class="token string">"Bob"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        person2<span class="token punctuation">.</span><span class="token function">displayInfo</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 输出 "Name: Bob, Age: 0"</span></span>
<span class="line">        person2<span class="token punctuation">.</span><span class="token function">setAge</span><span class="token punctuation">(</span><span class="token number">25</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 使用 this 在 setAge 方法中设置 age 成员变量</span></span>
<span class="line">        person2<span class="token punctuation">.</span><span class="token function">displayInfo</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 输出 "Name: Bob, Age: 25"</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3><code>super</code>关键字</h3>
<ul>
<li>用于引用父类对象的一个引用。</li>
<li>在子类的构造函数中，<code>super</code> 用于调用父类的构造函数。</li>
</ul>
<p><strong>要求</strong></p>
<ul>
<li>只能在继承父类的子类中使用。</li>
</ul>
<p><strong>注意事项</strong></p>
<ul>
<li>当在子类的构造函数中使用 <code>super</code> 调用父类的构造函数时，这个调用必须是该构造函数的第一条语句。</li>
<li><code>super</code> 和 <code>this</code> 不能在同一个构造函数中同时使用，因为它们都必须是第一条语句。</li>
</ul>
<p><strong>适用场景</strong></p>
<ul>
<li>当需要在子类中调用父类的构造函数时。</li>
<li>当需要在子类中访问被重写的父类方法或成员变量时。</li>
</ul>
<p><strong>关键字</strong>：<code>super</code></p>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 父类</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">Animal</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">protected</span> <span class="token class-name">String</span> name<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 父类的构造函数</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">Animal</span><span class="token punctuation">(</span><span class="token class-name">String</span> name<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>name <span class="token operator">=</span> name<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 父类的方法</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">eat</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>name <span class="token operator">+</span> <span class="token string">" is eating."</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 子类</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">Dog</span> <span class="token keyword">extends</span> <span class="token class-name">Animal</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">String</span> breed<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 子类的构造函数，使用 super 调用父类的构造函数</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">Dog</span><span class="token punctuation">(</span><span class="token class-name">String</span> name<span class="token punctuation">,</span> <span class="token class-name">String</span> breed<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">super</span><span class="token punctuation">(</span>name<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 调用父类的构造函数</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>breed <span class="token operator">=</span> breed<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 子类重写父类的方法</span></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">eat</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">super</span><span class="token punctuation">.</span><span class="token function">eat</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 调用父类的 eat 方法</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"The "</span> <span class="token operator">+</span> breed <span class="token operator">+</span> <span class="token string">" dog is eating."</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 测试类</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">SuperKeywordTest</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">Dog</span> dog <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Dog</span><span class="token punctuation">(</span><span class="token string">"Buddy"</span><span class="token punctuation">,</span> <span class="token string">"Golden Retriever"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        dog<span class="token punctuation">.</span><span class="token function">eat</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 输出 "Buddy is eating." 和 "The Golden Retriever dog is eating."</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container note">
<p class="hint-container-title">注释</p>
<p><code>super</code>关键字 - 访问父类的构造函数</p>
<ul>
<li><strong>说明</strong>：<code>super</code> 关键字用于在子类的构造函数中调用父类的构造函数。</li>
<li><strong>格式</strong>：<code>super(&lt;参数列表&gt;)</code></li>
<li><strong>适用场景</strong>：这确保了在创建子类对象时，父类的构造函数也会被执行，从而正确地初始化继承自父类的成员变量。</li>
</ul>
<p><code>super</code>关键字 - 访问父类的属性</p>
<ul>
<li><strong>说明</strong>：当子类和父类中定义了同名的属性时，可以使用 <code>super</code> 关键字来明确指定访问的是父类中定义的属性。</li>
<li><strong>格式</strong>：<code>super.&lt;属性名&gt;</code></li>
<li><strong>适用场景</strong>：这有助于在子类中区分同名的属性。</li>
</ul>
<p><code>super</code>关键字 - 访问父类的方法</p>
<ul>
<li><strong>说明</strong>：在子类中，如果需要调用父类中被重写的方法，可以使用 <code>super</code> 关键字。</li>
<li><strong>格式</strong>：<code>super.&lt;方法名&gt;</code></li>
<li><strong>适用场景</strong>：这在子类重写父类方法但仍然需要在某些情况下调用父类方法时非常有用。</li>
</ul>
</div>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 父类</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">Parent</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">protected</span> <span class="token class-name">String</span> name<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 父类的构造函数</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">Parent</span><span class="token punctuation">(</span><span class="token class-name">String</span> name<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>name <span class="token operator">=</span> name<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 父类的方法</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">printName</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Parent's name: "</span> <span class="token operator">+</span> name<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 子类</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">Child</span> <span class="token keyword">extends</span> <span class="token class-name">Parent</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token class-name">String</span> name<span class="token punctuation">;</span> <span class="token comment">// 子类中同名的属性</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 子类的构造函数，使用 super 调用父类的构造函数</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">Child</span><span class="token punctuation">(</span><span class="token class-name">String</span> parentName<span class="token punctuation">,</span> <span class="token class-name">String</span> childName<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">super</span><span class="token punctuation">(</span>parentName<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 调用父类的构造函数</span></span>
<span class="line">        <span class="token keyword">this</span><span class="token punctuation">.</span>name <span class="token operator">=</span> childName<span class="token punctuation">;</span> <span class="token comment">// 初始化子类的属性</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 子类重写父类的方法</span></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">printName</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">super</span><span class="token punctuation">.</span><span class="token function">printName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 调用父类的方法</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Child's name: "</span> <span class="token operator">+</span> <span class="token keyword">this</span><span class="token punctuation">.</span>name<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 输出子类的属性</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 测试类</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">SuperKeywordExample</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">Child</span> child <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Child</span><span class="token punctuation">(</span><span class="token string">"John"</span><span class="token punctuation">,</span> <span class="token string">"Alice"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        child<span class="token punctuation">.</span><span class="token function">printName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 输出 "Parent's name: John" 和 "Child's name: Alice"</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>对象向上转型（对象数据类型转换）</h3>
<ul>
<li>把创建的子类对象当作父类看待和使用。</li>
<li>子类转换为父类，向上转型。</li>
<li>格式：<code>&lt;父类名称&gt; &lt;对象名称&gt; = new &lt;子类对象&gt;();</code></li>
</ul>
<h3>对象向下转型（对象数据类型转换）</h3>
<ul>
<li>父类转换为子类，向下转型，进行强制类型转换。</li>
<li>格式：<code>&lt;子类名称&gt; &lt;对象名称&gt; = (子类名称)&lt;父类对象&gt;;</code></li>
<li>提示：向下转型时需要，先使用<code>instanceof</code>关键字用来判断某一个对象的类型是否继承自另一个类型，防止向下转型时不是父类的子类，导致转换失败。</li>
</ul>
<h2>面向对象特性 - 多态</h2>
<ul>
<li>多态通过向上转型和向下转型，使得我们允许以统一的方式管理不同类型的对象。</li>
<li>多态是建立在继承的基础上的。当我们有一个父类和一个或多个子类，并且子类继承了父类，那么多态的情境就产生了。</li>
<li>关键的一点是，子类可以重写（覆盖）父类中的方法。这意味着子类可以提供自己的实现版本，当使用这个方法时，会根据实际的对象类型来调用相应的版本。</li>
<li>多态的主要特性体现在：当我们使用父类类型的引用指向子类对象时，调用方法时，实际执行的是子类中的方法，而不是父类中的方法。这种能力使得我们能够在不改变代码结构的情况下，通过改变对象的实际类型来改变程序的行为。</li>
<li>提高代码的健壮性、灵活性、可维护性。（可以使用统一的接口来处理不同的对象类型，多态也支持开放封闭原则，即对扩展开放，对修改封闭）</li>
</ul>
<p><strong>要求</strong></p>
<ul>
<li>多态的实现建立在有<strong>继承</strong>关系上，子类必须继承自父类。</li>
<li>父类引用指向子类实例：声明一个父类类型的变量，但让它<code>new</code>一个子类的对象。</li>
</ul>
<p><strong>注意事项</strong></p>
<ul>
<li>使用 <code>instanceof</code> 关键字可以检查对象是否是特定类的实例。</li>
<li>向上转型（将子类对象赋值给父类引用）是自动的，而向下转型（将父类引用赋值给子类引用）需要显式类型转换，并且可能需要使用 <code>instanceof</code> 进行检查以避免 <code>ClassCastException</code>。</li>
</ul>
<p><strong>适用场景</strong></p>
<ul>
<li>当需要编写可重用的代码，这些代码能够处理不同类型的对象时，多态非常有用。</li>
</ul>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 父类</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">Animal</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">void</span> <span class="token function">sound</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Animal makes a sound"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 子类</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">Dog</span> <span class="token keyword">extends</span> <span class="token class-name">Animal</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">void</span> <span class="token function">sound</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Dog says: Bow Wow"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 子类</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">Cat</span> <span class="token keyword">extends</span> <span class="token class-name">Animal</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">void</span> <span class="token function">sound</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Cat says: Meow"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 测试类</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">PolymorphismExample</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">Animal</span> myAnimal <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Animal</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token class-name">Animal</span> myDog <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Dog</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token class-name">Animal</span> myCat <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Cat</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 向上转型</span></span>
<span class="line">        <span class="token class-name">Animal</span><span class="token punctuation">[</span><span class="token punctuation">]</span> animals <span class="token operator">=</span> <span class="token punctuation">{</span>myAnimal<span class="token punctuation">,</span> myDog<span class="token punctuation">,</span> myCat<span class="token punctuation">}</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 多态性的体现</span></span>
<span class="line">        <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token class-name">Animal</span> animal <span class="token operator">:</span> animals<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            animal<span class="token punctuation">.</span><span class="token function">sound</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 根据实际对象类型调用相应的方法</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 向下转型</span></span>
<span class="line">        <span class="token keyword">if</span> <span class="token punctuation">(</span>myAnimal <span class="token keyword">instanceof</span> <span class="token class-name">Dog</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token class-name">Dog</span> myRealDog <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token class-name">Dog</span><span class="token punctuation">)</span> myAnimal<span class="token punctuation">;</span></span>
<span class="line">            myRealDog<span class="token punctuation">.</span><span class="token function">sound</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>静态绑定（前期）</h3>
<p>静态绑定发生在编译时期，它基于变量的声明类型或者方法签名。以下是一些静态绑定的特点：</p>
<ul>
<li>静态绑定使用 <code>private</code>、<code>static</code>、<code>final</code> 修饰的变量或方法是早期绑定。</li>
<li>编译器在编译时就能够确定调用哪个方法。</li>
<li>静态绑定提高了性能，因为方法调用的解析在编译时就已经完成。</li>
</ul>
<h3>动态绑定（后期）</h3>
<p>动态绑定发生在运行时期，它基于对象的实际类型。以下是一些动态绑定的特点：</p>
<ul>
<li>如果被调用的方法在编译期间无法被确定下来，只能够在程序运行期间根据实际的类型绑定相关的方法，这种绑定方式被称为后期绑定。</li>
<li>动态绑定允许更灵活的代码，因为可以在运行时改变对象的类型，从而改变方法的实现。</li>
</ul>
<h3>编译时多态</h3>
<p>编译时多态通常指的是方法重载：</p>
<ul>
<li>方法重载是编译时多态的一种形式，它允许同一个类中存在多个名称相同但参数列表不同的方法。</li>
<li>编译器根据方法签名（方法名称和参数类型）来决定调用哪个重载方法。</li>
</ul>
<h3>运行时多态</h3>
<p>运行时多态通常指的是方法重写：</p>
<ul>
<li>方法重写是根据实际的类型决定调用哪个重写的方法，它发生在运行期间，因此被称为运行时多态。</li>
<li>当父类的引用指向子类的对象时，调用一个方法时，会调用子类中重写的方法，而不是父类中的方法。</li>
</ul>
<h2>包</h2>
<ul>
<li>包（package）是用于组织类和接口的一种机制，它有助于避免命名冲突，并且以逻辑方式组织相关的类和接口。</li>
</ul>
<p><strong>要求</strong></p>
<ul>
<li><code>package</code> 语句必须位于 Java 文件的第一个非注释性语句。</li>
<li>一个 Java 文件只能有一个 <code>package</code> 语句。</li>
<li>如果一个类加上了 <code>package</code> 语句，那么该类的完整类名就是包名加上类名。</li>
</ul>
<p><strong>注意事项</strong></p>
<ul>
<li>包名通常使用小写字母，多个单词之间使用小数点（<code>.</code>）分隔。</li>
<li>包名应具有描述性，能够清晰地表达其所包含的类的功能或用途。</li>
<li>包路径应与源文件的目录结构保持一致。</li>
</ul>
<p><strong>适用场景</strong></p>
<ul>
<li>解决类名重复产生冲突的问题。</li>
<li>便于软件版本的发布。</li>
<li>提高代码的组织性和可维护性。</li>
</ul>
<p><strong>关键字</strong>：<code>package</code>、<code>import</code></p>
<p>格式</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 方案一，导入具体的类</span></span>
<span class="line"><span class="token keyword">import</span> 包名<span class="token punctuation">.</span>类名<span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 方案二，导入该包下的所有类</span></span>
<span class="line"><span class="token keyword">import</span> 包名<span class="token punctuation">.</span>*<span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 文件名为: com/example/myapp/Message.java</span></span>
<span class="line"><span class="token keyword">package</span> <span class="token namespace">com<span class="token punctuation">.</span>example<span class="token punctuation">.</span>myapp</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 定义一个简单的 Message 类</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Message</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">displayMessage</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Hello from the Message class!"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 文件名为: Main.java</span></span>
<span class="line"><span class="token keyword">package</span> <span class="token namespace">com<span class="token punctuation">.</span>example</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 导入 com.example.myapp 包下的 Message 类</span></span>
<span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">com<span class="token punctuation">.</span>example<span class="token punctuation">.</span>myapp<span class="token punctuation">.</span></span><span class="token class-name">Message</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Main</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 创建 Message 类的实例</span></span>
<span class="line">        <span class="token class-name">Message</span> message <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Message</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        </span>
<span class="line">        <span class="token comment">// 调用 displayMessage 方法</span></span>
<span class="line">        message<span class="token punctuation">.</span><span class="token function">displayMessage</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>第四阶段 - 进阶功能（代码优化）</h2>
<h2>抽象</h2>
<ul>
<li>将“类”或“函数”定义为抽象。</li>
<li>抽象类的作用类似于“模板”。</li>
<li>主要用于继承，有利于程序的扩展。</li>
<li>只有方法声明，没有具体方法实现。</li>
<li>抽象类中不一定有抽象方法，但抽象方法所在的类一定是抽象类。</li>
<li>子类继承抽象父类后，子类必须重写父类中所有的抽象方法，除非子类还是一个抽象类。</li>
<li>抽象方法没有具体的代码实现，没有方法体。</li>
<li>抽象类中可以有非抽象的方法。</li>
</ul>
<p><strong>要求</strong></p>
<ul>
<li>以血缘、种类的方式进行继承，只支持继承单个父类。</li>
</ul>
<p><strong>注意事项</strong></p>
<ul>
<li>只有用<code>abstract</code>关键字声明的抽象方法，没有具体方法实现，没有花括号<code>{}</code>方法体。</li>
<li>抽象方法不能使用<code>private</code>、<code>finall</code>、<code>static</code>修饰符，因为抽象方法需要能被访问、能被修改、能被继承重写。</li>
<li>抽象方法必须被重写实现，才能被使用。</li>
</ul>
<p><strong>适用场景</strong></p>
<ul>
<li>定义通用属性和方法、强制规范子类行为、处理复杂类结构。</li>
</ul>
<p><strong>关键字：</strong><code>abstract</code></p>
<p>格式</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token operator">&lt;</span>访问权限<span class="token operator">&gt;</span> <span class="token keyword">abstract</span> <span class="token keyword">class</span> <span class="token operator">&lt;</span>类名<span class="token operator">&gt;</span> <span class="token punctuation">{</span></span>
<span class="line">	<span class="token operator">&lt;</span>访问权限<span class="token operator">&gt;</span> <span class="token keyword">abstract</span> <span class="token operator">&lt;</span>返回值类型<span class="token operator">&gt;</span> <span class="token operator">&lt;</span>方法名<span class="token operator">&gt;</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 有抽象方法，所在的类必须是抽象类。</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">abstract</span> <span class="token keyword">class</span> <span class="token class-name">Test</span> <span class="token punctuation">{</span></span>
<span class="line">	<span class="token comment">// 没有方法体，即没有`{}`</span></span>
<span class="line">	<span class="token keyword">public</span> <span class="token keyword">abstract</span> <span class="token keyword">void</span> <span class="token function">eat</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>接口</h2>
<ul>
<li>将“类”定义为接口。</li>
<li>微观角度：接口是一种能力和约定，某个事物对外提供的一些功能和声明。</li>
<li>宏观角度：接口是一种标准</li>
<li>可以利用接口实现多态，同时接口弥补类类的单一继承的弱点。</li>
<li>程序的耦合度降低、更自然的使用多态、设计与实现完全分离、更容易搭建程序框架、更容易更换具体实现。</li>
</ul>
<p><strong>要求</strong></p>
<ul>
<li>以行为、方法、能力的方式，支持继承多个抽象父类。</li>
<li>所有属性都是公开静态常量<code>public static final</code>，隐式默认有添加。</li>
<li>所有方法都是公开抽象方法<code>public abstract</code>，隐式默认有添加。</li>
</ul>
<p><strong>注意事项</strong></p>
<ul>
<li>接口不能被实例化。</li>
<li>可以作为引用类型。
没有构造方法和代码块。</li>
<li>接口支持多继承</li>
<li>任何类在实现接口时，必须实现接口中所有的抽象方法，除非子类是抽象类。</li>
<li>接口的属性：默认使用<code>public</code>、<code>static</code>、<code>final</code>关键字修饰。</li>
<li>接口中的方法：默认使用<code>public</code>、<code>abstract</code>关键字修饰。</li>
<li>接口继承接口，使用<code>extends</code>继承类的方式继承接口。</li>
</ul>
<p><strong>适用场景</strong></p>
<ul>
<li>定义规范、实现多态性、隐藏实现细节。</li>
</ul>
<p><strong>关键字</strong></p>
<ul>
<li><strong>定义接口</strong>：<code>interface</code></li>
<li><strong>继承接口</strong>：<code>implements</code></li>
</ul>
<h3>定义接口</h3>
<p>格式</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 定义接口</span></span>
<span class="line"><span class="token operator">&lt;</span>访问权限<span class="token operator">&gt;</span> <span class="token keyword">interface</span> <span class="token operator">&lt;</span>接口名<span class="token operator">&gt;</span> <span class="token punctuation">{</span></span>
<span class="line">	<span class="token comment">// 代码块</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 定义接口</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">interface</span> <span class="token class-name">Test</span> <span class="token punctuation">{</span></span>
<span class="line">	<span class="token comment">// 代码块</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>继承接口</h3>
<ul>
<li>一个类可以通过 <code>implements</code> 关键字继承一个或多个接口。接口定义了一组抽象方法，实现接口的类必须提供这些方法的实现。</li>
</ul>
<p>格式</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 继承接口</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token operator">&lt;</span>类名<span class="token operator">&gt;</span> <span class="token keyword">implements</span> <span class="token operator">&lt;</span>接口名<span class="token operator">&gt;</span><span class="token punctuation">,</span><span class="token operator">&lt;</span>接口名<span class="token operator">&gt;</span><span class="token punctuation">,</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span> <span class="token punctuation">{</span></span>
<span class="line">	<span class="token comment">// 实现接口中定义的所有抽象方法</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 定义一个接口 Drawable</span></span>
<span class="line"><span class="token keyword">interface</span> <span class="token class-name">Drawable</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">void</span> <span class="token function">draw</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 定义另一个接口 Resizable</span></span>
<span class="line"><span class="token keyword">interface</span> <span class="token class-name">Resizable</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">void</span> <span class="token function">resize</span><span class="token punctuation">(</span><span class="token keyword">int</span> percentage<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 实现这两个接口的类 Shape</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">Shape</span> <span class="token keyword">implements</span> <span class="token class-name">Drawable</span><span class="token punctuation">,</span> <span class="token class-name">Resizable</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 实现接口 Drawable 的 draw 方法</span></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">draw</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Drawing the shape."</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 实现接口 Resizable 的 resize 方法</span></span>
<span class="line">    <span class="token annotation punctuation">@Override</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">resize</span><span class="token punctuation">(</span><span class="token keyword">int</span> percentage<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Resizing the shape to "</span> <span class="token operator">+</span> percentage <span class="token operator">+</span> <span class="token string">"% of its original size."</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 主类来测试 Shape 类</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">InterfaceExample</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 创建 Shape 类的实例</span></span>
<span class="line">        <span class="token class-name">Shape</span> shape <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Shape</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        </span>
<span class="line">        <span class="token comment">// 调用 draw 方法</span></span>
<span class="line">        shape<span class="token punctuation">.</span><span class="token function">draw</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        </span>
<span class="line">        <span class="token comment">// 调用 resize 方法</span></span>
<span class="line">        shape<span class="token punctuation">.</span><span class="token function">resize</span><span class="token punctuation">(</span><span class="token number">50</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>静态</h2>
<ul>
<li><code>static</code> 关键字可以用来修饰类的成员变量（属性）和方法。</li>
<li>静态成员被称为静态属性（或类属性）和静态方法（或类方法）。</li>
<li>静态成员是类的所有实例共享的，无论创建多少个对象，静态成员都只有一份。</li>
<li>可以不通过对象实例，直接使用类名来访问静态成员。</li>
</ul>
<p><strong>要求</strong></p>
<p>用 <code>static</code> 关键字声明静态成员。</p>
<p><strong>注意事项</strong></p>
<ul>
<li>静态方法可以直接访问静态成员，但不能直接访问非静态成员。</li>
<li>静态方法中不能使用 <code>this</code> 或 <code>super</code> 关键字，因为这些关键字与对象实例相关。</li>
<li>静态方法是继承的，但不能被重写（尽管可以隐藏），并且不参与多态。</li>
<li>静态代码块在类被加载到 JVM 时执行，且只执行一次，通常用于初始化静态成员。</li>
</ul>
<p><strong>适用场景</strong></p>
<ul>
<li>静态变量：适用于定义全局配置、常量、计数器或共享资源。</li>
<li>静态方法：适用于与类相关的辅助功能或工具方法，可以直接通过类名调用。</li>
<li>静态类：通常用于定义工具类或帮助类，这些类不需要实例化即可使用。</li>
</ul>
<blockquote>
<p><strong>关键字</strong>：<code>static</code></p>
</blockquote>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">UtilityClass</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 静态变量</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">final</span> <span class="token keyword">int</span> <span class="token constant">MAX_COUNT</span> <span class="token operator">=</span> <span class="token number">100</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token keyword">private</span> <span class="token keyword">static</span> <span class="token keyword">int</span> counter <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 静态代码块</span></span>
<span class="line">    <span class="token keyword">static</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Static block initialized."</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token comment">// 初始化静态变量</span></span>
<span class="line">        counter <span class="token operator">=</span> <span class="token number">10</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 静态方法</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">int</span> <span class="token function">getCounter</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">return</span> counter<span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 静态方法，增加计数器</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">incrementCounter</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        counter<span class="token operator">++</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment">// 静态方法，不能直接访问非静态成员</span></span>
<span class="line">    <span class="token comment">// public static void printNonStaticField() {</span></span>
<span class="line">    <span class="token comment">//     System.out.println(nonStaticField); // 错误，不能直接访问非静态成员</span></span>
<span class="line">    <span class="token comment">// }</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">StaticExample</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token comment">// 直接通过类名访问静态变量</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Max Count: "</span> <span class="token operator">+</span> <span class="token class-name">UtilityClass</span><span class="token punctuation">.</span><span class="token constant">MAX_COUNT</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line">        <span class="token comment">// 直接通过类名访问静态方法</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Counter before increment: "</span> <span class="token operator">+</span> <span class="token class-name">UtilityClass</span><span class="token punctuation">.</span><span class="token function">getCounter</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token class-name">UtilityClass</span><span class="token punctuation">.</span><span class="token function">incrementCounter</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Counter after increment: "</span> <span class="token operator">+</span> <span class="token class-name">UtilityClass</span><span class="token punctuation">.</span><span class="token function">getCounter</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>最终</h2>
<ul>
<li>用于声明变量、函数、类，以表达某种不可变或不可继承的语义。</li>
<li>确保了类的某些部分或行为在继承过程中不会被改变，从而维持了原有设计的稳定性和一致性。</li>
</ul>
<p><strong>要求</strong></p>
<ul>
<li><code>final</code>声明变量：属性的值不可改变，在声明时必须被初始化。</li>
<li><code>final</code>声明方法：方法不能被覆盖。</li>
<li><code>final</code>声明类：类不能再被继承。</li>
</ul>
<p><strong>注意事项</strong></p>
<ul>
<li><code>final</code>变量在多线程环境中是线程安全的，因为它们的值不能被更改。</li>
<li><code>final</code>修饰符在声明时必须位于最前面。</li>
<li><code>static</code>和<code>final</code>可以同时修饰变量，表示这是一个静态常量。</li>
</ul>
<p><strong>适用场景</strong></p>
<p>定义常量、修饰方法、修饰类、修饰方法参数。</p>
<p><strong>关键字</strong>：<code>final</code></p>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">public</span> <span class="token keyword">final</span> <span class="token keyword">class</span> <span class="token class-name">FinalClass</span> <span class="token punctuation">{</span>                    <span class="token comment">// 不能被继承</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">final</span> <span class="token keyword">int</span> finalVar <span class="token operator">=</span> <span class="token number">10</span><span class="token punctuation">;</span>                <span class="token comment">// 不能被修改</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">final</span> <span class="token keyword">int</span> <span class="token constant">STATIC_FINAL_VAR</span> <span class="token operator">=</span> <span class="token number">20</span><span class="token punctuation">;</span> <span class="token comment">// 无需实例化且不能再被修改的常量</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">final</span> <span class="token keyword">void</span> <span class="token function">finalMethod</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>              <span class="token comment">// 不能被继承</span></span>
<span class="line">        <span class="token comment">// 方法体</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>反射</h2>
<ul>
<li>Java反射机制是在运行状态中。</li>
<li>对于任意一个类，都能够知道这个类的所有属性和方法.</li>
<li>对于任意一个对象，都能够调用它的任意一个方法和属性。</li>
</ul>
<p><strong>主要功能</strong></p>
<ul>
<li>在运行时判断任意一个对象所属的类。</li>
<li>在运行时构造任意一个类的对象。</li>
<li>在运行时判断任意一个类所具有的成员变量和方法。</li>
<li>在运行时获取泛型信息。</li>
<li>在运行时调用任意一个对象的成员变量和方法。</li>
<li>在运行时处理注解。</li>
<li>生成动态代理。</li>
</ul>
<p>Java反射机制主要涉及以下类：</p>
<ul>
<li>
<p><code>Class</code>类：反射的核心类，可以获取类的属性、方法等信息。</p>
</li>
<li>
<p><code>Field</code>类：表示类的成员变量，可以用来获取和设置类之中的字段。</p>
</li>
<li>
<p><code>Method</code>类：代表类的方法，可以用来获取类中的方法信息或者执行类和对象的方法。</p>
</li>
<li>
<p><code>Constructor</code>类：代表类的构造方法。</p>
</li>
<li>
<p>包路径：<code>java.lang.Class</code></p>
</li>
</ul>
<h2>注解</h2>
<ul>
<li>注解<code>Annotation</code> 是一种用于修饰代码的元数据，可以提供有关程序代码的信息，但不直接参与程序的执行。</li>
<li>元注解是用于定义注解的注解。</li>
</ul>
<p><strong>作用</strong></p>
<ul>
<li>不是程序，可以对程序做出解释。</li>
<li>可以被其他程序（如编译器等）读取。</li>
</ul>
<p><strong>适用场景</strong></p>
<ul>
<li>
<p>可以附加在package、class、method、field等上面，相当于添加流额外的辅助信息，通过反射机制编程实现对这些元数据的访问。</p>
</li>
<li>
<p>声明在包、类、字段、方法、局部变量、方法参数等的前面，用来对这些元素进行说明和注释。</p>
</li>
<li>
<p>定义注解：注解的定义与接口类似，使用@interface关键字。例如，可以定义一个名为MyAnnotation的注解，包含字符串参数和整数参数。</p>
</li>
<li>
<p>使用注解：定义了注解后，就可以在代码中使用它了。使用注解的方式有两种：直接在类、方法、变量等上使用，或者通过反射来使用。</p>
</li>
<li>
<p>包路径：<code>javax.annotation</code></p>
</li>
</ul>
<p>格式</p>
<ul>
<li>注解是以<code>@&lt;注释名&gt;</code>在代码中存在的</li>
<li>可以添加一些参数值，<code>@&lt;注释名&gt;(参数)</code></li>
</ul>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>元注解</h3>
<ul>
<li>元注解用于负责注解其他注解。</li>
<li>Java定义了4个标准元注解，<code>@Target</code>注解的使用范围、<code>@Retention</code>注解的生命周期、<code>@Documented</code>注解将包含在javadoc中、<code>@Inherited</code>子类可以继承父类中的该注解</li>
</ul>
<p>详细总结：<a href="/software/Language-Java-JavaSE-%E5%85%83%E6%B3%A8%E8%A7%A3.html" target="_blank">Language-Java-JavaSE-元注解</a></p>
<h3>自定义注解</h3>
<ul>
<li></li>
</ul>
<h2>异常处理</h2>
<ul>
<li>在程序的运行过程中发生的不正常的事件，导致程序中断程序的运行。</li>
<li>允许程序员定义在特定情况下应该采取的操作，从而避免程序因未处理的错误而崩溃。</li>
<li>异常也是一种对象，是一种类，是一种数据类型（数据结构），有继承关系。
<strong>标准异常类</strong>：==Java内置的异常类继承结构图==</li>
</ul>
<p><strong>要求</strong></p>
<ul>
<li>明确异常类型、尽早抛出异常。</li>
</ul>
<p><strong>注意事项</strong></p>
<ul>
<li>在<code>try/catch</code>后面添加<code>finally</code>并非强制性要求。</li>
<li><code>try</code>代码后不能既没<code>catch</code>也没<code>finally</code>。</li>
<li>允许有多个<code>catch</code>。</li>
<li><code>catch</code>不能独立于<code>try</code>存在。</li>
</ul>
<p><strong>适用场景</strong></p>
<ul>
<li>文件操作、资源释放、用户输入验证。</li>
</ul>
<p><strong>关键字</strong>：<code>try</code>、<code>catch</code>、<code>finally</code></p>
<p>格式</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">try</span> <span class="token punctuation">{</span></span>
<span class="line">	<span class="token comment">// 可能抛出异常的代码</span></span>
<span class="line"></span>
<span class="line"><span class="token punctuation">}</span> <span class="token keyword">catch</span><span class="token punctuation">(</span><span class="token operator">&lt;</span>异常类型<span class="token operator">&gt;</span> <span class="token operator">&lt;</span>异常名称<span class="token operator">&gt;</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 处理异常的代码</span></span>
<span class="line"><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></span>
<span class="line"></span>
<span class="line"><span class="token punctuation">}</span> <span class="token keyword">finally</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 释放资源</span></span>
<span class="line">    <span class="token comment">// 无论是否发生异常，都会执行的代码</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">try</span> <span class="token punctuation">{</span>  </span>
<span class="line">    <span class="token comment">// 尝试打开并读取一个不存在的文件  </span></span>
<span class="line">    <span class="token class-name">FileInputStream</span> fis <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">FileInputStream</span><span class="token punctuation">(</span><span class="token string">"nonexistent.txt"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">FileNotFoundException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 处理文件未找到的异常</span></span>
<span class="line">    <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"文件未找到: "</span> <span class="token operator">+</span> e<span class="token punctuation">.</span><span class="token function">getMessage</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">IOException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 处理其他I/O异常</span></span>
<span class="line">    <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"发生I/O异常: "</span> <span class="token operator">+</span> e<span class="token punctuation">.</span><span class="token function">getMessage</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>手动抛出异常</h3>
<ul>
<li>定义一个方法的时候使用<code>throws</code>关键字声明的方法表示不处理指定的异常，一旦程序出现指定的异常，将会被抛出交给调用方进行处理。</li>
</ul>
<p><strong>注意事项</strong></p>
<ul>
<li>选择适当的异常类型</li>
</ul>
<p><strong>关键字</strong>：<code>throw</code>、<code>throws</code></p>
<p>格式</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token punctuation">[</span>访问控制关键字<span class="token punctuation">]</span> 返回值类型 方法名<span class="token punctuation">(</span>参数列表<span class="token punctuation">)</span> <span class="token punctuation">[</span><span class="token keyword">throws</span> 异常类<span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">]</span> <span class="token punctuation">{</span></span>
<span class="line">	<span class="token keyword">throw</span> <span class="token keyword">new</span> <span class="token operator">&lt;</span>错误类型对象<span class="token operator">&gt;</span><span class="token punctuation">(</span><span class="token operator">&lt;</span>参数<span class="token operator">&gt;</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">checkValue</span><span class="token punctuation">(</span><span class="token keyword">int</span> value<span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">IllegalArgumentException</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">if</span> <span class="token punctuation">(</span>value <span class="token operator">&lt;</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">throw</span> <span class="token keyword">new</span> <span class="token class-name">IllegalArgumentException</span><span class="token punctuation">(</span><span class="token string">"值不能小于0"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line">    <span class="token comment">// 其他代码...</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>自定义异常类</h3>
<ul>
<li>自定义异常类允许开发者定义程序中特有的错误情况。</li>
<li>自定义异常有助于将问题封装起来，使得问题处理代码与正常业务逻辑代码分离，提高代码的可读性和可维护性。</li>
</ul>
<p><strong>注意事项</strong></p>
<ul>
<li>所有异常类都必须是<code>Throwable</code>的子类。</li>
<li>如果自定义异常类是检查时异常（checked exception），则它应该直接或间接继承自<code>Exception</code>类。</li>
<li>如果自定义异常类是运行时异常（unchecked exception），则它应该直接或间接继承自<code>RuntimeException</code>类。</li>
</ul>
<p>格式</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 自定义检查时异常类</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">CustomCheckedException</span> <span class="token keyword">extends</span> <span class="token class-name">Exception</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 构造器</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">CustomCheckedException</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">super</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 调用父类 Exception 的无参构造器</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">CustomCheckedException</span><span class="token punctuation">(</span><span class="token class-name">String</span> message<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">super</span><span class="token punctuation">(</span>message<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 调用父类 Exception 的带参构造器</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 自定义运行时异常类</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">CustomRuntimeException</span> <span class="token keyword">extends</span> <span class="token class-name">RuntimeException</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token comment">// 构造器</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">CustomRuntimeException</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">super</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 调用父类 RuntimeException 的无参构造器</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">public</span> <span class="token class-name">CustomRuntimeException</span><span class="token punctuation">(</span><span class="token class-name">String</span> message<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">super</span><span class="token punctuation">(</span>message<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 调用父类 RuntimeException 的带参构造器</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">ExceptionDemo</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">        <span class="token keyword">try</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token comment">// 假设某个方法可能会抛出自定义的检查时异常</span></span>
<span class="line">            <span class="token keyword">throw</span> <span class="token keyword">new</span> <span class="token class-name">CustomCheckedException</span><span class="token punctuation">(</span><span class="token string">"发生了一个自定义的检查时异常"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">CustomCheckedException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            e<span class="token punctuation">.</span><span class="token function">printStackTrace</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">        <span class="token keyword">try</span> <span class="token punctuation">{</span></span>
<span class="line">            <span class="token comment">// 假设某个方法可能会抛出自定义的运行时异常</span></span>
<span class="line">            <span class="token keyword">throw</span> <span class="token keyword">new</span> <span class="token class-name">CustomRuntimeException</span><span class="token punctuation">(</span><span class="token string">"发生了一个自定义的运行时异常"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">CustomRuntimeException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">            e<span class="token punctuation">.</span><span class="token function">printStackTrace</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">        <span class="token punctuation">}</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>BIO</h2>
<p>简要说明</p>
<ul>
<li>BIO是Java传统的同步阻塞式I/O模型。</li>
<li>每个客户端连接请求都会被分配一个线程去处理，服务器端通过线程阻塞的方式来等待客户端的请求，处理完成后线程销毁。</li>
<li>类路径：<code>java.io</code></li>
</ul>
<p>主要功能</p>
<ul>
<li>提供简单的I/O操作接口，易于理解和实现。</li>
<li>支持基于流的I/O操作，如文件读写、网络通信等。</li>
<li>可以通过线程池来管理线程资源，减少线程创建和销毁的开销。</li>
</ul>
<p>注意事项</p>
<ul>
<li>每个连接对应一个线程，当并发请求量大时，会导致资源浪费和性能瓶颈。</li>
<li>线程在等待I/O操作完成时会阻塞，导致CPU资源利用率不高。</li>
<li>需要合理配置线程池的大小，以避免资源耗尽或过度竞争。</li>
</ul>
<p>适用场景</p>
<ul>
<li>适用于连接数目比较小且固定的架构，因为每个连接都需要一个线程来处理。</li>
<li>适用于对实时性要求不高的应用，因为BIO在处理大量并发请求时效率较低。</li>
<li>适用于简单的并发量不高的应用，如一些传统的Web应用、小型的文件服务器等。</li>
</ul>
<h2>NIO</h2>
<p>简要说明</p>
<ul>
<li>Java NIO是一种基于通道（Channel）和缓冲区（Buffer）的I/O操作方式，提供了非阻塞式的I/O操作。</li>
<li>允许单个线程管理多个输入/输出通道，从而实现更高效的I/O操作，特别是在处理大量并发连接时。</li>
<li>类路径：<code>java.nio</code></li>
</ul>
<p>主要功能</p>
<ul>
<li>非阻塞I/O操作：线程在请求I/O操作时不会阻塞，可以继续执行其他任务。</li>
<li>选择器（Selectors）：可以监控多个通道的事件（如连接建立、数据到达等），单个线程可以处理多个通道。</li>
<li>缓冲区（Buffers）：用于存储数据，提供数据读写操作，支持数据的直接访问。</li>
<li>通道（Channels）：用于读取和写入数据，与传统的流相比，通道可以提供更高效的I/O操作。</li>
</ul>
<p>注意事项</p>
<ul>
<li>NIO编程相对复杂，需要理解通道、缓冲区和选择器的概念。</li>
<li>正确使用选择器和缓冲区需要更多的编程技巧和错误处理。</li>
<li>需要注意内存管理，避免缓冲区溢出或内存泄漏。</li>
<li>在高并发情况下，合理配置线程数和选择器，以优化性能。</li>
</ul>
<p>适用场景</p>
<ul>
<li>适用于需要处理大量并发连接的应用，如服务器端编程、网络通信等。</li>
<li>适用于需要高性能I/O操作的应用，如文件传输、消息队列等。</li>
<li>适用于需要低延迟响应的应用，如在线游戏、实时通信系统等。</li>
<li>适用于需要同时处理多个网络连接的场景，NIO可以显著减少线程数量，提高资源利用率。</li>
</ul>
<blockquote>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/7879fe9abb22274df3306e86c1f0fd20.png" alt=""></p>
</blockquote>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>数据双向传输</p>
<ul>
<li>Selector（选择器/多路复用器）：</li>
<li>Channel（管道）：建立传输数据用的链接</li>
<li>Buffer（缓冲区）：发送数据前的等待区域。</li>
</ul>
</div>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>写上的数据是不会被删除，而是被覆盖，通过 “下标限制” 来实现读写。</p>
<ul>
<li>capacity：容量</li>
<li>position：读写指针，当前读取到的位置（索引下标）</li>
<li>limit：读写位置（索引下标）限制</li>
</ul>
</div>
<h3>Channel（管道）</h3>
<p>方法</p>
<ul>
<li><code>channel.read(&lt;缓冲区&gt;)</code>：读取。</li>
<li><code>channel.write(&lt;缓冲区&gt;)</code>：写入。</li>
<li><code>channel.close()</code>：关闭。</li>
<li></li>
</ul>
<h4>FileChannel</h4>
<blockquote>
<ul>
<li>文件管道</li>
</ul>
</blockquote>
<h4>DatagramChannel</h4>
<blockquote>
<ul>
<li>UDP传输协议</li>
</ul>
</blockquote>
<h4>SocketChannel</h4>
<blockquote>
<ul>
<li>TCP传输协议</li>
</ul>
</blockquote>
<h4>ServerSocketChannel</h4>
<blockquote>
<ul>
<li>TCP传输协议</li>
</ul>
</blockquote>
<h3>Buffer（缓冲区）</h3>
<h4>ByteBuffer</h4>
<p>方法</p>
<ul>
<li>
<p><code>ByteBuffer.allocate(&lt;数字&gt;)</code>：分配空间/容量，实例化缓冲区对象。</p>
</li>
<li>
<p><code>ByteBuffer.limit()</code>：读写位置（索引下标）限制。</p>
</li>
<li>
<p><code>ByteBuffer.put(&lt;写入的数据&gt;)</code>：写入数据。</p>
</li>
<li>
<p><code>ByteBuffer.get()</code>：读取数据。</p>
</li>
<li>
<p><code>ByteBuffer.flip()</code>：切换为读模式。</p>
</li>
<li>
<p><code>ByteBuffer.clear()</code>：切换为写模式。</p>
</li>
<li>
<p><code>ByteBuffer.compact()</code>：把未读完的部分向前压缩，并切换为写模式，即将读完的删除，未读完的保留。</p>
</li>
<li>
<p><code>ByteBuffer.rewind()</code>：重头读取数据，将读写指针设为0的位置。</p>
</li>
<li>
<p><code>ByteBuffer.mark()</code>：标记读写指针（索引下标）的位置。</p>
</li>
<li>
<p><code>ByteBuffer.reset()</code>：将读写指针（索引下标）重置到标记的位置。</p>
</li>
</ul>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>nio<span class="token punctuation">.</span></span><span class="token class-name">ByteBuffer</span></span><span class="token punctuation">;</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Test</span> <span class="token punctuation">{</span></span>
<span class="line">    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">	    <span class="token comment">// 实例化ByteBuffer对象</span></span>
<span class="line">        <span class="token class-name">ByteBuffer</span> buffer <span class="token operator">=</span> <span class="token class-name">ByteBuffer</span><span class="token punctuation">.</span><span class="token function">allocate</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">    <span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><blockquote>
<blockquote>
<ul>
<li>MappedByteBuffer</li>
<li>DirectByteBuffer</li>
<li>HeapByteBuffer</li>
</ul>
</blockquote>
</blockquote>
<h4>CharBuffer</h4>
<h4>ShortBuffer</h4>
<h4>IntBuffer</h4>
<h4>LongBuffer</h4>
<h4>FloatBuffer</h4>
<h4>DoubleBuffer</h4>
<h3>Selector（选择器/多路复用器）</h3>
<p>Selector（选择器/多路复用器）的作用是配合一个线程来管理多个Channel（管道），获取这些Channel上发生的事件，这些Channel工作在非阻塞模式下，不会让线程吊死在一个Channel上，适合连接数多，但流浪低的场景。</p>
<h2>AIO</h2>
<p>简要说明</p>
<ul>
<li>AIO提供了真正的异步I/O操作，意味着在执行I/O操作时，线程可以完全释放，不需要等待I/O操作完成，从而可以更有效地利用系统资源。</li>
</ul>
<p>主要功能</p>
<ul>
<li>异步I/O操作：线程发起I/O操作后可以立即返回，不需要等待I/O操作完成。</li>
<li>完成处理器（CompletionHandler）：当I/O操作完成时，会调用完成处理器来处理结果。</li>
<li>文件通道（FileChannel）的增强：支持更多的文件操作，如文件锁定和解锁。</li>
<li>异步通道（AsynchronousChannel）：支持异步读写操作，如AsynchronousSocketChannel和AsynchronousFileChannel。</li>
</ul>
<p>注意事项</p>
<ul>
<li>AIO编程模型比同步I/O更为复杂，需要理解异步操作和完成处理器的概念。</li>
<li>异步I/O操作的结果处理通常涉及回调机制，这可能会使得代码的流程控制变得复杂。</li>
<li>异步I/O操作可能会因为错误处理不当而导致资源泄露或异常处理困难。</li>
<li>在使用AIO时，需要注意JVM的实现和操作系统对异步I/O的支持情况，因为这可能会影响性能。</li>
</ul>
<p>适用场景</p>
<ul>
<li>适用于需要高并发、低延迟的应用，如高负载的Web服务器、文件服务器等。</li>
<li>适用于需要处理大量I/O操作，但又不希望为每个操作都分配一个线程的应用。</li>
<li>适用于I/O操作密集型应用，如数据库访问、大规模文件处理等。</li>
<li>适用于需要提高应用程序响应性的场景，通过异步I/O减少线程阻塞时间。</li>
</ul>
<h2>多线程</h2>
<ul>
<li>并发编程</li>
</ul>
<h3>线程池</h3>
<p>阻塞模式下，线程同时只能处理一个socket连接。仅适合短连接场景。</p>
<h3>并发包</h3>
<h2>JDBC</h2>
<h2>第五阶段 - 进阶语法（代码简化）</h2>
<p>获取数组中的某个数值</p>
<ul>
<li><code>abcd[&lt;整数&gt;]</code></li>
</ul>
<h2>可变参数</h2>
<ul>
<li>将同一个类中多个同名同功能但参数个数不同的方法，封装成一个方法就可以通过可变参数实现。</li>
<li>传入的参数是一种不定长的列表。</li>
</ul>
<p>注意事项</p>
<ul>
<li>可变参数的实参可以为0个或任意多个。</li>
<li>可变参数的实参可以为数组。</li>
<li>可变参数的本质就是数组。</li>
<li>可变参数和普通参数一起放在形参列表中时，必须保证可变参数在最后。</li>
<li>形参列表中只能出现一个可变参数。</li>
</ul>
<p>格式</p>
<ul>
<li>数据类型后面加上<strong>3个点<code>.</code>号</strong>。</li>
</ul>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token operator">&lt;</span>访问修饰符<span class="token operator">&gt;</span> <span class="token operator">&lt;</span>返回类型<span class="token operator">&gt;</span> <span class="token operator">&lt;</span>函数名<span class="token operator">&gt;</span><span class="token punctuation">(</span>数据类型<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span> 形参名<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line"></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>代码块</h2>
<h3>匿名代码块</h3>
<ul>
<li>匿名代码块的作用是对象统一初始化。</li>
<li>类被实例化之前都会执行这个代码块。</li>
<li>格式：代码写在<code>{}</code>中间。</li>
</ul>
<p>案例</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Test</span> <span class="token punctuation">{</span></span>
<span class="line">	<span class="token punctuation">{</span></span>
<span class="line">		<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"匿名代码块"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line">	<span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line">	<span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">abc</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">	<span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>静态代码块</h3>
<ul>
<li>类被实例化时会执行这个代码块，但使用了<code>static</code>关键字修饰，内存中只存在一个。</li>
<li>格式：<code>static {}</code>，代码写在<code>{}</code>中间。</li>
</ul>
<h2>内部类</h2>
<ul>
<li>定义在类的内部的类称为内部类。内部类所在的类称为外部类。</li>
</ul>
<p>编译的规则是类名作为文件名，因此编写代码时需要做到一个文件中只有一个类，且类名与文件名一致。</p>
<p>格式</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 外部类</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Test</span> <span class="token punctuation">{</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment">// 内部类</span></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">Test02</span> <span class="token punctuation">{</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>调用内部类的语法格式</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token operator">&lt;</span>外部类名<span class="token operator">&gt;</span> <span class="token operator">&lt;</span>变量名<span class="token number">1</span><span class="token operator">&gt;</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token operator">&lt;</span>外部类<span class="token operator">&gt;</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"><span class="token operator">&lt;</span>外部类名<span class="token punctuation">.</span>内部类名<span class="token operator">&gt;</span> <span class="token operator">&lt;</span>变量名<span class="token number">2</span><span class="token operator">&gt;</span> <span class="token operator">=</span> <span class="token operator">&lt;</span>变量名<span class="token number">1</span><span class="token operator">&gt;</span><span class="token punctuation">.</span><span class="token keyword">new</span> <span class="token operator">&lt;</span>内部类名<span class="token operator">&gt;</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h3>局部内部类</h3>
<h3>静态内部类</h3>
<h3>匿名内部类</h3>
<ul>
<li>当代码中需要调用一个类中的方法时，却发现需要重写该方法才能满足需求，通过在当前代码中直接实例化对象并重写该方法，调用重写后的方法，一步到位。</li>
<li>优点：无需再创建一个类继承另一个类，再重写父类方法，再调用新创建的类中的方法。</li>
</ul>
<p>格式</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line"><span class="token comment">// 外部类</span></span>
<span class="line"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Test</span> <span class="token punctuation">{</span></span>
<span class="line">	<span class="token comment">// 匿名内部类</span></span>
<span class="line">	<span class="token keyword">new</span> <span class="token class-name">Test02</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
<span class="line">		<span class="token comment">// 匿名内部类方法实现部分</span></span>
<span class="line">	<span class="token punctuation">}</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>Lambda表达式</h2>
<ul>
<li>Lambda 表达式是 Java 8 中引入的一个重要的新特性</li>
<li>提供了一种更简洁的方式来表示匿名内部类，特别是那些只包含一个方法的接口（称为函数式接口）。</li>
</ul>
<h2>泛型</h2>
<ul>
<li></li>
</ul>
<p>语法格式</p>
<div class="language-java line-numbers-mode" data-highlighter="prismjs" data-ext="java"><pre><code class="language-java"><span class="line">数据类型 变量 <span class="token operator">=</span> <span class="token punctuation">(</span>参数列表<span class="token punctuation">)</span> <span class="token operator">-&gt;</span> <span class="token punctuation">{</span></span>
<span class="line">	<span class="token comment">// 代码块</span></span>
<span class="line"><span class="token punctuation">}</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul>
<li><strong>参数列表</strong>：一组括号内的参数，可以指定参数类型，也可以不指定（编译器会自动推断）。</li>
<li><strong>箭头操作符</strong> (<code>-&gt;</code>)：将参数和 Lambda 表达式的主体分隔开。</li>
<li><strong>表达式或代码块</strong>：可以是单个表达式，也可以是一段代码块，如果是表达式，则返回值就是该表达式的结果；如果是代码块，则必须使用 <code>return</code> 语句返回值。</li>
</ul>
<h2>平台环境</h2>
<h2>动态代理/动态加载</h2>
<h2>函数式编程、集合并行计算</h2>
<h2>某些版本更新的语法</h2>
<h2>某些版本新增的功能</h2>
<h2>待整理</h2>
<ul>
<li>基础操作</li>
<li>面向对象编程</li>
<li>数据类型</li>
<li>枚举、注解</li>
<li>异常</li>
<li>泛型</li>
<li>线程</li>
<li>IO流（文件操作）</li>
<li>网络编程</li>
<li>反射</li>
<li>JDBC和连接池</li>
<li>JVM</li>
</ul>
<p>Java SE 高级</p>
<ul>
<li>数据结构、算法</li>
<li>设计模式</li>
<li>正则表达式</li>
<li>数据库</li>
</ul>
<p>常用类（标准类）</p>
]]></content:encoded>
      <enclosure url="https://docs.oracle.com/javase/tutorial/figures/getStarted/getStarted-compiler.gif" type="image/gif"/>
    </item>
    <item>
      <title>Package - Intellij IDEA</title>
      <link>https://blog.magictable.ha.cn/software/Package-IntellijIDEA.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-IntellijIDEA.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Intellij IDEA</source>
      <description>文章摘要： IDEA 全称 IntelliJ IDEA，是java编程语言的集成开发环境。 简介 简要说明 IntelliJ IDEA是由JetBrains公司开发的一款集成开发环境（IDE）。 主要用于Java语言开发，同时支持多种编程语言和框架。它以其强大的代码智能提示、代码分析、重构和调试功能而闻名。 主要功能 智能编码助手：提供代码自动完成、代...</description>
      <category>软件程序/软件包</category>
      <pubDate>Tue, 02 Jan 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> IDEA 全称 IntelliJ IDEA，是java编程语言的集成开发环境。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>IntelliJ IDEA是由JetBrains公司开发的一款集成开发环境（IDE）。</li>
<li>主要用于Java语言开发，同时支持多种编程语言和框架。它以其强大的代码智能提示、代码分析、重构和调试功能而闻名。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>智能编码助手</strong>：提供代码自动完成、代码检查、错误提示和快速修复建议。</li>
<li><strong>代码重构</strong>：支持多种重构操作，如重命名、提取方法、引入变量等，易于维护和优化代码。</li>
<li><strong>调试工具</strong>：内置功能强大的调试器，支持断点、单步执行、变量查看等。</li>
<li><strong>版本控制</strong>：集成了Git、SVN等多种版本控制系统，方便进行代码管理和协作。</li>
<li><strong>项目管理</strong>：支持多种项目类型和框架，如Maven、Gradle、Spring等。</li>
<li><strong>数据库工具</strong>：内置数据库管理工具，可以直接在IDE中执行SQL语句、查看数据库结构。</li>
<li><strong>构建工具</strong>：支持Ant、Maven、Gradle等构建工具，简化项目构建过程。</li>
<li><strong>插件系统</strong>：拥有丰富的插件市场，可以通过安装插件来扩展IDE的功能。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>系统资源</strong>：IntelliJ IDEA是一款资源消耗较大的IDE，需要确保计算机有足够的内存和处理器性能。</li>
<li><strong>学习曲线</strong>：虽然IDEA提供了丰富的功能，但这也意味着有一定的学习曲线，新用户可能需要时间适应。</li>
<li><strong>配置优化</strong>：为了提高性能，建议根据项目需求和个人习惯对IDEA进行适当的配置优化。</li>
<li><strong>插件管理</strong>：安装过多插件可能会影响IDE的性能，应谨慎选择和管理插件。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>Java开发</strong>：特别适用于Java语言的各种项目，包括企业级应用、Web应用、Android开发等。</li>
<li><strong>多语言编程</strong>：支持多种编程语言，如Python、PHP、Ruby、JavaScript、TypeScript等，适用于全栈开发。</li>
<li><strong>大型项目</strong>：强大的项目管理能力和代码分析功能，适合处理大型和复杂的项目。</li>
<li><strong>框架开发</strong>：支持Spring、Hibernate、Struts等多种流行框架，便于框架驱动的项目开发。</li>
<li><strong>Web开发</strong>：提供对HTML、CSS、JavaScript等Web开发语言的支持，适用于Web应用开发。</li>
<li><strong>移动开发</strong>：支持Android开发，可以用于移动应用的开发。</li>
</ul>
<h2>安装与卸载</h2>
<p>详细总结：<a href=""></a></p>
<h2>终端命令</h2>
<p>详细总结：<a href=""></a></p>
<h2>配置文件</h2>
<p>详细总结：<a href=""></a></p>
<h2>热门推荐</h2>
<p>详细总结：<a href=""></a></p>
<h2>问题总结</h2>
<ul>
<li>导入项目检查流程：<a href="/software/Package-IntellijIDEA-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E5%AF%BC%E5%85%A5%E9%A1%B9%E7%9B%AE%E6%A3%80%E6%9F%A5%E6%B5%81%E7%A8%8B.html" target="_blank">Package-IntellijIDEA-问题总结-导入项目检查流程</a></li>
<li>软件破解：<a href="/software/Package-IntellijIDEA-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E8%BD%AF%E4%BB%B6%E7%A0%B4%E8%A7%A3.html" target="_blank">Package-IntellijIDEA-问题总结-软件破解</a></li>
<li>项目热部署配置：<a href="/software/Package-IntellijIDEA-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E9%A1%B9%E7%9B%AE%E7%83%AD%E9%83%A8%E7%BD%B2%E9%85%8D%E7%BD%AE.html" target="_blank">Package-IntellijIDEA-问题总结-项目热部署配置</a></li>
</ul>
<h2>设置方案</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>IDEA中的设置分为：全局设置（后续新项目都受影响）、项目设置（当前项目受影响）</p>
<ul>
<li>在已经创建好的项目中，再次修改设置，此时修改的是 “项目设置”。</li>
<li>将项目关闭，切换到未打开项目的页面，点击修改设置，此时修改的是 “全局设置”。</li>
</ul>
</div>
<p>详细总结：<a href="/software/Package-IntellijIDEA-%E8%AE%BE%E7%BD%AE.html" target="_blank">Package-IntellijIDEA-设置</a></p>
<h2>插件推荐</h2>
<ul>
<li>[Chinese ​(Simplified)​ Language Pack / 中文语言包](https://plugins.jetbrains.com/plugin/13710-chinese-simplified-language-pack</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Visual Studio Code - 快捷键</title>
      <link>https://blog.magictable.ha.cn/software/Package-VisualStudioCode-%E5%BF%AB%E6%8D%B7%E9%94%AE.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-VisualStudioCode-%E5%BF%AB%E6%8D%B7%E9%94%AE.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Visual Studio Code - 快捷键</source>
      <description>文章摘要： 常用快捷键整理。 快速导航 Ctrl + Tab：切换已打开的文件页面。 Ctrl + E：调出文件搜索框。 标签页 Ctrl + B：显示/隐藏标签页 Ctrl + Shift + E：资源管理器 Ctrl + Shift + F：搜索 Ctrl + Shift + D：运行和调试 Ctrl + Shift + G：源代码管理 Ctrl ...</description>
      <category>软件程序/软件包</category>
      <pubDate>Mon, 01 Jan 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 常用快捷键整理。</p>
<!-- more -->
<h2>快速导航</h2>
<ul>
<li><code>Ctrl + Tab</code>：切换已打开的文件页面。</li>
<li><code>Ctrl + E</code>：调出文件搜索框。</li>
</ul>
<h2>标签页</h2>
<ul>
<li><code>Ctrl + B</code>：显示/隐藏标签页</li>
<li><code>Ctrl + Shift + E</code>：资源管理器</li>
<li><code>Ctrl + Shift + F</code>：搜索</li>
<li><code>Ctrl + Shift + D</code>：运行和调试</li>
<li><code>Ctrl + Shift + G</code>：源代码管理</li>
<li><code>Ctrl + Shift + X</code>：扩展</li>
</ul>
<h2>终端</h2>
<ul>
<li><code>Ctrl + (~)</code>：终端</li>
<li><code>Ctrl + Shift + (~)</code>：新建终端</li>
<li><code>Ctrl + Shift + [上下键]</code>：多终端之间切换</li>
</ul>
<h2>编辑</h2>
<ul>
<li><code>Ctrl + N</code>：新建文件</li>
<li><code>Ctrl + S</code>: 保存文件</li>
<li><code>Ctrl + W</code>：关闭文件</li>
<li><code>Ctrl + Q</code>：关闭软件</li>
<li><code>Alt + [上下键]</code>：上下移动一行</li>
<li><code>Ctrl + F</code>：关键词查找内容</li>
<li><code>Ctrl + H</code>：替换内容</li>
<li><code>Ctrl + L</code>：选择当前行</li>
<li><code>Ctrl + Alt + [上下键]</code>：添加光标</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Visual Studio Code - 热门推荐 - 插件</title>
      <link>https://blog.magictable.ha.cn/software/Package-VisualStudioCode-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E6%8F%92%E4%BB%B6.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-VisualStudioCode-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E6%8F%92%E4%BB%B6.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Visual Studio Code - 热门推荐 - 插件</source>
      <description>文章摘要： Visual Studio Code热门插件推荐。 提示 VScode的插件分为有图形界面和无图形界面的插件。 比如 “Excalidraw” 插件没有图形界面，而是根据创建一个后缀为.excalidraw的文件来使用该插件进行识别来执行相关的插件功能。 比如 “Git Graph” 插件有提供图形界面，进行相关操作。 实用功能类 Chin...</description>
      <category>软件程序/软件包</category>
      <pubDate>Mon, 01 Jan 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Visual Studio Code热门插件推荐。</p>
<!-- more -->
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<ul>
<li>VScode的插件分为有图形界面和无图形界面的插件。</li>
<li>比如 “Excalidraw” 插件没有图形界面，而是根据创建一个后缀为<code>.excalidraw</code>的文件来使用该插件进行识别来执行相关的插件功能。</li>
<li>比如 “Git Graph” 插件有提供图形界面，进行相关操作。</li>
</ul>
</div>
<h2>实用功能类</h2>
<ul>
<li><strong>Chinese (Simplified) (简体中文)</strong>, VScode中文界面插件。</li>
<li><strong>indent-rainbow</strong>，为缩进彩虹（添加颜色区分）更易于阅读。</li>
<li><strong>code-translate</strong>，翻译工具。</li>
<li><strong>CodeSnap-plus</strong>，代码截图工具。</li>
<li><strong>GitHub Copilot</strong>，GitHub提供的LLM模型聊天工具，适用于代码生成相关。</li>
</ul>
<h2>扩展功能类</h2>
<ul>
<li><strong>Project Manager</strong>，用于为项目打标签和快速打开。</li>
<li><strong>Remote Developoent</strong>，有关Remote远程连接插件全家桶。</li>
<li><strong>Git Graph</strong>，Git版本控制可视化界面。</li>
<li><strong>Docker</strong>，Docker容器图形化界面。</li>
<li><strong>MySQL</strong>，MySQL数据库图形化界面。</li>
</ul>
<h2>前端开发类</h2>
<ul>
<li><strong>Live Server</strong>，网页应用启动功能，且实时响应更新浏览器中的画面（热更新）。</li>
<li><strong>Code Runner</strong>，用于运行代码或脚本的功能。</li>
<li><strong>Thunder Client</strong>，API调试插件，发起网络请求。</li>
</ul>
<h2>特殊文件类</h2>
<div class="hint-container warning">
<p class="hint-container-title">警告</p>
<p>通过识别文件后缀名，可以调用相应的插件来读取、运行并渲染文件内容。</p>
</div>
<ul>
<li><strong>GitHub Markdown Preview</strong>，GitHub提供的Makdown文档预览全家桶。</li>
<li><strong>Excalidraw</strong>，绘图软件，白板、流程图，简单易上手。（实现一个文件随时修改图像和展示结果，无需导出图片操作）</li>
<li><strong>Draw.io Integration</strong>，绘制流程图，前端UI界面原型设计和草图绘制。</li>
<li><strong>PlantUML</strong>，绘制UML图，类图、流程图、时序图等图的绘制。（实现一个文件修改代码生成流程图）</li>
<li><strong>REST Client</strong>，允许您通过编写文件并发送 HTTP 请求。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Visual Studio Code - 热门推荐 - 设置</title>
      <link>https://blog.magictable.ha.cn/software/Package-VisualStudioCode-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E8%AE%BE%E7%BD%AE.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-VisualStudioCode-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E8%AE%BE%E7%BD%AE.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Visual Studio Code - 热门推荐 - 设置</source>
      <description>文章摘要： 推荐配置方案。 相关信息 外部相关文章 内部相关文章 JSON文件详细总结： 用户（全局）配置 settings.json 注释 编程字体 - 注意事项 代码的宽度应该是固定的。 代码的字体应该是容易辨识的。 不要使用非等宽字体作为编程字体。 不要使用字体过窄或过胖的字体。 不要使用各种迷乱的字体，如脚本字体、装饰字体等。 字体推荐 Jet...</description>
      <category>软件程序/软件包</category>
      <pubDate>Mon, 01 Jan 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 推荐配置方案。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li></li>
</ul>
<p>内部相关文章</p>
<ul>
<li>JSON文件详细总结：<a href="/software/Language-JSON.html" target="_blank">Language-JSON</a></li>
</ul>
</div>
<h2>用户（全局）配置</h2>
<p>settings.json</p>
<div class="language-json line-numbers-mode" data-highlighter="prismjs" data-ext="json"><pre><code class="language-json"><span class="line"><span class="token punctuation">{</span></span>
<span class="line">	<span class="token comment">// 控制是否为当前工作区自动继续存储在云中的可用工作更改。</span></span>
<span class="line">    <span class="token property">"workbench.cloudChanges.autoResume"</span><span class="token operator">:</span> <span class="token string">"off"</span><span class="token punctuation">,</span> <span class="token comment">// `off`: 从不尝试从云中继续工作更改。</span></span>
<span class="line">    <span class="token comment">// 控制在使用“继续工作”时是否提示用户将工作更改存储在云中。</span></span>
<span class="line">    <span class="token property">"workbench.cloudChanges.continueOn"</span><span class="token operator">:</span> <span class="token string">"off"</span><span class="token punctuation">,</span> <span class="token comment">// `off`: 除非用户已启用云更改，否则请勿通过“继续工作”将工作更改存储在云中。</span></span>
<span class="line">    <span class="token comment">// 是否自动检查扩展更新。</span></span>
<span class="line">    <span class="token property">"extensions.autoCheckUpdates"</span><span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token comment">// 配置是否接收自动更新。</span></span>
<span class="line">    <span class="token property">"update.mode"</span><span class="token operator">:</span> <span class="token string">"manual"</span><span class="token punctuation">,</span> <span class="token comment">// `manual`: 禁用自动后台更新检查。如果手动检查更新，更新将可用。</span></span>
<span class="line">    <span class="token comment">// 控制 Visual Studio Code 遥测、第一方扩展遥测和参与的第三方扩展遥测。</span></span>
<span class="line">    <span class="token property">"telemetry.telemetryLevel"</span><span class="token operator">:</span> <span class="token string">"off"</span><span class="token punctuation">,</span> <span class="token comment">// 全部禁止</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line">	<span class="token comment">// 自动将主题与VSCode颜色主题同步。</span></span>
<span class="line">    <span class="token property">"excalidraw.theme"</span><span class="token operator">:</span> <span class="token string">"auto"</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token comment">// 将根据系统颜色模式自动选择颜色主题。</span></span>
<span class="line">    <span class="token property">"window.autoDetectColorScheme"</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token comment">// 控制树缩进(以像素为单位)。</span></span>
<span class="line">    <span class="token property">"workbench.tree.indent"</span><span class="token operator">:</span> <span class="token number">16</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token comment">// 控制树是否应呈现缩进参考线。</span></span>
<span class="line">    <span class="token property">"workbench.tree.renderIndentGuides"</span><span class="token operator">:</span> <span class="token string">"always"</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token comment">// 在没有从上一会话中恢复出信息的情况下，控制启动时显示的编辑器。</span></span>
<span class="line">    <span class="token property">"workbench.startupEditor"</span><span class="token operator">:</span> <span class="token string">"none"</span><span class="token punctuation">,</span> <span class="token comment">// `none`: 在启动时不打开编辑器。</span></span>
<span class="line">    <span class="token comment">// 控制列表和树是否具有平滑滚动效果。</span></span>
<span class="line">    <span class="token property">"workbench.list.smoothScrolling"</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token comment">// 控制布局控件是否显示在自定义标题栏中。</span></span>
<span class="line">    <span class="token property">"workbench.layoutControl.enabled"</span><span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token comment">// 控制字体大小(像素)。</span></span>
<span class="line">    <span class="token property">"editor.fontSize"</span><span class="token operator">:</span> <span class="token number">16</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token comment">// 控制光标的动画样式。</span></span>
<span class="line">    <span class="token property">"editor.cursorBlinking"</span><span class="token operator">:</span> <span class="token string">"smooth"</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token comment">// 控制编辑器是否使用动画滚动。</span></span>
<span class="line">    <span class="token property">"editor.smoothScrolling"</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token comment">// 控制是否启用平滑插入动画。</span></span>
<span class="line">    <span class="token property">"editor.cursorSmoothCaretAnimation"</span><span class="token operator">:</span> <span class="token string">"on"</span><span class="token punctuation">,</span> <span class="token comment">// `on`: 始终启用平滑脱字号动画。</span></span>
<span class="line">    <span class="token comment">// 按住 `Ctrl` 键并滚动鼠标滚轮时对编辑器字体大小进行缩放。</span></span>
<span class="line">    <span class="token property">"editor.mouseWheelZoom"</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token comment">// 控制菜单栏的可见性。</span></span>
<span class="line">    <span class="token property">"window.menuBarVisibility"</span><span class="token operator">:</span> <span class="token string">"toggle"</span><span class="token punctuation">,</span> <span class="token comment">// `toggle`: 菜单处于隐藏状态，但通过按 Alt 键可在窗口顶部显示。</span></span>
<span class="line">    <span class="token comment">// 将命令启动器与窗口标题一起显示。</span></span>
<span class="line">    <span class="token property">"window.commandCenter"</span><span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token comment">// 控制终端是否将使用动画滚动。</span></span>
<span class="line">    <span class="token property">"window.customTitleBarVisibility"</span><span class="token operator">:</span> <span class="token string">"auto"</span><span class="token punctuation">,</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line">	<span class="token comment">// 新 shell 是否应从 VS Code 继承其环境，这可能会生成登录 shell，以确保初始化 $PATH 和其他开发变量。这不会对 Windows 造成影响。</span></span>
<span class="line">    <span class="token property">"terminal.integrated.inheritEnv"</span><span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token comment">// 控制终端是否将使用动画滚动。</span></span>
<span class="line">    <span class="token property">"terminal.integrated.smoothScrolling"</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line">	<span class="token comment">// 控制用于克隆 GitHub 仓库的协议</span></span>
<span class="line">    <span class="token property">"github.gitProtocol"</span><span class="token operator">:</span> <span class="token string">"ssh"</span><span class="token punctuation">,</span></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>编程字体 - 注意事项</p>
<ul>
<li>代码的宽度应该是固定的。</li>
<li>代码的字体应该是容易辨识的。</li>
<li>不要使用非等宽字体作为编程字体。</li>
<li>不要使用字体过窄或过胖的字体。</li>
<li>不要使用各种迷乱的字体，如脚本字体、装饰字体等。</li>
</ul>
<p>字体推荐</p>
<ul>
<li><strong>JetBrains Mono</strong>，下载网址：<a href="https://www.jetbrains.com/zh-cn/lp/mono/" target="_blank" rel="noopener noreferrer">https://www.jetbrains.com/zh-cn/lp/mono/</a></li>
</ul>
</div>
<h2>工作区（项目）设置</h2>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Visual Studio Code</title>
      <link>https://blog.magictable.ha.cn/software/Package-VisualStudioCode.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-VisualStudioCode.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Visual Studio Code</source>
      <description>文章摘要： ‌Visual Studio Code（‌VS Code）是一款由‌微软开发的免费开源的现代化轻量级代码编辑器。 相关信息 外部相关文章 VScode有关Git操作的教程文章：【全网最全面】VS Code使用Git可视化管理源代码详细教程 内部相关文章 Visual Studio Code 快捷键查询手册： 简介 简要说明 Visual S...</description>
      <category>软件程序/软件包</category>
      <pubDate>Mon, 01 Jan 2024 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> ‌Visual Studio Code（‌VS Code）是一款由‌微软开发的免费开源的现代化轻量级代码编辑器。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li>VScode有关Git操作的教程文章：<a href="https://mp.weixin.qq.com/s/nvlLTMP-svb4vqpAvIjkWA" target="_blank" rel="noopener noreferrer">【全网最全面】VS Code使用Git可视化管理源代码详细教程</a></li>
</ul>
<p>内部相关文章</p>
<ul>
<li>Visual Studio Code 快捷键查询手册：<a href="/software/Package-VisualStudioCode-%E5%BF%AB%E6%8D%B7%E9%94%AE.html" target="_blank">Package-VisualStudioCode-快捷键</a></li>
</ul>
</div>
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>Visual Studio Code 简称为 VS Code，是一款轻量级、跨平台、免费且开源的源代码编辑器。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>语法高亮</strong>：支持多种编程语言的语法高亮显示。</li>
<li><strong>智能代码补全</strong>：提供基于变量类型、函数签名等的智能提示。</li>
<li><strong>代码导航</strong>：快速跳转到函数、变量、类的定义。</li>
<li><strong>代码重构</strong>：支持变量重命名、提取方法等重构操作。</li>
<li><strong>内置 Git 支持</strong>：可以直接在编辑器中进行版本控制操作。</li>
<li><strong>调试工具</strong>：内置调试器，支持断点、单步执行、查看变量值等。</li>
<li><strong>扩展性</strong>：拥有庞大的插件市场，可以通过安装插件来扩展编辑器的功能。</li>
<li><strong>跨平台</strong>：支持 Windows、macOS 和 Linux 操作系统。</li>
<li><strong>集成终端</strong>：可以直接在编辑器中打开命令行终端。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>插件管理</strong>：避免安装过多插件，以免影响编辑器的性能。</li>
<li><strong>更新频率</strong>：VS Code 经常更新，需要定期检查并安装更新以获得新功能和修复。</li>
<li><strong>配置同步</strong>：可以通过设置同步功能将配置和插件同步到其他设备。</li>
<li><strong>资源占用</strong>：对于一些大型项目，VS Code 可能会占用较多内存和 CPU 资源。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>Web 开发</strong>：支持 HTML、CSS、JavaScript 以及各种前端框架和后端语言。</li>
<li><strong>软件开发</strong>：适用于各种编程语言，如 Python、Java、C++、C#、Go、PHP 等。</li>
<li><strong>数据科学</strong>：支持 Python、R 等数据科学语言，配合相关插件可以进行数据分析。</li>
<li><strong>学生和教育</strong>：由于免费且功能强大，适合学生和教育机构使用。</li>
<li><strong>个人和小型团队</strong>：适用于个人开发者和小型团队进行快速开发和原型设计。</li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>个人推荐将VScode作为“文档编写、流程图绘制、环境管理、远程访问、数据库管理、API测试、中英翻译”的用途。</li>
<li>VScode插件，都是通过文件后缀来确定文件类型，并使插件读取来呈现不同功能。如：<code>.excalidraw</code>文件来实现绘画、<code>.sql</code>来实现数据库操作。（前提是需要有下载读取该文件类型的插件来运行打开）</li>
</ul>
</div>
<h2>安装与卸载</h2>
<p>详细总结：<a href="/software/Package-VisualStudioCode-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html" target="_blank">Package-VisualStudioCode-安装与卸载</a></p>
<h2>终端命令</h2>
<p>详细总结：<a href=""></a></p>
<h2>配置文件</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>VScode通过设置文件来做到项目隔离，并提前设置全局设置文件，实现不同工作环境之间的来回切换。</li>
<li>即根据场景合理规划所需插件和设置。</li>
</ul>
</div>
<p>VScode创建项目后，可在项目根目录下的<code>.vscode/</code>目录中存放配置和信息相关的文件。</p>
<ul>
<li><code>settings.json</code>文件是VScode软件设置文件（包括插件的配置）。</li>
<li><code>launch.json</code>文件是VSCode调试设置的文件。</li>
</ul>
<p>设置相关的详细总结：<a href="/software/Package-VisualStudioCode-%E8%AE%BE%E7%BD%AE.html" target="_blank">Package-VisualStudioCode-设置</a></p>
<p>个人推荐的设置方案：<a href="/software/Package-VisualStudioCode-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E8%AE%BE%E7%BD%AE.html" target="_blank">Package-VisualStudioCode-热门推荐-设置</a></p>
<p>详细总结：<a href=""></a></p>
<h2>热门推荐</h2>
<p>详细总结：<a href=""></a></p>
<h2>问题总结</h2>
<p>详细总结：<a href=""></a></p>
<h2>底层实现解析</h2>
<h3>跨平台实现</h3>
<ul>
<li>VSCode的跨平台特性得益于其基于Electron框架的实现。</li>
<li>Electron是一个开源框架，它允许开发者使用Web技术（HTML, CSS, JavaScript）来构建跨平台的桌面应用。</li>
<li>Electron基于Chromium和Node.js，其中Chromium负责渲染VSCode的界面，而Node.js则提供了后端处理能力。</li>
</ul>
<h3>多进程架构</h3>
<ul>
<li>
<p>VSCode采用了多进程架构，以提高应用的稳定性和性能。当VSCode第一次启动时，会创建一个主进程（main process）。</p>
</li>
<li>
<p>随后，每个打开的窗口都会创建一个渲染进程（Renderer Process），用于渲染窗口内容。</p>
</li>
<li>
<p>VSCode还会为每个窗口创建一个进程专门来执行插件，即Extension Host进程。</p>
</li>
<li>
<p><strong>主进程</strong>：负责管理VSCode的整体运行，如文件操作、窗口管理、插件加载等。</p>
</li>
<li>
<p><strong>渲染进程</strong>：负责显示窗口内容，处理用户交互等。</p>
</li>
<li>
<p><strong>Extension Host进程</strong>：负责执行插件代码，实现各种扩展功能。</p>
</li>
</ul>
<h3>插件架构与扩展性</h3>
<ul>
<li>
<p>VScode插件推荐：<a href="/software/Package-VisualStudioCode-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E6%8F%92%E4%BB%B6.html" target="_blank">插件推荐</a></p>
</li>
<li>
<p>VSCode的插件架构是其扩展性的关键。</p>
</li>
<li>
<p>VSCode创建Extension Host进程的方式是创建一个新的Electron进程，并以Node.js的形式运行。这种设计使得插件可以在独立的进程中运行，互不干扰，提高了应用的稳定性。</p>
</li>
<li>
<p>对于开发者而言，可以通过编写插件来扩展VSCode的功能。VSCode提供了丰富的API和文档，方便开发者进行插件开发。此外，VSCode还提供了插件市场，方便用户查找和安装所需的插件。</p>
</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>OS - Debian Linux - 热门推荐 - 部署配置方案 - GNOME个人桌面</title>
      <link>https://blog.magictable.ha.cn/software/OS-DebianLinux-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E9%83%A8%E7%BD%B2%E9%85%8D%E7%BD%AE%E6%96%B9%E6%A1%88-GNOME%E4%B8%AA%E4%BA%BA%E6%A1%8C%E9%9D%A2.html</link>
      <guid>https://blog.magictable.ha.cn/software/OS-DebianLinux-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E9%83%A8%E7%BD%B2%E9%85%8D%E7%BD%AE%E6%96%B9%E6%A1%88-GNOME%E4%B8%AA%E4%BA%BA%E6%A1%8C%E9%9D%A2.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">OS - Debian Linux - 热门推荐 - 部署配置方案 - GNOME个人桌面</source>
      <description>文章摘要： 本文章将以日常使用场景和人工智能研发为目的，总结在GNOME图形界面上进行配置和优化 Debian Linux 12 操作系统的流程。 注释 GNOME图形界面的美化文件网站：gnome-look GNOME Shell扩展文件的存放目录：/home/用户名/.local/share/gnome-shell/extensions/ 全局用户...</description>
      <category>软件程序/操作系统</category>
      <pubDate>Sun, 17 Dec 2023 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 本文章将以日常使用场景和人工智能研发为目的，总结在GNOME图形界面上进行配置和优化 Debian Linux 12 操作系统的流程。</p>
<!-- more -->
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>GNOME图形界面的美化文件网站：<a href="https://www.gnome-look.org/" target="_blank" rel="noopener noreferrer">gnome-look</a></li>
<li>GNOME Shell扩展文件的存放目录：<code>/home/用户名/.local/share/gnome-shell/extensions/</code></li>
<li>全局用户-主题文件的存放目录：<code>/usr/share/themes/</code></li>
<li>全局用户-光标和图标文件的存放目录：<code>/usr/share/icons/</code></li>
<li>当前用户-主题文件的存放目录：<code>/home/用户名/.local/share/themes/</code></li>
<li>当前用户-光标和图标文件的存放目录：<code>/home/用户名/.local/share/icons/</code></li>
</ul>
<p><strong>小建议</strong></p>
<ul>
<li>文件名在Linux中区分大小写。</li>
<li>文件名不建议使用特殊符号、空格来组成文件名。</li>
</ul>
</div>
<h2>系统安装简介</h2>
<ul>
<li>Debian Linux 12 在这次发行中包含了许多软件包的更新，比较重要的是Linux内核映像使用了6.1版本，GNOME桌面环境使用了43版本。</li>
<li>Debian Linux 12 当前使用的是<code>fcitx5输入法框架</code>，但是百度输入法或搜狗输入法还并不支持fcitx5输入法框架。</li>
</ul>
<p>系统下载官方网址：<a href="https://www.debian.org/distrib/" target="_blank" rel="noopener noreferrer">https://www.debian.org/distrib/</a></p>
<h2>磁盘分区</h2>
<p><strong>方案</strong>：大小为2TB的单个固态硬盘</p>
<table>
<thead>
<tr>
<th style="text-align:center">盘区</th>
<th style="text-align:center">分区目录</th>
<th style="text-align:center">大小</th>
<th style="text-align:left">介绍</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">1</td>
<td style="text-align:center">EFI系统分区</td>
<td style="text-align:center">500MB</td>
<td style="text-align:left">用于存放启动引导程序</td>
</tr>
<tr>
<td style="text-align:center">2</td>
<td style="text-align:center">/</td>
<td style="text-align:center">500GB</td>
<td style="text-align:left">根目录文件</td>
</tr>
<tr>
<td style="text-align:center">3</td>
<td style="text-align:center">交换空间</td>
<td style="text-align:center">10GB</td>
<td style="text-align:left">用于在内存不足时把一部分内存数据暂存到磁盘上，来避免系统崩溃</td>
</tr>
<tr>
<td style="text-align:center">4</td>
<td style="text-align:center">/home</td>
<td style="text-align:center">1000GB</td>
<td style="text-align:left">存放用户数据文件</td>
</tr>
</tbody>
</table>
<h2>目录规划</h2>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">/home/用户名/   # 个人文件和数据存储在用户主目录下，根据需要创建不同的文件夹。</span>
<span class="line">|-- /Cache/    # 存储个人缓存文件。</span>
<span class="line">|-- /Data/     # 个人隐私数据。</span>
<span class="line">|-- /Project/  # 存储个人的项目文件，可再根据实际创建子目录，方便组织和管理项目文件。</span>
<span class="line">|-- /Resource/ # 存储个人收集的资源。</span>
<span class="line">    |-- /工程/</span>
<span class="line">        |-- 3D模型、PPT模板、LLM模型、AI数据集等</span>
<span class="line">    |-- /归档/</span>
<span class="line">        |-- 某某系列游戏（表情包、海报壁纸、漫画、人物语音包、设定集、同人、小说、宣传视频、游戏截图、游戏素材、游戏原画、原声音频、周边、CG动画、COS）等</span>
<span class="line">    |-- /软件包/</span>
<span class="line">        |-- 实用工具、操作系统、编程代码、艺术创作、游戏娱乐等</span>
<span class="line">    |-- /视频/</span>
<span class="line">        |-- 动态壁纸、录像、视频素材、网络视频（短视频、广告、新闻、CG）、影视视频</span>
<span class="line">    |-- /图片/</span>
<span class="line">        |-- 精选壁纸、图片参考、图片分类、图片素材</span>
<span class="line">    |-- /文档/</span>
<span class="line">        |-- 漫画、小说、论文、书籍</span>
<span class="line">    |-- /音频/</span>
<span class="line">        |-- 语音包、音乐库、音乐素材</span>
<span class="line">|-- /Tool/    # 工具类程序和应用，不加入环境变量的实用工具。</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">/opt/         # 通过网络下载的deb软件包进行安装的个人使用的软件。若有写软件无法通过软件包管理器安装，可以将其安装到这个目录下，并添加相应的可执行文件路径到环境变量中。</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>配置系统初始化</h2>
<h3>将主用户添加到sudo用户组</h3>
<p>原因是已经设置了root密码（超级用户密码），将无法以user（普通用户）来安装软件包需要将user（普通用户）添加到sudo（超级用户）组中来获得更高的权限。</p>
<p><strong>方案一</strong>：通过命令方式</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 以下命名选择一种即可</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 第一种实现的命令</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">usermod</span> <span class="token parameter variable">-aG</span> <span class="token function">sudo</span> <span class="token operator">&lt;</span>用户名<span class="token operator">&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 第二种实现的命令</span></span>
<span class="line"><span class="token function">sudo</span> /usr/sbin/addgroup 用户名 <span class="token function">sudo</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>方案二</strong>：通过手动编辑配置文件方式</p>
<ul>
<li>手动打开<code>/etc/sudoers</code>文件并添加如下内容。</li>
</ul>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">用户名 ALL=(ALL:ALL) ALL</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>切换软件源</h3>
<ul>
<li>选择合适的软件包源（Debian档案库的软件包镜像源），选择离本机距离最近、最为靠谱的镜像源服务器，来提高访问和下载速度。</li>
<li>本文章讲述切换为“清华大学镜像源”的方法，<a href="https://mirrors.tuna.tsinghua.edu.cn/help/debian/" target="_blank" rel="noopener noreferrer">清华大学镜像源官方说明文档</a>网站链接。</li>
</ul>
<p>使用支持HTTPS的镜像源，可以有效避免国内运营商的缓存劫持。</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># Debian 当前版本默认支持HTTPS</span></span>
<span class="line"><span class="token comment"># 该软件包让Debian系统支持HTTPS源</span></span>
<span class="line"><span class="token comment"># 且能解决无法拉取HTTPS源的问题</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">apt</span> <span class="token function">install</span> apt-transport-https</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 安装或更新证书`ca-certificates`</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">apt</span> <span class="token function">install</span> ca-certificates</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>方法一</strong>：通过手动编辑配置文件方式</p>
<ul>
<li>手动打开<code>/etc/apt/sources.list</code>文件并写入如下内容。</li>
</ul>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line"># 默认注释了源码镜像以提高 apt update 速度，如有需要可自行取消注释</span>
<span class="line">deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware</span>
<span class="line"># deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware</span>
<span class="line"></span>
<span class="line">deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware</span>
<span class="line"># deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware</span>
<span class="line"></span>
<span class="line">deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware</span>
<span class="line"># deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware</span>
<span class="line"></span>
<span class="line">deb https://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware</span>
<span class="line"># deb-src https://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>方法二</strong>：通过图形界面方式</p>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">- 打开`Software &amp; Updates`软件，转跳到`Debian Software`选项卡。</span>
<span class="line">- 将“下载自”选择为“http://mirrors.tuna.tsinghua.edu.cn/debian”即可。</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h3>卸载默认多余软件包</h3>
<ul>
<li><strong>卸载默认的游戏软件</strong>：2048、对对碰、俄罗斯方块、关灯、国际象棋、黑白棋、华容道、机器人、连珠消球、扫雷、数独、数壹、四邻、四子连线、推盘、消色块、投掷子、AisleRiot接龙游戏、GNOME贪食蛇</li>
</ul>
<h3>清理多余的依赖包和配置文件</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 通过命令方式</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">apt</span> <span class="token parameter variable">--purge</span> autoremove</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h3>更新系统及软件</h3>
<ul>
<li>将Debian系统更新至最新版本。</li>
<li>先更新本地软件包缓存，再正式更新整个系统。</li>
</ul>
<p><strong>方案</strong>：通过命令方式</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 更新本地软件包缓存</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">apt</span> update</span>
<span class="line"><span class="token comment"># 立即更新所有已安装的软件、内核、其他系统组件</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">apt</span> upgrade</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>设置中文输入法</h3>
<ul>
<li>打开Fcitx5软件，选择输入法-&gt;添加“拼音”-&gt;点击应用</li>
<li>提示：Debian Linux 12 当前使用的是<code>fcitx5输入法框架</code>，但是百度输入法或搜狗输入法还并不支持fcitx5输入法框架。</li>
<li>警示：需要将Fcitx5软件添加到开机自启动中，否则可能每次开机可能用不了输入法。</li>
</ul>
<h2>软件包安装与配置（终端命令操作）</h2>
<h3>OpenSSH</h3>
<h3>Nvidia显卡驱动</h3>
<ul>
<li>第三方教学文章：<a href="https://blog.csdn.net/ruanjiannb/article/details/134470352" target="_blank" rel="noopener noreferrer">https://blog.csdn.net/ruanjiannb/article/details/134470352</a></li>
</ul>
<ol>
<li>安装Nvidia显卡检测软件包</li>
</ol>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 安装Nvidia显卡检测软件包</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">apt</span> <span class="token function">install</span> nvidia-detect</span>
<span class="line"><span class="token comment"># 查看Nvidia显卡信息</span></span>
<span class="line">nvidia-detect</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ol start="2">
<li>安装Nvidia显卡驱动程序软件包</li>
</ol>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 安装Nvidia显卡驱动程序软件包</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">apt</span> <span class="token function">install</span> nvidia-driver</span>
<span class="line"><span class="token comment"># 查看Nvidia显卡信息</span></span>
<span class="line">nvidia-smi</span>
<span class="line"><span class="token comment"># 查询到CUDA Version最高支持的CUDA版本是多少</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ol start="3">
<li>到Nvidia官网下载对应版本的CUDA工具包</li>
</ol>
<ul>
<li>这一步暂时不执行</li>
<li>没有支持Debian Linux 12 操作系统的版本</li>
</ul>
<ol start="4">
<li>到Nvidia官网下载对应版本的CUDNN库文件</li>
</ol>
<ul>
<li>这一步暂时不执行</li>
<li>没有支持Debian Linux 12 操作系统的版本</li>
</ul>
<h2>配置系统默认软件（图像界面操作）</h2>
<h3>设置</h3>
<p>网络（待完善）</p>
<ul>
<li>将IPv4设置为静态：将本机IP地址手动设置为一个固定IP，方便之后远程连接本机只需要记住一个固定的IP地址即可。</li>
<li>设置VPN</li>
</ul>
<p>蓝牙</p>
<ul>
<li>始终打开</li>
</ul>
<p>外观</p>
<ul>
<li>样式：深色主题</li>
</ul>
<p>多任务</p>
<ul>
<li>工作空间设置为1个</li>
</ul>
<p>隐私</p>
<ul>
<li>从不（息屏锁屏），允许（锁屏显示通知）</li>
<li>启用（定位服务、摄像头、麦克风、雷电接口）隐私权限</li>
<li>禁用（文件历史），禁用（定期自动清理回收站与临时文件）</li>
</ul>
<p>电源</p>
<ul>
<li>禁用（自动挂起）</li>
</ul>
<p>共享</p>
<ul>
<li>始终打开共享（文件共享、远程桌面、媒体共享）并设置密码。</li>
</ul>
<p>键盘</p>
<ul>
<li>修改打字切换输入源的快捷键：“Ctrl+空格”</li>
</ul>
<p>日期和时间</p>
<ul>
<li>启用（自动设置时间），禁用（自动设置时区），时间格式改为24小时制。</li>
</ul>
<h3>优化</h3>
<p>通用</p>
<ul>
<li>禁用（笔记本电脑盖子关闭时挂起）</li>
</ul>
<p>外观</p>
<ul>
<li>光标：</li>
<li>图标：</li>
<li>shell：</li>
<li>声音：</li>
<li>过时应用程序：</li>
<li>背景图像：</li>
<li>图像调整：</li>
</ul>
<p>字体</p>
<p>开机启动程序</p>
<ul>
<li>Fcitx5</li>
</ul>
<p>窗口</p>
<ul>
<li>启用（附加模态对话框）</li>
<li>启用（居中显示新窗口）</li>
<li>禁用（副键点击调整大小）</li>
<li>窗口聚焦：点击对焦</li>
</ul>
<p>窗口标题栏</p>
<ul>
<li>标题栏动作-双击：Toggle Maximize（切换最大化）</li>
<li>标题栏动作-中间点击：None（无动作）</li>
<li>标题栏动作-双击：Menu（显示菜单）</li>
<li>标题栏按钮：启用（最大化、最小化）、放置（右边）</li>
</ul>
<p>键盘和鼠标</p>
<ul>
<li>禁用（中键点击粘贴）</li>
</ul>
<p>顶栏</p>
<ul>
<li>时钟：启用（工作日、日期、秒）、日历（周数）</li>
</ul>
<h3>文件管理器</h3>
<ul>
<li>启用（显示隐藏文件夹）</li>
<li>按文件名A-Z排序</li>
</ul>
<p>首选项：</p>
<ul>
<li>启用（将文件夹排在文件前面）</li>
<li>用来打开项目的操作：双击</li>
<li>可选的上下文菜单操作：启用（创建链接）、禁用（永久删除）</li>
</ul>
<h3>终端</h3>
<p>首选项</p>
<ul>
<li>主题类型：暗色</li>
<li>新终端打开在：标签页</li>
<li>新选项卡位置：下一个</li>
</ul>
<p>配置文件</p>
<ul>
<li>终端起始尺寸：132列*32行</li>
<li>字体类型：DejaVu Sans Mono</li>
<li>字体大小：12</li>
<li>允许闪烁文本：聚焦时</li>
<li>光标形状：下划线，启用（光标闪烁）</li>
</ul>
<h2>系统美化配置</h2>
<ul>
<li>本文章将使用手动修改文件的方式进行美化。</li>
<li>尽可能不下载多余的第三方工具进行辅助美化。</li>
</ul>
<h3>安装美化GNOME桌面所需的软件包</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 安装GNOME扩展管理器工具。</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">apt</span> <span class="token function">install</span> gnome-shell-extension-manager</span>
<span class="line"><span class="token comment"># 主题工具</span></span>
<span class="line"><span class="token comment"># gnome-tweaks可以更改应用程序本身、图标、光标、主题，但不能更改shell的主题</span></span>
<span class="line"><span class="token function">sudo</span> <span class="token function">apt</span> <span class="token function">install</span> gnome-tweaks</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>默认自带扩展配置</h3>
<p>GNOME 43 版本的图形界面扩展工具默认安装自带了以下扩展。</p>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">Applications Menu（建议禁用）</span>
<span class="line">- 显示应用程序基于类别的应用程序菜单。</span>
<span class="line"></span>
<span class="line">Auto Move Windows（建议启用）</span>
<span class="line">- 在创建窗口时将应用程序移动到特定的工作区。</span>
<span class="line"></span>
<span class="line">Launch new instance（建议禁用）</span>
<span class="line">- 在短划线或应用程序视图中点击时始终启动新实例。</span>
<span class="line"></span>
<span class="line">Native Window Placement（建议禁用）</span>
<span class="line">- 以更紧凑的方式排列浏览中的窗口。</span>
<span class="line"></span>
<span class="line">Places Status Indicator（建议禁用）</span>
<span class="line">- 添加用于在系统中快速导航的菜单。</span>
<span class="line"></span>
<span class="line">Remvable Drive Menu（建议启用）</span>
<span class="line">- 添加用于访问和卸载可移动设备的菜单选项。</span>
<span class="line"></span>
<span class="line">Screenshot Windows Sizer（建议启用）</span>
<span class="line">- 调整GNOME软件窗口的大小屏幕截图。</span>
<span class="line"></span>
<span class="line">User Themes（建议启用）</span>
<span class="line">- 从用户目录加载外壳主题。</span>
<span class="line"></span>
<span class="line">Windows List（建议禁用）</span>
<span class="line">- 在屏幕底部显示窗口列表。</span>
<span class="line"></span>
<span class="line">windowNavigator（建议启用）</span>
<span class="line">- 允许在覆盖模式下用键盘选择窗口和工作区。</span>
<span class="line">- &lt;Alt&gt; + [数字] == 选择窗口</span>
<span class="line">- &lt;Ctrl&gt; + [数字] == 选择工作区</span>
<span class="line"></span>
<span class="line">Workspace Indicator（建议禁用）</span>
<span class="line">- 在菜单栏中放一个图标，提示当前所在工作区，并提供切换到了另一个工作区的功能。</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>安装推荐扩展配置</h3>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">Just-Perfection</span>
<span class="line">- 用于对界面进行大量自定义与精简。</span>
<span class="line"></span>
<span class="line">Blur-My-Shell</span>
<span class="line">- 用于让面板、顶部栏、Overview、锁屏、gnome自带的截屏、特定APP，都能毛玻璃化。</span>
<span class="line"></span>
<span class="line">Big-Avatar</span>
<span class="line">- 在右上角菜单出现你的头像，点击后触发自定义的命令。</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>手动安装美化资源</h3>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">主题</span>
<span class="line"></span>
<span class="line">图标</span>
<span class="line">- 系统或应用图标：</span>
<span class="line">- 光标图标：</span>
<span class="line"></span>
<span class="line">Dock栏美化</span>
<span class="line">- 动画效果</span>
<span class="line"></span>
<span class="line">系统特效</span>
<span class="line">- 程序切换效果</span>
<span class="line"></span>
<span class="line">登入界面美化</span>
<span class="line"></span>
<span class="line">开机画面美化</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>OS - Debian Linux - 热门推荐 - 部署配置方案 - Web应用服务器</title>
      <link>https://blog.magictable.ha.cn/software/OS-DebianLinux-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E9%83%A8%E7%BD%B2%E9%85%8D%E7%BD%AE%E6%96%B9%E6%A1%88-Web%E5%BA%94%E7%94%A8%E6%9C%8D%E5%8A%A1%E5%99%A8.html</link>
      <guid>https://blog.magictable.ha.cn/software/OS-DebianLinux-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E9%83%A8%E7%BD%B2%E9%85%8D%E7%BD%AE%E6%96%B9%E6%A1%88-Web%E5%BA%94%E7%94%A8%E6%9C%8D%E5%8A%A1%E5%99%A8.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">OS - Debian Linux - 热门推荐 - 部署配置方案 - Web应用服务器</source>
      <description>文章摘要： 本文章将以Web服务器搭建和项目运行为目的，配置和优化 Debian Linux 12 操作系统的流程。 系统配置说明 介绍 只选择了默认的标准工具 系统下载官方网址：https://www.debian.org/distrib/ 所需软件列表 代码编译： 代码编辑： 远程控制： 文件传输：[] 网络下载：[] 版本控制：Git 编程开发：...</description>
      <category>软件程序/操作系统</category>
      <pubDate>Sun, 17 Dec 2023 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 本文章将以Web服务器搭建和项目运行为目的，配置和优化 Debian Linux 12 操作系统的流程。</p>
<!-- more -->
<h2>系统配置说明</h2>
<h3>介绍</h3>
<ul>
<li>只选择了默认的标准工具</li>
</ul>
<p>系统下载官方网址：<a href="https://www.debian.org/distrib/" target="_blank" rel="noopener noreferrer">https://www.debian.org/distrib/</a></p>
<h3>所需软件列表</h3>
<ul>
<li>
<p>代码编译：</p>
</li>
<li>
<p>代码编辑：</p>
</li>
<li>
<p>远程控制：</p>
</li>
<li>
<p>文件传输：[]</p>
</li>
<li>
<p>网络下载：[]</p>
</li>
<li>
<p>版本控制：Git</p>
</li>
<li>
<p>编程开发：Python3、Java8、Node.js、</p>
</li>
<li>
<p>管理工具：npm、Maven</p>
</li>
<li>
<p>数据库：</p>
</li>
<li>
<p>中间件：MySQL(关系型数据库)、Redus()、Nginx、Tomcat、Dicker</p>
</li>
</ul>
<h3>磁盘分区</h3>
<h3>目录规划</h3>
<h2>初始化系统配置</h2>
<h3>软件包仓库镜像源</h3>
<h3>卸载默认多余软件</h3>
<h3>清理多余的依赖包和数据</h3>
<h3>更新系统及软件</h3>
<h3>设置静态IP地址</h3>
<ul>
<li>每次启动系统都将使用固定的IP地址，方便远程连接时无需经常查看IP地址。</li>
</ul>
<h3>设置中文输入法</h3>
<h2>安装软件</h2>
<p>自动化脚本</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 安装驱动</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 安装git版本控制软件</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>软件配置</h2>
<p>自动化脚本</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 配置系统防火墙</span></span>
<span class="line"><span class="token comment"># 开放 TCP/8080 端口  web后端默认端口号</span></span>
<span class="line"><span class="token comment"># 开放 TCP/80 端口    web前端默认端口号</span></span>
<span class="line"><span class="token comment"># 开放 TCP/3306 端口 MySQL数据库</span></span>
<span class="line"><span class="token comment"># 开放 TCP/6379 端口 Redis数据库</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>OS - Debian Linux - 配置文件</title>
      <link>https://blog.magictable.ha.cn/software/OS-DebianLinux-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6.html</link>
      <guid>https://blog.magictable.ha.cn/software/OS-DebianLinux-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">OS - Debian Linux - 配置文件</source>
      <description>文章摘要： 摘要内容。 用户 用户-环境变量 配置文件：/home/&amp;lt;用户名&amp;gt;/.bashrc 在文件末尾添加如下内容： 立即让系统更新配置文件 系统 用户信息 提示 /etc/passwd配置文件：存储当前系统中的所有用户和属性。 每行用户信息以冒号:为分隔符。 例如：username❌1000:1000:用户别名,,,:/home/username...</description>
      <category>软件程序/操作系统</category>
      <pubDate>Sat, 16 Dec 2023 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>用户</h2>
<h3>用户-环境变量</h3>
<ul>
<li>配置文件：<code>/home/&lt;用户名&gt;/.bashrc</code></li>
</ul>
<p>在文件末尾添加如下内容：</p>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">export &lt;自定义变量&gt;=&lt;完整路径和文件&gt;</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p>立即让系统更新配置文件</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token builtin class-name">source</span> /home/<span class="token operator">&lt;</span>用户名<span class="token operator">&gt;</span>/.bashrc</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>系统</h2>
<h3>用户信息</h3>
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<p><code>/etc/passwd</code>配置文件：存储当前系统中的所有用户和属性。</p>
<ul>
<li>每行用户信息以冒号<code>:</code>为分隔符。</li>
<li>例如：username❌1000:1000:用户别名,,,:/home/username:/bin/bash</li>
<li>格式：<code>[&lt;用户名&gt;] [&lt;允许登录的主机&gt;]=([&lt;可使用的用户身份&gt;]:[&lt;可使用的用户组&gt;]) [&lt;可使用的命令&gt;](%sudo ALL=(ALL:ALL) ALL)</code></li>
</ul>
</div>
<h3>用户权限</h3>
<p>配置文件目录位置：<code>/etc/group</code></p>
<h3>用户组</h3>
<p>配置文件目录位置：<code>/etc/sudoers.tmp</code></p>
<h3>系统-环境变量</h3>
]]></content:encoded>
    </item>
    <item>
      <title>OS - Debian Linux - 终端命令 - 基本操作</title>
      <link>https://blog.magictable.ha.cn/software/OS-DebianLinux-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C.html</link>
      <guid>https://blog.magictable.ha.cn/software/OS-DebianLinux-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">OS - Debian Linux - 终端命令 - 基本操作</source>
      <description>文章摘要： Linux操作系统的常用命令查询手册。 帮助命令 man 系统参考手册的接口。 语法 man [man 选项] [[章节] 页 ...] ... man -k [apropos 选项] 正则表达式 ... man -K [man 选项] [章节] 关键词 ... man -f [whatis 选项] 页 ... man -l [man 选项...</description>
      <category>软件程序/操作系统</category>
      <pubDate>Fri, 15 Dec 2023 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Linux操作系统的常用命令查询手册。</p>
<!-- more -->
<h2>帮助命令</h2>
<h3>man</h3>
<blockquote>
<ul>
<li>系统参考手册的接口。</li>
</ul>
</blockquote>
<p>语法</p>
<blockquote>
<ul>
<li>man [man 选项] [[章节] 页 ...] ...</li>
<li>man -k [apropos 选项] 正则表达式 ...</li>
<li>man -K [man 选项] [章节] 关键词 ...</li>
<li>man -f [whatis 选项] 页 ...</li>
<li>man -l [man 选项] 文件 ...</li>
<li>man -w|-W [man 选项] page ...</li>
</ul>
</blockquote>
<p>命令名称：man
命令英文原意：manual
命令所在路径：/usr/bin/man
执行权限：所有用户
功能描述：获得帮助信息
语法：man[命令或配置文件]</p>
<h3>命令说明书（man）</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 打开命令说明后，可按"q"键退出</span></span>
<span class="line"><span class="token function">man</span> <span class="token function">shutdown</span> </span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h3>帮助命令（help）</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>系统管理</h2>
<h3>发行版代号</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line">lsb_release <span class="token parameter variable">-cs</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3><code>uname</code></h3>
<blockquote>
<ul>
<li>查询系统信息。</li>
</ul>
</blockquote>
<p>语法</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>选项</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li></li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"></div></div><h3></h3>
]]></content:encoded>
    </item>
    <item>
      <title>OS - Debian Linux - 问题总结</title>
      <link>https://blog.magictable.ha.cn/software/OS-DebianLinux-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93.html</link>
      <guid>https://blog.magictable.ha.cn/software/OS-DebianLinux-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">OS - Debian Linux - 问题总结</source>
      <description>文章摘要： 摘要内容。 待解决 多个软件都有自己的命令交互方式，如何区分哪些命令属于哪些软件。 已解决 将文件添加到工具栏 在 ~/.local/share/applications/ 目录下创建一个文件的快捷方式，后缀为 .desktop 文件。 在文件中填写如下内容。 详细总结： 注释 [Desktop Entry] 标记为桌面如何文件，必须作为文...</description>
      <category>软件程序/操作系统</category>
      <pubDate>Fri, 15 Dec 2023 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>待解决</h2>
<h3>多个软件都有自己的命令交互方式，如何区分哪些命令属于哪些软件。</h3>
<h2>已解决</h2>
<h3>将文件添加到工具栏</h3>
<ol>
<li>
<p>在 <code>~/.local/share/applications/</code> 目录下创建一个文件的快捷方式，后缀为 <code>.desktop</code> 文件。</p>
</li>
<li>
<p>在文件中填写如下内容。</p>
</li>
</ol>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">[Desktop Entry]</span>
<span class="line">Version=1.0</span>
<span class="line">Type=Application</span>
<span class="line">Name=&lt;图标名称&gt;</span>
<span class="line">Icon=&lt;图标路径&gt;</span>
<span class="line">Exec=&lt;文件路径&gt;</span>
<span class="line">Comment=&lt;介绍&gt;</span>
<span class="line">Categories=&lt;类别&gt;;&lt;类别&gt;;</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>详细总结：<a href="/software/OS-DebianLinux-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E6%A1%8C%E9%9D%A2%E5%85%A5%E5%8F%A3%E5%9B%BE%E6%A0%87.html" target="_blank">OS-DebianLinux-热门推荐-桌面入口图标</a></p>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p><code>[Desktop Entry]</code></p>
<ul>
<li>标记为桌面如何文件，必须作为文件的第一行。</li>
</ul>
<p><code>Type</code></p>
<ul>
<li>定义为入口类型。</li>
<li>常见值：<code>Application</code>可执行文件、<code>Link</code>URL地址或文件链接、<code>Directory</code>目录（用于菜单分类）</li>
</ul>
<p><code>Name</code></p>
<ul>
<li>显示在菜单或快捷方式中的名称。</li>
</ul>
<p><code>Exec</code></p>
<ul>
<li>启动应用程序的文件。</li>
</ul>
<p><code>Icon</code></p>
<ul>
<li>快捷方式的图标。</li>
</ul>
<p><code>Categories</code></p>
<ul>
<li>应用程序在菜单中的分类。多个分类用分号分隔。</li>
</ul>
<p><code>Comment</code></p>
<ul>
<li>提供应用程序的简短描述，显示在菜单提示中。</li>
</ul>
<p><code>Terminal</code></p>
<ul>
<li>是否在终端中运行程序（默认 <code>false</code>）。</li>
</ul>
<p><code>StartupNotify</code></p>
<ul>
<li>是否启用启动反馈（如任务栏动画），默认 <code>false</code>。</li>
</ul>
</div>
<h3>应用软件数据分布</h3>
<ul>
<li>用户目录下的<code>.config/</code>目录存放拥有使用软件产生的缓存数据。</li>
<li>用户目录下自动创建与软件命名相同目录中存放的是用户使用数据。</li>
</ul>
<h3>应用软件点击关闭按钮，但仍然在后台运行。</h3>
<p>个人的解决方案，打开 “系统监视器” 手动搜索该软件的进程，手动执行强制关闭进程，即可实现关闭软件的需求。</p>
<h3>如何游玩Steam平台的游戏</h3>
<p>Debian Linux官方教程文档：<a href="https://wiki.debian.org/Steam" target="_blank" rel="noopener noreferrer">https://wiki.debian.org/Steam</a></p>
<p>NVIDIA显卡的用户请安装该依赖包：<code>libgl1-nvidia-glvnd-glx:i386</code></p>
<h3>导入官方软件提供的签名密钥，以便apt可以验证软件包的真实性</h3>
<p>详细总结：<a href="/software/Package-Apt-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E6%B7%BB%E5%8A%A0%E7%AC%AC%E4%B8%89%E6%96%B9%E8%BD%AF%E4%BB%B6%E4%BB%93%E5%BA%93%E5%92%8C%E5%AF%BC%E5%85%A5GPG%E5%AF%86%E9%92%A5.html" target="_blank">Package-Apt-问题总结-添加第三方软件仓库和导入GPG密钥</a></p>
<h3>权限不足</h3>
<ul>
<li>做安装软件或访问特定文件夹和文件需要root权限。</li>
<li>建议全程通过终端窗口进行操作，因为只有命令来获取root权限。</li>
<li>请配合<code>sudo</code>命令来获取临时root权限。</li>
</ul>
<h3>如何记忆本机有哪些软件</h3>
<ul>
<li>哪些是系统自带的，哪些是用户安装的。</li>
<li>命令应该如何记忆。</li>
</ul>
<p>答案</p>
<ul>
<li><code>/usr/local</code>目录用于系统管理员安装本地软件，这些软件是源代码编译安装的，而不是通过包管理器安装的。</li>
<li><code>/usr</code>目录下是系统使用apt包管理器安装的软件。</li>
<li><code>/opt</code>目录是为可选的应用程序软件包设计的，通常用于安装大型第三方应用程序。</li>
</ul>
<p>==待完善==</p>
<h3>手动安装编译的软件</h3>
<p>在Linux系统中，手动编译并安装软件时，通常遵循文件系统层次结构标准（Filesystem Hierarchy Standard, FHS）。根据FHS，以下是几个常见的目录，用于放置不同类型的编译后的软件：</p>
<ul>
<li><code>/opt/</code>: 对于可选的应用软件包，也可以放在这里。通常用于较大的、第三方或商业软件包。</li>
<li><code>/usr/local/</code>: 这个目录用于存放本地管理员安装的软件，通常用于安装那些不是通过包管理器安装的软件。例如，如果你手动编译了MySQL，通常会将其安装在/usr/local/mysql目录下。</li>
<li><code>usr/local/src</code>：存放软件源代码文件。</li>
<li><code>/usr/local/bin/</code>: 对于可执行文件，如果它们是供所有用户使用的，可以放在这里。</li>
<li><code>/usr/local/lib/</code>: 用于存放共享库文件。</li>
<li><code>/usr/local/sbin/</code>: 对于系统管理员使用的系统管理程序，可以放在这里。</li>
<li><code>/usr/local/include/</code>: 如果软件包含了供其他程序使用的头文件，可以放在这里。</li>
<li><code>/usr/local/share/</code>: 用于存放架构无关的数据文件，如文档、帮助页面等。</li>
</ul>
<h3>遇到QQ、百度网盘软件关闭后，进程并没有关闭</h3>
<ul>
<li>这导致无法再次登录当前账号，也无法再次打开自己的页面。</li>
<li>你可以打开<strong>系统监视器</strong>（任务管理器），手动关闭该进程即可。</li>
</ul>
<h3>系统启动过程</h3>
<p>详细总结：<a href="/software/OS-DebianLinux-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E7%B3%BB%E7%BB%9F%E5%90%AF%E5%8A%A8%E8%BF%87%E7%A8%8B.html" target="_blank">OS-DebianLinux-问题总结-系统启动过程</a></p>
<h3>用户登录方式</h3>
<p>详细总结：<a href="/software/OS-DebianLinux-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E7%94%A8%E6%88%B7%E7%99%BB%E5%BD%95%E6%96%B9%E5%BC%8F.html" target="_blank">OS-DebianLinux-问题总结-用户登录方式</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>OS - Debian Linux</title>
      <link>https://blog.magictable.ha.cn/software/OS-DebianLinux.html</link>
      <guid>https://blog.magictable.ha.cn/software/OS-DebianLinux.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">OS - Debian Linux</source>
      <description>文章摘要： Debian Linux 12 操作系统，多用户、多任务、多线程、非实时的操作系统。 相关信息 外部相关文章 Debian官方文档：https://wiki.debian.org/zh_CN/FrontPage 规范存储库：https://specifications.freedesktop.org/ GNOME桌面功能扩展插件网站： GN...</description>
      <category>软件程序/操作系统</category>
      <pubDate>Fri, 15 Dec 2023 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Debian Linux 12 操作系统，多用户、多任务、多线程、非实时的操作系统。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li>Debian官方文档：https://wiki.debian.org/zh_CN/FrontPage</li>
<li>规范存储库：https://specifications.freedesktop.org/</li>
<li>GNOME桌面功能扩展插件网站：</li>
<li>GNOME桌面美化网站：https://www.pling.com/</li>
</ul>
<p>内部相关文章</p>
<ul>
<li>部署配置方案-个人桌面：<a href="/software/OS-DebianLinux-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E9%83%A8%E7%BD%B2%E9%85%8D%E7%BD%AE%E6%96%B9%E6%A1%88-GNOME%E4%B8%AA%E4%BA%BA%E6%A1%8C%E9%9D%A2.html" target="_blank">OS-DebianLinux-热门推荐-部署配置方案-GNOME个人桌面</a></li>
<li>部署配置方案-Web应用服务器：<a href="/software/OS-DebianLinux-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E9%83%A8%E7%BD%B2%E9%85%8D%E7%BD%AE%E6%96%B9%E6%A1%88-Web%E5%BA%94%E7%94%A8%E6%9C%8D%E5%8A%A1%E5%99%A8.html" target="_blank">OS-DebianLinux-热门推荐-部署配置方案-Web应用服务器</a></li>
<li>系统维护规划：<a href="/software/OS-DebianLinux-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E7%B3%BB%E7%BB%9F%E7%BB%B4%E6%8A%A4%E8%A7%84%E5%88%92.html" target="_blank">OS-DebianLinux-热门推荐-系统维护规划</a></li>
</ul>
</div>
<blockquote>
<p></p>
</blockquote>
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>多用户、多任务、多线程、非实时的操作系统。</li>
<li>GNU/Linux 用户在挑选软件方面有着极大的自由。例如，他们可以选择几十种不同的命令行外壳和多种图形桌面。</li>
<li>GNU/Linux 很少会崩溃、适合在同一时间运行多个程序，而且比大多数操作系统更为安全。</li>
<li>将 Debian 哲学与方法论，GNU 工具集、Linux 内核，以及其他重要的自由软件结合在一起所构成的独特的软件发行版称为 Debian Linux 。</li>
<li>该发行版由大量的软件包组成。</li>
<li>发行版中的每个软件包都包含了执行文件、脚本、文档和配置信息，并拥有一位维护者，其职责是保持软件包更新、跟踪 bug 报告，并与软件源作者保持联络。</li>
<li>支持的CPU架构：<a href="https://wiki.debian.org/CategoryPorts" target="_blank" rel="noopener noreferrer">官方说明</a></li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>稳定性</strong>：Debian以其稳定性和可靠性而著称，适合需要长期运行的服务器。</li>
<li><strong>软件包管理</strong>：使用dpkg包管理系统和APT（Advanced Package Tool）来安装、更新和管理软件包。</li>
<li><strong>自由软件</strong>：Debian致力于自由软件，默认情况下只包含完全自由的软件。</li>
<li><strong>广泛支持</strong>：支持多种硬件平台，包括常见的x86和ARM架构。</li>
<li><strong>安全更新</strong>：定期发布安全更新，确保系统的安全性。</li>
<li><strong>桌面环境</strong>：提供多种桌面环境选择，如GNOME、KDE Plasma、Xfce等。</li>
<li><strong>服务器优化</strong>：适用于各种服务器应用，如文件服务器、邮件服务器、Web服务器等。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>软件自由性</strong>：Debian坚持使用自由软件，可能不包括某些专有软件或驱动。</li>
<li><strong>系统更新</strong>：在进行系统更新时，应确保备份重要数据，避免更新过程中出现问题。</li>
<li><strong>硬件兼容性</strong>：某些硬件可能需要额外的驱动程序，这些可能不在Debian的官方软件仓库中。</li>
<li><strong>社区支持</strong>：虽然Debian有强大的社区支持，但官方的客服支持可能不如商业发行版。</li>
<li><strong>版本更新周期</strong>：Debian的稳定版更新周期较长，可能不会包含最新的软件版本。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>服务器部署</strong>：由于其稳定性和安全性，Debian非常适合用作服务器操作系统。</li>
<li><strong>桌面使用</strong>：对于追求稳定和自由的桌面用户，Debian是一个很好的选择。</li>
<li><strong>开发环境</strong>：为开发者提供了稳定且功能丰富的开发环境。</li>
<li><strong>教育机构</strong>：由于其开源和自由软件的原则，Debian适合用于教育目的。</li>
<li><strong>嵌入式系统</strong>：Debian的轻量级版本，如Debian Minimal，适用于嵌入式系统。</li>
</ul>
<h2>Linux的组成</h2>
<ul>
<li>Linux/GNU 操作系统由“Linux 内核 + 多种基础程序”构成。</li>
<li>操作系统最重要的组成部分是内核，Linux 就是内核组件，而该系统的其余部分主要是由 GNU 工程编写和提供的程序组成，因此被称为 GNU/Linux 一词来表达通常所说的 Linux操作系统。</li>
</ul>
<h3>内核（kernel）</h3>
<ul>
<li>内核是Linux操作系统的核心。</li>
<li>直接与计算机的硬件交互，并提供基本的服务，如进程管理、内存管理、设备管理和文件系统管理。</li>
<li>内核空间是操作系统的一个特权区域，只有内核代码可以执行。</li>
</ul>
<h3>壳（shell）</h3>
<ul>
<li>是系统的用户界面，提供来用户和内核进行交互操作的一种接口。</li>
<li>接收用户输入的命令并送入内核去执行，是一个命令解释器。</li>
<li>是高级编程语言，shell编程。</li>
<li>作用是提供人机交互，使用户与内核之间交互。</li>
<li><strong>命令行界面（CLI）</strong>：如Bash、Zsh等，允许用户通过命令行与系统交互。</li>
<li><strong>图形用户界面（GUI）</strong>：如GNOME、KDE、XFCE等，提供图形化的操作环境。</li>
</ul>
<p>Bash shell命令交互界面操作的详细总结：<a href="/software/Language-BashShell.html" target="_blank">Language-BashShell</a></p>
<h3>文件系统（File Systems）</h3>
<ul>
<li>文件系统是文件存放在磁盘等存储设备上的组织方法。</li>
<li>Linux支持多种文件系统。如：ext4、ext3、ext2、NFS等。</li>
</ul>
<p>EXT4文件系统的详细总结：<a href="/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F-EXT4.html" target="_blank">基础知识-文件系统-EXT4</a></p>
<h3>系统守护进程（Daemons）</h3>
<ul>
<li>在后台运行的服务进程，如网络服务、打印服务、数据库服务等。</li>
</ul>
<h3>系统库</h3>
<ul>
<li>提供程序和内核之间的接口，使得应用程序可以访问内核的功能。</li>
<li>如glibc（GNU C Library）。</li>
</ul>
<h3>系统工具和实用程序</h3>
<ul>
<li>用于系统管理的工具，如文件管理器、文本编辑器、系统监控工具等。</li>
</ul>
<h3>应用程序</h3>
<ul>
<li>标准的Linux操作系统都会有一套应用程序。</li>
<li>用户安装的软件，用于执行特定任务，如Web浏览器、办公软件、开发工具等。</li>
</ul>
<h3>用户空间</h3>
<ul>
<li>用户空间是应用程序和用户操作的环境，它不直接与硬件交互，而是通过系统调用与内核通信。</li>
<li>用户空间包括系统库、系统工具、应用程序和用户数据。</li>
</ul>
<h2>目录结构</h2>
<ul>
<li>在很多操作系统中软件都是通过读取配置文件来改变执行方式的。</li>
<li>Linux是一切皆文件，因此可选择使用 “命令” 或者 “手动修改文件” 的方式进行操作。</li>
<li>磁盘分区建议提起规划并计算将使用多少存储空间，这样才能减少分区后存储空间浪费。</li>
</ul>
<p>Linux操作系统中的注意事项</p>
<ul>
<li>Linux中严格区分大小写。</li>
<li>Linux中所有内容都以文件形式保存。</li>
<li>Linux不靠扩展名区分文件类型</li>
<li>Linux所有的存储设备都必须“挂载”之后用户才能使用。</li>
<li>Windows下的程序不能直接在Linux中安装和运行。</li>
</ul>
<p>文件于目录结构</p>
<ul>
<li>文件目录是以<code>/</code>为根目录，没有分区的概念，只有将目录实际存储位置进行区分的概念，只在存储位置中发现不同，实际操作并无不同。</li>
<li>需要学习命令行界面管理系统，需要提前了解Linux的基本概念。</li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>FHS（英文：Filesystem Hierarchy Standard 中文：文件系统层次化标准）</li>
<li>FHS 定义了系统中每个文件夹的用途、所需要的最小构成的文件和目录同时还给出了例外处理与矛盾处理。</li>
<li>允许使用者改动结构来构建适合自己的目录结构。</li>
</ul>
</div>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">/ ,根目录，整个Debian文件系统的起点。</span>
<span class="line">|-- boot/ ,引导Linux内核启动时所需的文件，如内核映像和引导加载程序配置文件等。</span>
<span class="line">|-- dev/ ,设备文件，以管理普通文件一样来管理硬件或驱动程序。</span>
<span class="line">|-- etc/ ,存储系统和软件的配置文件，如网络配置、用户账户、服务等。</span>
<span class="line">|-- home/ ,用户的个人主目录，个人文件夹会在这里生成。</span>
<span class="line">|-- media/ ,挂载外部设备，系统建议用来挂载媒体设备，如USB或光盘等。</span>
<span class="line">|-- mnt/ ,临时挂载目录，用于挂载其他文件系统或额外设备，如U盘、移动硬盘和其他操作系统的分区。</span>
<span class="line">|-- opt/ ,存放第三方额外的软件包。</span>
<span class="line">|-- proc/ ,虚拟文件系统，该目录的数据存放在内存当中，记录运行时的系统进程和内核信息。</span>
<span class="line">|-- root/ ,超级用户的主目录。</span>
<span class="line">|-- run/ ,存储系统运行时的信息，当前登入的yoghurt和运行中的服务。</span>
<span class="line">|-- srv/ ,存放服务相关的数据文件，一些系统服务启动之后，可以在该目录中保存所需要的数据，如WWW服务和web内容</span>
<span class="line">|-- sys/ ,虚拟文件系统，提供访问内核设备、模块、其他内核相关功能的接口。</span>
<span class="line">|-- tmp/ ,存储临时文件，系统重启时文件将会被清除。</span>
<span class="line">|-- usr/ ,系统软件程序和文件，包含非用户手动安装的软件、文档、共享库等，可共享</span>
<span class="line">    |-- bin/ ,普通命令（二进制可执行文件），全部用户都能使用。</span>
<span class="line">    |-- games/，游戏安装目录</span>
<span class="line">    |-- include/</span>
<span class="line">    |-- lib/ ,系统所需的共享库（二进制文件）文件。</span>
<span class="line">	    |-- systemd/system/ ,系统级别的服务文件。</span>
<span class="line">    |-- lib32/ ,系统所需的共享库（二进制文件）文件。</span>
<span class="line">    |-- lib64/ ,系统所需的共享库（二进制文件）文件。</span>
<span class="line">    |-- libexec/</span>
<span class="line">    |-- libx32/</span>
<span class="line">    |-- local/ ,用户手动编译源码程序的应用存放位置。</span>
<span class="line">    |-- sbin/ ,管理员命令，仅限管理员用户使用。</span>
<span class="line">    |-- share/ ,共享文件。</span>
<span class="line">    |-- src/</span>
<span class="line">|-- var/ ,存储经常改变的动态数据文件，如日志、缓存等，不共享。</span>
<span class="line">    |-- backups/</span>
<span class="line">    |-- cache/</span>
<span class="line">    |-- lib/</span>
<span class="line">	    |-- apt/ ,软件包信息。</span>
<span class="line">	    |-- dpkg/ ,软件包信息。</span>
<span class="line">    |-- local/</span>
<span class="line">    |-- run/lock/</span>
<span class="line">    |-- log/</span>
<span class="line">    |-- mail/</span>
<span class="line">    |-- opt/</span>
<span class="line">    |-- run/</span>
<span class="line">    |-- spool/</span>
<span class="line">    |-- tmp/</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>工作目录</p>
<ul>
<li>当前所在目录。</li>
</ul>
<p>绝对路径</p>
<ul>
<li>以根目录为起点，描述路径的一种写法，路径描述以<code>/</code>开头。</li>
<li>案例：<code>/usr/local/bin</code></li>
</ul>
<p>相对路径</p>
<ul>
<li>以当前工作目录为起点，描述路径的一种写法，路径描述无需以<code>/</code>开头。</li>
<li><code>./</code>：表示当前路径。</li>
<li><code>../</code>：表示上一级目录。</li>
<li><code>../../</code>：表示上上一级目录。</li>
<li><code>~</code>：表示HOME目录。</li>
<li>案例：<code>./bin</code>当前路径下，<code>../local/bin</code>上一级路径下。</li>
</ul>
</div>
<h2>磁盘分区</h2>
<p>详细总结：<a href="/hardware/Device-%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8-%E6%9C%BA%E6%A2%B0%E7%A3%81%E7%9B%98-%E7%A3%81%E7%9B%98%E5%88%86%E5%8C%BA.html" target="_blank">Device-数据存储-机械磁盘-磁盘分区</a></p>
<ul>
<li>Linux系统中磁盘管理就是将硬盘通过挂载的方式挂载到Linux文件系统中。</li>
<li>挂载点 == 盘符</li>
<li>手动创建以下分区：/（根分区）、swap（交换分区）（不存在盘符，这是给系统内部使用）、</li>
</ul>
<h3>fdisk分区</h3>
<h3>/etc/fstab文件修复</h3>
<h3>分配swap分区</h3>
<h3>磁盘</h3>
<p>需要对磁盘进行合理分区的主要原因是：</p>
<ol>
<li>提高系统性能</li>
</ol>
<ul>
<li>将不同类型的文件和数据存储在不同的分区可以提高系统的读写性能。</li>
<li>例如，将频繁变动的文件（如日志和缓存）和用户数据分开，可以避免对系统核心部分的频繁访问，从而提高整体性能。</li>
</ul>
<ol start="2">
<li>数据安全与完整性</li>
</ol>
<ul>
<li>将数据分散在不同的分区可以降低因单个分区损坏而导致数据都是的风险。</li>
<li>例如，如果<code>home</code>分区发生故障，系统管理员可以通过将其替换或修复，而不会影响系统其他分区。</li>
</ul>
<ol start="3">
<li>管理和维护的便利性</li>
</ol>
<ul>
<li>通过将不同的文件和数据类型放在不同的分区，系统管理员可以更轻松地进行管理和维护。</li>
<li>例如，如果某个应用程序导致磁盘空间不足，管理员只需查看对应的分区，而不是整个磁盘。</li>
</ul>
<ol start="4">
<li>灵活性和可扩展性</li>
</ol>
<ul>
<li>随着时间推移，系统可能需要更多的存储空间或进行特定的配置更改。</li>
<li>通过预先为未来的需求留出空间，或为特定功能创建独立的分区，可以更容易地进行这些更改。</li>
</ul>
<ol start="5">
<li>备份和迁移的便捷性</li>
</ol>
<ul>
<li>将数据分散在不同的分区可以简化备份和迁移的过程。</li>
<li>例如，如果只对某个分区进行备份或迁移，而不是整个磁盘，那么这个过程会更快更简单。</li>
</ul>
<ol start="6">
<li>隔离和安全性</li>
</ol>
<ul>
<li>通过将不同的功能或应用程序放在不同的分区，可以增加隔离性并提高安全性。</li>
<li>例如，如果某个应用程序受到攻击或出现问题，它可能只影响该应用程序所在的分区，而不是整个系统。</li>
</ul>
<p>逻辑分区的存在的意义</p>
<ul>
<li>由于MBR仅能保存4个分区的数据信息，如果超过4个，系统允许在额外的硬盘空间存放另一份磁盘分区信息，这就是扩展分区.若将硬盘分成3P+E，则E实际上是告诉系统，磁盘分区表在另外的那份分区表，即扩展分区其实是指向正确的额外分区表。本身扩展分区不能直接使用，还需要额外将扩展分区分成逻辑分区才能使用，因此，用户通过扩展分区就可以使用5个以上的分区了。</li>
<li>在Windows操作系统中，是先将物理地址分开，再在分区上建立目录.在Windows操作系统中，所有路径都是从盘符开始，如C://program file。</li>
<li>Linux正好相反，是先有目录，再将物理地址映射到目录中。在Linux操作系统中，所有路径都是从根目录开始。Linux默认可分为3个分区，分别是boot分区、swap分区和根分区。</li>
</ul>
<h2>配置文件</h2>
<p>详细总结：<a href="/software/OS-DebianLinux-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6.html" target="_blank">OS-DebianLinux-配置文件</a></p>
<h2>终端和命令</h2>
<h3>介绍</h3>
<p>终端</p>
<ul>
<li>即Linux终端（Treminal）。</li>
<li>一种命令提示符界面。</li>
<li>以纯“字符”的形式操作系统。</li>
<li>可以使用各种字符化命令对系统发出操作指令。</li>
</ul>
<p>命令</p>
<ul>
<li>即Linux程序。</li>
<li>一个命令就是一个Linux的程序。</li>
<li>命令没有图形化页面。</li>
<li>可以通过终端来提供字符化的反馈。</li>
</ul>
<p>在Linux中，可执行的文件也进行了分类：</p>
<ul>
<li>内置命令：出于效率的考虑，将一些常用命令的解释程序构造在Shell内部。</li>
<li>外置命令：存放在/bin、/sbin目录下的命令</li>
<li>实用程序：存放在/usr/bin、/usr/sbin、/usr/share、/usr/local/bin等目录下的实用程序</li>
<li>用户程序：用户程序经过编译生成可执行文件后，可作为Shell命令运行</li>
<li>Shell脚本：由Shell语言编写的批处理文件，可作为Shell命令运行</li>
</ul>
<p>大多数命令行工具和程序确实是通过包的形式来安装和管理的。</p>
<ul>
<li>大多数命令都是包的一部分：确实，大多数你在终端中使用的命令，如ls、cp、mv等，都是某个软件包的一部分。例如，ls、cp和mv命令通常属于coreutils包。</li>
<li>bash shell：bash shell本身也是一个包。在Debian系统中，这个包通常被称为bash。安装这个包会提供bash命令行解释器。</li>
<li>系统必备包：有些包被认为是系统必备的，因为它们提供了基本的系统功能。在Debian中，这些包可能被标记为“Essential”。</li>
<li>非包形式的命令：然而，并不是所有命令都是通过包来安装的。有些命令可能是手动编译安装的，或者是由系统管理员直接放置在系统路径中的。这些命令可能不是任何包的一部分。</li>
<li>内置命令：另外，有些命令是shell内置的，这意味着它们是shell本身的一部分，而不是单独的包。例如，cd命令是bash shell的内置命令。</li>
</ul>
<p>详细总结：<a href="/software/OS-DebianLinux-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4.html" target="_blank">OS-DebianLinux-终端命令</a></p>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>如何总结命令？</p>
<ul>
<li>命令都属于软件包中的命令，因此需要明白命令属于哪个软件包，去总结软件包，从而整理命令。</li>
</ul>
</div>
<h3>终端格式</h3>
<blockquote>
<p><img src="https://image.dandelioncloud.cn/images/20210728/8ab8a2a7ffc145efa190463e70196cdc.png" alt="图片展示"></p>
</blockquote>
<p>示例：root@host01:~#</p>
<ul>
<li><code>root</code>：用户名，root为超级用户</li>
<li><code>@</code>：分隔符</li>
<li><code>host01</code>：主机名称</li>
<li><code>~</code>：当前所在目录，默认目录为<code>~</code></li>
<li><code>\#</code>：表示当前用户是超级用户，普通用户为<code>$</code></li>
</ul>
<h3>命令格式</h3>
<p>命令格式：</p>
<p>命令 [-选项] [参数]</p>
<p>例子：ls -la /etc</p>
<p>说明：</p>
<ul>
<li>个别命令使用不遵循此格式</li>
<li>当有多个选项时，可以写在一起</li>
<li>简化选项与完整选项，-a等于--all</li>
</ul>
<h2>用户和用户组</h2>
<p><strong>用户管理简介</strong></p>
<ul>
<li>
<p>对安全性要求越高的计算机越需要建立合理的用户权限等级制度和操作规范</p>
</li>
<li>
<p>Linux 操作系统中主要通过用户配置文件来查看和修改用户信息</p>
</li>
<li>
<p>初始组：用户登入时就立刻拥有这个用户组的相关权限，每个用户的初始组只能有一个，一般就是和这个用户的用户名相同的组名作为这个用户的初始组。</p>
</li>
<li>
<p>附加组：用户可以加入多个其他的用户组，并拥有这些组的权限，附加组可以有多个。</p>
</li>
</ul>
<p>Shell 是 Linux 操作系统的命令解释器，Shell用于将用户的输入传递给Linux系统内核执行相应操作，在 <code>/etc/passwd</code> 当中，有多种Shell可以选择其中之一。</p>
<h3>用户配置</h3>
<p>用户基本信息文件（/etc/passwd）</p>
<p>用户名称</p>
<p>密码标志</p>
<p>UID（用户ID）</p>
<ul>
<li>0 超级用户</li>
<li>1-499 系统用户（伪用户）</li>
<li>500-65535 普通用户</li>
</ul>
<p>GID（用户初始组ID）</p>
<p>用户说明</p>
<p>家目录</p>
<ul>
<li>普通用户：/home/用户名/</li>
<li>超级用户：/root/</li>
</ul>
<p>登入之后的Shell</p>
<p>影子文件（/etc/shadow）</p>
<p>用户名</p>
<p>加密密码</p>
<p>密码最后一次修改时间</p>
<p>密码过期后的宽限天数</p>
<p>账号失效时间</p>
<p>保留</p>
<p>组信息文件（/etc/group）</p>
<p>组名</p>
<p>组密码标志</p>
<p>GID</p>
<p>组中附加用户</p>
<p>组密码文件（/etc/gshadow）</p>
<p>组名</p>
<p>组密码</p>
<p>组管理员用户名</p>
<p>组中附加用户</p>
<h3>用户管理相关文件</h3>
<p>用户的家目录</p>
<ul>
<li>普通用户：<code>/home/用户名/</code>，所有者和所属组都是此用户，权限是700。</li>
<li>超级用户：<code>/root/</code>，所有者和所属组都是root用户，权限550。</li>
</ul>
<p>用户的邮箱</p>
<ul>
<li>/var/spool/mail/用户名/</li>
</ul>
<p>用户模板目录</p>
<ul>
<li>/etc/skel/</li>
</ul>
<h3>用户管理命令</h3>
<h3>用户组管理命令</h3>
<h2>权限</h2>
<h3>文件权限查询表</h3>
<p>-rwxr--r--</p>
<ul>
<li>将其分为四个区块理解，文件类型（1），u所有者权限（2,3,4），g所属组权限（5,6,7），o其他人权限（8,9,10）</li>
<li>文件类型表示符号：文件（<code>-</code>），目录（<code>d</code>），软连接文件（<code>l</code>）</li>
<li>权限表示符号：无权限（<code>-</code>），读（<code>r</code>），写（<code>w</code>），执行（<code>x</code>）</li>
</ul>
<h3>ACL权限</h3>
<p>简介</p>
<p>开启</p>
<p>查看</p>
<p>设定ACL权限</p>
<p>最大有效权限</p>
<p>删除ACL权限</p>
<p>默认ACL权限</p>
<p>递归ACL权限</p>
<h3>文件特殊权限</h3>
<h3>文件系统属性chattr权限</h3>
<h3>系统命令sudo权限</h3>
<h2>进程与服务</h2>
<h2>系统运行级别</h2>
<ul>
<li>Linux允许在不同场合分配不同的开机启动程序，称为“运行级别”</li>
<li>许多程序需要开机启动，在Linux中称为“守护进程”。</li>
<li>Linux预置7种运行级别（0~6）</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:center">运行级别</th>
<th style="text-align:left">介绍</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">0</td>
<td style="text-align:left">关机</td>
</tr>
<tr>
<td style="text-align:center">1</td>
<td style="text-align:left">单用户模式（即维护模式）</td>
</tr>
<tr>
<td style="text-align:center">2</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">3</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">4</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">5</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">6</td>
<td style="text-align:left">重启</td>
</tr>
</tbody>
</table>
<h2>用户登录方式</h2>
<ul>
<li>Linux支持3种登录方式：命令行登登录、SSH登录、图形界面登录</li>
</ul>
<p>详细总结：<a href="/software/OS-DebianLinux-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E7%94%A8%E6%88%B7%E7%99%BB%E5%BD%95%E6%96%B9%E5%BC%8F.html" target="_blank">OS-DebianLinux-问题总结-用户登录方式</a></p>
<h2>系统启动过程</h2>
<p>详细总结：<a href="/software/OS-DebianLinux-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E7%B3%BB%E7%BB%9F%E5%90%AF%E5%8A%A8%E8%BF%87%E7%A8%8B.html" target="_blank">OS-DebianLinux-问题总结-系统启动过程</a></p>
<h2>服务与进程</h2>
<h2>环境变量</h2>
<ul>
<li>
<p>系统环境变量是一组由操作系统维护的变量，它们存储了影响程序行为的配置信息。</p>
</li>
<li>
<p>提供程序运行时所需的信息，如路径、配置设置和系统状态。</p>
</li>
<li>
<p>允许程序在不同环境中（如开发、测试、生产）以相同的方式运行。</p>
</li>
<li>
<p>使得用户和程序能够在不修改程序代码的情况下，定制程序的行为。</p>
</li>
<li>
<p>程序在启动时可以读取环境变量来配置自己的行为。</p>
</li>
<li>
<p>程序也可以设置环境变量，但这些设置通常只影响程序的子进程。</p>
</li>
</ul>
<p>常见的环境变量</p>
<ul>
<li><code>PATH</code>: 决定了Shell命令的搜索路径。</li>
<li><code>HOME</code>: 指定用户的主目录。</li>
<li><code>PWD</code>: 当前工作目录。</li>
<li><code>USER</code>: 当前登录的用户名。</li>
<li><code>HOSTNAME</code>: 当前机器的主机名。</li>
<li><code>LANG</code>/<code>LANGUAGE</code>: 指定系统语言和字符编码。</li>
<li><code>TMPDIR</code>/<code>TEMP</code>/<code>TMP</code>: 临时文件存放目录。</li>
</ul>
<h2>日志管理</h2>
<h2>启动管理</h2>
<h2>备份与修复</h2>
<h2>软件</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>Debian软件包格式的文件扩展名是<code>deb</code>。</p>
</div>
<h3>程序或软件的组成部分</h3>
<ul>
<li>可执行文件、库文件、配置文件、数据、帮助文档（非必须）</li>
</ul>
<p>可执行文件</p>
<ul>
<li>文件一般是可执行的二进制文件，也有shell脚本执行文件，特点是不可变性。</li>
<li>软件一旦安装, 在它的生命周期中, 这些可执行文件几乎是不怎么改变的, 直到升级到新的版本, 或者被卸载。</li>
<li>根据不可变性的特点，通过共享来做到多个用户或统一网络中的多台设备中只使用一份可执行文件。</li>
</ul>
<p>库文件</p>
<ul>
<li>程序执行时依赖的一些动态或静态类库, 如一些<code>dll</code>文件。</li>
<li>多个应用程序可能使用同一份类库，因此会产生依赖关系。</li>
<li>在删除或更新类库时有可能会导致依赖的应用程序无法运行或兼容问题。</li>
</ul>
<p>配置文件</p>
<ul>
<li>文件通常是文本文件。</li>
<li>特点是具有可变性、不具有共享性。</li>
<li>主要针对不同用户有自己专属的配置文件。</li>
</ul>
<p>数据</p>
<ul>
<li>特点是具有可变性。</li>
<li>数据是比较重要的文件，如日志文件需要定期整理、归档和备份。</li>
</ul>
<p>帮助文档（非必须）</p>
<ul>
<li>特点是具有高可变性、高共享性，具有不可变性。</li>
<li>帮助文档通过更新或针对特定版本的应用程序来更改文档内容，因此是几乎不变化的。</li>
</ul>
<p>软件的分类</p>
<ul>
<li>从系统管理的角度分类：系统软件、应用软件</li>
<li>系统软件一般是指支撑整个系统运行的必要软件，如shell、磁盘管理工具等。</li>
<li>应用软件是指运行系统之上提供特定功能的软件，如办公、娱乐、播放器等。</li>
</ul>
<h3>源代码包</h3>
<ul>
<li>源码包就是未进行编译、能够看到源代码的程序软件。</li>
</ul>
<p>优点和缺点</p>
<ul>
<li>开源，可修改源代码，可以自由选择所需的功能。</li>
<li>软件是编译安装，因此更加适合自己的系统，更加稳定且效率更高。</li>
<li>卸载方便，只需要直接将安装目录下的文件夹删除即可。</li>
<li>安装过程步骤较多。</li>
<li>编译过程时间较长。</li>
</ul>
<p>安装</p>
<ul>
<li>源码包保存位置：<code>/usr/local/src/</code></li>
<li>源码包安装位置：<code>/usr/local/</code></li>
</ul>
<p>删除</p>
<ul>
<li>只需要删除源码包安装的目录即可，不会存在软件卸载后存在残留垃圾文件。</li>
</ul>
<h3>预构建二进制包</h3>
<ul>
<li>
<p>预构建二进制包，就是官方已经将源代码包根据各个系统平台预先编译后的文件包。</p>
</li>
<li>
<p>该包可直接在本地系统中执行可执行文件。</p>
</li>
<li>
<p>仅需要将可执行文件添加到环境变量，以及软件配置文件。</p>
</li>
<li>
<p>二进制包就是已经进行编译过的软件。</p>
</li>
<li>
<p>二进制包可使用 Debian Linux 操作系统中的包管理工具<code>apt</code>进行管理二进制包。</p>
</li>
</ul>
<p>优点和缺点</p>
<ul>
<li>包管理系统简单，通过命令实现包的安装、升级、查询、卸载。</li>
<li>安装速度比源码包安装更快。</li>
<li>经过编译，无法看源代码。</li>
<li>功能选择不如源码包灵活。</li>
<li>包大多存在大量依赖性。</li>
</ul>
<h3>软件包管理工具</h3>
<ul>
<li>
<p>Debian 建立一致的自由软件的预编译二进制包并从档案库中分发它们。</p>
</li>
<li>
<p>许多远程镜像站提供了<code>HTTP</code>和<code>FTP</code>的方式来访问“Debian档案库”。</p>
</li>
<li>
<p>Debian 的软件包管理系统是<code>高级软件包工具（APT）</code>。</p>
</li>
<li>
<p>Debian软件包管理系统可以让用户从档案库安装统一设置的<strong>二进制软件包</strong>到系统中，并进行管理，自动解决依赖问题。</p>
</li>
<li>
<p>每个软件包都带有自己的配置脚本。</p>
</li>
<li>
<p>apt软件包管理工具详细总结：<a href="/software/Package-Apt.html" target="_blank">Package-Apt</a></p>
</li>
<li>
<p>dpkg软件包管理工具详细总结：<a href="/software/Package-Dpkg.html" target="_blank">Package-Dpkg</a></p>
</li>
</ul>
<p>注意事项</p>
<ul>
<li>在<strong>源文件</strong>中不要包含<code>testing</code>或<code>unstable</code>。</li>
<li>在<strong>源文件</strong>中不要在<strong>标准的Debian档案库</strong>中混合使用其它<strong>非标准的Debian档案库</strong>。</li>
<li>不要建立“<code>/etc/apt/preferences</code>”。</li>
<li>不了解会照成的全部影响，就不要通过配置文件改变软件包管理工具的默认行为。</li>
<li>不要使用“<code>dpkg -i random_package</code>”安装任何软件包。</li>
<li>绝不使用“<code>dpkg --force-all -i random_package</code>”安装任何软件包。</li>
<li>不要删除或修改“<code>/var/lib/dpkg</code>”中的文件。</li>
<li>不要让从源码安装的程序覆盖系统文件，若必须要覆盖，则请将它们安装到“<code>/usr/local</code>”或“<code>/opt</code>”目录中。</li>
</ul>
<h2>用户态与内核态</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>用户态与内核态的切换</p>
<ul>
<li>当一个用户态的程序需要执行特权操作时，如读写文件、发送网络数据等，它会通过系统调用（或中断）进入内核态。</li>
<li>执行完系统调用后，控制权会从内核态返回到用户态，程序继续执行。</li>
</ul>
<p>这种权限的划分是现代操作系统安全策略的核心部分，确保了操作系统的稳定性和安全性。</p>
</div>
<h3>用户态</h3>
<p>定义</p>
<ul>
<li>操作系统为普通程序执行设定的一个较低权限的执行环境。在用户态下，程序不能直接访问硬件资源或者执行特权指令。</li>
</ul>
<p>特点</p>
<ul>
<li>程序运行在用户态时，如果发生错误，如访问非法内存，通常只会导致该程序崩溃，而不会影响整个系统。</li>
<li>用户态的程序受到操作系统的严格限制，比如不能直接进行I/O操作，不能访问其他程序的内存空间。</li>
<li>用户态下的程序可以通过系统调用（System Call）请求内核执行某些操作。</li>
</ul>
<p>目的</p>
<ul>
<li>限制程序的能力，以保护系统资源的完整性和稳定性，防止一个程序的错误或恶意行为影响其他程序或操作系统本身。</li>
</ul>
<h3>内核态</h3>
<p>定义</p>
<ul>
<li>操作系统内核运行的特权模式，拥有访问硬件资源和执行所有CPU指令的能力。</li>
</ul>
<p>特点</p>
<ul>
<li>在内核态下运行的代码具有最高的权限，可以直接访问所有的内存空间和硬件设备。</li>
<li>内核态下的程序错误可能会导致整个系统的崩溃。</li>
<li>内核态的程序负责管理系统资源，如内存管理、进程调度、设备驱动程序等。</li>
</ul>
<p>目的</p>
<ul>
<li>为了执行那些只有操作系统才能执行的操作，如低级硬件操作、资源分配等，确保这些操作的安全性和有效性。</li>
</ul>
<h2>常用快捷键</h2>
<p>详细总结：<a href="/software/OS-DebianLinux-%E5%BF%AB%E6%8D%B7%E9%94%AE.html" target="_blank">OS-DebianLinux-快捷键</a></p>
<h2>部署方案</h2>
<p>个人文件目录结构和系统目录结构的配合方法。</p>
<p>分区方案：<a href="/software/OS-DebianLinux-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E5%88%86%E5%8C%BA.html" target="_blank">OS-DebianLinux-热门推荐-分区</a></p>
<p>目录方案：<a href="/software/OS-DebianLinux-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E7%9B%AE%E5%BD%95.html" target="_blank">OS-DebianLinux-热门推荐-目录</a></p>
<h2>问题总结</h2>
<p>详细总结：<a href="/software/OS-DebianLinux-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93.html" target="_blank">OS-DebianLinux-问题总结</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Python 3 - 进阶知识总结</title>
      <link>https://blog.magictable.ha.cn/software/Language-Python3-%E8%BF%9B%E9%98%B6%E7%9F%A5%E8%AF%86%E6%80%BB%E7%BB%93.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Python3-%E8%BF%9B%E9%98%B6%E7%9F%A5%E8%AF%86%E6%80%BB%E7%BB%93.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Python 3 - 进阶知识总结</source>
      <description>文章摘要： python3版本的进阶知识总结。 进程、协程、并行、并发、GIL锁、异步 ==待完善== 表达式、迭代、生成、装饰 ==待完善== 表达式总结 占位符 详细总结：==待完善== 正则表达式 详细总结： 正则表达式 详细总结： 转义字符 详细总结：</description>
      <category>软件程序/程序语言</category>
      <pubDate>Fri, 24 Nov 2023 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> python3版本的进阶知识总结。</p>
<!-- more -->
<h2>进程、协程、并行、并发、GIL锁、异步</h2>
<p>==待完善==</p>
<h2>表达式、迭代、生成、装饰</h2>
<p>==待完善==</p>
<h2>表达式总结</h2>
<p>占位符</p>
<ul>
<li>详细总结：==待完善==</li>
</ul>
<p>正则表达式</p>
<ul>
<li>详细总结：<a href="/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F.html" target="_blank">基础知识-正则表达式</a></li>
</ul>
<p>正则表达式</p>
<ul>
<li>详细总结：<a href="/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F.html" target="_blank">基础知识-正则表达式</a></li>
</ul>
<p>转义字符</p>
<ul>
<li>详细总结：<a href="/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E9%80%9A%E7%94%A8%E8%BD%AC%E4%B9%89%E5%AD%97%E7%AC%A6.html" target="_blank">基础知识-通用转义字符</a></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Library - Npm - Hexo - 终端命令</title>
      <link>https://blog.magictable.ha.cn/software/Library-Npm-Hexo-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Npm-Hexo-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Npm - Hexo - 终端命令</source>
      <description>文章摘要： Hexo博客框架的常用命令汇总。Hexo有官方网站(点击进入Hexo官网)。 常用命令 查看Hexo版本 初始化网站 新建文章 生成静态文件 启动本地服务器 部署同步到远程站点 清除静态文件 显示网站资料</description>
      <category>软件程序/代码类库</category>
      <pubDate>Mon, 14 Aug 2023 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Hexo博客框架的常用命令汇总。Hexo有官方网站(<a href="https://hexo.io/zh-cn/" target="_blank" rel="noopener noreferrer">点击进入Hexo官网</a>)。</p>
<!-- more -->
<h2>常用命令</h2>
<h3>查看Hexo版本</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 查看当前版本，简写命令hexo -v</span></span>
<span class="line">hexo version</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h3>初始化网站</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 项目名参数是创建一个目录，（可选参数）默认在目前的文件夹建立网站</span></span>
<span class="line">hexo init 项目名</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 切换到项目名文件夹下面</span></span>
<span class="line"><span class="token builtin class-name">cd</span> 项目名</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 安装hexo所需的依赖库</span></span>
<span class="line"><span class="token function">npm</span> <span class="token function">install</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>新建文章</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 新建一篇文章。</span></span>
<span class="line">hexo new <span class="token punctuation">[</span>layout<span class="token punctuation">]</span> 文章名</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 如果没有设置“layout”参数，则默认使用 _config.yml 中的 default_layout 参数代替。</span></span>
<span class="line"><span class="token comment"># 如果文章名包含空格的话，请使用引号括起来。</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><table>
<thead>
<tr>
<th style="text-align:left">参数</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">-p,，--path</td>
<td style="text-align:left">自定义新文章的路径</td>
</tr>
<tr>
<td style="text-align:left">-r， --replace</td>
<td style="text-align:left">如果存在同名文章，将其替换</td>
</tr>
<tr>
<td style="text-align:left">-r，--slug</td>
<td style="text-align:left">文章的Slug，作为新文章的文件名和发布后的URL</td>
</tr>
</tbody>
</table>
<h3>生成静态文件</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 生成静态文件，简写命令hexo g</span></span>
<span class="line">hexo generate</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h3>启动本地服务器</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 开启本地服务，简写命令hexo s</span></span>
<span class="line">hexo server</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><table>
<thead>
<tr>
<th style="text-align:left">选项</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">-p，--port</td>
<td style="text-align:left">重设端口（默认访问网址为<a href="http://localhost:4000/%EF%BC%89" target="_blank" rel="noopener noreferrer">http://localhost:4000/）</a></td>
</tr>
<tr>
<td style="text-align:left">-s，--static</td>
<td style="text-align:left">只使用静态文件</td>
</tr>
<tr>
<td style="text-align:left">-l， --log</td>
<td style="text-align:left">启动日记记录，使用覆盖记录格式</td>
</tr>
</tbody>
</table>
<h3>部署同步到远程站点</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 部署同步到远程站点，简写命令hexo d</span></span>
<span class="line">hexo deploy</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h3>清除静态文件</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 清除静态文件，没有简写命令</span></span>
<span class="line">hexo clean</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h3>显示网站资料</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># type参数是类型</span></span>
<span class="line"><span class="token comment"># 参数：`page`导航栏、`post`文章、`route`静态文件树状图、`tag`标签、`category`分类。</span></span>
<span class="line">hexo list <span class="token operator">&lt;</span>type<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Library - Npm - Hexo</title>
      <link>https://blog.magictable.ha.cn/software/Library-Npm-Hexo.html</link>
      <guid>https://blog.magictable.ha.cn/software/Library-Npm-Hexo.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Library - Npm - Hexo</source>
      <description>文章摘要： 基于Node.js的网站框架。 介绍 Hexo是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown（或其他标记语言）解析文章，在几秒内，即可利用靓丽的主题生成静态网页。 前置依赖 安装Hexo需要先安装下列应用程序： Node.js，开源、跨平台的 JavaScript 运行时环境。 Git，免费开源分布式版本控制系统。 安装...</description>
      <category>软件程序/代码类库</category>
      <pubDate>Mon, 14 Aug 2023 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 基于Node.js的网站框架。</p>
<!-- more -->
<h2>介绍</h2>
<blockquote>
<ul>
<li><a href="https://hexo.io/zh-cn/" target="_blank" rel="noopener noreferrer">Hexo</a>是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown（或其他标记语言）解析文章，在几秒内，即可利用靓丽的主题生成静态网页。</li>
</ul>
</blockquote>
<h2>前置依赖</h2>
<p>安装Hexo需要先安装下列应用程序：</p>
<blockquote>
<ul>
<li><a href="https://nodejs.org/" target="_blank" rel="noopener noreferrer">Node.js</a>，开源、跨平台的 JavaScript 运行时环境。</li>
<li><a href="https://git-scm.com/" target="_blank" rel="noopener noreferrer">Git</a>，免费开源分布式版本控制系统。</li>
</ul>
</blockquote>
<h2>安装与卸载</h2>
<p>通过Noed.js的npm命令行工具使用以下命令安装Heox：</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># -g参数即全局安装，安装到全局库中。</span></span>
<span class="line"><span class="token function">npm</span> <span class="token function">install</span> <span class="token parameter variable">-g</span> hexo-cli</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h2>终端命令</h2>
<p>详细总结：<a href="/software/Library-Npm-Hexo-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4.html" target="_blank">Hexo命令</a></p>
<h2>建站</h2>
<p><strong>1. 初始化</strong></p>
<ul>
<li>请先切换到需要创建项目目录的路径下并执行以下命令，Hexo 将会在指定文件夹中新建所需要的文件。</li>
</ul>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 项目名参数是创建一个目录，可选参数</span></span>
<span class="line">hexo init 项目名</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 切换到项目名文件夹下面</span></span>
<span class="line"><span class="token builtin class-name">cd</span> 项目名</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 安装hexo所需的依赖库</span></span>
<span class="line"><span class="token function">npm</span> <span class="token function">install</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>2. 编写内容</strong></p>
<ul>
<li>创建新文章</li>
</ul>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line">hexo new <span class="token punctuation">[</span>模板<span class="token punctuation">]</span> 文章名</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p><strong>3. 生成静态文件和清除静态文件</strong></p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 生成静态文件，简写命令hexo g</span></span>
<span class="line">hexo generate</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 清除静态文件</span></span>
<span class="line">hexo clean</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>4. 本地开启服务或部署到远程站点</strong></p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 开启本地服务，简写命令hexo s</span></span>
<span class="line">hexo server</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 部署同步到远程站点，简写命令hexo d</span></span>
<span class="line">hexo deploy</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h2>目录结构及说明</h2>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">|-- /scaffolds   # 模板文件夹</span>
<span class="line">|-- /source      # 资源文件夹</span>
<span class="line">|-- /themes      # 主题文件夹</span>
<span class="line">_config.yml      # 配置文件</span>
<span class="line">package.json     # 应用程序所需的第三方依赖库</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><blockquote>
<p>_config.yml</p>
<ul>
<li>配置文件夹</li>
<li>配置详细说明：<a href="https://hexo.io/zh-cn/docs/configuration" target="_blank" rel="noopener noreferrer">官方文档</a></li>
</ul>
<p>package.json</p>
<ul>
<li>应用程序的信息，所用到的第三方依赖库</li>
</ul>
<p>/scaffolds</p>
<ul>
<li>模板文件夹，当创建新文章时，Hexo会根据scaffold来创建文件。</li>
<li>Hexo的模板是指在新建的文章文件中默认填充的内容。</li>
<li>例如，如果修改scaffold/post.md中的内容，那么每次新建一篇文章时都会包含这个修改。</li>
</ul>
<p>/source</p>
<ul>
<li>资源文件夹，存放用户资源的地方。</li>
<li>除_posts文件夹之外，开头命名为_（下划线）的文件、文件夹、隐藏的文件将会被忽略。Markdown和HTML文件会被解析并放到public文件夹，而其他文件会被拷贝过去。</li>
</ul>
<p>/themes</p>
<ul>
<li>主题文件夹，Hexo会根据主题来生成静态页面。</li>
</ul>
</blockquote>
<h2>使用教学</h2>
<h3>插入网络图片</h3>
<p>效果：</p>
<p><img src="https://gd-hbimg.huaban.com/2d291e31a30711e30b3b5ba2c4ba54377f4ab834553d1-z9Mbqr" alt="Cortana形象图片" title="角色设计草图"></p>
<p>格式：</p>
<div class="language-markdown line-numbers-mode" data-highlighter="prismjs" data-ext="md"><pre><code class="language-markdown"><span class="line"><span class="token url"><span class="token operator">!</span>[<span class="token content">替代图片的文本</span>](<span class="token url">图片网络地址</span>)</span></span>
<span class="line"><span class="token url"><span class="token operator">!</span>[<span class="token content">图片的替代文本</span>](<span class="token url">图片地址</span> <span class="token string">"可选标题"</span>)</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h3>插入本地图片</h3>
<p><strong>方法1：</strong></p>
<blockquote>
<ul>
<li>通过局部路径的方法读取相关文件。</li>
<li>首先我们已经确定文章都在“source/_posts”目录下，然后我们的资源在“source/资源文件夹”目录下。</li>
<li>如下所示：</li>
</ul>
</blockquote>
<p>效果：
</p>
<p>格式：</p>
<div class="language-markdown line-numbers-mode" data-highlighter="prismjs" data-ext="md"><pre><code class="language-markdown"><span class="line"><span class="token url"><span class="token operator">!</span>[<span class="token content">显示文本内容</span>](<span class="token url">../需要读取的资源文件路径/文件名+后缀</span>)</span></span>
<span class="line"></span>
<span class="line">“..”两个点表明是上一级目录，“.”一个点表明是当前目录。</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>方法2：</strong></p>
<blockquote>
<ul>
<li>修改hexo的“_config.yml”文件中的内容。</li>
<li>如下所示：</li>
</ul>
</blockquote>
<div class="language-yaml line-numbers-mode" data-highlighter="prismjs" data-ext="yml"><pre><code class="language-yaml"><span class="line"><span class="token comment"># 是否启用资源文件夹</span></span>
<span class="line"><span class="token comment"># 启用后将以“source”目录为根目录进行读取资源。</span></span>
<span class="line"><span class="token key atrule">post_asset_folder</span><span class="token punctuation">:</span> <span class="token boolean important">true</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><blockquote>
<ul>
<li>我会将相关资源存储在“/source/”目录下，以读取里面的内容。</li>
<li>在文章中使用如下格式进行插入图片：</li>
</ul>
</blockquote>
<p>效果：
</p>
<p>格式：</p>
<div class="language-markdown line-numbers-mode" data-highlighter="prismjs" data-ext="md"><pre><code class="language-markdown"><span class="line">![显示文本内容](/source/ + 具体路径 + /图片名和文件格式)</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>连接外部文章</h3>
<p>效果：
<a href="https://hexo.io/zh-cn/" target="_blank" rel="noopener noreferrer">Hexo</a></p>
<p>格式：</p>
<div class="language-markdown line-numbers-mode" data-highlighter="prismjs" data-ext="md"><pre><code class="language-markdown"><span class="line"><span class="token url">[<span class="token content">显示文本内容</span>](<span class="token url">网站URL</span>)</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>连接内部文章</h3>
<p>效果：
{% post_link Tool-Hexo-Command "Tool | Hexo - 命令" %}</p>
<p>格式：</p>
<div class="language-markdown line-numbers-mode" data-highlighter="prismjs" data-ext="md"><pre><code class="language-markdown"><span class="line">{% post_link 文章文件名(不带后缀) 显示文本文章标题(可选) %}</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>个人网络图库</h3>
<blockquote>
<p>花瓣网，我将采集别人的图片或自己上传图片，再通过网址的形式查找到图片在网页上展示。</p>
</blockquote>
<h2>注意事项与推荐方案</h2>
]]></content:encoded>
      <enclosure url="https://gd-hbimg.huaban.com/2d291e31a30711e30b3b5ba2c4ba54377f4ab834553d1-z9Mbqr &quot;角色设计草图&quot;" type="image/"/>
    </item>
    <item>
      <title>Package - Node.js - npm - 终端命令 - npm</title>
      <link>https://blog.magictable.ha.cn/software/Package-NodeJS-npm-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-npm.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-NodeJS-npm-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-npm.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Node.js - npm - 终端命令 - npm</source>
      <description>文章摘要： npm 是 node.js 的包管理工具，是 node.js 默认的、以JavaScript编写的软件包管理系统。 相关信息 外部相关文章 官方npm文档：网站链接 内部相关文章 运行命令 注释 读取项目中的package.json配置文件中的配置。 该方式运行命令，能够在没有全局安装依赖包时，即没有添加到环境变量时，自动到项目依赖包目录下...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sun, 13 Aug 2023 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> npm 是 node.js 的包管理工具，是 node.js 默认的、以JavaScript编写的软件包管理系统。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li>官方npm文档：<a href="https://docs.npmjs.com/cli/v10/commands" target="_blank" rel="noopener noreferrer">网站链接</a></li>
</ul>
<p>内部相关文章</p>
<ul>
<li></li>
</ul>
</div>
<h2>运行命令</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>读取项目中的<code>package.json</code>配置文件中的配置。</li>
<li>该方式运行命令，能够在没有全局安装依赖包时，即没有添加到环境变量时，自动到项目依赖包目录下查找依赖包的命令。</li>
</ul>
</div>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">npm</span> run <span class="token operator">&lt;</span>自定义命令<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>查看npm版本</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">npm</span> <span class="token parameter variable">-v</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>查看npm缓存位置</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">npm</span> config get cache</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>初始化项目</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">npm</span> init</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 默认参数，自动初始化</span></span>
<span class="line"><span class="token function">npm</span> init <span class="token parameter variable">-y</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>管理依赖</h2>
<h3>查询镜像源中的依赖</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 查询依赖是否存在及其相关信息</span></span>
<span class="line"><span class="token function">npm</span> view <span class="token operator">&lt;</span>依赖名<span class="token operator">&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 查看依赖的最新版本号</span></span>
<span class="line"><span class="token function">npm</span> view <span class="token operator">&lt;</span>依赖名<span class="token operator">&gt;</span> version</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 查看依赖的所有历史版本号</span></span>
<span class="line"><span class="token function">npm</span> view <span class="token operator">&lt;</span>依赖名<span class="token operator">&gt;</span> versions</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>下载依赖</h3>
<p>命令</p>
<blockquote>
<ul>
<li><code>npm install</code></li>
</ul>
</blockquote>
<p>参数</p>
<blockquote>
<ul>
<li><code>-g</code>：全局安装一个依赖。</li>
<li><code>-S</code> | <code>--save</code>：（默认）添加到生产环境。</li>
<li><code>-P</code> | <code>--save-dev</code>：添加到开发环境。</li>
</ul>
</blockquote>
<p>案例</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 局部安装，安装到当前项目的“node_modules/”文件夹。</span></span>
<span class="line"><span class="token function">npm</span> <span class="token function">install</span> <span class="token operator">&lt;</span>依赖名<span class="token operator">&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 全局安装，</span></span>
<span class="line"><span class="token function">npm</span> <span class="token function">install</span> <span class="token operator">&lt;</span>依赖名<span class="token operator">&gt;</span> <span class="token parameter variable">-g</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 安装特定版本的模块</span></span>
<span class="line"><span class="token function">npm</span> <span class="token function">install</span> <span class="token operator">&lt;</span>依赖名@版本号<span class="token operator">&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 并添加到项目中的“生产环境”</span></span>
<span class="line"><span class="token function">npm</span> <span class="token function">install</span> <span class="token operator">&lt;</span>依赖名<span class="token operator">&gt;</span> <span class="token parameter variable">-S</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 并添加到项目中的“开发环境”</span></span>
<span class="line"><span class="token function">npm</span> <span class="token function">install</span> <span class="token operator">&lt;</span>依赖名<span class="token operator">&gt;</span> <span class="token parameter variable">-D</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 更新npm</span></span>
<span class="line"><span class="token function">npm</span> <span class="token function">install</span> <span class="token function">npm</span> <span class="token parameter variable">-g</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>查看依赖</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 当前项目的依赖列表</span></span>
<span class="line"><span class="token function">npm</span> list</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 全局下的依赖列表</span></span>
<span class="line"><span class="token function">npm</span> list <span class="token parameter variable">-p</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 查询本地某个依赖</span></span>
<span class="line"><span class="token function">npm</span> list <span class="token operator">&lt;</span>依赖名称<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>卸载依赖</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 卸载生产依赖（默认）</span></span>
<span class="line"><span class="token function">npm</span> uninstall <span class="token operator">&lt;</span>依赖名称<span class="token operator">&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 卸载开发依赖</span></span>
<span class="line"><span class="token function">npm</span> uninstall <span class="token operator">&lt;</span>依赖名称<span class="token operator">&gt;</span> --save-dev</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>重新安装依赖</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 强制重新build</span></span>
<span class="line"><span class="token function">npm</span> rebuild</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h3>清空本地npm缓存</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">npm</span> cache <span class="token function">clear</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 强制清理缓存，忽略警告</span></span>
<span class="line"><span class="token function">npm</span> cache clean <span class="token parameter variable">--force</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>管理镜像源</h2>
<h3>查询当前镜像源</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">npm</span> config get registry</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>更改npm镜像源</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 华为镜像站</span></span>
<span class="line"><span class="token function">npm</span> config <span class="token builtin class-name">set</span> registry https://mirrors.huaweicloud.com/repository/npm/</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h3>切换回原镜像源</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">npm</span> config <span class="token builtin class-name">set</span> registry https://registry.npmjs.org</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Node.js - npm - 问题总结 - 手动下载npm依赖</title>
      <link>https://blog.magictable.ha.cn/software/Package-NodeJS-npm-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E6%89%8B%E5%8A%A8%E4%B8%8B%E8%BD%BDnpm%E4%BE%9D%E8%B5%96.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-NodeJS-npm-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E6%89%8B%E5%8A%A8%E4%B8%8B%E8%BD%BDnpm%E4%BE%9D%E8%B5%96.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Node.js - npm - 问题总结 - 手动下载npm依赖</source>
      <description>文章摘要： Nodejs的npm由于网络问题导致下载依赖失败，如何通过手动下载依赖并安装到当前项目。 注释 该方法一般用于在通过命令搭建别人的项目时，出现某些依赖由于网络问题无法下载。 通过查看错误提示，确定是哪一个依赖无法下载。 我们将使用以下流程进行手动下载并安装。 警告 若非上面的目的而出现的问题，请注意该依赖是否存在依赖其他依赖的可能。 查看错...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sun, 13 Aug 2023 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Nodejs的npm由于网络问题导致下载依赖失败，如何通过手动下载依赖并安装到当前项目。</p>
<!-- more -->
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>该方法一般用于在通过命令搭建别人的项目时，出现某些依赖由于网络问题无法下载。</li>
<li>通过查看错误提示，确定是哪一个依赖无法下载。</li>
<li>我们将使用以下流程进行手动下载并安装。</li>
</ul>
</div>
<div class="hint-container warning">
<p class="hint-container-title">警告</p>
<ul>
<li>若非上面的目的而出现的问题，请注意该依赖是否存在依赖其他依赖的可能。</li>
</ul>
</div>
<ol>
<li>查看错误信息，确定是哪一个依赖下载不下来</li>
</ol>
<blockquote>
<p></p>
</blockquote>
<ul>
<li>在第4行，提示下载地址和依赖名(xisx)和版本号(0.20.2)。</li>
</ul>
<ol start="2">
<li>安装已经下载到本地的依赖到项目中</li>
</ol>
<ul>
<li>将该链接在浏览器打开并下载到本地。</li>
<li>在当前项目的目录下执行如下安装命令，安装到当前项目中。</li>
<li>使用<code>npm install &lt;路径+名称.tgz&gt;</code>。</li>
</ul>
<ol start="3">
<li>修改项目中的<code>package.json</code>文件</li>
</ol>
<ul>
<li>安装完成后<code>package.json</code>会有以下变化，但需要二次修改。</li>
</ul>
<blockquote>
<p></p>
</blockquote>
<ul>
<li>提示：第12行需要修改为所需的版本号，原本是自动指定为本地依赖包的目录，因此需要修改。</li>
</ul>
<ol start="4">
<li>修改项目中的<code>package-lock.json</code>文件</li>
</ol>
<ul>
<li>安装完成后<code>package-lock.json</code>会有以下变化，但需要二次修改。</li>
</ul>
<blockquote>
<p></p>
</blockquote>
<ul>
<li>提示：需要修改第12行和第17行的路径，分别改为版本号和下载地址。</li>
</ul>
<blockquote>
<p></p>
</blockquote>
<ol start="5">
<li>手动安装依赖的流程结束。</li>
</ol>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Node.js - npm - 问题总结</title>
      <link>https://blog.magictable.ha.cn/software/Package-NodeJS-npm-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-NodeJS-npm-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Node.js - npm - 问题总结</source>
      <description>文章摘要： 摘要内容。 下载速度太慢，更换为国内镜像源 相关信息 这是包管理工具，因此需要下载的第三方包都存放在别人管理的服务器仓库中。 有国外的仓库镜像源，也有国内的仓库镜像源，选择国内的可以提高下载速度。 更换为国内华为的npm镜像源 当需要全局安装时失败，没有写入权限 请先获取管理员权限后在运行。 注释 报错案例 如何很好的管理不同版本的Node...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sun, 13 Aug 2023 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>下载速度太慢，更换为国内镜像源</h2>
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<ul>
<li>这是包管理工具，因此需要下载的第三方包都存放在别人管理的服务器仓库中。</li>
<li>有国外的仓库镜像源，也有国内的仓库镜像源，选择国内的可以提高下载速度。</li>
<li>更换为国内华为的npm镜像源</li>
</ul>
</div>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 修改为华为镜像源</span></span>
<span class="line"><span class="token function">npm</span> config <span class="token builtin class-name">set</span> registry https://mirrors.huaweicloud.com/repository/npm/</span>
<span class="line"><span class="token comment"># 清空缓存</span></span>
<span class="line"><span class="token function">npm</span> cache clean <span class="token parameter variable">-f</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>当需要全局安装时失败，没有写入权限</h2>
<ul>
<li>请先获取管理员权限后在运行。</li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>报错案例</p>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">npm ERR! code EACCES</span>
<span class="line">npm ERR! syscall mkdir</span>
<span class="line">npm ERR! path /usr/local/lib/node_modules/@ionic</span>
<span class="line">npm ERR! errno -13</span>
<span class="line">npm ERR! Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/@ionic'</span>
<span class="line">npm ERR!  [Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/@ionic'] {</span>
<span class="line">npm ERR!   errno: -13,</span>
<span class="line">npm ERR!   code: 'EACCES',</span>
<span class="line">npm ERR!   syscall: 'mkdir',</span>
<span class="line">npm ERR!   path: '/usr/local/lib/node_modules/@ionic'</span>
<span class="line">npm ERR! }</span>
<span class="line">npm ERR! </span>
<span class="line">npm ERR! The operation was rejected by your operating system.</span>
<span class="line">npm ERR! It is likely you do not have the permissions to access this file as the current user</span>
<span class="line">npm ERR! </span>
<span class="line">npm ERR! If you believe this might be a permissions issue, please double-check the</span>
<span class="line">npm ERR! permissions of the file and its containing directories, or try running</span>
<span class="line">npm ERR! the command again as root/Administrator.</span>
<span class="line"></span>
<span class="line">npm ERR! A complete log of this run can be found in:</span>
<span class="line">npm ERR!     /home/user/.npm/_logs/2024-10-23T10_50_18_325Z-debug-0.log</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></div>
<h2>如何很好的管理不同版本的NodeJS</h2>
<ul>
<li>通过配置文件解决环境问题</li>
<li>==待完善==</li>
</ul>
<h2>依赖包版本不同的问题解决方案</h2>
<ul>
<li>全部使用局部安装，通过<code>npm run</code>命令来运行项目包中的命令。</li>
<li>需要在项目中的<code>package.json</code>配置文件中的<code>scripts</code>属性里定义命令。</li>
</ul>
<h2>手动下载npm依赖</h2>
<p>详细总结：<a href="/software/Package-NodeJS-npm-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E6%89%8B%E5%8A%A8%E4%B8%8B%E8%BD%BDnpm%E4%BE%9D%E8%B5%96.html" target="_blank">Package-NodeJS-npm-问题总结-手动下载npm依赖</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Node.js - npm</title>
      <link>https://blog.magictable.ha.cn/software/Package-NodeJS-npm.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-NodeJS-npm.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Node.js - npm</source>
      <description>文章摘要： Node.js的npm包管理工具。 相关信息 外部相关文章 内部相关文章 NodeJS第三方依赖推荐： 项目规范： 问题总结： 简介 官方文档：网站链接 注释 包安装分为全局安装和局部安装，推荐使用局部安装，并手动添加环境变量到package.json配置文件中。 包管理工具概念教程：【coderwhy新课】前端工程化《npm等包管理工具》...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sun, 13 Aug 2023 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Node.js的npm包管理工具。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li></li>
</ul>
<p>内部相关文章</p>
<ul>
<li>NodeJS第三方依赖推荐：<a href="/software/Package-NodeJS-npm-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E7%AC%AC%E4%B8%89%E6%96%B9%E7%B1%BB%E5%BA%93.html" target="_blank">Package-NodeJS-npm-热门推荐-第三方类库</a></li>
<li>项目规范：<a href="/software/Package-NodeJS-npm-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E9%A1%B9%E7%9B%AE%E8%A7%84%E8%8C%83.html" target="_blank">Package-NodeJS-npm-热门推荐-项目规范</a></li>
<li>问题总结：<a href="/software/Package-NodeJS-npm-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93.html" target="_blank">Package-NodeJS-npm-问题总结</a></li>
</ul>
</div>
<h2>简介</h2>
<p>官方文档：<a href="https://docs.npmjs.com/" target="_blank" rel="noopener noreferrer">网站链接</a></p>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>包安装分为全局安装和局部安装，推荐使用局部安装，并手动添加环境变量到<code>package.json</code>配置文件中。</li>
<li>包管理工具概念教程：<a href="https://www.bilibili.com/video/BV1U44y1f7ZZ?vd_source=262edcbbd8e80915a7dff074a0e165a1&amp;spm_id_from=333.788.player.switch&amp;p=2" target="_blank" rel="noopener noreferrer">【coderwhy新课】前端工程化《npm等包管理工具》</a></li>
</ul>
</div>
<h2>依赖安装</h2>
<ul>
<li>
<p>全局安装，命令有添加到环境变量</p>
</li>
<li>
<p>局部安装，命令没有添加到环境变量，但可以使用<code>npm run &lt;命令&gt;</code>，能够自动到项目包下查找命令，并运行。</p>
</li>
<li>
<p>全局安装，安装在<code>/用户目录/node_modules</code>文件夹下。</p>
</li>
<li>
<p>局部安装，在当前项目下的<code>/项目目录/node_mudules</code>文件夹下。</p>
</li>
<li>
<p>全局安装，容易出现版本冲突。</p>
</li>
<li>
<p>局部安装，能够很好的隔离不同项目之间的依赖包。</p>
</li>
</ul>
<h2>node_modules目录</h2>
<ul>
<li>下载的依赖包存放位置。</li>
</ul>
<h2>package.json文件</h2>
<ul>
<li>入口文件。</li>
<li>每一个Node.js软件包中都包含一个package.json文件。</li>
<li>用于描述应用程序的配置文件，包含和应用程序相关的信息。</li>
</ul>
<p>案例和属性说明</p>
<div class="language-json line-numbers-mode" data-highlighter="prismjs" data-ext="json"><pre><code class="language-json"><span class="line"><span class="token punctuation">{</span></span>
<span class="line">  <span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"didi-driver"</span><span class="token punctuation">,</span>  <span class="token comment">// 项目名称</span></span>
<span class="line">  <span class="token property">"version"</span><span class="token operator">:</span> <span class="token string">"0.0.1"</span><span class="token punctuation">,</span>     <span class="token comment">// 版本号</span></span>
<span class="line">  <span class="token property">"private"</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>        <span class="token comment">// 是否是私有的项目，若为false则会被发布到npm仓库中</span></span>
<span class="line">  <span class="token property">"description"</span><span class="token operator">:</span> <span class="token string">"An Ionic project"</span><span class="token punctuation">,</span>  <span class="token comment">// 项目描述信息</span></span>
<span class="line">  <span class="token property">"author"</span><span class="token operator">:</span> <span class="token string">"魔术桌"</span><span class="token punctuation">,</span>      <span class="token comment">// 作者信息</span></span>
<span class="line">  <span class="token property">"license"</span><span class="token operator">:</span> <span class="token string">"ISC"</span><span class="token punctuation">,</span>       <span class="token comment">// 开源协议</span></span>
<span class="line">  <span class="token property">"main"</span><span class="token operator">:</span> <span class="token string">"main.js"</span><span class="token punctuation">,</span>      <span class="token comment">// 程序入口，用于在被第三方调用时自动选择该文件为主运行模块。</span></span>
<span class="line">  <span class="token property">"type"</span><span class="token operator">:</span> <span class="token string">"module"</span><span class="token punctuation">,</span>       <span class="token comment">// </span></span>
<span class="line">  </span>
<span class="line">  <span class="token property">"scripts"</span><span class="token operator">:</span> <span class="token punctuation">{</span>   <span class="token comment">// `配置脚本命令，以键值对的形式存在</span></span>
<span class="line">    <span class="token comment">// 键：脚本别名，值：具体脚本</span></span>
<span class="line">    <span class="token property">"dev"</span><span class="token operator">:</span> <span class="token string">"vite"</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token property">"build"</span><span class="token operator">:</span> <span class="token string">"vue-tsc &amp;&amp; vite build"</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token property">"preview"</span><span class="token operator">:</span> <span class="token string">"vite preview"</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token property">"test:e2e"</span><span class="token operator">:</span> <span class="token string">"cypress run"</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token property">"test:unit"</span><span class="token operator">:</span> <span class="token string">"vitest"</span><span class="token punctuation">,</span></span>
<span class="line">  <span class="token punctuation">}</span><span class="token punctuation">,</span></span>
<span class="line">  </span>
<span class="line">  <span class="token property">"peerDependencies"</span><span class="token operator">:</span> <span class="token punctuation">{</span>  <span class="token comment">// 项目的对等依赖，当前项目的前置依赖，在使用下载该项目时会下载前置依赖</span></span>
<span class="line">    </span>
<span class="line">  <span class="token punctuation">}</span><span class="token punctuation">,</span></span>
<span class="line"></span>
<span class="line">  <span class="token property">"dependencies"</span><span class="token operator">:</span> <span class="token punctuation">{</span>  <span class="token comment">// 项目生产（打包）依赖项，指定所需要的依赖名称和版本号</span></span>
<span class="line">    <span class="token property">"@capacitor/core"</span><span class="token operator">:</span> <span class="token string">"^6.1.2"</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token property">"@ionic/vue"</span><span class="token operator">:</span> <span class="token string">"^8.0.0"</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token property">"@ionic/vue-router"</span><span class="token operator">:</span> <span class="token string">"^8.0.0"</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token property">"axios"</span><span class="token operator">:</span> <span class="token string">"^1.7.7"</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token property">"vue"</span><span class="token operator">:</span> <span class="token string">"^3.3.0"</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token property">"vue-router"</span><span class="token operator">:</span> <span class="token string">"^4.2.0"</span></span>
<span class="line">  <span class="token punctuation">}</span><span class="token punctuation">,</span></span>
<span class="line">  </span>
<span class="line">  <span class="token property">"devDependencies"</span><span class="token operator">:</span> <span class="token punctuation">{</span>  <span class="token comment">// 项目开发依赖项，指定所需要的依赖名称和版本号</span></span>
<span class="line">    <span class="token property">"@capacitor/cli"</span><span class="token operator">:</span> <span class="token string">"^6.1.2"</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token property">"@vitejs/plugin-legacy"</span><span class="token operator">:</span> <span class="token string">"^5.0.0"</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token property">"@vitejs/plugin-vue"</span><span class="token operator">:</span> <span class="token string">"^4.0.0"</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token property">"vite"</span><span class="token operator">:</span> <span class="token string">"^5.4.10"</span><span class="token punctuation">,</span></span>
<span class="line">  <span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token punctuation">}</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>package-lock.json文件</h2>
<ul>
<li>提高项目的稳定性和可维护性，严格锁定依赖包版本。</li>
</ul>
<h2>依赖的版本管理</h2>
<p>semver版本规范</p>
<p>相关博客文章：<a href="/software/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86-%E8%A7%84%E8%8C%83-semver%E8%AF%AD%E4%B9%89%E5%8C%96%E7%89%88%E6%9C%AC%E6%8E%A7%E5%88%B6%E8%A7%84%E8%8C%83.html" target="_blank">公共规范</a></p>
<h2>修改镜像源仓库</h2>
<ul>
<li>npm 的配置文件在<code>/home/&lt;用户名&gt;/</code>目录下的<code>.npmrc</code>文件。</li>
<li>官方文档：<a href="https://mirrors.huaweicloud.com/mirrorDetail/5ea0f1e03fdb11a72fd319b2?mirrorName=npm&amp;catalog=language" target="_blank" rel="noopener noreferrer">网站链接</a></li>
<li>修改<code>.npmrc</code>文件中的内容为如下所示：</li>
</ul>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">registry = https://mirrors.huaweicloud.com/repository/npm/</span>
<span class="line">always-auth = false</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h2>npm install 原理</h2>
<p>流程图</p>
<blockquote>
<p></p>
</blockquote>
<h2>npm终端命令</h2>
<p>详细总结：<a href="/software/Package-NodeJS-npm-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-npm.html" target="_blank">npm命令</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Node.js</title>
      <link>https://blog.magictable.ha.cn/software/Package-NodeJS.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-NodeJS.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Node.js</source>
      <description>文章摘要： JavaScript运行环境。 简介 简要说明 Node.js 是一种开源与跨平台的 JavaScript 的运行环境。 能够使得javascript脱离浏览器运行。 Node.js 的程序可以在多个操作系统上运行。 Node.js 是非阻塞的（多条命令可以同时被运行，通过回调函数得知命令已结束运行）。 Node.js 是事件驱动的，开发者...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sun, 13 Aug 2023 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> JavaScript运行环境。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>Node.js 是一种开源与跨平台的 JavaScript 的运行环境。</li>
<li>能够使得javascript脱离浏览器运行。</li>
<li>Node.js 的程序可以在多个操作系统上运行。</li>
<li>Node.js 是非阻塞的（多条命令可以同时被运行，通过回调函数得知命令已结束运行）。</li>
<li>Node.js 是事件驱动的，开发者可以在不使用线程的情况下开发出一个能够承载高并发的服务器。</li>
<li>Node.js 是一个对于前端工作者不可或缺的工具。</li>
<li>拥有一个 npm 命令行工具，帮助安装和管理这些依赖代码包。</li>
<li>npm 可以理解为一个巨大的在线商店，开发者可以从中获取所需要的代码。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>事件驱动</strong>：Node.js 使用事件驱动模型，非阻塞 I/O 操作，使其轻量级且高效。</li>
<li><strong>非阻塞 I/O</strong>：Node.js 中的 I/O 操作是异步的，这意味着它们不会阻塞主线程，提高了应用程序的性能。</li>
<li><strong>单线程</strong>：尽管是单线程的，但通过事件循环机制，Node.js 可以处理大量的并发连接。</li>
<li><strong>包管理器</strong>：Node.js 包含了 npm（Node Package Manager），这是一个庞大的软件包仓库，可以轻松地管理和分享代码库。</li>
<li><strong>跨平台</strong>：Node.js 可以在多种操作系统上运行，包括 Windows、Linux 和 macOS。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>不适合CPU密集型任务</strong>：由于 Node.js 是单线程的，它不适合执行长时间运行的CPU密集型任务，这会阻塞事件循环。</li>
<li><strong>回调地狱</strong>：在处理多个异步操作时，可能会遇到回调嵌套问题（回调地狱），需要通过 Promise、async/await 等现代JavaScript特性来管理。</li>
<li><strong>错误处理</strong>：Node.js 的异步特性要求开发者更加注意错误处理，确保程序的健壮性。</li>
<li><strong>版本兼容性</strong>：Node.js 的版本更新较快，不同版本之间可能存在不兼容的情况，需要关注版本之间的差异。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>Web 应用程序</strong>：构建高性能的 Web 服务器和 RESTful API。</li>
<li><strong>实时应用程序</strong>：如聊天应用、游戏服务器等，Node.js 能够处理大量的实时用户连接。</li>
<li><strong>微服务架构</strong>：Node.js 轻量级的特点使其成为构建微服务的理想选择。</li>
<li><strong>跨平台桌面应用程序</strong>：使用 Electron 等框架，可以创建跨平台的桌面应用程序。</li>
<li><strong>物联网（IoT）</strong>：Node.js 可以用于处理物联网设备之间的数据交换。</li>
<li><strong>云服务/中间件</strong>：在云环境中，Node.js 可以作为中间件处理请求或数据流。</li>
</ul>
<h2>安装与卸载</h2>
<p>详细总结：<a href="/software/Package-NodeJS-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html" target="_blank">Package-NodeJS-安装与卸载</a></p>
<h2>终端命令</h2>
<p>详细总结：<a href=""></a></p>
<h2>配置文件</h2>
<p>详细总结：<a href=""></a></p>
<h2>热门推荐</h2>
<p>详细总结：<a href=""></a></p>
<h2>问题总结</h2>
<p>详细总结：<a href=""></a></p>
<h2>npm依赖管理工具</h2>
<p>详细总结：<a href="/software/Package-NodeJS-npm-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-npm.html" target="_blank">npm命令</a></p>
<h2>npx依赖管理工具</h2>
<p>详细总结：<a href="/software/Package-NodeJS-npx-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-npx.html" target="_blank">npx命令</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Git - 终端命令 - git</title>
      <link>https://blog.magictable.ha.cn/software/Package-Git-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-git.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Git-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-git.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Git - 终端命令 - git</source>
      <description>文章摘要： Git分布式版本控制系统工具软件的使用命令汇总。 相关信息 外部相关文章 gitee官方提供的教程：https://gitee.com/all-about-git 内部相关文章 注释 全局配置表示这台计算机中的操作系统中的这个用户中的所有的Git仓库都会使用这个配置。 该文章参考了BiliBili上GeekHour的教学视频，视频连接：ht...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 12 Aug 2023 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Git分布式版本控制系统工具软件的使用命令汇总。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li>gitee官方提供的教程：<a href="https://gitee.com/all-about-git" target="_blank" rel="noopener noreferrer">https://gitee.com/all-about-git</a></li>
</ul>
<p>内部相关文章</p>
<ul>
<li></li>
</ul>
</div>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>全局配置表示这台计算机中的操作系统中的这个用户中的所有的Git仓库都会使用这个配置。</li>
<li>该文章参考了BiliBili上GeekHour的教学视频，视频连接：<a href="https://www.bilibili.com/video/BV1HM411377j?p=1" target="_blank" rel="noopener noreferrer">https://www.bilibili.com/video/BV1HM411377j?p=1</a></li>
<li>如果是多人协作使，不要对已经推送到远程的分支进行<code>rebase</code>操作。</li>
</ul>
</div>
<h2>Git设置</h2>
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<p><strong>作用范围</strong>命令参数</p>
<ul>
<li><code>--local</code>：本地配置，对当前项目“当前本地仓库”生效。（默认参数）</li>
<li><code>--global</code>：全局配置，对当前用户“所有仓库”生效。</li>
<li><code>--system</code>：系统配置，对当前系统“所有用户和所有仓库”生效。</li>
</ul>
</div>
<h3>编辑配置文件</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">git</span> config <span class="token parameter variable">-e</span> <span class="token punctuation">[</span>--global<span class="token punctuation">]</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>设置用户名和邮箱</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 若用户名存在空格则需要使用双引号包裹起来</span></span>
<span class="line"><span class="token function">git</span> config <span class="token punctuation">[</span><span class="token operator">&lt;</span>作用范围<span class="token operator">&gt;</span><span class="token punctuation">]</span> user.name <span class="token string">"【用户名】"</span></span>
<span class="line"><span class="token function">git</span> config <span class="token punctuation">[</span><span class="token operator">&lt;</span>作用范围<span class="token operator">&gt;</span><span class="token punctuation">]</span> user.email <span class="token string">"【电子邮件】"</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>永久保存用户名和密码</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 将保存用户名和密码，后续提交文件无需再输入密码</span></span>
<span class="line"><span class="token function">git</span> config <span class="token punctuation">[</span><span class="token operator">&lt;</span>作用范围<span class="token operator">&gt;</span><span class="token punctuation">]</span> credential.helper store</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h3>配置控制Git如何处理行结束符</h3>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>CRLF（回车换行）是Windows系统中使用的换行符，LF（换行）是Unix和Linux系统中使用的换行符。</li>
<li>当你在跨平台的环境下使用Git时，Git会尝试根据你的系统设置来转换文件中的换行符。</li>
<li>推荐进行全局配置。</li>
</ul>
</div>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># `core.autocrlf`：配置控制Git如何处理行结束符。</span></span>
<span class="line"><span class="token comment"># - `true` 或 `auto`（在Windows系统上默认）: 提交时转换成LF，检出时转换成CRLF。</span></span>
<span class="line"><span class="token comment"># - `false`: 禁用自动转换。</span></span>
<span class="line"><span class="token comment"># - `input`（在Linux和macOS系统上默认）: 提交时转换为LF，但在检出时不进行转换。</span></span>
<span class="line"><span class="token function">git</span> config <span class="token punctuation">[</span><span class="token operator">&lt;</span>作用范围<span class="token operator">&gt;</span><span class="token punctuation">]</span> core.autocrlf input  <span class="token comment"># Linux系统</span></span>
<span class="line"><span class="token function">git</span> config <span class="token punctuation">[</span><span class="token operator">&lt;</span>作用范围<span class="token operator">&gt;</span><span class="token punctuation">]</span> core.autocrlf auto   <span class="token comment"># Windows系统</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># `core.eol`：配置在“检出”时Git应该使用哪种行结束符。</span></span>
<span class="line"><span class="token comment"># - `lf`: 使用LF作为行结束符。</span></span>
<span class="line"><span class="token comment"># - `crlf`: 使用CRLF作为行结束符。</span></span>
<span class="line"><span class="token comment"># - `native`: 使用操作系统的默认行结束符。</span></span>
<span class="line"><span class="token function">git</span> config <span class="token punctuation">[</span><span class="token operator">&lt;</span>作用范围<span class="token operator">&gt;</span><span class="token punctuation">]</span> core.eol lf    <span class="token comment"># Linux系统</span></span>
<span class="line"><span class="token function">git</span> config <span class="token punctuation">[</span><span class="token operator">&lt;</span>作用范围<span class="token operator">&gt;</span><span class="token punctuation">]</span> core.eol crlf  <span class="token comment"># Windows系统</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># `core.safecrlf`：配置检查在提交或检出时是否出现了意外的不安全行结束符转换。</span></span>
<span class="line"><span class="token comment"># - `true`: 拒绝提交包含混合行结束符的文件。</span></span>
<span class="line"><span class="token comment"># - `false`: 允许提交包含混合行结束符的文件。</span></span>
<span class="line"><span class="token comment"># - `warn`: 提交时警告混合行结束符的存在。</span></span>
<span class="line"><span class="token function">git</span> config <span class="token punctuation">[</span><span class="token operator">&lt;</span>作用范围<span class="token operator">&gt;</span><span class="token punctuation">]</span> core.safecrlf warn</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>查询git配置</h3>
<p>查看Git的配置信息</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 查看全部配置信息</span></span>
<span class="line"><span class="token function">git</span> config <span class="token punctuation">[</span><span class="token operator">&lt;</span>作用范围<span class="token operator">&gt;</span><span class="token punctuation">]</span> <span class="token parameter variable">--list</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 查看用户名</span></span>
<span class="line"><span class="token function">git</span> config <span class="token punctuation">[</span><span class="token operator">&lt;</span>作用范围<span class="token operator">&gt;</span><span class="token punctuation">]</span> user.name</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 查看邮箱</span></span>
<span class="line"><span class="token function">git</span> config <span class="token punctuation">[</span><span class="token operator">&lt;</span>作用范围<span class="token operator">&gt;</span><span class="token punctuation">]</span> user.email</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 检查 core.autocrlf 的当前设置</span></span>
<span class="line"><span class="token function">git</span> config <span class="token punctuation">[</span><span class="token operator">&lt;</span>作用范围<span class="token operator">&gt;</span><span class="token punctuation">]</span> <span class="token parameter variable">--get</span> core.autocrlf</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 检查 core.eol 的当前设置</span></span>
<span class="line"><span class="token function">git</span> config <span class="token punctuation">[</span><span class="token operator">&lt;</span>作用范围<span class="token operator">&gt;</span><span class="token punctuation">]</span> <span class="token parameter variable">--get</span> core.eol</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 检查 core.safecrlf 的当前设置</span></span>
<span class="line"><span class="token function">git</span> config <span class="token punctuation">[</span><span class="token operator">&lt;</span>作用范围<span class="token operator">&gt;</span><span class="token punctuation">]</span> <span class="token parameter variable">--get</span> core.safecrlf</span>
<span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>仓库操作</h2>
<h3>创建(初始化)仓库</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 将当前目录作为Git仓库进行初始化</span></span>
<span class="line"><span class="token function">git</span> init</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 新建一个目录，将其初始化为Git代码库</span></span>
<span class="line"><span class="token function">git</span> init <span class="token punctuation">[</span><span class="token operator">&lt;</span>仓库名<span class="token operator">&gt;</span><span class="token punctuation">]</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>查看仓库提交历史记录</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 查看仓库提交历史记录</span></span>
<span class="line"><span class="token function">git</span> log</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 使用`--oneline`参数来查看简洁的提交记录</span></span>
<span class="line"><span class="token function">git</span> log <span class="token parameter variable">--oneline</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>查看仓库的状态</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 列出未提交的新的或修改的文件</span></span>
<span class="line"><span class="token function">git</span> status</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h3>跟踪(关联)远程仓库的操作</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 查询</span></span>
<span class="line"><span class="token function">git</span> remote <span class="token parameter variable">-v</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 添加</span></span>
<span class="line"><span class="token function">git</span> remote <span class="token function">add</span> <span class="token string">"&lt;远程仓库名&gt;"</span> <span class="token string">"&lt;远程仓库URL&gt;"</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 断开</span></span>
<span class="line"><span class="token function">git</span> remote remove <span class="token string">"&lt;远程仓库名&gt;"</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 修改 - 当前跟踪的远程仓库在本地的别名</span></span>
<span class="line"><span class="token function">git</span> remote <span class="token function">rename</span> <span class="token string">"&lt;远程仓库名&gt;"</span> <span class="token string">"&lt;新的远程仓库的别名&gt;"</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 修改 - 当前跟踪的远程仓库在本地的URL地址</span></span>
<span class="line"><span class="token function">git</span> remote set-url <span class="token string">"&lt;远程仓库名&gt;"</span> <span class="token string">"&lt;新的RUL&gt;"</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>克隆(下载)远程仓库</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 克隆/下载，将远程仓库的main分支“克隆”到本地仓库</span></span>
<span class="line"><span class="token comment"># 默认克隆远程仓库的主分支</span></span>
<span class="line"><span class="token function">git</span> clone <span class="token string">"&lt;远程仓库URL&gt;"</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 克隆/下载，将远程仓库的指定分支“克隆”到本地仓库</span></span>
<span class="line"><span class="token function">git</span> clone <span class="token parameter variable">-b</span> <span class="token string">"&lt;分支名&gt;"</span> <span class="token string">"&lt;远程仓库URL&gt;"</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>分支操作</h2>
<h3>创建分支</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 创建新分支</span></span>
<span class="line"><span class="token function">git</span> branch <span class="token string">"&lt;分支名&gt;"</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container tip">
<p class="hint-container-title">提示</p>
<p>在后续遇到要新建分支时，创建分支后，会在当前分支的修改基础上提示你“缓存区”有修改的文件，是否要保存到“本地仓库”。</p>
<p>这个时候可以选择以下两种做法：</p>
<ul>
<li><strong>副本分支</strong>：将“缓存区”中发生修改的文件全部保存。</li>
<li><strong>空白分支</strong>：将发生修改的文件全部剔除，还原。</li>
</ul>
</div>
<h3>删除分支</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 删除分支</span></span>
<span class="line"><span class="token function">git</span> branch <span class="token parameter variable">-d</span> <span class="token string">"&lt;分支名&gt;"</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 强制删除分支</span></span>
<span class="line"><span class="token function">git</span> branch <span class="token parameter variable">-D</span> <span class="token string">"&lt;分支名&gt;"</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>修改分支</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 修改当前分支名称</span></span>
<span class="line"><span class="token function">git</span> branch <span class="token parameter variable">-M</span>  <span class="token string">"&lt;新分支名&gt;"</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 修改指定分支名称</span></span>
<span class="line"><span class="token function">git</span> branch <span class="token parameter variable">-m</span> <span class="token string">"&lt;旧分支名&gt;"</span> <span class="token string">"&lt;新分支名&gt;"</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>查看分支</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 查看本地分支</span></span>
<span class="line"><span class="token function">git</span> branch</span>
<span class="line"><span class="token comment"># 查看远程分支</span></span>
<span class="line"><span class="token function">git</span> branch <span class="token parameter variable">-r</span></span>
<span class="line"><span class="token comment"># 查看所有分支</span></span>
<span class="line"><span class="token function">git</span> branch <span class="token parameter variable">-a</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>切换分支</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 切换到指定分支，并更新工作区</span></span>
<span class="line"><span class="token function">git</span> checkout <span class="token string">"&lt;分支名&gt;"</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 切换并创建新分支，没有原先的历史版本记录</span></span>
<span class="line"><span class="token function">git</span> checkout <span class="token parameter variable">--orphan</span> <span class="token string">"&lt;分支名&gt;"</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>合并分支</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># `-no-ff`参数表示禁用Fast forward模式，合并后的历史有分支，能看到曾经做过合并</span></span>
<span class="line"><span class="token function">git</span> merge --no--ff <span class="token parameter variable">-m</span> <span class="token string">"&lt;主分支名&gt;"</span>/<span class="token string">"&lt;分支名&gt;"</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># `-ff`参数表示使用Fast forward模式，合并后的历史会变成一条直线</span></span>
<span class="line"><span class="token function">git</span> merge <span class="token parameter variable">--ff</span> <span class="token parameter variable">-m</span> <span class="token string">"&lt;主分支名&gt;"</span>/<span class="token string">"&lt;分支名&gt;"</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 合并所有提交到一个提交</span></span>
<span class="line"><span class="token function">git</span> merge <span class="token parameter variable">--squash</span> <span class="token string">"&lt;分支名&gt;"</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 取消当前合并操作状态</span></span>
<span class="line"><span class="token function">git</span> merge <span class="token parameter variable">--abort</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>获取（远程分支-&gt;本地分支）</h3>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>获取操作并没有真正将远程分支下载到本地。</li>
<li>只是能在本地看到或查询到远程分支。</li>
<li>需要再次执行拉取分支操作。</li>
<li>在本地会有如下显示：<code>remotes/&lt;远程仓库名&gt;/&lt;远程分支名&gt;</code></li>
</ul>
</div>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 获取全部分支，将所有远程分支“下载”到本地仓库</span></span>
<span class="line"><span class="token function">git</span> fetch <span class="token string">"&lt;远程仓库名&gt;"</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 获取指定分支，将指定远程分支“下载”到本地仓库</span></span>
<span class="line"><span class="token function">git</span> fetch <span class="token string">"&lt;远程仓库名&gt;"</span> <span class="token string">"&lt;分支名&gt;"</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>跟踪(关联)远程分支</h3>
<blockquote>
<ul>
<li>当前分支正在跟踪哪条远程分支。</li>
</ul>
</blockquote>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 查询 - 当前分支正在跟踪哪条远程分支。</span></span>
<span class="line"><span class="token function">git</span> branch <span class="token parameter variable">-vv</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 跟踪远程分支</span></span>
<span class="line"><span class="token function">git</span> branch <span class="token parameter variable">-u</span> <span class="token string">"&lt;添加的远程仓库名&gt;"</span>/<span class="token string">"&lt;远程分支名&gt;"</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 断开远程分支</span></span>
<span class="line"><span class="token function">git</span> branch --unset-upstream</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>推送（本地分支-&gt;远程分支）</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 推送，将本地文件“更新”到远程仓库（遇到冲突将提交失败）</span></span>
<span class="line"><span class="token function">git</span> push <span class="token string">"&lt;远程仓库名&gt;"</span> <span class="token string">"&lt;本地分支名&gt;"</span><span class="token builtin class-name">:</span><span class="token string">"&lt;远程分支名&gt;"</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 强制推送，将本地分支“覆盖”到远程仓库（遇到冲突将强制覆盖远程分支）</span></span>
<span class="line"><span class="token function">git</span> push <span class="token string">"&lt;远程仓库名&gt;"</span> <span class="token string">"&lt;本地分支名&gt;"</span><span class="token builtin class-name">:</span><span class="token string">"&lt;远程分支名&gt;"</span> --force-with-lease</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 设置上游分支，若远程分支不存在将创建分支</span></span>
<span class="line"><span class="token function">git</span> push <span class="token string">"&lt;远程仓库名&gt;"</span> <span class="token string">"&lt;本地分支名&gt;"</span><span class="token builtin class-name">:</span><span class="token string">"&lt;远程分支名&gt;"</span> --set-upstream</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>拉取（远程分支-&gt;本地分支）</h3>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>拉取操作之前，需要确定能够在本地看到远程分支。</li>
<li>可以进行获取操作，来查看到远程分支。</li>
</ul>
</div>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 拉取，将远程仓库“更新”到本地仓库</span></span>
<span class="line"><span class="token function">git</span> pull <span class="token string">"&lt;远程仓库名&gt;"</span> <span class="token string">"&lt;分支名&gt;"</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 强制拉取，将远程仓库“覆盖”到本地仓库</span></span>
<span class="line"><span class="token function">git</span> pull <span class="token string">"&lt;远程仓库名&gt;"</span> <span class="token string">"&lt;远程分支名&gt;"</span><span class="token builtin class-name">:</span><span class="token string">"&lt;本地分支名&gt;"</span> <span class="token parameter variable">--force</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 将远程分支“变基”到本地分支</span></span>
<span class="line"><span class="token function">git</span> pull <span class="token parameter variable">--rebase</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>整理分支中的提交历史/停止变基状态</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># `rebase`操作可以把本地未push的分叉提交历史整理成直线，看起来更直观。</span></span>
<span class="line"><span class="token function">git</span> rebase <span class="token string">"&lt;主分支名&gt;"</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 停止变基，取消当前变基状态。</span></span>
<span class="line"><span class="token function">git</span> rebase <span class="token parameter variable">--abort</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>标签</h2>
<h3>新建标签</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 新建标签在当前版本中</span></span>
<span class="line"><span class="token function">git</span> tag <span class="token string">"&lt;标签名&gt;"</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 新建标签在指定版本中</span></span>
<span class="line"><span class="token function">git</span> tag <span class="token string">"&lt;标签名&gt;"</span> <span class="token punctuation">[</span>commit<span class="token punctuation">]</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>删除标签</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 删除本地tag</span></span>
<span class="line"><span class="token function">git</span> tag <span class="token parameter variable">-d</span> <span class="token string">"&lt;标签名&gt;"</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 删除远程tag</span></span>
<span class="line"><span class="token function">git</span> push origin :refs/tags/<span class="token punctuation">[</span>tagName<span class="token punctuation">]</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>查看标签</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 列出所有标签</span></span>
<span class="line"><span class="token function">git</span> tag</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 查看tag信息</span></span>
<span class="line"><span class="token function">git</span> show <span class="token string">"&lt;标签名&gt;"</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>查看信息</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 显示有变更的文件</span></span>
<span class="line"><span class="token function">git</span> status</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 显示当前分支的版本历史</span></span>
<span class="line"><span class="token function">git</span> log</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 显示commit历史，以及每次commit发生变更的文件</span></span>
<span class="line"><span class="token function">git</span> log <span class="token parameter variable">--stat</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 搜索提交历史，根据关键词</span></span>
<span class="line"><span class="token function">git</span> log <span class="token parameter variable">-S</span> <span class="token punctuation">[</span>keyword<span class="token punctuation">]</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 显示某个commit之后的所有变动，每个commit占据一行</span></span>
<span class="line"><span class="token function">git</span> log <span class="token punctuation">[</span>tag<span class="token punctuation">]</span> HEAD <span class="token parameter variable">--pretty</span><span class="token operator">=</span>format:%s</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 显示某个commit之后的所有变动，其"提交说明"必须符合搜索条件</span></span>
<span class="line"><span class="token function">git</span> log <span class="token punctuation">[</span>tag<span class="token punctuation">]</span> HEAD <span class="token parameter variable">--grep</span> feature</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 显示某个文件的版本历史，包括文件改名</span></span>
<span class="line"><span class="token function">git</span> log <span class="token parameter variable">--follow</span> <span class="token punctuation">[</span>file<span class="token punctuation">]</span></span>
<span class="line"><span class="token function">git</span> whatchanged <span class="token punctuation">[</span>file<span class="token punctuation">]</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 显示指定文件相关的每一次diff</span></span>
<span class="line"><span class="token function">git</span> log <span class="token parameter variable">-p</span> <span class="token punctuation">[</span>file<span class="token punctuation">]</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 显示过去5次提交</span></span>
<span class="line"><span class="token function">git</span> log <span class="token parameter variable">-5</span> <span class="token parameter variable">--pretty</span> <span class="token parameter variable">--oneline</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 显示所有提交过的用户，按提交次数排序</span></span>
<span class="line"><span class="token function">git</span> shortlog <span class="token parameter variable">-sn</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 显示指定文件是什么人在什么时间修改过</span></span>
<span class="line"><span class="token function">git</span> blame <span class="token punctuation">[</span>file<span class="token punctuation">]</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 显示暂存区和工作区的差异</span></span>
<span class="line"><span class="token function">git</span> <span class="token function">diff</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 显示暂存区和上一个commit的差异</span></span>
<span class="line"><span class="token function">git</span> <span class="token function">diff</span> <span class="token parameter variable">--cached</span> <span class="token punctuation">[</span>file<span class="token punctuation">]</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 显示工作区与当前分支最新commit之间的差异</span></span>
<span class="line"><span class="token function">git</span> <span class="token function">diff</span> HEAD</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 显示两次提交之间的差异</span></span>
<span class="line"><span class="token function">git</span> <span class="token function">diff</span> <span class="token punctuation">[</span>first-branch<span class="token punctuation">]</span><span class="token punctuation">..</span>.<span class="token punctuation">[</span>second-branch<span class="token punctuation">]</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 显示今天你写了多少行代码</span></span>
<span class="line"><span class="token function">git</span> <span class="token function">diff</span> <span class="token parameter variable">--shortstat</span> <span class="token string">"@{0 day ago}"</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 显示某次提交的元数据和内容变化</span></span>
<span class="line"><span class="token function">git</span> show <span class="token punctuation">[</span>commit<span class="token punctuation">]</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 显示某次提交发生变化的文件</span></span>
<span class="line"><span class="token function">git</span> show --name-only <span class="token punctuation">[</span>commit<span class="token punctuation">]</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 显示某次提交时，某个文件的内容</span></span>
<span class="line"><span class="token function">git</span> show <span class="token punctuation">[</span>commit<span class="token punctuation">]</span>:<span class="token punctuation">[</span>filename<span class="token punctuation">]</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 显示当前分支的最近几次提交</span></span>
<span class="line"><span class="token function">git</span> reflog</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>文件操作</h2>
<h3>提交文件到暂存区/改为跟踪状态</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 添加当前路径下的所有修改过的文件到暂存区</span></span>
<span class="line"><span class="token function">git</span> <span class="token function">add</span> <span class="token builtin class-name">.</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 添加指定文件到暂存区</span></span>
<span class="line"><span class="token function">git</span> <span class="token function">add</span> <span class="token operator">&lt;</span>文件<span class="token operator">&gt;</span> <span class="token punctuation">..</span>.</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 添加指定目录到暂存区，包含子目录</span></span>
<span class="line"><span class="token function">git</span> <span class="token function">add</span> <span class="token operator">&lt;</span>目录<span class="token operator">&gt;</span> <span class="token punctuation">..</span>.</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>从暂存区移除文件/撤销文件操作</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token function">git</span> restore <span class="token operator">&lt;</span>文件<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>修改为未跟踪状态/移除跟踪文件</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># `-r`：递归删除文件夹和文件。</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 删除“缓存区”和“工作区”中的文件</span></span>
<span class="line"><span class="token function">git</span> <span class="token function">rm</span> <span class="token operator">&lt;</span>文件<span class="token operator">&gt;</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 删除“缓存区”，保留“工作区”中的文件</span></span>
<span class="line"><span class="token function">git</span> <span class="token function">rm</span> <span class="token parameter variable">--cached</span> <span class="token operator">&lt;</span>文件<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>代码提交</h2>
<h3>暂存区文件提交到本地仓库</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 提交所有缓存区的文件到本地仓库</span></span>
<span class="line"><span class="token function">git</span> commit <span class="token parameter variable">-m</span> <span class="token string">"提交消息"</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 提交所有已修改的文件到本地仓库</span></span>
<span class="line"><span class="token function">git</span> commit <span class="token parameter variable">-a</span> <span class="token parameter variable">-m</span> <span class="token string">"提交消息"</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>版本控制</h2>
<h3>查看版本/文件差异</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 查看工作区、暂存区、本地仓库之间的差异</span></span>
<span class="line"><span class="token comment"># 默认比较“工作区”和“暂存区”之间的差异内容，显示发生更换的文件以及更改的详细信息</span></span>
<span class="line"><span class="token comment"># 查看未暂存的文件更新了哪些部分</span></span>
<span class="line"><span class="token function">git</span> <span class="token function">diff</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 查看“工作区”和“本地仓库”之间的差异</span></span>
<span class="line"><span class="token function">git</span> <span class="token function">diff</span> HEAD</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 查看“暂存区”和“本地仓库”之间的差异</span></span>
<span class="line"><span class="token function">git</span> <span class="token function">diff</span> <span class="token parameter variable">--cached</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 查看两个提交之间的差异</span></span>
<span class="line"><span class="token function">git</span> <span class="token function">diff</span> <span class="token operator">&lt;</span>分支名-id<span class="token operator">&gt;</span> <span class="token operator">&lt;</span>分支名-id<span class="token operator">&gt;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>回滚历史版本</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># `--hard`参数，“丢弃”工作区和暂存区的所有修改内容</span></span>
<span class="line"><span class="token function">git</span> reset <span class="token parameter variable">--hard</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># `--soft`参数，“保留”工作区和暂存区的所有修改内容</span></span>
<span class="line"><span class="token function">git</span> reset <span class="token parameter variable">--soft</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># `--mixed`参数，“保留”工作区“丢弃”暂存区的修改内容。</span></span>
<span class="line"><span class="token function">git</span> reset <span class="token parameter variable">--mixed</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>存储/存档</h3>
<blockquote>
<p><code>stash</code>操作可以把当前工作现场“储藏”起来，等以后回复现场后继续工作。</p>
</blockquote>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># save参数表示存储的信息，可以不写</span></span>
<span class="line"><span class="token function">git</span> stash <span class="token punctuation">[</span>save<span class="token punctuation">]</span> <span class="token string">"&lt;分支名&gt;"</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># `-u`参数表示把所有未跟踪的文件也一并存储</span></span>
<span class="line"><span class="token function">git</span> stash <span class="token parameter variable">-u</span> <span class="token string">"&lt;分支名&gt;"</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># `-a`参数表示把所有未跟踪的文件和忽略的文件一并存储</span></span>
<span class="line"><span class="token function">git</span> stash <span class="token parameter variable">-a</span> <span class="token string">"&lt;分支名&gt;"</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 查看所有stash</span></span>
<span class="line"><span class="token function">git</span> stash list</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 恢复最近一次stash</span></span>
<span class="line"><span class="token function">git</span> stash pop</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 恢复指定的stash</span></span>
<span class="line"><span class="token comment"># stash@{2}表示第三个stash</span></span>
<span class="line"><span class="token comment"># stash@{0}表示最近的stash</span></span>
<span class="line"><span class="token function">git</span> stash pop stash@<span class="token punctuation">{</span><span class="token number">2</span><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 重新接受最近一次stash</span></span>
<span class="line"><span class="token function">git</span> stash apply</span>
<span class="line"></span>
<span class="line"><span class="token comment"># `pop`和`apply`的区别是，`pop`会把`stash`内容删除，而`apply`不会。可以使用`git stash drop`来删除`stash`。</span></span>
<span class="line"><span class="token function">git</span> stash drop stash@<span class="token punctuation">{</span><span class="token number">2</span><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 删除所有stash</span></span>
<span class="line"><span class="token function">git</span> stash <span class="token function">clear</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>其他</h2>
<h3>帮助</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 全部帮助</span></span>
<span class="line"><span class="token function">git</span> <span class="token builtin class-name">help</span></span>
<span class="line"><span class="token comment"># 查看特定命令的帮助</span></span>
<span class="line"><span class="token function">git</span> <span class="token operator">&lt;</span>命令名<span class="token operator">&gt;</span> <span class="token parameter variable">--help</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>生成可供发布的压缩包</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 生成一个可供发布的压缩包</span></span>
<span class="line"><span class="token function">git</span> archive</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Git - 问题总结</title>
      <link>https://blog.magictable.ha.cn/software/Package-Git-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Git-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Git - 问题总结</source>
      <description>文章摘要： 摘要内容。 生成SSH公钥并绑定远程仓库托管平台 注释 Gitee 提供了基于 SSH 协议的 Git 服务，在使用 SSH 协议访问仓库仓库之前，需要先配置好账户 SSH 公钥。 通过命令ssh-keygen生成SSH Key。 注释 提示：中途会提示你是否要加密等功能，可直接回车确定即可。 输出如下： 读取SSH公钥文件 在/home/...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 12 Aug 2023 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>生成SSH公钥并绑定远程仓库托管平台</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>Gitee 提供了基于 SSH 协议的 Git 服务，在使用 SSH 协议访问仓库仓库之前，需要先配置好账户 SSH 公钥。</p>
</div>
<ol>
<li>通过命令<code>ssh-keygen</code>生成SSH Key。</li>
</ol>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># `-t`：key类型</span></span>
<span class="line"><span class="token comment"># `-C`：注释</span></span>
<span class="line">ssh-keygen <span class="token parameter variable">-t</span> ed25519 <span class="token parameter variable">-C</span> <span class="token string">"Gitee SSH Key"</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>提示：中途会提示你是否要加密等功能，可直接回车确定即可。</p>
<p>输出如下：</p>
</div>
<blockquote>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">Generating public/private ed25519 key pair.</span>
<span class="line">Enter file in which to save the key (/home/git/.ssh/id_ed25519):</span>
<span class="line">Enter passphrase (empty for no passphrase):</span>
<span class="line">Enter same passphrase again:</span>
<span class="line">Your identification has been saved in /home/git/.ssh/id_ed25519</span>
<span class="line">Your public key has been saved in /home/git/.ssh/id_ed25519.pub</span>
<span class="line">The key fingerprint is:</span>
<span class="line">SHA256:ohDd0OK5WG2dx4gST/j35HjvlJlGHvihyY+Msl6IC8I Gitee SSH Key</span>
<span class="line">The key's randomart image is:</span>
<span class="line">+--[ED25519 256]--+</span>
<span class="line">|    .o           |</span>
<span class="line">|   .+oo          |</span>
<span class="line">|  ...O.o +       |</span>
<span class="line">|   .= * = +.     |</span>
<span class="line">|  .o +..S*. +    |</span>
<span class="line">|. ...o o..+* *   |</span>
<span class="line">|.E. o . ..+.O    |</span>
<span class="line">| . . ... o =.    |</span>
<span class="line">|    ..oo. o.o    |</span>
<span class="line">+</span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></blockquote>
]]></content:encoded>
      <enclosure url="https://help.gitee.com/assets/images/sshkeys_list-bff1a324894abbdc3ab8f61c49bb63d5.png" type="image/png"/>
    </item>
    <item>
      <title>Package - Git</title>
      <link>https://blog.magictable.ha.cn/software/Package-Git.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Git.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Git</source>
      <description>文章摘要： Git是一个免费开源的分布式版本控制系统工具。 相关信息 版本库又称仓库（Repository），可以简单理解成一个目录，这个目录里面的所有文件都可以被Git管理起来，每个文件的修改、删除，Git都能追踪，以便任何时刻都可以追踪历史，或者在将来某个时刻可以“还原”。 派生可以理解为从一个目录完整复制再复制出来一份。 该文章参考了BiliBi...</description>
      <category>软件程序/软件包</category>
      <pubDate>Sat, 12 Aug 2023 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Git是一个免费开源的分布式版本控制系统工具。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<ul>
<li>版本库又称仓库（Repository），可以简单理解成一个目录，这个目录里面的所有文件都可以被Git管理起来，每个文件的修改、删除，Git都能追踪，以便任何时刻都可以追踪历史，或者在将来某个时刻可以“还原”。</li>
<li><code>派生</code>可以理解为从一个目录完整复制再复制出来一份。</li>
<li>该文章参考了BiliBili上GeekHour的教学视频，视频连接：<a href="https://www.bilibili.com/video/BV1HM411377j?p=1" target="_blank" rel="noopener noreferrer">https://www.bilibili.com/video/BV1HM411377j?p=1</a></li>
</ul>
</div>
<blockquote>
<p></p>
</blockquote>
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>Git是一个分布式版本控制系统。</li>
<li>允许用户跟踪文件的更改历史，协作开发，并管理多人同时对代码库的修改。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>版本控制</strong>：记录文件的修改历史，支持回滚到任意版本。</li>
<li><strong>分支管理</strong>：允许创建多个分支，可以在不同的分支上并行开发。</li>
<li><strong>合并与冲突解决</strong>：支持将不同分支的更改合并在一起，并帮助解决合并过程中出现的冲突。</li>
<li><strong>远程协作</strong>：支持多人协作，通过远程仓库共享代码。</li>
<li><strong>安全性</strong>：所有提交都会通过SHA1哈希算法加密，确保数据完整性。</li>
<li><strong>轻量级操作</strong>：大多数操作都是在本地执行，速度快。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>学习曲线</strong>：Git是一个强大的工具，但也可能有一定的学习难度。</li>
<li><strong>数据完整性</strong>：虽然Git很安全，但用户仍需定期执行数据完整性检查。</li>
<li><strong>合并冲突</strong>：在合并分支时可能会遇到冲突，需要手动解决。</li>
<li><strong>权限管理</strong>：在团队协作中，需要合理设置用户权限，以保护代码安全。</li>
<li><strong>大文件处理</strong>：Git不适合存储大文件，应使用Git LFS（Large File Storage）等工具处理。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>软件开发</strong>：适用于各种规模的软件开发项目，特别是开源项目和大型企业级项目。</li>
<li><strong>文档管理/多端多设备同步</strong>：除了代码，Git也适用于文档的版本控制。</li>
<li><strong>个人项目</strong>：即使是个人项目，Git也能提供良好的版本管理和备份功能。</li>
<li><strong>团队协作</strong>：在团队协作中，Git能够有效地管理多人同时对代码的修改。</li>
<li><strong>持续集成/持续部署（CI/CD）</strong>：Git可以与CI/CD工具结合，实现自动化测试和部署。</li>
<li><strong>远程工作</strong>：支持远程工作环境，团队成员可以在任何地点协作。</li>
</ul>
<h2>安装与卸载</h2>
<p>详细总结：<a href="/software/Package-Git-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html" target="_blank">Package-Git-安装与卸载</a></p>
<h2>终端命令</h2>
<p>详细总结：<a href="/software/Package-Git-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-git.html" target="_blank">Package-Git-终端命令-git</a></p>
<h2>配置文件</h2>
<p>详细总结：<a href=""></a></p>
<h2>热门推荐</h2>
<p>详细总结：<a href=""></a></p>
<h2>问题总结</h2>
<p>详细总结：<a href="/software/Package-Git-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93.html" target="_blank">Package-Git-问题总结</a></p>
<h2>Git的四个区域/工作模式</h2>
<ul>
<li><strong>工作区（Working Directory）</strong>：简单理解为自己创建的本地项目目录。<code>.git</code>所在的目录。实际操作的目录。</li>
<li><strong>暂存区（Stage/Index）</strong>：临时存储区域，用于保存即将提交到远程仓库的修改内容，存放在<code>.git/index</code>目录下，因此我们将缓存区称作索引，Git的版本库中存了很多东西，其中最重要的就是称为stage（或者叫index）的缓存区，还有Git自动创建的第一个分支master，以及指向master的一个指针叫HEAD。</li>
<li><strong>本地仓库（Local Repository）</strong>：文件在<code>.git/objects</code>目录下，包含了完整的项目历史记录和元数据，是Git存储代码和版本信息的主要位置。</li>
<li><strong>远程仓库（Remote）</strong>：托管在远程服务器上的仓库。</li>
</ul>
<h2>Git项目文件的五种状态</h2>
<ul>
<li><strong>未跟踪()</strong></li>
<li><strong>未修改()</strong></li>
<li><strong>已修改(modified)</strong>：修改了文件，但没有保存到“暂存区”。</li>
<li><strong>已暂存(staged)</strong>：把修改后的文件放到“暂存区”。</li>
<li><strong>已提交(committed)</strong>：把暂存区的文件提交到“本地仓库”。</li>
</ul>
<h2>基本概念</h2>
<ul>
<li><code>main</code>：默认主分支（可修改）。</li>
<li><code>origin</code>：默认远程仓库的名称（可修改）。</li>
<li><code>HEAD</code>：指向当前分支的指针。</li>
<li><code>HEAD^</code>：上一个版本。</li>
<li><code>HEAD~4</code>：上4个版本。</li>
</ul>
<h2>特殊文件</h2>
<ul>
<li><code>.git</code>：Git仓库的元数据和对象数据库。</li>
<li><code>.gitignore</code>：忽略文件，不需要提交到仓库的文件。</li>
<li><code>.gitattributes</code>：指定文件的属性，比如换行符。</li>
<li><code>.gitkeep</code>：使空目录被提交到仓库。</li>
<li><code>.gitmodules</code>：记录子模块的信息。</li>
<li><code>.gitconfig</code>：记录仓库的配置信息。</li>
</ul>
<h2>Git分支工作流程</h2>
<p>Git Flow是一种流程模型，用于在Git上管理软件开发项目。</p>
<ul>
<li>推荐分支工作流程模型方案：<a href="/software/Package-Git-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E5%88%86%E6%94%AF%E5%B7%A5%E4%BD%9C%E6%B5%81%E7%A8%8B%E6%A8%A1%E5%9E%8B.html" target="_blank">Package-Git-热门推荐-分支工作流程模型</a></li>
<li>个人独立开发流程：<a href="/software/Package-Git-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E4%B8%AA%E4%BA%BA%E7%8B%AC%E7%AB%8B%E5%BC%80%E5%8F%91%E6%B5%81%E7%A8%8B.html" target="_blank">Package-Git-热门推荐-个人独立开发流程</a></li>
<li>跨多团队协作流程：<a href="/software/Package-Git-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E8%B7%A8%E5%A4%9A%E5%9B%A2%E9%98%9F%E5%8D%8F%E4%BD%9C%E6%B5%81%E7%A8%8B.html" target="_blank">Package-Git-热门推荐-跨多团队协作流程</a></li>
<li>团队内部协作流程：<a href="/software/Package-Git-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E5%9B%A2%E9%98%9F%E5%86%85%E9%83%A8%E5%8D%8F%E4%BD%9C%E6%B5%81%E7%A8%8B.html" target="_blank">Package-Git-热门推荐-团队内部协作流程</a></li>
</ul>
<h2>分离头指针状态/匿名分支</h2>
<ul>
<li>分离头指针状态（detached HEAD state）是 Git 版本控制系统中的一种特殊状态，它发生在当你直接检出（checkout）一个特定的提交（commit）而不是一个分支名时。</li>
<li>在早期版本的 Git 中，这种状态有时被称为“匿名分支”或“匿名头指针”，因为它与分支类似，但没有名字。</li>
<li>分离头指针状态的设计初衷是为了允许开发者在不影响任何现有分支的情况下查看和测试历史提交。</li>
<li>这种状态在处理紧急修复或回溯到旧版本进行调试时非常有用。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>OS - Windows - 热门推荐 - 部署配置方案 - 个人桌面</title>
      <link>https://blog.magictable.ha.cn/software/OS-Windows-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E9%83%A8%E7%BD%B2%E9%85%8D%E7%BD%AE%E6%96%B9%E6%A1%88-%E4%B8%AA%E4%BA%BA%E6%A1%8C%E9%9D%A2.html</link>
      <guid>https://blog.magictable.ha.cn/software/OS-Windows-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E9%83%A8%E7%BD%B2%E9%85%8D%E7%BD%AE%E6%96%B9%E6%A1%88-%E4%B8%AA%E4%BA%BA%E6%A1%8C%E9%9D%A2.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">OS - Windows - 热门推荐 - 部署配置方案 - 个人桌面</source>
      <description>文章摘要： 以 Windows 10 专业版 版本的操作系统来规划部署方案，主要用于日常使用、办公学习、游戏娱乐用途。 磁盘分区方案 目录规划方案 定制Windows系统母盘 介绍：Windows操作系统建议进行一些精简、设置、优化、美化后才能在使用时更加适合自己。 使用NTLite软件将下载下来的Windows系统`母盘进行精简 系统使用前优化设置 ...</description>
      <category>软件程序/操作系统</category>
      <pubDate>Fri, 11 Aug 2023 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 以 Windows 10 专业版 版本的操作系统来规划部署方案，主要用于日常使用、办公学习、游戏娱乐用途。</p>
<!-- more -->
<h2>磁盘分区方案</h2>
<h2>目录规划方案</h2>
<h2>定制Windows系统母盘</h2>
<p>介绍：Windows操作系统建议进行一些精简、设置、优化、美化后才能在使用时更加适合自己。</p>
<p>使用<code>NTLite</code>软件将下载下来的<code>Windows</code>系统`母盘进行精简</p>
<h2>系统使用前优化设置</h2>
<h2>设置</h2>
<blockquote>
<p>Ctrl+Shift+F3，就会进入审核模式界面，跳过注册账户</p>
</blockquote>
<h2>优化</h2>
<ul>
<li>激活Windows操作系统</li>
<li>开机自启动软件</li>
</ul>
<p>取消路径长度限制</p>
<p>系统监视</p>
<h2>软件安装与配置优化</h2>
<h2>软件推荐和配置</h2>
<p>文档、音乐、图片、视频、浏览器、电子邮件、即时通讯、游戏、编程、艺术、电脑实用工具、电脑驱动、电脑美化</p>
<p><strong>日常生活办公软件</strong>
（网页浏览器）Microsoft Edge、FireFox
（即时通讯）QQ、微信、腾讯会议
（云存储）百度网盘
（办公套件）WPS
（电子邮件）<a href="https://www.thunderbird.net/zh-CN/" target="_blank" rel="noopener noreferrer">Thunderbird</a>
（笔记软件）Obsidian
（看文献）
（游戏平台）WeGame、Steam</p>
<p><strong>创作工具推荐</strong>
（版本控制软件）Git
（代码编辑器）Visual Studio Code
（数据库）
（服务器远程开发）
（绘画软件）Krita
（视频剪辑）
（三维建模）Blender
（三维数字雕刻建模）ZBrush</p>
<p><strong>必备工具软件</strong>
（解压缩软件）7-Zip
（音视频播放器软件）PotPlayer
（音乐管理软件）AIMP
（录音录屏直播软件）OBS
（截图软件）Snipaste
（翻译软件）百度翻译、DeepL</p>
<p><strong>实用工具软件</strong>
（系统安全软件）火绒安全软件
（Windows系统优化工具）Dism++
（软件卸载软件）Geek
（VPN翻墙软件）Watt Toolkit
（远程连接软件）ToDesk
（模拟器）雷电模拟器
（虚拟机）VMware Workstation
（格式转换软件）格式工厂
（本地文件搜索软件）Everything
（磁力、种子下载软件）qBittorrent
（网络下载软件）IDM
（数据修复及分区管理软件）DiskGenius
（U盘启动盘制作软件）Rufus</p>
<h2>电脑美化</h2>
<p>桌面美化</p>
<ul>
<li>静态动态壁纸、桌宠、音乐可视化、系统监视</li>
</ul>
<p>任务栏美化</p>
<ul>
<li>透明、玻璃、亚克力、调节颜色</li>
</ul>
<p>图标美化</p>
<p>磁贴美化</p>
<p>字体美化</p>
<p>美化工具软件</p>
<ul>
<li>雨滴Rainmeter（美化软件）</li>
<li>Wallpaper（动态壁纸软件）</li>
</ul>
<h2>磁盘分区方案和文件目录结构</h2>
<p>规划说明</p>
<ul>
<li>统一规范管理电脑上的文件是为了方便检索自己所需的数据，能够及时删除多余或过时的文件来减少电脑磁盘空间的占用，使其他人也能够快速看懂自己的文件。</li>
<li>下载数据保存位置的统一管理，如浏览器下载、社交软件聊天数据、网盘保存位置、游戏下载、软件默认使用数据保存位置并及时清理软件自动创建且不符合自己要求的目录等。
器下载路径</li>
<li>各类应用软件本体统一放在<code>C/Software/</code>目录下，并对软件进行适当的设置，将使用数据保存在<code>D/Software/</code>目录下</li>
<li>桌面不放任何应用软件和快捷方式图标，软件图标将放在开始菜单以此贴的快捷方式管理。</li>
</ul>
<p>硬盘分区方案</p>
<ul>
<li>C盘（系统分区及软件本体安装位置）</li>
<li>D盘（软件实用数据和用户个人数据）</li>
<li>E盘（游戏或大文件频繁读写）</li>
<li>外部扩展（重要的、庞大的静态数据）</li>
</ul>
<p>C盘规划：</p>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">- C盘用于存放系统和用户不常用的软件缓存等，软件本体也存放C盘，但软件使用数据不存在此处。</span>
<span class="line">- 考虑到很多软件都对C盘存储有很好的支持，因此将软件存放在C盘。</span>
<span class="line"></span>
<span class="line">C盘目录结构：</span>
<span class="line">|-- /Software #软件根目录</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>D盘规划：</p>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">- D盘用于存放用户使用软件的数据、个人项目、知识总结、资源汇总相关的数据文件。</span>
<span class="line">- 此处的D盘（数据）是动态或经常修改的，对于不常或不修改的文件，将单独存放在单独的硬盘中进行分区，或存储到外部本地NAS服务器或云端服务器。</span>
<span class="line"></span>
<span class="line">D盘目录结构：</span>
<span class="line"></span>
<span class="line">|-- Cache #待整理文件数据</span>
<span class="line">|-- Software #软件根目录</span>
<span class="line">|-- Project #个人项目数据文件</span>
<span class="line">|-- 归档库 #整理存放过时但有用的数据</span>
<span class="line">|-- 知识库 #个人对知识总结的数据</span>
<span class="line">|-- 资源库 #个人收集到的资源或数据</span>
<span class="line">    |-- 工程</span>
<span class="line">    |-- 视频</span>
<span class="line">    |-- 图片</span>
<span class="line">    |-- 文档</span>
<span class="line">    |-- 音频</span>
<span class="line">    |-- 应用程序软件</span>
<span class="line">    |-- 资源系列整理</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>E盘规划：</p>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">- E盘单独存放游戏本体数据，因为游戏下载下来后不会频繁增加或删除新游戏，但会频繁改写数据，因此需要单独存放。</span>
<span class="line">- 每款游戏将单独存放于文件夹内。</span>
<span class="line">- 对于Steam、Wegame等游戏平台，将采取软件内自定义设置安装位置到E盘根目录中，这将自动创建游戏目录。</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>外部扩展规划：</p>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">- 将重要的、庞大的静态数据存储在外部，减轻计算机存储压力和多重备份提高数据安全性。</span>
<span class="line">- 可将数据存储在移动硬盘、私人NSA服务器、网络云盘当中。</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h2>文件命名规则</h2>
<blockquote>
<p>前缀（大分类）_标题_文件属性（小分类）_日期（版本）&amp;备注</p>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>OS - Windows</title>
      <link>https://blog.magictable.ha.cn/software/OS-Windows.html</link>
      <guid>https://blog.magictable.ha.cn/software/OS-Windows.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">OS - Windows</source>
      <description>文章摘要： 讲解Windows10专业版操作系统的使用总结和技巧。 相关信息 外部相关文章 内部相关文章 提示 Windows操作系统删除软件不能直接手动删除软件的安装文件夹，因为会遗留垃圾文件。 简介 Windows10操作系统包含32位和64位版本。 简要说明 主要功能 开始菜单：Windows 10恢复了经典的开始菜单，并融合了Windows 8...</description>
      <category>软件程序/操作系统</category>
      <pubDate>Fri, 11 Aug 2023 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 讲解Windows10专业版操作系统的使用总结和技巧。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li></li>
</ul>
<p>内部相关文章</p>
<ul>
<li><a href="/software/OS-Windows-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E9%83%A8%E7%BD%B2%E9%85%8D%E7%BD%AE%E6%96%B9%E6%A1%88-%E4%B8%AA%E4%BA%BA%E6%A1%8C%E9%9D%A2.html" target="_blank">OS-Windows-热门推荐-部署配置方案-个人桌面</a></li>
</ul>
</div>
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<ul>
<li>Windows操作系统删除软件不能直接手动删除软件的安装文件夹，因为会遗留垃圾文件。</li>
</ul>
</div>
<h2>简介</h2>
<p>Windows10操作系统包含32位和64位版本。</p>
<p>简要说明</p>
<ul>
<li></li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>开始菜单</strong>：Windows 10恢复了经典的开始菜单，并融合了Windows 8的瓷砖界面。</li>
<li><strong>Windows Hello</strong>：提供了面部识别、指纹识别等生物识别登录方式。</li>
<li><strong>Cortana</strong>：集成人工智能助手Cortana，可以进行语音命令、搜索和信息提醒。</li>
<li><strong>多任务视图</strong>：改进了多任务处理，包括任务视图、多个虚拟桌面等功能。</li>
<li><strong>Edge浏览器</strong>：内置了新的Microsoft Edge浏览器，取代了旧版的Internet Explorer。</li>
<li><strong>兼容性</strong>：支持多种设备和应用程序，包括传统的桌面应用程序和Universal Windows Platform (UWP)应用。</li>
<li><strong>系统更新</strong>：定期推送系统更新和安全补丁，保持系统的最新状态。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>硬件要求</strong>：Windows 10对硬件有一定的要求，老旧电脑可能需要升级硬件才能流畅运行。</li>
<li><strong>驱动兼容性</strong>：部分硬件设备可能需要更新驱动程序以确保兼容性。</li>
<li><strong>隐私设置</strong>：Windows 10默认开启了一些数据收集功能，用户可能需要调整隐私设置以保护个人数据。</li>
<li><strong>更新问题</strong>：系统更新有时会带来兼容性问题或导致系统不稳定，用户应留意更新日志和社区反馈。</li>
<li><strong>许可证</strong>：确保使用正版的Windows 10，避免法律风险和功能限制。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>个人电脑</strong>：适用于家庭用户、学生和专业人士的个人电脑。</li>
<li><strong>企业环境</strong>：适用于企业内部的各种办公和生产力应用。</li>
<li><strong>教育机构</strong>：适用于学校和教育机构的教学和管理。</li>
<li><strong>游戏娱乐</strong>：支持DirectX 12，为游戏玩家提供更好的游戏体验。</li>
<li><strong>软件开发</strong>：为开发者提供强大的开发工具和环境，支持多种编程语言和框架。</li>
</ul>
<h2>下载方法</h2>
<p>官方网站下载</p>
<ul>
<li><a href="https://www.microsoft.com/zh-cn/software-download/windows10" target="_blank" rel="noopener noreferrer">Microsoft微软官网</a>，微软官方下载，下载速度中等，安全可靠。</li>
</ul>
<p>镜像站下载</p>
<ul>
<li><a href="https://hellowindows.cn/" target="_blank" rel="noopener noreferrer">HelloWindows</a> ，Windows系统各原版ISO镜像文件下载，提供下载工具和激活工具以及办公软件。</li>
<li><a href="https://msdn.itellyou.cn/" target="_blank" rel="noopener noreferrer">MSDN</a>，免费下载操作系统镜像的网站，下载速度块，安全可靠。</li>
<li><a href="https://www.sysmini.com/" target="_blank" rel="noopener noreferrer">极简系统</a>，提供下载精简和优化Windows系统的网站。</li>
<li><a href="https://www.xitongku.com/" target="_blank" rel="noopener noreferrer">xitongku</a>，提供纯净原版Windows系统下载和教学的网站。</li>
</ul>
<h2>文件管理</h2>
<h3>硬盘分区方案和文件目录结构</h3>
<p>统一规范管理电脑上的文件是为了方便检索自己所需的数据，能够及时删除多余或过时的文件来减少电脑磁盘空间的占用，使其他人也能够快速看懂自己的文件。</p>
<h3>文件命名规则</h3>
<p>前缀（大分类）_标题_文件属性（小分类）_日期（版本）&amp;备注</p>
<h2>系统设置与优化</h2>
<h2>电脑美化</h2>
<p>“致美化”的美化教程链接：<a href="https://zhutix.com/tag/10s/" target="_blank" rel="noopener noreferrer">https://zhutix.com/tag/10s/</a></p>
<h2>安装软件及部署规划</h2>
<h3>软件推荐</h3>
<h3>软件安装与配置</h3>
<p>文档、音乐、图片、视频、浏览器、电子邮件、即时通讯、游戏、编程、艺术、电脑实用工具、电脑驱动、电脑美化</p>
<h2>电脑操作教学</h2>
<p>程序安装、文件管理</p>
<p>网络管理</p>
<p>系统维护</p>
<p>电脑保养及数据维护
数据的加密和解密、同步数据、备份数据</p>
<p>字体</p>
<h2>命令行工具（CMD）</h2>
<p>链接本地文章</p>
<h2>系统默认管理工具</h2>
<ul>
<li>ISCSI发起程序</li>
<li>ODBC Data Sources（32位）</li>
<li>ODBC 数据源（64位）</li>
<li>windwos内存诊断</li>
<li>本地安全策略</li>
<li>磁盘清理</li>
<li>打印管理</li>
<li>服务</li>
<li>高级安全Windows Defender防火墙</li>
<li>恢复驱动器</li>
<li>计算机管理</li>
<li>任务计划程序</li>
<li>事件查看器</li>
<li>碎片整理和优化驱动器</li>
<li>系统配置</li>
<li>系统信息</li>
<li>性能监视器</li>
<li>注册表编辑器</li>
<li>资源监视器</li>
<li>组件服务</li>
</ul>
<h2>知识</h2>
<h3>环境变量</h3>
<ul>
<li>环境变量本质上都存储在Windows系统注册表里面</li>
<li>环境变量可以理解为影响程序运行的一些信息配置项，英文全称Environment Variables，简称env</li>
<li>环境变量不止能提供路径参数，还能提供数值、字符串等参数</li>
<li>环境变量主要是为了程序提供信息，程序可以读取一些环境变量的值，来决定程序的处理。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Miniconda - 终端命令</title>
      <link>https://blog.magictable.ha.cn/software/Package-Miniconda-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Miniconda-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Miniconda - 终端命令</source>
      <description>文章摘要： Miniconda是Anaconda的轻量化的版本，只保留了命令行交互界面和常用的一些python第三方库，剔除了其他工具包。 Miniconda用于管理多个python虚拟环境和python依赖包的工具。 使用conda可以创建不同版本的python环境，能够将python进行代码隔离互不影响。 注释 在进入一个虚拟环境时，conda不会...</description>
      <category>软件程序/软件包</category>
      <pubDate>Fri, 11 Aug 2023 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Miniconda是Anaconda的轻量化的版本，只保留了命令行交互界面和常用的一些python第三方库，剔除了其他工具包。</p>
<ul>
<li>Miniconda用于管理多个python虚拟环境和python依赖包的工具。</li>
<li>使用conda可以创建不同版本的python环境，能够将python进行代码隔离互不影响。</li>
</ul>
<!-- more -->
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>在进入一个虚拟环境时，conda不会自动退出该虚拟环境。</li>
<li>删除虚拟环境之前，建议先退出虚拟环境。</li>
<li>查询虚拟环境的目录中头部有 “<code>*</code>” 标志时，表示当前所在环境。</li>
<li>在管理员权限下创建虚拟环境将会在Miniconda安装目录下的envs文件夹下。在普通用户权限下创建虚拟环境将会在用户目录下创建一个“.conda/envs”目录。</li>
<li>conda与pip建议选择其中一个来管理python第三方库，以防止出现不同步导致的无法解决依赖问题。</li>
</ul>
</div>
<h2>查询conda版本</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment">#  全称</span></span>
<span class="line">conda <span class="token parameter variable">--version</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 简写</span></span>
<span class="line">conda <span class="token parameter variable">-V</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>升级conda</h2>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 方法1</span></span>
<span class="line">conda update conda</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 方法2</span></span>
<span class="line">conda update <span class="token parameter variable">-n</span> base <span class="token parameter variable">-cdefaults</span> conda</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>conda虚拟环境的操作</h2>
<h3>创建虚拟环境</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># '-n'命令是'--name'的缩写</span></span>
<span class="line">conda create <span class="token parameter variable">-n</span> <span class="token punctuation">[</span>环境名称<span class="token punctuation">]</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 可安装指定版本的python，默认是base环境下的python版本</span></span>
<span class="line">conda create <span class="token parameter variable">-n</span> <span class="token punctuation">[</span>环境名称<span class="token punctuation">]</span> <span class="token assign-left variable">python</span><span class="token operator">=</span><span class="token punctuation">[</span>版本号<span class="token punctuation">]</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 可指定虚拟环境创建的目录位置</span></span>
<span class="line">conda create <span class="token parameter variable">--prefix</span><span class="token operator">=</span><span class="token punctuation">[</span>目录路径+环境名称<span class="token punctuation">]</span> </span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>进入虚拟环境</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line">conda activate <span class="token punctuation">[</span>环境名称<span class="token punctuation">]</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>退出虚拟环境</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line">conda deactivate</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>删除虚拟环境</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line">conda <span class="token function">env</span> remove <span class="token parameter variable">-n</span> <span class="token punctuation">[</span>环境名称<span class="token punctuation">]</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>克隆虚拟环境</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line">conda create <span class="token parameter variable">-n</span> <span class="token punctuation">[</span>新环境名称<span class="token punctuation">]</span> <span class="token parameter variable">-clone</span> <span class="token punctuation">[</span>旧环境名称<span class="token punctuation">]</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>查询所有虚拟环境</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 方法1</span></span>
<span class="line">conda <span class="token function">env</span> list</span>
<span class="line"><span class="token comment"># 方法2</span></span>
<span class="line">conda info <span class="token parameter variable">-envs</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>使用conda来管理第三方库</h2>
<h3>查找并列出conda源中可用版本的第三方库</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line">conda search <span class="token punctuation">[</span>库名<span class="token punctuation">]</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>安装第三方库到当前虚拟环境</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line">conda <span class="token function">install</span> <span class="token punctuation">[</span>库名<span class="token punctuation">]</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 可以指定第三方库的版本</span></span>
<span class="line">conda <span class="token function">install</span> <span class="token punctuation">[</span>库名<span class="token punctuation">]</span><span class="token operator">=</span><span class="token punctuation">[</span>版本号<span class="token punctuation">]</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>更新第三方库</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line">conda update <span class="token punctuation">[</span>库名<span class="token punctuation">]</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>删除第三方库</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line">conda remove <span class="token punctuation">[</span>库名<span class="token punctuation">]</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>查询当前环境下已安装的第三方库</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line">conda list</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2>conda配置文件操作</h2>
<h3>生成<code>.condarc</code>配置文件</h3>
<ul>
<li>Linux操作系统</li>
</ul>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># Linux操作系统需要手动转跳到`/home/用户/`目录下，并创建一个`.condarc`的文件。</span></span>
<span class="line"><span class="token builtin class-name">cd</span> <span class="token string">"/home/用户/"</span></span>
<span class="line"><span class="token comment"># 打开文件，若没有该文件则自动创建</span></span>
<span class="line"><span class="token function">vim</span> .condarc</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul>
<li>windows操作系统</li>
</ul>
<div class="language-cmd line-numbers-mode" data-highlighter="prismjs" data-ext="cmd"><pre><code class="language-cmd"><span class="line"># windows操作系统不会自动创建该文件，因此需要手动输入命令来生成。</span>
<span class="line">conda cibfug --set show_channel_urls yes</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h3>手动修改配置文件讲解</h3>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line"># 是否在启动命令终端时自动进入`base`环境。</span>
<span class="line">auto_activate_base: false</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><p>*待完善_</p>
<h3>命令修改配置文件讲解</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 添加永久镜像源</span></span>
<span class="line">conda config <span class="token parameter variable">--add</span> channels <span class="token punctuation">[</span>镜像源网址<span class="token punctuation">]</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 查询已添加的镜像源</span></span>
<span class="line">conda config <span class="token parameter variable">--show</span> channels</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 删除指定的镜像源</span></span>
<span class="line">conda config <span class="token parameter variable">--remove</span> channels <span class="token punctuation">[</span>镜像源网址<span class="token punctuation">]</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 删除索引缓存</span></span>
<span class="line"><span class="token comment"># 在更改完镜像源后，需要清空缓存在本地的文件</span></span>
<span class="line">conda clean <span class="token parameter variable">-i</span></span>
<span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>常用镜像源站点URL</h2>
<p><strong>清华conda镜像源</strong></p>
<ul>
<li>清华镜像源官方说明网站：<a href="https://mirror.tuna.tsinghua.edu.cn/help/anaconda/" target="_blank" rel="noopener noreferrer">https://mirror.tuna.tsinghua.edu.cn/help/anaconda/</a></li>
<li>将以下文件添加到<code>.condarc</code>配置文件中即可。</li>
</ul>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">default_channels:</span>
<span class="line">  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main</span>
<span class="line">  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r</span>
<span class="line">  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2</span>
<span class="line">custom_channels:</span>
<span class="line">  conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud</span>
<span class="line">  msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud</span>
<span class="line">  bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud</span>
<span class="line">  menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud</span>
<span class="line">  pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud</span>
<span class="line">  pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud</span>
<span class="line">  simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud</span>
<span class="line">  deepmodeling: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Miniconda</title>
      <link>https://blog.magictable.ha.cn/software/Package-Miniconda.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Miniconda.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Miniconda</source>
      <description>文章摘要： Python环境与包管理工具。 简介 简要说明 Miniconda是一个轻量级的conda安装包，它包含了conda包管理器和Python。 Miniconda允许用户轻松管理多个独立的Python环境。 以及实现快速安装、运行和管理成千上万的Python包及其依赖。 主要功能 环境管理：创建、保存、加载和切换不同的Python环境，使得在...</description>
      <category>软件程序/软件包</category>
      <pubDate>Fri, 11 Aug 2023 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Python环境与包管理工具。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>Miniconda是一个轻量级的conda安装包，它包含了conda包管理器和Python。</li>
<li>Miniconda允许用户轻松管理多个独立的Python环境。</li>
<li>以及实现快速安装、运行和管理成千上万的Python包及其依赖。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>环境管理</strong>：创建、保存、加载和切换不同的Python环境，使得在同一台机器上可以运行不同版本的Python和库。</li>
<li><strong>包管理</strong>：通过conda命令行工具，可以方便地安装、更新和卸载Python包及其依赖。</li>
<li><strong>跨平台</strong>：Miniconda支持Windows、macOS和Linux，使得用户可以在不同的操作系统上使用相同的管理工具。</li>
<li><strong>最小化安装</strong>：Miniconda默认只安装conda和Python，其他包需要时再安装，从而保持安装包的轻量。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>环境隔离</strong>：在使用Miniconda时，需要注意环境的隔离，避免不同项目间的包冲突。</li>
<li><strong>包来源</strong>：尽量从官方或可信的conda仓库获取包，以确保软件包的安全性和可靠性。</li>
<li><strong>资源占用</strong>：虽然Miniconda本身是轻量级的，但随着安装的包增多，可能会占用较多的磁盘空间。</li>
<li><strong>更新维护</strong>：定期更新Miniconda和conda包，以获得最新的功能和安全性修复。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>数据科学和机器学习</strong>：Miniconda非常适合数据科学家和机器学习工程师，因为它可以轻松管理科学计算所需的大量Python库。</li>
<li><strong>多项目开发</strong>：对于需要同时开发多个项目，且每个项目依赖不同版本的Python或库的开发者来说，Miniconda提供了一个很好的解决方案。</li>
<li><strong>教学和学习</strong>：Miniconda便于创建隔离的Python环境，适合教学和学习时不同课程的隔离需求。</li>
<li><strong>资源受限的环境</strong>：由于Miniconda安装包体积较小，适合在资源受限的环境中安装和使用。</li>
<li><strong>持续集成/持续部署（CI/CD）</strong>：在CI/CD流程中，Miniconda可以帮助快速搭建一致的测试和部署环境。</li>
</ul>
<h2>安装与卸载</h2>
<p>详细总结：<a href="/software/Package-Miniconda-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%B8%E8%BD%BD.html" target="_blank">Package-Miniconda-安装与卸载</a></p>
<h2>终端命令</h2>
<p>详细总结：<a href="/software/Package-Miniconda-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4.html" target="_blank">Package-Miniconda-终端命令</a></p>
<h2>配置文件</h2>
<p>详细总结：<a href=""></a></p>
<h2>热门推荐</h2>
<p>详细总结：<a href=""></a></p>
<h2>问题总结</h2>
<p>详细总结：<a href=""></a></p>
<h2>部署规划</h2>
<h2>配置与优化</h2>
<h3>修改镜像源</h3>
<h3>修改虚拟环境默认创建路径</h3>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Markdown</title>
      <link>https://blog.magictable.ha.cn/software/Language-Markdown.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Markdown.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Markdown</source>
      <description>文章摘要： Markdown是一种轻量级标记语言，使用易读易写的纯文本格式编写文档。 简介 简要说明 Markdown是一种轻量级标记语言。 由John Gruber和Aaron Swartz创建于2004年。 它允许人们使用易读易写的纯文本格式编写文档，然后转换成结构化的HTML代码，用于网页内容展示。 主要功能 注意事项 Markdown编写的文档...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Thu, 10 Aug 2023 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Markdown是一种轻量级标记语言，使用易读易写的纯文本格式编写文档。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>Markdown是一种轻量级标记语言。</li>
<li>由John Gruber和Aaron Swartz创建于2004年。</li>
<li>它允许人们使用易读易写的纯文本格式编写文档，然后转换成结构化的HTML代码，用于网页内容展示。</li>
</ul>
<p>主要功能</p>
<ul>
<li></li>
</ul>
<p>注意事项</p>
<ul>
<li>Markdown编写的文档后缀为“.md”或“.markdown”。</li>
<li><strong>兼容性</strong>：不同的平台和编辑器对Markdown的支持程度可能不同，有时需要使用特定的扩展语法。</li>
<li><strong>安全性</strong>：插入HTML代码时要注意XSS攻击的风险。</li>
<li><strong>格式规范</strong>：Markdown的语法较为简单，但仍然需要遵循一定的格式规范，以保证文档的可读性。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>文档编写</strong>：适用于撰写博客、教程、说明书等。</li>
<li><strong>项目文档</strong>：用于在代码库中编写README文件、贡献指南等。</li>
<li><strong>笔记记录</strong>：适合快速记录笔记，并保持格式整洁。</li>
<li><strong>论坛和社区</strong>：在论坛和社区中发表格式化的帖子。</li>
<li><strong>电子邮件</strong>：编写格式化的电子邮件内容。</li>
<li><strong>网站内容管理</strong>：简化网站内容的编写和发布流程。</li>
</ul>
<h2>标题</h2>
<h3>使用=和-来标记一级和二级标题</h3>
<p><strong>格式</strong></p>
<blockquote>
<div class="language-markdown line-numbers-mode" data-highlighter="prismjs" data-ext="md"><pre><code class="language-markdown"><span class="line"><span class="token title important">一级标题</span>
<span class="line"><span class="token punctuation">=========</span></span></span>
<span class="line">二级标题</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></blockquote>
]]></content:encoded>
      <enclosure url="https://gd-hbimg.huaban.com/2d291e31a30711e30b3b5ba2c4ba54377f4ab834553d1-z9Mbqr &quot;角色设计草图&quot;" type="image/"/>
    </item>
    <item>
      <title>Language - Power Shell</title>
      <link>https://blog.magictable.ha.cn/software/Language-PowerShell.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-PowerShell.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Power Shell</source>
      <description>文章摘要： PowerShell是一种跨平台的自动化工具和配置管理框架。 简介 简要说明 PowerShell是一种跨平台的自动化工具和配置管理框架。 由微软开发，旨在提高系统管理员和开发人员的工作效率。 它包括一个命令行壳体和脚本语言，能够用来管理计算机环境和执行各种任务。 文件后缀是.bat，批处理脚本文件。 主要功能 命令行接口：提供了一个强大的...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Thu, 10 Aug 2023 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> PowerShell是一种跨平台的自动化工具和配置管理框架。</p>
<!-- more -->
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>PowerShell是一种跨平台的自动化工具和配置管理框架。</li>
<li>由微软开发，旨在提高系统管理员和开发人员的工作效率。</li>
<li>它包括一个命令行壳体和脚本语言，能够用来管理计算机环境和执行各种任务。</li>
<li>文件后缀是<code>.bat</code>，批处理脚本文件。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>命令行接口</strong>：提供了一个强大的命令行接口，用于执行命令和管理系统。</li>
<li><strong>脚本编写</strong>：支持编写脚本，自动化复杂的任务和流程。</li>
<li><strong>对象导向</strong>：以对象的形式处理数据，使得数据处理更加灵活和强大。</li>
<li><strong>模块化</strong>：可以通过模块来扩展其功能，模块是包含相关的函数、脚本、变量和类型的集合。</li>
<li><strong>远程处理</strong>：可以远程执行命令和管理远程计算机。</li>
<li><strong>任务自动化</strong>：支持定时任务和事件驱动的任务自动化。</li>
<li><strong>安全管理</strong>：提供了一系列的安全功能和策略，以保护系统免受恶意脚本的侵害。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>权限和安全性</strong>：运行PowerShell脚本可能需要管理员权限，不当的脚本可能会对系统造成安全风险。</li>
<li><strong>版本兼容性</strong>：PowerShell有多个版本（如PowerShell 5.1、PowerShell Core 6+），不同版本的命令和功能可能有所不同。</li>
<li><strong>学习曲线</strong>：对于初学者来说，PowerShell的学习曲线可能相对陡峭，因为它功能强大且复杂。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>系统管理</strong>：自动化系统配置、维护和监控任务。</li>
<li><strong>IT自动化</strong>：自动化IT操作任务，如用户账户管理、软件部署等。</li>
<li><strong>软件开发</strong>：用于编写自动化测试脚本、构建和部署应用程序。</li>
<li><strong>任务计划</strong>：创建定时任务，以自动化周期性的工作。</li>
<li><strong>日志分析</strong>：处理和分析日志文件，提取有用信息。</li>
<li><strong>网络管理</strong>：配置和管理网络设备，如路由器、交换机等。</li>
<li><strong>云服务管理</strong>：管理Azure、AWS等云服务资源。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Python 3 - API - logging</title>
      <link>https://blog.magictable.ha.cn/software/Language-Python3-API-logging.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Python3-API-logging.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Python 3 - API - logging</source>
      <description>文章摘要： Python的logging库是一个强大的日志记录工具，它可以帮助你记录应用程序的日志信息，以便于调试、监控和记录应用程序的运行情况。 简介 Python的logging库是一个强大的日志记录工具，它可以帮助你记录应用程序的日志信息，以便于调试、监控和记录应用程序的运行情况。 logging库提供了多种日志处理器，如控制台处理器、文件处理器...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Thu, 10 Aug 2023 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Python的logging库是一个强大的日志记录工具，它可以帮助你记录应用程序的日志信息，以便于调试、监控和记录应用程序的运行情况。</p>
<!-- more -->
<h2>简介</h2>
<ul>
<li>Python的logging库是一个强大的日志记录工具，它可以帮助你记录应用程序的日志信息，以便于调试、监控和记录应用程序的运行情况。</li>
<li>logging库提供了多种日志处理器，如控制台处理器、文件处理器等，可以根据需要选择使用。</li>
<li>使用logging库可以方便地设置日志级别、格式化日志消息、处理日志异常等。</li>
</ul>
<p>基本概念</p>
<ul>
<li>Logger：日志记录器，提供应用程序可以直接使用的接口。</li>
<li>Handler：处理器，将logger创建的日志记录发送到合适的目的地。</li>
<li>Formatter：格式化器，指定日志显示的格式。</li>
<li>Level：日志级别，定义了日志的严重程度，常见的日志级别有：DEBUG（调试）、INFO（信息）、WARNING（警告）、ERROR（错误）、CRITICAL（关键）。</li>
</ul>
<h2>实用方案</h2>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token comment"># 配置基础日志</span></span>
<span class="line">logger<span class="token punctuation">.</span>logging<span class="token punctuation">.</span>basicConfig<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token keyword">import</span> logging</span>
<span class="line"></span>
<span class="line"><span class="token keyword">def</span> <span class="token function">test_log</span><span class="token punctuation">(</span>logger_name<span class="token punctuation">,</span> log_file_path<span class="token punctuation">)</span><span class="token punctuation">:</span></span>
<span class="line">    <span class="token comment"># 创建一个logger，日志记录器</span></span>
<span class="line">    logger <span class="token operator">=</span> logging<span class="token punctuation">.</span>getLogger<span class="token punctuation">(</span>logger_name<span class="token punctuation">)</span></span>
<span class="line">    logger<span class="token punctuation">.</span>setLever<span class="token punctuation">(</span>logging<span class="token punctuation">.</span>DEBUG<span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment"># 创建一个handler，格式化器</span></span>
<span class="line">    fh <span class="token operator">=</span> loggging<span class="token punctuation">.</span>FileHandler<span class="token punctuation">(</span>log_file_path<span class="token punctuation">)</span></span>
<span class="line">    fh<span class="token punctuation">.</span>setLevel<span class="token punctuation">(</span>logging<span class="token punctuation">.</span>DEBUG<span class="token punctuation">)</span></span>
<span class="line">    formatter <span class="token operator">=</span> logging<span class="token punctuation">.</span>Formatter<span class="token punctuation">(</span></span>
<span class="line">        datefmt <span class="token operator">=</span> <span class="token string">"%Y-%m-%d %H:%M:%S"</span><span class="token punctuation">,</span></span>
<span class="line">        fmt <span class="token operator">=</span> <span class="token string">"%(filename)s"</span></span>
<span class="line">    <span class="token punctuation">)</span></span>
<span class="line">    fh<span class="token punctuation">.</span>setFormatter<span class="token punctuation">(</span>formatter<span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line">    <span class="token comment"># 给logger（日志记录器）添加handler（格式化器）</span></span>
<span class="line">    logger<span class="token punctuation">.</span>addHandler<span class="token punctuation">(</span>fh<span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line">    <span class="token keyword">return</span> logger</span>
<span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Language - Python 3 - API - 内置数据类型函数方法</title>
      <link>https://blog.magictable.ha.cn/software/Language-Python3-API-%E5%86%85%E7%BD%AE%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B%E5%87%BD%E6%95%B0%E6%96%B9%E6%B3%95.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Python3-API-%E5%86%85%E7%BD%AE%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B%E5%87%BD%E6%95%B0%E6%96%B9%E6%B3%95.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Python 3 - API - 内置数据类型函数方法</source>
      <description>文章摘要： 在编程中，数据类型是一个重要的概念，变量可以存储不同类型的数据，并且不同类型可以执行不同的操作，在其他编程中或者其他用途中会有不同的数据类型。 本文章将讲解python内置数据类型和对应操作的函数或方法。 注释 本文所说的数据类型使用方法，本质上也属于python内置函数，都能在python文件内找到源代码。 文本类型 文本类型共同的内置方...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Thu, 10 Aug 2023 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 在编程中，数据类型是一个重要的概念，变量可以存储不同类型的数据，并且不同类型可以执行不同的操作，在其他编程中或者其他用途中会有不同的数据类型。</p>
<ul>
<li>本文章将讲解python内置数据类型和对应操作的函数或方法。</li>
</ul>
<!-- more -->
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>本文所说的数据类型使用方法，本质上也属于python内置函数，都能在python文件内找到源代码。</li>
</ul>
</div>
<h2>文本类型</h2>
<p><strong>文本类型共同的内置方法</strong></p>
<ul>
<li>删除、查找（查询）、修改（替换）、提取、合并（拼接、连接）、拆分（切割）</li>
<li>其他操作（获取长度、重复输出、字符统计、字符转换、类型转换、比较、获取状态&lt;判断结果&gt;）</li>
</ul>
<h3>str（字符串）</h3>
<p><strong>介绍</strong></p>
<ul>
<li>字符串是一个容器，包含若干个字符并按照一定的顺序组织成一个整体。字符串支持索引操作。</li>
<li>字符串以“字符”为基本单位。</li>
</ul>
<h4>创建</h4>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token comment"># 使用单引号或双引号创建单行的字符串</span></span>
<span class="line">s <span class="token operator">=</span> <span class="token string">'hello world'</span></span>
<span class="line">s <span class="token operator">=</span> <span class="token string">"hello world"</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 使用三引号创建多行的字符串</span></span>
<span class="line">s <span class="token operator">=</span> <span class="token triple-quoted-string string">'''hello </span>
<span class="line">world'''</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4>删除</h4>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token comment"># del() 删除整个str字符串对象</span></span>
<span class="line"><span class="token keyword">del</span><span class="token punctuation">(</span><span class="token builtin">str</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h4>查找（查询）</h4>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token comment"># center() 返回居中的字符串</span></span>
<span class="line">center<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># count() 返回指定值在字符串中出现的次数</span></span>
<span class="line">count<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># rfind() 在字符串中搜索指定的值，并返回它被找到的最后位置</span></span>
<span class="line">rfind<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># rindex() 在字符串中搜索指定的值，并返回它被找到的最后位置</span></span>
<span class="line">rindex<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4>修改（替换）</h4>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token comment"># capitalize() 英文字符串中首字母转换为大写字母</span></span>
<span class="line">capitalize<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># casefold() 英文字符串中首字母转换为小写字母</span></span>
<span class="line">casefold<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># upper() 英文字符串中所有字母转换为大写字母</span></span>
<span class="line">upper<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># lower() 英文字符串中所有字母转换为小写字母</span></span>
<span class="line">lower<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># swapcase() 英文字符串中所有字母进行大小写反转</span></span>
<span class="line">swapcase<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># title() 英文字符串中每个单词的首字母转换为大写，其他为小写，以空格区分英文单词</span></span>
<span class="line">title<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># find() 在字符串中搜索指定的值并返回它被找到的位置</span></span>
<span class="line">find<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># format() 格式化字符串中的指定值</span></span>
<span class="line"><span class="token builtin">format</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># format_map() 格式化字符串中的指定值</span></span>
<span class="line">format_map<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># index() 在字符串中搜索指定的值并返回它被找到的位置</span></span>
<span class="line">index<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># join() 把可迭代对象的元素连接到字符串的末尾</span></span>
<span class="line">join<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># ljust() 返回字符串的左对齐版本</span></span>
<span class="line">ljust<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># rjust() 返回字符串的右对齐版本</span></span>
<span class="line">rjust<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># lstrip() 返回字符串的左修剪版本</span></span>
<span class="line">lstrip<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># maketrans() 返回在转换中使用的转换表</span></span>
<span class="line">maketrans<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># partition() 返回元组，其中的字符串被分为三部分</span></span>
<span class="line">partition<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># replace() 返回字符串，其中指定的值被替换为指定的值</span></span>
<span class="line">replace<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># rpartition() 返回元组，其中字符串分为三部分</span></span>
<span class="line">rpartition<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># rsplit() 在指定的分隔符处拆分字符串，并返回列表</span></span>
<span class="line">rsplit<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># rstrip() 返回字符串的右边修剪版本</span></span>
<span class="line">rstrip<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># split() 在指定的分隔符处拆分字符串，并返回列表</span></span>
<span class="line">split<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># splitlines() 在换行符处拆分字符串并返回列表</span></span>
<span class="line">splitlines<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># startswith() 如果以指定值开头的字符串，则返回`true`</span></span>
<span class="line">startswith<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># strip() 返回字符串的剪裁版本</span></span>
<span class="line">strip<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># translate() 返回被转换的字符串</span></span>
<span class="line">translate<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># zfill() 在字符串的开头填充指定数量的 0 值</span></span>
<span class="line">zfill<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># expandtabs() 设置字符串的`tab`尺寸</span></span>
<span class="line">expandtabs<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4>提取</h4>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h4>合并（拼接、连接）</h4>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h4>拆分（切割）</h4>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h4>获取长度</h4>
<h4>重复输出</h4>
<h4>字符统计</h4>
<h4>字符转换</h4>
<h4>格式转换（数据类型转换）</h4>
<h4>比较</h4>
<h4>获取状态（判断结果）</h4>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token comment"># encode() 返回字符串的编码版本</span></span>
<span class="line">encode<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># endswith() 如果字符串以指定值结尾，则返回`true`</span></span>
<span class="line">endswith<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># isalnum() 如果字符串中的所有字符都是字母数字，则返回`True`</span></span>
<span class="line">isalnum<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># isalpha() 如果字符串中的所有字符都在字母表中，则返回`True`</span></span>
<span class="line">isalpha<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># isdecimal() 如果字符串中的所有字符都是小数，则返回`True`</span></span>
<span class="line">isdecimal<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># isdigit() 如果字符串中的所有字符都是数字，则返回`True`</span></span>
<span class="line">isdigit<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># isidentifier() 如果字符串是标识符，则返回`True`</span></span>
<span class="line">isidentifier<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># islower() 如果字符串中的所有字符都是小写，则返回`True`</span></span>
<span class="line">islower<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># isnumeric() 如果字符串中的所有字符都是数，则返回`True`</span></span>
<span class="line">isnumeric<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># isprintable() 如果字符串中的所有字符都是可打印的，则返回`True`</span></span>
<span class="line">isprintable<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># isspace() 如果字符串中的所有字符都是空白字符，则返回`True`</span></span>
<span class="line">isspace<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># istitle() 如果字符串遵循标题规则，则返回`True`</span></span>
<span class="line">istitle<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># isupper() 如果字符串中的所有字符都是大写，则返回`True`</span></span>
<span class="line">isupper<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>数值类型</h2>
<h2><strong>数值类型共同的内置方法</strong></h2>
<h3>int（整数）</h3>
<h2><strong>介绍</strong></h2>
<h3>float（浮点数）</h3>
<h2><strong>介绍</strong></h2>
<h3>complex（复数）</h3>
<h2><strong>介绍</strong></h2>
<h2>序列类型</h2>
<p><strong>序列类型共同的内置方法</strong></p>
<ul>
<li>增加、删除、查找、修改、合并、转换为列表</li>
</ul>
<h3>list（列表）</h3>
<p>介绍：</p>
<ul>
<li>列表数据类型</li>
</ul>
<p><strong>创建</strong></p>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p><strong>增加</strong></p>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token comment"># append() 将x追加到列表末尾，等同于（s[len(s):len(s)]=[x]）,但不允许使用下标追加</span></span>
<span class="line">s<span class="token punctuation">.</span>append<span class="token punctuation">(</span>x<span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># insert() 将x插入到下标i处，等同于（s[i:i] = [x]）</span></span>
<span class="line">s<span class="token punctuation">.</span>insert<span class="token punctuation">(</span>i<span class="token punctuation">,</span>x<span class="token punctuation">)</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>删除</strong></p>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token comment"># del() 删除整个对象s</span></span>
<span class="line"><span class="token keyword">del</span><span class="token punctuation">(</span>s<span class="token punctuation">)</span></span>
<span class="line"><span class="token comment"># del s[i] 删除下标为i的元素</span></span>
<span class="line"><span class="token keyword">del</span> s<span class="token punctuation">[</span>i<span class="token punctuation">]</span></span>
<span class="line"><span class="token comment"># del s[i: j] 删除切片范围内的元素</span></span>
<span class="line"><span class="token keyword">del</span> s<span class="token punctuation">[</span>i<span class="token punctuation">:</span> j<span class="token punctuation">]</span></span>
<span class="line"><span class="token comment"># del s[i: j: k] 删除切片范围内的元素，但列表依旧存在</span></span>
<span class="line"><span class="token keyword">del</span> s<span class="token punctuation">[</span>i<span class="token punctuation">:</span> j<span class="token punctuation">:</span> k<span class="token punctuation">]</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># clear() 删除所有元素，但列表依旧存在</span></span>
<span class="line">s<span class="token punctuation">.</span>clear<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># remove() 删除列表s中的x元素，若有多个相同元素则只删除最左边第一个与x相同的元素</span></span>
<span class="line">s<span class="token punctuation">.</span>remove<span class="token punctuation">(</span>x<span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># pop() 提取下标是i的元素，并将该元素从列表s中删除。配合创建新变量使用</span></span>
<span class="line">s<span class="token punctuation">.</span>pop<span class="token punctuation">(</span><span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>查找</strong></p>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token comment"># index() x在s中首次出现项的索引号（索引号在i或之后且在j之前）</span></span>
<span class="line">s<span class="token punctuation">.</span>index<span class="token punctuation">(</span>x<span class="token punctuation">[</span> <span class="token punctuation">,</span>i<span class="token punctuation">[</span> <span class="token punctuation">,</span>j<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>修改</strong></p>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token comment"># s[i] = x 将下标为i的元素替换为x</span></span>
<span class="line">s<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">=</span> x</span>
<span class="line"><span class="token comment"># s[i: j] = x 将切片范围内的元素替换为t</span></span>
<span class="line">s<span class="token punctuation">[</span>i<span class="token punctuation">:</span> j<span class="token punctuation">]</span> <span class="token operator">=</span> x</span>
<span class="line"><span class="token comment"># s[i: j: k] = x 将切片范围内的元素替换为t的元素</span></span>
<span class="line">s<span class="token punctuation">[</span>i<span class="token punctuation">:</span> j<span class="token punctuation">:</span> k<span class="token punctuation">]</span> <span class="token operator">=</span> x</span>
<span class="line"></span>
<span class="line"><span class="token comment"># reverse() 将列表s中的元素进行反向排序，颠倒列表的顺序</span></span>
<span class="line">s<span class="token punctuation">.</span>reverse<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># sort() 对列表进行排序</span></span>
<span class="line">sort<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>合并</strong></p>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token comment"># s* = n  把s的内容重复n次，等同于（list = list * n）</span></span>
<span class="line">s<span class="token operator">*</span> <span class="token operator">=</span> n</span>
<span class="line"></span>
<span class="line"><span class="token comment"># extend() 将列表元素（或任何可迭代的元素）添加到当前列表的末尾</span></span>
<span class="line"><span class="token comment"># 在列表s与t合并，等同于（s+=t）（s[len(s):len(s)]=t）</span></span>
<span class="line">s<span class="token punctuation">.</span>extend<span class="token punctuation">(</span>t<span class="token punctuation">)</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>其他函数</strong></p>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token comment"># list(s) 将其他序列类型转换成列表类型</span></span>
<span class="line"><span class="token builtin">list</span><span class="token punctuation">(</span>s<span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># copy() 返回列表的副本</span></span>
<span class="line">copy<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># count() 返回具有指定值的元素数量</span></span>
<span class="line">count<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>tuple（元组）</h3>
<p>介绍：</p>
<ul>
<li>元组数据类型</li>
</ul>
<p><strong>创建</strong></p>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p><strong>创建</strong></p>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token comment"># 创建空元组，需要在括号内加入逗号来区分函数</span></span>
<span class="line">name <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">,</span> <span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 元组中的元素支持多种数据类型</span></span>
<span class="line">name <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> “aaa”<span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">{</span>a<span class="token punctuation">:</span>b<span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> “ccc”<span class="token punctuation">)</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>查找</strong></p>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token comment"># 使用指定下标切片输出显示对应的元素。</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p><strong>删除</strong></p>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token comment"># del() 元组不能更改元素，但可以删除整个元组。</span></span>
<span class="line"><span class="token keyword">del</span><span class="token punctuation">(</span>s<span class="token punctuation">)</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>合并</strong></p>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token comment"># 使用加号`+`进行合并元组。</span></span>
<span class="line">t3 <span class="token operator">=</span> t1 <span class="token operator">+</span> t2</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>其他函数</strong></p>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token comment"># tuple() 将列表转化成元组类型</span></span>
<span class="line"><span class="token builtin">tuple</span><span class="token punctuation">(</span>s<span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># count() 返回元组中指定值出现的次数</span></span>
<span class="line">count<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># index() 在元组中搜索指定的值并返回它被找到的位置</span></span>
<span class="line">index<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>映射类型</h2>
<h3>dict（字典）</h3>
<p>介绍：字典数据类型</p>
<p><strong>创建</strong></p>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p><strong>增加</strong></p>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token comment"># D[k]=d 追加，通过赋值，给已创建的字典追加一个新的 k : d 的键值对</span></span>
<span class="line">D<span class="token punctuation">[</span>k<span class="token punctuation">]</span><span class="token operator">=</span>d</span>
<span class="line"></span>
<span class="line"><span class="token comment"># setdefault() 返回指定键的值，如果该键不存在，则插入具有指定值的键</span></span>
<span class="line">D<span class="token punctuation">.</span>setdefault<span class="token punctuation">(</span>k<span class="token punctuation">[</span><span class="token punctuation">,</span>d<span class="token punctuation">]</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>删除</strong></p>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token comment"># del() </span></span>
<span class="line"><span class="token comment"># 删除k键和对应的值</span></span>
<span class="line"><span class="token keyword">del</span><span class="token punctuation">(</span>D<span class="token punctuation">[</span>k<span class="token punctuation">]</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># pop() 删除拥有指定键的元素</span></span>
<span class="line"><span class="token comment"># 移除K键，并赋值给name变量</span></span>
<span class="line">name <span class="token operator">=</span> D<span class="token punctuation">.</span>pop<span class="token punctuation">(</span>k<span class="token punctuation">[</span><span class="token punctuation">,</span>d<span class="token punctuation">]</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># popitem() 删除最后插入的键值对</span></span>
<span class="line"><span class="token comment"># 随机移除一个键值对，并赋值给name变量，并且类型自动变成元组类型</span></span>
<span class="line">name <span class="token operator">=</span> D<span class="token punctuation">.</span>popitem<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># clear() 删除字典中的所有元素</span></span>
<span class="line"><span class="token comment"># 清空字典中的全部键值对，但字典依旧存在</span></span>
<span class="line">D<span class="token punctuation">.</span>clear<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>查找</strong></p>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token comment"># D[k] 查找，通过键来输出值</span></span>
<span class="line">D<span class="token punctuation">[</span>k<span class="token punctuation">]</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># get() 返回指定键的值</span></span>
<span class="line"><span class="token comment"># 通过键来输出值，若值不存在，则返回空值</span></span>
<span class="line">D<span class="token punctuation">.</span>get<span class="token punctuation">(</span>k<span class="token punctuation">)</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>修改</strong></p>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token comment"># D[k]=d 修改，通过赋值，给一个已经存在的键一个新值</span></span>
<span class="line">D<span class="token punctuation">[</span>k<span class="token punctuation">]</span><span class="token operator">=</span>d</span>
<span class="line"></span>
<span class="line"><span class="token comment"># update() 用指定的键值对字典进行更新</span></span>
<span class="line"><span class="token comment"># 使用other字典中的键值对，覆盖原来的，若没有，则新建</span></span>
<span class="line">D<span class="token punctuation">.</span>update<span class="token punctuation">(</span><span class="token punctuation">[</span>other<span class="token punctuation">]</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>遍历</strong></p>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token comment"># items() 返回包含每个键值对的元组的列表</span></span>
<span class="line"><span class="token comment"># 遍历所有键值对，依次以元组类型返回键值对。建议配合for遍历循环使用</span></span>
<span class="line">D<span class="token punctuation">.</span>items<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># key() 返回包含字典键的列表</span></span>
<span class="line"><span class="token comment"># 遍历所有键，依次返回键值对的键。建议配合for遍历循环使用</span></span>
<span class="line">D<span class="token punctuation">.</span>key<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># values() 返回字典中所有值的列表</span></span>
<span class="line"><span class="token comment"># 遍历所有值，依次返回键值对的值。建议配合for遍历循环使用</span></span>
<span class="line">D<span class="token punctuation">.</span>values<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>其他函数</strong></p>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token comment"># copy() 返回字典的副本</span></span>
<span class="line">copy<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># fromkeys() 返回拥有指定键和值的字典</span></span>
<span class="line">fromkeys<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>集合类型</h2>
<h3>set（集合）</h3>
<p>介绍：集合数据类型</p>
<p><strong>创建</strong></p>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token comment"># 使用花括号内以逗号分隔元素的方式</span></span>
<span class="line">set_name <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token string">'jack'</span><span class="token punctuation">,</span> <span class="token string">'sjoerd'</span><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 使用集合推导式</span></span>
<span class="line">set_name <span class="token operator">=</span> <span class="token punctuation">{</span>c <span class="token keyword">for</span> c <span class="token keyword">in</span> <span class="token string">'abracadabra'</span> <span class="token keyword">if</span> c <span class="token keyword">not</span> <span class="token keyword">in</span> <span class="token string">'abc'</span><span class="token punctuation">}</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 使用类型构造器</span></span>
<span class="line">set_name <span class="token operator">=</span> <span class="token builtin">set</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token builtin">set</span><span class="token punctuation">(</span><span class="token string">'foobar'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token builtin">set</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token string">'a'</span><span class="token punctuation">,</span> <span class="token string">'b'</span><span class="token punctuation">,</span> <span class="token string">'foo'</span><span class="token punctuation">]</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>增加</strong></p>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token comment"># add() 向集合添加元素</span></span>
<span class="line">add<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>删除</strong></p>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token comment"># clear() 删除集合中的所有元素</span></span>
<span class="line">clear<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># pop() 从集合中删除一个元素</span></span>
<span class="line">pop<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># discard() 删除指定项目</span></span>
<span class="line">discard<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># remove() 删除指定元素</span></span>
<span class="line">remove<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># difference_update() 删除此集合中也包含在另一个指定集合中的项目</span></span>
<span class="line">difference_update<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># intersection_update() 删除此集合中不存在于其他指定集合中的项目</span></span>
<span class="line">intersection_update<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>查找</strong></p>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p><strong>修改</strong></p>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p><strong>合并</strong></p>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p><strong>其他函数</strong></p>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token comment"># copy() 返回集合的副本</span></span>
<span class="line">copy<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># difference() 返回包含两个或更多集合之间差异的集合</span></span>
<span class="line">difference<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># intersection() 返回为两个其他集合的交集的集合</span></span>
<span class="line">intersection<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># isdisjoint() 返回两个集合是否有交集的集合</span></span>
<span class="line">isdisjoint<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># issubset() 返回另一个集合是否包含此集合</span></span>
<span class="line">issubset<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># issuperset() 返回此集合是否包含另一个集合</span></span>
<span class="line">issuperset<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># symmetric_difference() 返回具有两组集合的对称差集的集合</span></span>
<span class="line">symmetric_difference<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># symmetric_difference_update() 插入此集合和另一个集合的对称差集</span></span>
<span class="line">symmetric_difference_update<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># union() 返回包含集合并集的集合</span></span>
<span class="line">union<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># update() 用此集合和其他集合的并集来更新集合</span></span>
<span class="line">update<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>迭代器类型</h2>
<p>待完善</p>
<h2>二进制类型</h2>
<p>待完善</p>
<h2>上下文管理器类型</h2>
<p>待完善</p>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Python 3 - 关键字</title>
      <link>https://blog.magictable.ha.cn/software/Language-Python3-%E5%85%B3%E9%94%AE%E5%AD%97.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Python3-%E5%85%B3%E9%94%AE%E5%AD%97.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Python 3 - 关键字</source>
      <description>文章摘要： 关键字是Python编程语言中的语法规则语句。（关键字，即预定义的、保留的标识符，保留字） 共有35个保留关键字。 关键字</description>
      <category>软件程序/程序语言</category>
      <pubDate>Thu, 10 Aug 2023 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 关键字是Python编程语言中的语法规则语句。（关键字，即预定义的、保留的标识符，保留字）</p>
<ul>
<li>共有35个保留关键字。</li>
</ul>
<!-- more -->
<h2>关键字</h2>
<table>
<thead>
<tr>
<th style="text-align:center">序号</th>
<th style="text-align:left">关键字</th>
<th style="text-align:left">介绍</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">01</td>
<td style="text-align:left">True</td>
<td style="text-align:left">是</td>
</tr>
<tr>
<td style="text-align:center">02</td>
<td style="text-align:left">False</td>
<td style="text-align:left">否</td>
</tr>
<tr>
<td style="text-align:center">03</td>
<td style="text-align:left">None</td>
<td style="text-align:left">空值</td>
</tr>
<tr>
<td style="text-align:center">04</td>
<td style="text-align:left">and</td>
<td style="text-align:left">逻辑运算符，与/且</td>
</tr>
<tr>
<td style="text-align:center">05</td>
<td style="text-align:left">as</td>
<td style="text-align:left">赋值新变量名</td>
</tr>
<tr>
<td style="text-align:center">06</td>
<td style="text-align:left">assert</td>
<td style="text-align:left">用于判断变量或条件表达式的结果</td>
</tr>
<tr>
<td style="text-align:center">07</td>
<td style="text-align:left">async</td>
<td style="text-align:left">协程定义语句，协程函数定义</td>
</tr>
<tr>
<td style="text-align:center">08</td>
<td style="text-align:left">await</td>
<td style="text-align:left">协程定义语句，等待子函数执行完成</td>
</tr>
<tr>
<td style="text-align:center">09</td>
<td style="text-align:left">break</td>
<td style="text-align:left">跳出整个循环函数</td>
</tr>
<tr>
<td style="text-align:center">10</td>
<td style="text-align:left">class</td>
<td style="text-align:left">用于定义类的方法</td>
</tr>
<tr>
<td style="text-align:center">11</td>
<td style="text-align:left">continue</td>
<td style="text-align:left">跳出本次循环的函数</td>
</tr>
<tr>
<td style="text-align:center">12</td>
<td style="text-align:left">def</td>
<td style="text-align:left">定义函数的方法</td>
</tr>
<tr>
<td style="text-align:center">13</td>
<td style="text-align:left">del</td>
<td style="text-align:left">删除变量或者序列值的函数</td>
</tr>
<tr>
<td style="text-align:center">14</td>
<td style="text-align:left">elif</td>
<td style="text-align:left">条件分支语句</td>
</tr>
<tr>
<td style="text-align:center">15</td>
<td style="text-align:left">else</td>
<td style="text-align:left">条件分支语句</td>
</tr>
<tr>
<td style="text-align:center">16</td>
<td style="text-align:left">except</td>
<td style="text-align:left">异常处理语句</td>
</tr>
<tr>
<td style="text-align:center">17</td>
<td style="text-align:left">finally</td>
<td style="text-align:left">异常处理语句</td>
</tr>
<tr>
<td style="text-align:center">18</td>
<td style="text-align:left">for</td>
<td style="text-align:left">循环语句（遍历）</td>
</tr>
<tr>
<td style="text-align:center">19</td>
<td style="text-align:left">from</td>
<td style="text-align:left">导入模块语句</td>
</tr>
<tr>
<td style="text-align:center">20</td>
<td style="text-align:left">global</td>
<td style="text-align:left">声明变量全局范围</td>
</tr>
<tr>
<td style="text-align:center">21</td>
<td style="text-align:left">if</td>
<td style="text-align:left">条件分支语句</td>
</tr>
<tr>
<td style="text-align:center">22</td>
<td style="text-align:left">import</td>
<td style="text-align:left">导入模块、包、库</td>
</tr>
<tr>
<td style="text-align:center">23</td>
<td style="text-align:left">in</td>
<td style="text-align:left">判断对象是否在另一个序列中</td>
</tr>
<tr>
<td style="text-align:center">24</td>
<td style="text-align:left">is</td>
<td style="text-align:left">判断两个变量的值是否一致</td>
</tr>
<tr>
<td style="text-align:center">25</td>
<td style="text-align:left">lambda</td>
<td style="text-align:left">匿名函数</td>
</tr>
<tr>
<td style="text-align:center">26</td>
<td style="text-align:left">nonlocal</td>
<td style="text-align:left">声明变量局部范围</td>
</tr>
<tr>
<td style="text-align:center">27</td>
<td style="text-align:left">not</td>
<td style="text-align:left">逻辑运算符，非</td>
</tr>
<tr>
<td style="text-align:center">28</td>
<td style="text-align:left">or</td>
<td style="text-align:left">逻辑运算符，或</td>
</tr>
<tr>
<td style="text-align:center">29</td>
<td style="text-align:left">pass</td>
<td style="text-align:left">占位符</td>
</tr>
<tr>
<td style="text-align:center">30</td>
<td style="text-align:left">raise</td>
<td style="text-align:left">抛出异常语句</td>
</tr>
<tr>
<td style="text-align:center">31</td>
<td style="text-align:left">retturn</td>
<td style="text-align:left">将返回值给后续的代码</td>
</tr>
<tr>
<td style="text-align:center">32</td>
<td style="text-align:left">try</td>
<td style="text-align:left">异常处理语句</td>
</tr>
<tr>
<td style="text-align:center">33</td>
<td style="text-align:left">while</td>
<td style="text-align:left">循环语句</td>
</tr>
<tr>
<td style="text-align:center">34</td>
<td style="text-align:left">with</td>
<td style="text-align:left">上下文管理器，打开文件自动关闭功能</td>
</tr>
<tr>
<td style="text-align:center">35</td>
<td style="text-align:left">yield</td>
<td style="text-align:left">组合生成器</td>
</tr>
</tbody>
</table>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Python 3 - 内置函数</title>
      <link>https://blog.magictable.ha.cn/software/Language-Python3-%E5%86%85%E7%BD%AE%E5%87%BD%E6%95%B0.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Python3-%E5%86%85%E7%BD%AE%E5%87%BD%E6%95%B0.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Python 3 - 内置函数</source>
      <description>文章摘要： 内置函数是python解释器在编写代码时自动导入的一些功能代码模块（即函数或方法），无需导入即可直接使用，默认导入到代码中的API。 共有69个内置函数。 总览 整数类型相关 序列类型 abs() 返回数的绝对值 all() 如果可迭代对象中的所有项均为 true，则返回 True。 any() 如果可迭代对象中的任何项为 true，则返回...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Thu, 10 Aug 2023 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 内置函数是python解释器在编写代码时自动导入的一些功能代码模块（即函数或方法），无需导入即可直接使用，默认导入到代码中的API。</p>
<ul>
<li>共有69个内置函数。</li>
</ul>
<!-- more -->
<h2>总览</h2>
<table>
<thead>
<tr>
<th style="text-align:left"></th>
<th style="text-align:left"></th>
<th style="text-align:left"></th>
<th style="text-align:left"></th>
<th style="text-align:left"></th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">abs()</td>
<td style="text-align:left">delattr()</td>
<td style="text-align:left">hash()</td>
<td style="text-align:left">memoryview()</td>
<td style="text-align:left">set()</td>
</tr>
<tr>
<td style="text-align:left">all()</td>
<td style="text-align:left">dict()</td>
<td style="text-align:left">help()</td>
<td style="text-align:left">min()</td>
<td style="text-align:left">setattr()</td>
</tr>
<tr>
<td style="text-align:left">any()</td>
<td style="text-align:left">dir()</td>
<td style="text-align:left">hex()</td>
<td style="text-align:left">next()</td>
<td style="text-align:left">slice()</td>
</tr>
<tr>
<td style="text-align:left">ascii()</td>
<td style="text-align:left">divmod()</td>
<td style="text-align:left">id()</td>
<td style="text-align:left">object()</td>
<td style="text-align:left">sorted()</td>
</tr>
<tr>
<td style="text-align:left">bin()</td>
<td style="text-align:left">enumerate()</td>
<td style="text-align:left">input()</td>
<td style="text-align:left">oct()</td>
<td style="text-align:left">staticmethod()</td>
</tr>
<tr>
<td style="text-align:left">bool()</td>
<td style="text-align:left">eval()</td>
<td style="text-align:left">int()</td>
<td style="text-align:left">open()</td>
<td style="text-align:left">str()</td>
</tr>
<tr>
<td style="text-align:left">breakpoint()</td>
<td style="text-align:left">exec()</td>
<td style="text-align:left">isinstance()</td>
<td style="text-align:left">ord()</td>
<td style="text-align:left">sum()</td>
</tr>
<tr>
<td style="text-align:left">bytearray()</td>
<td style="text-align:left">filter()</td>
<td style="text-align:left">issubclass()</td>
<td style="text-align:left">pow()</td>
<td style="text-align:left">super()</td>
</tr>
<tr>
<td style="text-align:left">bytes()</td>
<td style="text-align:left">float()</td>
<td style="text-align:left">iter()</td>
<td style="text-align:left">print()</td>
<td style="text-align:left">tuple()</td>
</tr>
<tr>
<td style="text-align:left">callable()</td>
<td style="text-align:left">format()</td>
<td style="text-align:left">len()</td>
<td style="text-align:left">property()</td>
<td style="text-align:left">type()</td>
</tr>
<tr>
<td style="text-align:left">chr()</td>
<td style="text-align:left">frozenset()</td>
<td style="text-align:left">list()</td>
<td style="text-align:left">range()</td>
<td style="text-align:left">vars()</td>
</tr>
<tr>
<td style="text-align:left">classmethod()</td>
<td style="text-align:left">getattr()</td>
<td style="text-align:left">locals()</td>
<td style="text-align:left">repr()</td>
<td style="text-align:left">zip()</td>
</tr>
<tr>
<td style="text-align:left">compile()</td>
<td style="text-align:left">globals()</td>
<td style="text-align:left">map()</td>
<td style="text-align:left">reversed()</td>
<td style="text-align:left">__import__()</td>
</tr>
<tr>
<td style="text-align:left">complex()</td>
<td style="text-align:left">hasattr()</td>
<td style="text-align:left">max()</td>
<td style="text-align:left">round()</td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
<p><strong>整数类型相关</strong></p>
<table>
<thead>
<tr>
<th style="text-align:left">内置函数名</th>
<th style="text-align:left">介绍</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">abs(x)</td>
<td style="text-align:left">将数值对象x转换成绝对值</td>
</tr>
<tr>
<td style="text-align:left">pow(x,y)</td>
<td style="text-align:left">输出x的y次方，求幂（指数）运算</td>
</tr>
<tr>
<td style="text-align:left">int(x)</td>
<td style="text-align:left">将x转换成整数</td>
</tr>
<tr>
<td style="text-align:left">float(x)</td>
<td style="text-align:left">将x转换成浮点数</td>
</tr>
<tr>
<td style="text-align:left">complex(re,im)</td>
<td style="text-align:left">输出一个带有实部re和虚部im的复数</td>
</tr>
<tr>
<td style="text-align:left">round(x[,n])</td>
<td style="text-align:left">x舍入到n位小数，半数值会舍入到偶数</td>
</tr>
</tbody>
</table>
<p><strong>序列类型</strong></p>
<table>
<thead>
<tr>
<th style="text-align:left">内置函数名</th>
<th style="text-align:left">介绍</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">len(s)</td>
<td style="text-align:left">获取对象s所拥有的元素个数</td>
</tr>
<tr>
<td style="text-align:left">min(s)</td>
<td style="text-align:left">获取对象s的最小的元素</td>
</tr>
<tr>
<td style="text-align:left">max(s)</td>
<td style="text-align:left">获取对象s的最大的元素</td>
</tr>
<tr>
<td style="text-align:left">s.count(s)</td>
<td style="text-align:left">获取x在对象s中出现的总次数</td>
</tr>
<tr>
<td style="text-align:left">s.index(x[,i[,j]])</td>
<td style="text-align:left">获取x在对象s首次出现的元素索引号（索引号在i到j区间之内）</td>
</tr>
<tr>
<td style="text-align:left">s.sort(key=None,reverse=False)</td>
<td style="text-align:left">排序，key的参数str.lower是全部字母小写，reverse是默认增序排序</td>
</tr>
<tr>
<td style="text-align:left">s1=s.copy()</td>
<td style="text-align:left">创建对象s的硬拷贝赋值给s1，等同于（s[:]）（创建重新赋值变量）</td>
</tr>
</tbody>
</table>
<h2>abs()</h2>
<blockquote>
<p>返回数的绝对值</p>
</blockquote>
<h2>all()</h2>
<blockquote>
<p>如果可迭代对象中的所有项均为 true，则返回 True。</p>
</blockquote>
<h2>any()</h2>
<blockquote>
<p>如果可迭代对象中的任何项为 true，则返回 True。</p>
</blockquote>
<h2>ascii()</h2>
<blockquote>
<p>返回对象的可读版本。用转义字符替换 none-ascii 字符。</p>
</blockquote>
<h2>bin()</h2>
<blockquote>
<p>返回数的二进制版本。</p>
</blockquote>
<h2>bool()</h2>
<blockquote>
<p>返回指定对象的布尔值。</p>
</blockquote>
<h2>breakpoint()</h2>
<p>==待完善==</p>
<h2>bytearray()</h2>
<blockquote>
<p>返回字节数组。</p>
</blockquote>
<h2>bytes()</h2>
<blockquote>
<p>返回字节对象。</p>
</blockquote>
<h2>callable()</h2>
<blockquote>
<p>如果指定的对象是可调用的，则返回 True，否则返回 False。</p>
</blockquote>
<h2>chr()</h2>
<blockquote>
<p>返回指定 Unicode 代码中的字符。</p>
</blockquote>
<h2>classmethod()</h2>
<blockquote>
<p>把方法转换为类方法。</p>
</blockquote>
<h2>compile()</h2>
<blockquote>
<p>把指定的源作为对象返回，准备执行。</p>
</blockquote>
<h2>complex()</h2>
<blockquote>
<p>返回复数。</p>
</blockquote>
<h2>delattr()</h2>
<blockquote>
<p>从指定的对象中删除指定的属性（属性或方法）。</p>
</blockquote>
<h2>dict()</h2>
<blockquote>
<p>返回字典（数组）。</p>
</blockquote>
<h2>dir()</h2>
<blockquote>
<p>返回指定对象的属性和方法的列表。</p>
</blockquote>
<h2>divmod()</h2>
<blockquote>
<p>当参数1除以参数2时，返回商和余数。</p>
</blockquote>
<h2>enumerate()</h2>
<blockquote>
<p>获取集合（例如元组）并将其作为枚举对象返回。</p>
</blockquote>
<h2>eval()</h2>
<blockquote>
<p>评估并执行表达式。</p>
</blockquote>
<h2>exec()</h2>
<blockquote>
<p>执行指定的代码（或对象）。</p>
</blockquote>
<h2>filter()</h2>
<blockquote>
<p>使用过滤器函数排除可迭代对象中的项目。</p>
</blockquote>
<h2>float()</h2>
<blockquote>
<p>返回浮点数。</p>
</blockquote>
<h2>format()</h2>
<blockquote>
<p>格式化指定值。</p>
</blockquote>
<h2>frozenset()</h2>
<blockquote>
<p>返回 frozenset 对象。</p>
</blockquote>
<h2>getattr()</h2>
<blockquote>
<p>返回指定属性的值（属性或方法）。</p>
</blockquote>
<h2>globals()</h2>
<blockquote>
<p>以字典返回当前全局符号表。</p>
</blockquote>
<h2>hasattr()</h2>
<blockquote>
<p>如果指定的对象拥有指定的属性（属性/方法），则返回 True。</p>
</blockquote>
<h2>hash()</h2>
<blockquote>
<p>返回指定对象的哈希值。</p>
</blockquote>
<h2>help()</h2>
<blockquote>
<p>执行内建的帮助系统。</p>
</blockquote>
<h2>hex()</h2>
<blockquote>
<p>把数字转换为十六进制值。</p>
</blockquote>
<h2>id()</h2>
<blockquote>
<p>返回对象的 id。</p>
</blockquote>
<h2>input()</h2>
<blockquote>
<p><strong>说明</strong>：允许用户输入。</p>
<p><strong>注意</strong>：</p>
<ul>
<li>在输入之前程序会停在那里。</li>
<li>此输入语句需要提前编写提示，否则用户不知道要输入什么。</li>
</ul>
</blockquote>
<h2>int()</h2>
<blockquote>
<p>返回整数。</p>
</blockquote>
<h2>isinstance()</h2>
<blockquote>
<p>如果指定的对象是指定对象的实例，则返回 True。</p>
</blockquote>
<h2>issubclass()</h2>
<blockquote>
<p>如果指定的类是指定对象的子类，则返回 True。</p>
</blockquote>
<h2>iter()</h2>
<blockquote>
<p>返回迭代器对象。</p>
</blockquote>
<h2>len()</h2>
<blockquote>
<p>返回对象的长度。</p>
</blockquote>
<h2>list()</h2>
<blockquote>
<p>返回列表。</p>
</blockquote>
<h2>locals()</h2>
<blockquote>
<p>返回当前本地符号表的更新字典。</p>
</blockquote>
<h2>map()</h2>
<h2>max()</h2>
<h2>memoryview()</h2>
<h2>min()</h2>
<h2>next()</h2>
<h2>object()</h2>
<h2>oct()</h2>
<h2>open()</h2>
<blockquote>
<p><strong>打开文件</strong></p>
</blockquote>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token builtin">open</span><span class="token punctuation">(</span><span class="token builtin">file</span><span class="token punctuation">,</span>mode<span class="token operator">=</span><span class="token string">' '</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token comment"># file参数是指定需要操作的文件名(可以指定文件路径)</span></span>
<span class="line"><span class="token comment"># mode参数是指定需要操作的方式</span></span>
<span class="line"><span class="token comment"># mode参数值:</span></span>
<span class="line"><span class="token comment"># 'r'   只读  以只读方式打开已经存在的文件</span></span>
<span class="line"><span class="token comment"># 'w'  只写  以可写方式打开文件，若指定文件不存在，则建立新文件</span></span>
<span class="line"><span class="token comment"># 'x'  新建  以可写方式建立一个新文件</span></span>
<span class="line"><span class="token comment"># 'a'  追加  以追加写入方式打开一个文件，若指定的文件不存在，则建立新文件，再追加写入</span></span>
<span class="line"><span class="token comment"># 'b'  二进制  二进制模式</span></span>
<span class="line"><span class="token comment"># 't'  文本  文本模式</span></span>
<span class="line"><span class="token comment"># '+'  读写  以读写方式打开一个文件</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><blockquote>
<p><strong>关闭文件</strong></p>
</blockquote>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token builtin">open</span><span class="token punctuation">.</span>close<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token comment"># close()方法可以关闭打开的文件</span></span>
<span class="line"><span class="token comment"># 如果文件不关闭会占电脑内存，无法保存到硬盘，导致断电后会数据丢失</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><blockquote>
<p><strong>写入文件</strong></p>
</blockquote>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token builtin">open</span><span class="token punctuation">.</span>write<span class="token punctuation">(</span>x<span class="token punctuation">)</span></span>
<span class="line"><span class="token comment"># write(x)是open内置函数中的方法之一</span></span>
<span class="line"><span class="token comment"># f代表以可写方式打开的文件对象</span></span>
<span class="line"><span class="token comment"># write()方法把x内容写入文件后，返回写入的字节数</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><blockquote>
<p><strong>读取文件</strong></p>
</blockquote>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token builtin">open</span><span class="token punctuation">.</span>read<span class="token punctuation">(</span>size<span class="token punctuation">)</span></span>
<span class="line"><span class="token comment"># size是可选参数，若指定读取字节数，则读取指定大小字节的内容，若没有指定，则读取全部内容</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><blockquote>
<p><strong>一次读取一行</strong></p>
</blockquote>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token builtin">open</span><span class="token punctuation">.</span>readline<span class="token punctuation">(</span>s<span class="token punctuation">)</span></span>
<span class="line"><span class="token comment"># s为可选参数，若设置指定大小的字节，则返回相应大小的字符串，若没有设定，则以行为单位返回一行字符串</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><blockquote>
<p><strong>以列表格式读取多行</strong></p>
</blockquote>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token builtin">open</span><span class="token punctuation">.</span>readlines<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token comment"># 把f文件中的所有文件变成以一行为一个元素，返回结果为一个列表</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><blockquote>
<p><strong>指定位置</strong></p>
</blockquote>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token builtin">open</span><span class="token punctuation">.</span>tell<span class="token punctuation">(</span>x<span class="token punctuation">)</span></span>
<span class="line"><span class="token comment"># x为文件中字节的下标</span></span>
<span class="line"><span class="token comment"># tell()方法返回当前文件可读的位置(字节数)</span></span>
<span class="line"></span>
<span class="line"><span class="token builtin">open</span><span class="token punctuation">.</span>seek<span class="token punctuation">(</span>offset<span class="token punctuation">[</span><span class="token punctuation">,</span>whence<span class="token punctuation">]</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token comment"># seek()方法从新指定将要读写的的当前位置</span></span>
<span class="line"><span class="token comment"># offset参数设置位置的偏移量的字节数</span></span>
<span class="line"><span class="token comment"># whence参数可选，确定文件起计位置。默认值为SEEK_SET或者0，代表从文件的开始位置+偏移量来确定当前位置</span></span>
<span class="line"><span class="token comment">#   - SEEK_CUR或者1，代表当前位置起计</span></span>
<span class="line"><span class="token comment">#   - SEEK_END或者2，代表从文件的结尾起计。   </span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><blockquote>
<p><strong>写入文件</strong></p>
</blockquote>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token builtin">open</span><span class="token punctuation">.</span>write<span class="token punctuation">(</span>s<span class="token punctuation">)</span></span>
<span class="line"><span class="token comment"># s参数是需要写入的字符串</span></span>
<span class="line"></span>
<span class="line"><span class="token builtin">open</span><span class="token punctuation">.</span>writelines<span class="token punctuation">(</span>s<span class="token punctuation">)</span></span>
<span class="line"><span class="token comment"># s参数是一组可迭代数据类型，如列表</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>ord()</h2>
<h2>pow()</h2>
<h2>print()</h2>
<blockquote>
<p><strong>说明</strong>：</p>
<ul>
<li>Python编程语言中用“print（）”内置函数进行输出内容。</li>
</ul>
</blockquote>
<blockquote>
<p>使用方法：</p>
<ul>
<li>输出字符串类型需要将其放在引号中间（单、双、三引号都可以）。</li>
<li>三引号可把编写代码分行编写，但依旧输出成一行。</li>
<li>此函数也可通过输出变量，通过变量输出不同的结果。</li>
<li>若使用逗号输出多个字符串，逗号实际输出时空格。</li>
<li>都为字符串时可以使用加号进行合并。</li>
</ul>
</blockquote>
<blockquote>
<p>参数：</p>
<ul>
<li>end=”内容”，可以输出在一行，并让下一个print()输出在同一行后面。</li>
<li>sep=”内容”，会以指定的字符来链接print中的内容。</li>
</ul>
</blockquote>
<h2>property()</h2>
<h2>range()</h2>
<h2>repr()</h2>
<h2>reversed()</h2>
<h2>round()</h2>
<h2>set()</h2>
<h2>setattr()</h2>
<h2>slice()</h2>
<h2>sorted()</h2>
<h2>staticmethod()</h2>
<h2>str()</h2>
<h2>sum()</h2>
<h2>super()</h2>
<h2>tuple()</h2>
<h2>type()</h2>
<h2>vars()</h2>
<h2>zip()</h2>
<h2>__import__()</h2>
<h2>博主提示</h2>
<p>暂无</p>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Python 3 - 热门推荐 - 代码风格</title>
      <link>https://blog.magictable.ha.cn/software/Language-Python3-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E4%BB%A3%E7%A0%81%E9%A3%8E%E6%A0%BC.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Python3-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E4%BB%A3%E7%A0%81%E9%A3%8E%E6%A0%BC.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Python 3 - 热门推荐 - 代码风格</source>
      <description>文章摘要： 大多数语言都能以不同的风格被编写（或更准确地说，被格式化），有些比其他的更具有可读性。 能让其他人轻松阅读你的代码总是一个好主意，采用一种好的编码风格对此有很大帮助。 PEP 8编码风格 对于Python，PEP 8 已经成为大多数项目所遵循的风格指南；它促进了一种非常易读且令人赏心悦目的编码风格。每个Python开发人员都应该在某个时候阅...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Thu, 10 Aug 2023 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 大多数语言都能以不同的风格被编写（或更准确地说，被格式化），有些比其他的更具有可读性。 能让其他人轻松阅读你的代码总是一个好主意，采用一种好的编码风格对此有很大帮助。</p>
<!-- more -->
<h2>PEP 8编码风格</h2>
<p>对于Python，PEP 8 已经成为大多数项目所遵循的风格指南；它促进了一种非常易读且令人赏心悦目的编码风格。每个Python开发人员都应该在某个时候阅读它；以下是为你提取的最重要的几个要点：</p>
<ul>
<li>如果你的代码旨在用于国际环境，请不要使用花哨的编码。Python 默认的 UTF-8 或者纯 ASCII 在任何情况下都能有最好的表现。</li>
<li>使用4个空格进行缩进。不要使用制表符。因为其他人设置的制表符并不一定是4个空格，若一个代码文件内的缩进不一致会导致Python无法正确运行代码。</li>
<li>换行。每行代码最好不超过79个字符，因为每行代码过长会不易于阅读代码，这有助于使用小型显示器的用户，并且可以在较大的显示器上并排放置多个代码文件。</li>
<li>使用空行分隔函数和类，以及函数内的较大的代码块，尽可能把注释放在单独一行。</li>
<li>在运算符前后和逗号后使用空格，但不能直接在括号内使用。如：a = f(1, 2) + g(3, 4)</li>
<li>以一致的规则为类和函数命名。每个单词首字母大写且不带空格来命名类。单词全部小写以下划线进行分隔来命名函数和变量。始终使用<code>self</code>来命名第一个方法参数。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Python 3 - 热门推荐 - 使用技巧</title>
      <link>https://blog.magictable.ha.cn/software/Language-Python3-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E4%BD%BF%E7%94%A8%E6%8A%80%E5%B7%A7.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Python3-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E4%BD%BF%E7%94%A8%E6%8A%80%E5%B7%A7.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Python 3 - 热门推荐 - 使用技巧</source>
      <description>文章摘要： 摘要内容。 使用有意义的变量名 一个好的变量名能够清晰地表达其含义，这有助于其他阅读你代码的人理解你的代码，也有助于你以后回顾你的代码。 遵循PEP 8编码风格编写代码 PEP 8是Python的官方编码风格指南，它提供了很多有用的建议，包括如何命名变量、函数和方法，以及如何组织和格式化代码。 使用列表推导式和字典推导式 列表推导式和字典推...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Thu, 10 Aug 2023 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 摘要内容。</p>
<!-- more -->
<h2>使用有意义的变量名</h2>
<p>一个好的变量名能够清晰地表达其含义，这有助于其他阅读你代码的人理解你的代码，也有助于你以后回顾你的代码。</p>
<h2>遵循PEP 8编码风格编写代码</h2>
<p>PEP 8是Python的官方编码风格指南，它提供了很多有用的建议，包括如何命名变量、函数和方法，以及如何组织和格式化代码。</p>
<h2>使用列表推导式和字典推导式</h2>
<p>列表推导式和字典推导式是Python中非常简洁和强大的工具，可以让你以一行代码完成原本需要多行代码才能完成的任务。</p>
<h2>使用生成器</h2>
<p>当你需要处理大量的数据，但又不想一次性将所有数据加载到内存中时，生成器是一个非常好的选择。生成器允许你按需生成数据，这可以节省内存并提高效率。</p>
<h2>使用异常处理</h2>
<p>在编写代码时，你应该尽可能地处理可能出现的异常。这有助于防止程序意外地崩溃，并且可以让你的代码更加健壮和可靠。</p>
<h2>使用with语句</h2>
<p>with语句可以确保文件在使用后被正确地关闭，这可以避免资源泄漏和其他问题。</p>
<h2>利用Python的内置函数和库</h2>
<p>Python有很多内置的函数和库，这些函数和库经过了优化，并且已经过广泛的使用测试。尽可能地利用这些函数和库，这可以让你的代码更加高效和可靠。</p>
<h2>编写模块化的代码</h2>
<p>将你的代码分解为小的、可重用的模块，这可以让你的代码更加清晰、易于理解和维护。</p>
<h2>写单元测试</h2>
<p>编写单元测试可以帮助你确保你的代码按预期工作，并且在修改代码时不会破坏现有的功能。</p>
<h2>不断学习和实践</h2>
<p>Python是一个不断发展的语言，新的特性和最佳实践不断涌现。作为一名Python程序员，你应该不断学习和实践，以保持对新技术和新方法的了解。</p>
<h2>if <strong>main</strong> == "<strong>name</strong>"</h2>
<p>在改代码块中写的代码将会在直接运行本代码文件时，会判断是否是直接运行还是被调用执行，这是为了在直接运行代码时方便代码测试时使用。</p>
<h2>博主提示</h2>
<p>暂无</p>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Python 3 - 运算符</title>
      <link>https://blog.magictable.ha.cn/software/Language-Python3-%E8%BF%90%E7%AE%97%E7%AC%A6.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Python3-%E8%BF%90%E7%AE%97%E7%AC%A6.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Python 3 - 运算符</source>
      <description>文章摘要： 运算符用于对变量和值的执行操作。 Python运算符共分为7类：算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、身份运算符、成员运算符 算术运算符（共7个） 关系运算符（共6个） 逻辑运算符（共3个） 位运算符（共6个） 注释 位运算符是对二进制的运算。 只能适用于整数，其总体运算规则是先把整数转换位二进制表示形式，按最低位对齐，...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Thu, 10 Aug 2023 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 运算符用于对变量和值的执行操作。</p>
<ul>
<li>Python运算符共分为7类：算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、身份运算符、成员运算符</li>
</ul>
<!-- more -->
<h2>算术运算符（共7个）</h2>
<table>
<thead>
<tr>
<th style="text-align:center">运算符</th>
<th style="text-align:left">名称</th>
<th style="text-align:left">例子</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">+</td>
<td style="text-align:left">加</td>
<td style="text-align:left">x + y</td>
</tr>
<tr>
<td style="text-align:center">-</td>
<td style="text-align:left">减</td>
<td style="text-align:left">x - y</td>
</tr>
<tr>
<td style="text-align:center">*</td>
<td style="text-align:left">乘</td>
<td style="text-align:left">x * y</td>
</tr>
<tr>
<td style="text-align:center">/</td>
<td style="text-align:left">除</td>
<td style="text-align:left">x / y</td>
</tr>
<tr>
<td style="text-align:center">%</td>
<td style="text-align:left">取模（保留余数）</td>
<td style="text-align:left">x % y</td>
</tr>
<tr>
<td style="text-align:center">//</td>
<td style="text-align:left">取整（保留整数）</td>
<td style="text-align:left">x // y</td>
</tr>
<tr>
<td style="text-align:center">**</td>
<td style="text-align:left">求幂（指数计算）</td>
<td style="text-align:left">x ** y</td>
</tr>
</tbody>
</table>
<h2>关系运算符（共6个）</h2>
<table>
<thead>
<tr>
<th style="text-align:center">运算符</th>
<th style="text-align:left">名称</th>
<th style="text-align:left">例子</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">==</td>
<td style="text-align:left">全等</td>
<td style="text-align:left">x == y</td>
</tr>
<tr>
<td style="text-align:center">!=</td>
<td style="text-align:left">不等</td>
<td style="text-align:left">x != y</td>
</tr>
<tr>
<td style="text-align:center">&lt;</td>
<td style="text-align:left">小于</td>
<td style="text-align:left">x &lt; y</td>
</tr>
<tr>
<td style="text-align:center">&gt;</td>
<td style="text-align:left">大于</td>
<td style="text-align:left">x &gt; y</td>
</tr>
<tr>
<td style="text-align:center">&lt;=</td>
<td style="text-align:left">小于等于</td>
<td style="text-align:left">x &lt;= y</td>
</tr>
<tr>
<td style="text-align:center">&gt;=</td>
<td style="text-align:left">大于等于</td>
<td style="text-align:left">x &gt;= y</td>
</tr>
</tbody>
</table>
<h2>逻辑运算符（共3个）</h2>
<table>
<thead>
<tr>
<th style="text-align:center">运算符</th>
<th style="text-align:left">名称</th>
<th style="text-align:left">描述</th>
<th style="text-align:left">例子</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">and</td>
<td style="text-align:left">与/且</td>
<td style="text-align:left">若两个条件都为<code>True</code>，则返回<code>True</code></td>
<td style="text-align:left">0&amp;0=0, 1&amp;1=1, 0&amp;1=0</td>
</tr>
<tr>
<td style="text-align:center">or</td>
<td style="text-align:left">或</td>
<td style="text-align:left">若两个条件中有一个或一个以上都为<code>True</code>，则返回<code>True</code></td>
<td style="text-align:left">0|0=0, 1|1=1, 0|1=1</td>
</tr>
<tr>
<td style="text-align:center">not</td>
<td style="text-align:left">非</td>
<td style="text-align:left">反转结果，若结果为<code>False</code>，则返回<code>True</code></td>
<td style="text-align:left">~0=1, ~ 1=0</td>
</tr>
</tbody>
</table>
<h2>位运算符（共6个）</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>位运算符是对二进制的运算。</li>
<li>只能适用于整数，其总体运算规则是先把整数转换位二进制表示形式，按最低位对齐，短的高位补0，然后进行位运算。</li>
<li>最后把得到的二进制数转换为十进制数。</li>
</ul>
</div>
<table>
<thead>
<tr>
<th style="text-align:center">运算符</th>
<th style="text-align:left">名称</th>
<th style="text-align:left">描述</th>
<th style="text-align:left">例子</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">&amp;</td>
<td style="text-align:left">位与</td>
<td style="text-align:left">如果相对应的位都是1，则结果为1，否则为0</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">|</td>
<td style="text-align:left">位或</td>
<td style="text-align:left">如果相对应的位有1个或2个是1，则结果为1，否则为0</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">^</td>
<td style="text-align:left">位异或</td>
<td style="text-align:left">如果相对应的位有1个或2个是1，则反转后为0；若都是0，则反转后为1</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">~</td>
<td style="text-align:left">位取反</td>
<td style="text-align:left">按位取反每一位操作数，即0改成1，1改成0</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">&lt;&lt;</td>
<td style="text-align:left">位左移</td>
<td style="text-align:left">按位左移操作数指定的位数</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">&gt;&gt;</td>
<td style="text-align:left">位右移</td>
<td style="text-align:left">按位右移操作数指定的位数</td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
<h2>赋值运算符（共13个）</h2>
<table>
<thead>
<tr>
<th style="text-align:center">运算符</th>
<th style="text-align:left">名称</th>
<th style="text-align:left">例子</th>
<th style="text-align:left">等效于</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">=</td>
<td style="text-align:left">赋值</td>
<td style="text-align:left">x = 1</td>
<td style="text-align:left">x = 1</td>
</tr>
<tr>
<td style="text-align:center">+=</td>
<td style="text-align:left">加法赋值</td>
<td style="text-align:left">x += 1</td>
<td style="text-align:left">x = x + 1</td>
</tr>
<tr>
<td style="text-align:center">-=</td>
<td style="text-align:left">减法赋值</td>
<td style="text-align:left">x -= 1</td>
<td style="text-align:left">x = x - 1</td>
</tr>
<tr>
<td style="text-align:center">*=</td>
<td style="text-align:left">乘法赋值</td>
<td style="text-align:left">x *= 1</td>
<td style="text-align:left">x = x * 1</td>
</tr>
<tr>
<td style="text-align:center">/=</td>
<td style="text-align:left">除法赋值</td>
<td style="text-align:left">x /= 1</td>
<td style="text-align:left">x = x / 1</td>
</tr>
<tr>
<td style="text-align:center">%=</td>
<td style="text-align:left">取余赋值</td>
<td style="text-align:left">x %= 1</td>
<td style="text-align:left">x = x % 1</td>
</tr>
<tr>
<td style="text-align:center">//=</td>
<td style="text-align:left">取整赋值</td>
<td style="text-align:left">x //= 1</td>
<td style="text-align:left">x = x // 1</td>
</tr>
<tr>
<td style="text-align:center">**=</td>
<td style="text-align:left">求幂赋值</td>
<td style="text-align:left">x **= 1</td>
<td style="text-align:left">x = x ** 1</td>
</tr>
<tr>
<td style="text-align:center">&amp;=</td>
<td style="text-align:left">位与赋值</td>
<td style="text-align:left">二进制A &amp;= 二进制B</td>
<td style="text-align:left">二进制B = 二进制A &amp; 二进制B</td>
</tr>
<tr>
<td style="text-align:center">|=</td>
<td style="text-align:left">位或赋值</td>
<td style="text-align:left">二进制A |= 二进制B</td>
<td style="text-align:left">二进制B = 二进制A | 二进制A</td>
</tr>
<tr>
<td style="text-align:center">^=</td>
<td style="text-align:left">位异或赋值</td>
<td style="text-align:left">二进制A ^= 二进制B</td>
<td style="text-align:left">二进制2 = 二进制0 ^ 二进制1</td>
</tr>
<tr>
<td style="text-align:center">&lt;&lt;=</td>
<td style="text-align:left">位左移赋值</td>
<td style="text-align:left">二进制A &lt;&lt;= 移动的位数</td>
<td style="text-align:left">二进制B = 二进制A &lt;&lt; 移动的位数</td>
</tr>
<tr>
<td style="text-align:center">&gt;&gt;=</td>
<td style="text-align:left">位右移赋值</td>
<td style="text-align:left">二进制A &gt;&gt;= 移动的位数</td>
<td style="text-align:left">二进制B = 二进制A &gt;&gt;= 移动的位数</td>
</tr>
</tbody>
</table>
<h2>身份运算符（共2个）</h2>
<table>
<thead>
<tr>
<th style="text-align:center">运算符</th>
<th style="text-align:left">名称</th>
<th style="text-align:left">描述</th>
<th style="text-align:left">例子</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">is</td>
<td style="text-align:left">是</td>
<td style="text-align:left">若两个变量是同一个对象或数据相等，则返回<code>True</code></td>
<td style="text-align:left">2 is 2</td>
</tr>
<tr>
<td style="text-align:center">is not</td>
<td style="text-align:left">不是</td>
<td style="text-align:left">若两个变量不是同一个对象或数据不相等，则返回<code>True</code></td>
<td style="text-align:left">2 is not 3</td>
</tr>
</tbody>
</table>
<h2>成员运算符（共2个）</h2>
<table>
<thead>
<tr>
<th style="text-align:center">运算符</th>
<th style="text-align:left">名称</th>
<th style="text-align:left">描述</th>
<th style="text-align:left">例子</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">in</td>
<td style="text-align:left">在</td>
<td style="text-align:left">若该对象存在于指定的序列对象中，则返回<code>True</code></td>
<td style="text-align:left">2 in list[1,2,3]</td>
</tr>
<tr>
<td style="text-align:center">not in</td>
<td style="text-align:left">不在</td>
<td style="text-align:left">若该对象不存在于指定的序列对象中，则返回<code>True</code></td>
<td style="text-align:left">2 not in list[1,2,3]</td>
</tr>
</tbody>
</table>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Python 3 - 运算符优先级</title>
      <link>https://blog.magictable.ha.cn/software/Language-Python3-%E8%BF%90%E7%AE%97%E7%AC%A6%E4%BC%98%E5%85%88%E7%BA%A7.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Python3-%E8%BF%90%E7%AE%97%E7%AC%A6%E4%BC%98%E5%85%88%E7%BA%A7.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Python 3 - 运算符优先级</source>
      <description>文章摘要： Python运算符优先级，是描述在计算机运算计算表达式时执行运算的先后顺序。先执行具有较高优先级的运算，然后执行较低优先级的运算。例如，我们常说的先执行相乘和除，再执行加减运算。</description>
      <category>软件程序/程序语言</category>
      <pubDate>Thu, 10 Aug 2023 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Python运算符优先级，是描述在计算机运算计算表达式时执行运算的先后顺序。先执行具有较高优先级的运算，然后执行较低优先级的运算。例如，我们常说的先执行相乘和除，再执行加减运算。</p>
<!-- more -->
<table>
<thead>
<tr>
<th style="text-align:center">优先级序号</th>
<th style="text-align:left">运算符</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">01</td>
<td style="text-align:left"><code>()</code>、<code>[]</code></td>
<td style="text-align:left">括号优先级最高</td>
</tr>
<tr>
<td style="text-align:center">02</td>
<td style="text-align:left"><code>**</code>(求幂)</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">03</td>
<td style="text-align:left"><code>~</code>(位取反), <code>+</code>(正号), <code>-</code>(负号)</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">04</td>
<td style="text-align:left"><code>*</code>(乘), <code>/</code>(除), <code>%</code>(取余), <code>//</code>(取整)</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">05</td>
<td style="text-align:left"><code>+</code>(加), <code>-</code>(减)</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">06</td>
<td style="text-align:left"><code>&gt;&gt;</code>(右移), <code>&lt;&lt;</code>(左移)</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">07</td>
<td style="text-align:left"><code>&amp;</code>(位与)</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">08</td>
<td style="text-align:left"><code>^</code>(位异或), <code>|</code>(位或)</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">09</td>
<td style="text-align:left"><code>==</code>(全等), <code>!=</code>(不等), <code>&gt;</code>(大于), <code>&lt;</code>(小于), <code>&gt;=</code>(大于等于), <code>&lt;=</code>(小于等于)</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">10</td>
<td style="text-align:left"><code>=</code>(赋值), <code>+=</code>(加法赋值), <code>-=</code>(减法赋值), <code>*=</code>(乘法赋值), <code>/=</code>(除法赋值), <code>%=</code>(取余赋值), <code>//=</code>(取整赋值), <code>**=</code>(求幂赋值)</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">12</td>
<td style="text-align:left"><code>is</code>(是), <code>is not</code>(不是)</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">12</td>
<td style="text-align:left"><code>in</code>(在), <code>not in</code>(不在)</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:center">13</td>
<td style="text-align:left"><code>and</code>(与), <code>or</code>(或), <code>not</code>(非)</td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
]]></content:encoded>
    </item>
    <item>
      <title>Language - Python 3</title>
      <link>https://blog.magictable.ha.cn/software/Language-Python3.html</link>
      <guid>https://blog.magictable.ha.cn/software/Language-Python3.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Language - Python 3</source>
      <description>文章摘要： Python是编程语言。 相关信息 外部相关文章 python官方说明文档，（强烈推荐）很详细且标准，但可以观看其他第三方对python官方文档的二次总结。 PyPI，众多第三方包的下载网站。 内部相关文章 官方API： 问题总结： 代码风格： 使用技巧： 公共知识 - 数据结构： 公共知识 - 设计模式： 公共知识 - 算法设计： 公共知...</description>
      <category>软件程序/程序语言</category>
      <pubDate>Thu, 10 Aug 2023 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> Python是编程语言。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li><a href="https://docs.python.org/zh-cn/3/" target="_blank" rel="noopener noreferrer">python官方说明文档</a>，（强烈推荐）很详细且标准，但可以观看其他第三方对python官方文档的二次总结。</li>
<li><a href="https://pypi.org/" target="_blank" rel="noopener noreferrer">PyPI</a>，众多第三方包的下载网站。</li>
</ul>
<p>内部相关文章</p>
<ul>
<li>官方API：<a href="/software/Language-Python3-API.html" target="_blank">Language-Python3-API</a></li>
<li>问题总结：<a href="/software/Language-Python3-%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93.html" target="_blank">Language-Python3-问题总结</a></li>
<li>代码风格：<a href="/software/Language-Python3-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E4%BB%A3%E7%A0%81%E9%A3%8E%E6%A0%BC.html" target="_blank">Language-Python3-热门推荐-代码风格</a></li>
<li>使用技巧：<a href="/software/Language-Python3-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E4%BD%BF%E7%94%A8%E6%8A%80%E5%B7%A7.html" target="_blank">Language-Python3-热门推荐-使用技巧</a></li>
<li>公共知识 - 数据结构：<a href="/software/DataStructure%EF%BC%88%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%EF%BC%89.html" target="_blank">DataStructure（数据结构）</a></li>
<li>公共知识 - 设计模式：<a href="/software/DesignPattern%EF%BC%88%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%EF%BC%89.html" target="_blank">DesignPattern（设计模式）</a></li>
<li>公共知识 - 算法设计：<a href="/software/Algorithm%EF%BC%88%E7%AE%97%E6%B3%95%E8%AE%BE%E8%AE%A1%EF%BC%89.html" target="_blank">Algorithm（算法设计）</a></li>
<li>公共知识 - 软件架构：<a href="/software/Architecture%EF%BC%88%E8%BD%AF%E4%BB%B6%E6%9E%B6%E6%9E%84%EF%BC%89.html" target="_blank">Architecture（软件架构）</a></li>
</ul>
</div>
<h2>介绍</h2>
<p>简要说明</p>
<ul>
<li>Python是一种面向对象、解释型、跨平台、动态类型、开源的程序语言。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>开源免费</strong>：解释器和标准模块是开源的，但在使用第三方开发者的代码时不得违反其开源协议。</li>
<li><strong>高级语言</strong>：Python 封装较深，屏蔽了很多底层细节，如Python 会自动管理内存。</li>
<li><strong>语法简单</strong>：实现相同功能，代码量相比其他语言要少很多。</li>
<li><strong>开放源码</strong>：Python和大部分支持库及工具都是开源的，使用时仍需要根据相关的开源协议。</li>
<li><strong>胶水特性（可扩展性）</strong>：可与其他编程语言集成，如C、C++、Java等。</li>
<li><strong>跨平台（可移植性）</strong>：可用于大部分操作系统、集群、服务器，甚至小设备（如：树莓派）上。</li>
<li><strong>多用途</strong>：可用于快速、交互式代码开发，也可用于构建大型应用程序，如科学计算、数据处理、人工智能等。</li>
<li><strong>第三类库丰富</strong>：除了自身提供的几百个内置库，开源社区还贡献了十几万个第三方库，拥有良好的编程生态。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>代码加密困难</strong>：不像编译型语言的源代码会被编译成可执行程序，Python 是直接运行源代码，因此对源代码加密比较困难。</li>
<li><strong>运行速度较慢</strong>：运行速度慢是解释型语言的通病，执行速度比C/C++语言的速度慢很多。</li>
</ul>
<p>适用场景</p>
<ul>
<li>Web和Internet开发、科学计算和统计、人工智能、教育、桌面界面开发、软件开发、后端开发、网络爬虫、自动化办公</li>
</ul>
<h2>缩进</h2>
<p>python程序语言通过缩进来控制代码的运行流程，因此严格、准确、一致的缩进非常重要。</p>
<p>缩进规范</p>
<ul>
<li>Python使用缩进来指示代码块。</li>
<li>缩进指的是代码行开头的空格。</li>
<li>标准编写代码缩进4个空格，即一个<code>Tab</code>键。</li>
<li>在其他编程语言中，代码缩进仅出于可读性的考虑，而 Python中的缩进非常重要。</li>
<li>缩进不建议超过4个，过多的缩进会导致降低代码可读性。</li>
</ul>
<h2>注释</h2>
<ul>
<li>程序员在代码中加入的辅助说明，不能被计算机执行，不受语法的限制，可以写任何内容。</li>
</ul>
<p>单行注释</p>
<ul>
<li>将<code>#</code>写在当前行开头位置。</li>
</ul>
<p>多行注释</p>
<ul>
<li>将<code>'''</code>、<code>"""</code>写在要注释的前一行和后一行，多行注释是成对组成。</li>
<li>就是将需要注释的文本包裹在其之间。</li>
</ul>
<h2>标识符</h2>
<ul>
<li>标识符在python语言中用于规范命名解释器能识别的可执行代码对象的名称。</li>
<li>变量、常量、关键字、运算符、函数、类、模块、包、库都属于标识符。</li>
</ul>
<p>命名规范</p>
<ul>
<li><strong>变量名</strong>：全部小写，单词之间使用下划线连接，开头不能是数字，下划线开头是私有变量。</li>
<li><strong>函数名</strong>：全部小写，单词之间使用下划线连接，开头不能是数字，下划线开头是私有函数。</li>
<li><strong>类名</strong>：首字母大写，多个单词之间使用下划线连接，开头不能是数字，下划线开头是私有类。</li>
<li><strong>常量名</strong>：全部大写，多个单词之间使用下划线连接，开头不能是数字，下划线开头是私有常量。</li>
</ul>
<p>作用域</p>
<ul>
<li>作用域指标识符的作用范围(作用域)，python语言根据变量可供访问的作用范围，分为全局、局部、闭包。</li>
<li><strong>全局作用域</strong>：从赋值定义开始，后续代码知道结束都可以访问该变量。</li>
<li><strong>局部作用域</strong>：只能在被定义的函数或者类内部才能被访问该变量。即在同一个文件且在同一个代码块内。</li>
<li><strong>闭包作用域</strong>：导入某个外部函数在现在程序的某个函数或类之间运行的标识符，外部函数与内部嵌套函数之间。</li>
<li>全局 &gt; 闭包 &gt; 局部</li>
<li>可使用<code>global</code>和<code>nonlocal</code>关键字来改变变量的作用域范围。</li>
</ul>
<p>有关<code>global</code>和<code>nonlocal</code>关键字详细说明请查看该文章：<a href="/software/Language-Python3-%E5%86%85%E7%BD%AE%E5%87%BD%E6%95%B0.html" target="_blank">内置函数</a></p>
<h2>关键字</h2>
<p>详细总结：<a href="/software/Language-Python3-%E5%85%B3%E9%94%AE%E5%AD%97.html" target="_blank">Python3关键字</a></p>
<h2>变量</h2>
<ul>
<li>变量是存放数据值的容器。</li>
<li>python没有声明变量的内置函数，在首次赋值时就是创建变量。</li>
<li>创建变量使用<code>=</code>(等号)来给变量赋值，等号左边是变量名，等号右边的存储的值。</li>
<li>变量本身没有类型，“类型”指的是变量中存储对象的数据类型。</li>
<li>命名规则，在同一个程序中名字必须是唯一的，不能与内置函数重名。</li>
</ul>
<p>变量赋值</p>
<ul>
<li>单变量单存储对象，<code>例子：a = 2</code></li>
<li>多变量单存储对象，<code>例子：a = b = c = 1</code></li>
<li>多变量多存储对象，<code>例子：a,b,c = 1,2,"abc"</code></li>
</ul>
<h2>常量</h2>
<ul>
<li>常量是赋值之后就不会变化的固定值，变量其实也可以选择不变化数值。</li>
<li>python的常量和变量一般通过变量名全大写来表示一个常量，但其数值依旧可以更改，因此python提供通过自定义类来实现常量，这要求符合“名称字母全大写”和“值一点被绑定便不可再修改”这两个条件。</li>
<li>内置函数中也具有内置常量。</li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>Python并未提供如C/C++/Java一样的const修饰符，换言之，python中没有常量，python程序一般通过约定俗成的变量名全大写的形式表示这是一个常量。然而这种方式并没有真正实现常量，其对应的值仍然可以被改变。后来，python提供了新的方法实现常量：即通过自定义类实现常量。这要求符合“命名全部为大写”和“值一旦被绑定便不可再修改”这两个条件。</li>
</ul>
</div>
<h2>运算符</h2>
<ul>
<li>运算符用于对变量和值执行操作。</li>
<li>运算符可分为一下7类：算术运算符，赋值运算符，比较运算符，位运算符，逻辑运算符，身份运算符，成员运算符</li>
</ul>
<p>详细总结：<a href="/software/Language-Python3-%E8%BF%90%E7%AE%97%E7%AC%A6.html" target="_blank">运算符</a></p>
<h2>运算符优先级</h2>
<ul>
<li>Python运算符优先级，是描述在计算机运算计算表达式时执行运算的先后顺序。</li>
<li>先执行具有较高优先级的运算，然后执行较低优先级的运算。</li>
<li>例如，我们常说的先执行相乘和除，再执行加减运算。</li>
</ul>
<p>详细总结：<a href="/software/Language-Python3-%E8%BF%90%E7%AE%97%E7%AC%A6%E4%BC%98%E5%85%88%E7%BA%A7.html" target="_blank">运算符优先级</a></p>
<h2>数据类型</h2>
<ul>
<li>在编程中，数据类型是一个重要的概念，变量可以存储不同类型的数据，并且不同类型可以执行不同的操作。</li>
<li>在其他编程中或者其他用途中会有不同的数据类型。</li>
</ul>
<p>详细总结：<a href="/software/Language-Python3-API-%E5%86%85%E7%BD%AE%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B%E5%87%BD%E6%95%B0%E6%96%B9%E6%B3%95.html" target="_blank">内置数据类型函数方法</a></p>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p>python拥有以下内置数据类型：</p>
<ul>
<li><strong>文本类型</strong>：str（字符串）</li>
<li><strong>数值类型</strong>：int（整数）、float（浮点数）、complex（复数）</li>
<li><strong>序列类型</strong>：list（列表）、tuple（元组）</li>
<li><strong>映射类型</strong>：dict（字典）</li>
<li><strong>集合类型</strong>：set（集合）</li>
<li><strong>布尔类型</strong>：bool（布尔）</li>
<li><strong>二进制类型</strong>：bytes（二进制）</li>
<li><strong>上下文管理器类型</strong></li>
<li><strong>迭代器类型</strong></li>
<li>其他内置类型</li>
<li>特殊属性</li>
</ul>
</div>
<h3>str（字符串）</h3>
<ul>
<li>字符串是一个容器，包含若干个字符并按照一定的顺序组织成一个整体。字符串支持索引和切片操作。</li>
<li>字符串以“字符”为基本单位。</li>
</ul>
<p>操作</p>
<ul>
<li>删除、查找（查询）、修改（替换）、提取、合并（拼接、连接）、拆分（切割）</li>
<li>其他操作（获取长度、重复输出、字符统计、字符转换、格式转换、比较、获取状态）</li>
</ul>
<p>案例</p>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token comment"># 一对单引号</span></span>
<span class="line">str1 <span class="token operator">=</span> <span class="token string">'123'</span></span>
<span class="line"><span class="token comment"># 一对双引号</span></span>
<span class="line">str2 <span class="token operator">=</span> <span class="token string">"12345"</span></span>
<span class="line"><span class="token comment"># 一对三个单引号</span></span>
<span class="line">str3 <span class="token operator">=</span> <span class="token triple-quoted-string string">'''</span>
<span class="line">    abc</span>
<span class="line">    123</span>
<span class="line">    中文</span>
<span class="line">    '''</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>int（整数）</h3>
<ul>
<li>整数是由正整数、零、负整数构成。</li>
<li>在python语言里整数的长度不受限制，仅受虚拟内存大小的限制。</li>
</ul>
<p>==待完善==</p>
<h3>float（浮点数）</h3>
<ul>
<li>浮点数是带小数点的数字。</li>
<li>由于计算机对于浮点数存储的只是近似值，不精确的数字。</li>
</ul>
<p>==待完善==</p>
<h3>complex（复数）</h3>
<ul>
<li>复数由实部和虚部组成</li>
</ul>
<p>==待完善==</p>
<h3>list（列表）</h3>
<ul>
<li>列表（list），是可变序列类型，可以再次更改或替换元素等。</li>
<li>列表能够存储各种类型的数据，并且能在列表中嵌套字符串、数字、列表、元组、字典、集合等数据类型。</li>
<li>列表每个值称为元素，元素是基本单位。</li>
<li>使用一对方括号来表示空列表: <code>[ ]</code></li>
<li>用方括号<code>[]</code>来表示列表的开始和结束，元素之间用逗号<code>,</code>分割。</li>
<li>列表中每个元素都有对应的下标。</li>
<li>列表中元素的下标顺序是：从左往右，从0开始计数；而从右往左，从-1开始计数。</li>
</ul>
<p>==待完善==</p>
<h3>tuple（元组）</h3>
<ul>
<li>元组（tupel），是不可变序列类型，不允许再次更改或替换元素等。</li>
<li>元组能够存储各种类型的数据，并且能在列表中嵌套字符串、数字、列表、元组、字典、集合等数据类型。</li>
<li>元组每个值称为元素，元素是基本单位。</li>
<li>使用一对圆括号来表示空元组: <code>( )</code></li>
<li>用圆括号<code>()</code>来表示列表的开始和结束，元素之间用逗号<code>,</code>分割。</li>
<li>建议创建非空元组的时候，在元素后面加一个逗号，用来区分普通括号和元组。</li>
<li>元组不能对元素进行增加元素、变换元素位置、修改元素、删除元素操作。</li>
<li>元组中每个元素都有对应的下标。</li>
<li>元组中元素的下标顺序是：从左往右，从0开始计数；而从右往左，从-1开始计数。</li>
</ul>
<p>==待完善==</p>
<h3>dict（字典）</h3>
<ul>
<li>字典（dict），是可变且无序的映射类型，允许再次更改或替换元素，不支持排序。</li>
<li>字典内部结构用哈希表构成，通过唯一的访问键对应的值，因此字典没有提供排序功能。</li>
<li>目前映射类型只有字典一种类型。</li>
<li>字典以<strong>键值对</strong>为基本元素。</li>
<li>键值对，由键（key）和值（value）组成，中间用冒号<code>:</code>分割。</li>
<li>键（key）需要满足唯一性、不可变性。</li>
<li>值（value）可以是任何数据类型，没有规定限制。</li>
<li>使用一对花括号来表示空字典:<code>{ }</code></li>
<li>用花括号<code>{}</code>来表示列表的开始和结束，元素之间用逗号<code>,</code>分割。</li>
<li>字典属于典型的一对一映射关系的数据类型。</li>
<li>字典中每个元素都有对应的下标。</li>
<li>字典中元素的下标顺序是：从左往右，从0开始计数；而从右往左，从-1开始计数。</li>
</ul>
<p>==待完善==</p>
<h3>set（集合）</h3>
<ul>
<li>集合是可变类型，允许再次更改或替换元素等。</li>
<li>集合是具有唯一性、无序性、确定性的多项集。</li>
<li>常见的成员检测、去除重复项、交集、并集、差集、对称差集等。</li>
<li>集合每个值称为元素，元素是基本单位。</li>
<li>使用一对花括号来表示空集合: <code>{ }</code></li>
<li>用花括号<code>{}</code>来表示列表的开始和结束，元素之间用逗号<code>,</code>分割。</li>
<li>集合中每个元素都有对应的下标。</li>
<li>集合中元素的下标顺序是：从左往右，从0开始计数；而从右往左，从-1开始计数。</li>
</ul>
<p>==待完善==</p>
<h2>简化语法</h2>
<h3>索引和切片操作</h3>
<ul>
<li>索引和切片主要用于简化“文本类型”、“数值类型”、“序列类型”、“映射类型”、“集合类型”的对象来进行操作。</li>
</ul>
<p>下标的概念</p>
<ul>
<li>下标是用于定位对象中某个或多个元素的具体位置。</li>
<li>下标从左往右查找，从0开始计数。</li>
<li>下标从右往左查找，从-1开始计数。</li>
<li>下标用<strong>整数类型</strong>进行计数。</li>
</ul>
<p>切片操作</p>
<table>
<thead>
<tr>
<th style="text-align:center">案例</th>
<th style="text-align:left">解释</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">s[i]</td>
<td style="text-align:left">代表对象s元素下标的第<code>i</code>项</td>
</tr>
<tr>
<td style="text-align:center">s[i:j]</td>
<td style="text-align:left">代表对象s元素下标的从第<code>i</code>项到第<code>j</code>项区间内的切片，且切片是左闭右开区间形式，即包含<code>i</code>但不包含<code>j</code>的区间范围</td>
</tr>
<tr>
<td style="text-align:center">s[i:j:k]</td>
<td style="text-align:left">代表对象s元素下标的从第<code>i</code>项到第<code>j</code>项区间内且步长为<code>k</code>的切片，步长<code>k</code>代表每隔多少下标后选定一个元素</td>
</tr>
</tbody>
</table>
<h3>字符串格式化</h3>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token comment"># 使用 f-string 格式化字符串</span></span>
<span class="line">name <span class="token operator">=</span> <span class="token string">'Alice'</span>  </span>
<span class="line">age <span class="token operator">=</span> <span class="token number">25</span>  </span>
<span class="line">s <span class="token operator">=</span> <span class="token string-interpolation"><span class="token string">f"My name is </span><span class="token interpolation"><span class="token punctuation">{</span>name<span class="token punctuation">}</span></span><span class="token string"> and I'm </span><span class="token interpolation"><span class="token punctuation">{</span>age<span class="token punctuation">}</span></span><span class="token string"> years old."</span></span></span>
<span class="line"><span class="token comment"># 输出内容： My name is Alice and I'm 25 years old.</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 使用 format() 方法格式化字符串</span></span>
<span class="line">num <span class="token operator">=</span> <span class="token number">123</span>  </span>
<span class="line">s <span class="token operator">=</span> <span class="token string">"The number is {}"</span><span class="token punctuation">.</span><span class="token builtin">format</span><span class="token punctuation">(</span>num<span class="token punctuation">)</span></span>
<span class="line"><span class="token comment"># 输出内容：The number is 123</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 使用 % 运算符进行字符串格式化</span></span>
<span class="line">num <span class="token operator">=</span> <span class="token number">123</span>  </span>
<span class="line">s <span class="token operator">=</span> <span class="token string">"The number is %d"</span> <span class="token operator">%</span> num</span>
<span class="line"><span class="token comment"># 输出内容：The number is 123</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>函数</h2>
<ul>
<li>函数指把通过专门的代码组织，用来实现特定功能的代码块，具有相对独立性，可供其他代码重复使用。</li>
<li>在一个程序中重复的代码太多会导致代码臃肿、阅读麻烦、调试困难，因此需要函数这个功能。</li>
<li>函数能使得代码非常简练，代码模块化、提高代码编写效率和质量，使用自定义函数独立打包共享给他人使用。</li>
<li>函数可以分为内置函数、第三方函数、自定义函数。</li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>在实际独立引用对象名称时，为了区分函数和方法，把带小括号统一认为是方法，不带小括号的为函数。</li>
</ul>
</div>
<h3>内置函数</h3>
<ul>
<li>python官方封装好的函数一起放在Lib目录下的算法模块，又称内置函数。</li>
<li>内置函数用于代码重复使用，减少代码量。</li>
<li>无需通过“improt”内置函数导入，就能直接使用的函数。</li>
<li>使用不是python标准库中自带的函数，使用第三方库中的函数，又称第三方函数。</li>
<li>详细总结：<a href="/software/Language-Python3-%E5%86%85%E7%BD%AE%E5%87%BD%E6%95%B0.html" target="_blank">内置函数</a></li>
</ul>
<p>保留字</p>
<ul>
<li>python编程语言的语法规则（特定用途）的函数（标识符），即保留字（关键字）。</li>
<li>无需通过“improt”内置函数导入即可使用的内置函数。</li>
<li>保留字也属于内置函数。</li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>内置函数不能再次作为常规变量名或函数名重新命名（理论上可以再次重新命名，但会覆盖原本的功能）。</li>
<li>保留字不能再次作为常规变量名或函数名重新命名。</li>
</ul>
</div>
<h3>自定义函数</h3>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token triple-quoted-string string">"""</span>
<span class="line">- 一个标准的函数由“函数名、参数、函数体、返回值”四个部分组成</span>
<span class="line">- 关键字`def`是内置函数，用于定义函数的函数</span>
<span class="line">- 关键字`return`的内置函数，用于返回指定的数据</span>
<span class="line">- 定义函数时可以不指定参数、返回值</span>
<span class="line">"""</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">def</span> 函数名<span class="token punctuation">(</span>参数<span class="token punctuation">)</span><span class="token punctuation">:</span></span>
<span class="line">   函数体</span>
<span class="line">   <span class="token keyword">return</span> 返回值</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>函数名的命名规范</p>
<ul>
<li>不能与现有的内置函数重名。</li>
<li>建议名称要能准确表达函数的功能。</li>
<li>全部小写，单词之间使用下划线连接，开头不能是数字，下划线开头则代表是私有函数。</li>
</ul>
<p>函数的参数</p>
<ul>
<li>
<p>上面案例中展示的参数称为<strong>形参（形式参数）</strong>，在调用函数时赋予的值称为<strong>实参（实际参数）</strong>。</p>
</li>
<li>
<p><strong>实际参数</strong>：创建实例，就是把一个函数或者类实例化，而实例中或者一个方法中要添加/输入/加入一个或者多个参数，这个参数叫实际参数。</p>
</li>
<li>
<p><strong>形式参数</strong>：在函数中或者类中要添加的参数，这个参数会根据主程序或者实例化中的参数（实际参数）变化，因此叫形式参数。</p>
</li>
</ul>
<p>形参（形式参数）支持的传递形式</p>
<ul>
<li><strong>位置参数</strong>：函数的参数可以由多个形式参数，接收实际参数的时候是有前后之分的，因此给出的实际参数要与形式参数的位置依次对应。</li>
<li><strong>默认参数</strong>：可在函数中先指定参数的值。</li>
<li><strong>关键字参数</strong>：为了避免参数对应混乱，可以使用 “参数名=值” ，在调用函数时显示表示，而无需考虑参数的位置顺序。这会有默认值，通过覆盖原来的值实现变化。</li>
<li><strong>不定长参数</strong>：在自定义函数的参数前面加入符号。
<ul>
<li>在形式参数前面写上 <code>*</code> ，能接收任意个参数。</li>
<li>在形式参数前面写上 <code>**</code> ，能接收任意个数的键值对。</li>
</ul>
</li>
</ul>
<p>函数传递对象总结</p>
<ul>
<li>不可变对象（数字、字符串、元组），在函数里更改值后，会变成新的对象，不影响函数外的对象。</li>
<li>可变对象（列表、字典），在函数里更改值后，函数不会变成新的对象，会同步影响函数外的对象。</li>
</ul>
<h3>第三方函数</h3>
<ul>
<li>第三方函数是指那些不是Python标准库中的函数，而是来自第三方库或模块的函数。</li>
<li>需要通过导入第三方库（包、模块），才能在代码中使用的函数，称为第三方函数。</li>
<li>第三方函数就是需要用户自己去下载并安装到python中才能使用的函数。</li>
</ul>
<h3>构造函数</h3>
<ul>
<li>构造函数是指当创建类的实例对象时，自动调用的方法（函数）。</li>
<li><code>__init__()</code> 方法是一个特殊的方法，它在创建类的新实例时自动调用。它允许我们为新创建的对象设置初始状态或属性。</li>
<li>当使用 <code>class</code> 关键字创建一个新类时，可以定义 <code>__init__()</code> 方法来初始化新创建的对象。</li>
</ul>
<h3>私有函数</h3>
<ul>
<li>私有函数是指以<code>__</code>（双下划线）开头的函数。这种命名约定是一种约定俗成的做法，用于表示该函数是私有的，不应该被直接访问或调用。</li>
<li>私有函数的目的是为了将某些实现细节隐藏在类内部，而不是暴露给外部代码。这样可以提高代码的可维护性和可读性，并避免命名冲突和意外修改。</li>
<li>私有函数可以在类的内部被调用，但不能直接从类的外部访问。要调用私有函数，需要通过类的公有方法进行访问。</li>
</ul>
<h3>匿名函数</h3>
<ul>
<li>匿名函数是指没有显式命名的函数，也称为lambda函数。</li>
<li>匿名函数主要用于定义简单的、一次性使用的函数.</li>
<li>通常在需要一个函数但又不经常使用的情况下使用。</li>
</ul>
<h3>递归函数</h3>
<ul>
<li>递归函数是一种特殊的函数，它直接或间接地调用自身来解决问题。</li>
<li>递归函数通常用于解决可以分解为更小的子问题的问题。</li>
</ul>
<h2>类</h2>
<ul>
<li>类是对现实世界理解和抽象的一种方法，这种方法也被称为 “面向对象编程” 。</li>
<li>在现实中，过程是易变的，对象是相对不变的，因此把代码整理成类，更方便别人调用。</li>
<li>类可以理解为是对一类事物的归纳。</li>
</ul>
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<table>
<thead>
<tr>
<th style="text-align:center">现实世界（事物）</th>
<th style="text-align:center">类（模板）</th>
<th style="text-align:center">对象（实例）</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">特性/状态</td>
<td style="text-align:center">变量/常量</td>
<td style="text-align:center">属性</td>
</tr>
<tr>
<td style="text-align:center">行为/操作</td>
<td style="text-align:center">函数</td>
<td style="text-align:center">方法</td>
</tr>
</tbody>
</table>
<p>交流约定</p>
<ul>
<li>这种方法把具有相同特征（属性）和行为（方法）的对象进行抽象整合称为类，我们称之为 “封装”。</li>
<li>属性就是一个事物的特征，用于描述一个对象。</li>
<li>函数就是一个事物的行为，用于描述一个对象的能力。</li>
<li>特征（属性）本质是类里面创建的变量，称之为 “成员变量”。</li>
<li>行为（方法）本质是类里面创建的函数，称之为 “成员函数”。</li>
<li>面向对象编程的核心方法是封装、继承、多态。</li>
<li>类分为动态类、静态类。</li>
<li>实例由动态类生成，核心是属性和方法。</li>
<li>现实世界对象的特征抽象为动态类的数据变量，数据变量通过实例的属性来做读写操作，并且各个实例属性独立，互不干扰。</li>
<li>现实世界对象的行为抽象为动态类的函数，函数通过实例来体现各种操作功能，并且各个实例属性独立，互不干扰。</li>
</ul>
</div>
<p>类名的命名规范</p>
<ul>
<li>首字母大写，多个单词之间使用下划线连接，开头不能是数字，下划线开头是私有类。</li>
</ul>
<p>类的基本语法</p>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token triple-quoted-string string">"""</span>
<span class="line">- 类由关键字`class`、类名、参数、代码块四个部分组成。</span>
<span class="line">- 关键字`class`用于定义类的函数。</span>
<span class="line">"""</span></span>
<span class="line"></span>
<span class="line"><span class="token keyword">class</span> <span class="token class-name">Name</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span></span>
<span class="line">    代码块</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul>
<li>正规的类中会定义一个函数名__init__（）和参数self的函数，被称为构造函数，用于初始化类。</li>
</ul>
<p>魔术方法（特殊的python方法）</p>
<p>==待完善==</p>
<h2>模块</h2>
<ul>
<li>Python模块是一个包含了Python定义和声明的文件，文件名就是模块名字加上.py的后缀。模块的本质是一个Python文件。</li>
<li>模块的主要目的是为了方便管理代码和实现代码重用。</li>
<li>通过将程序分成一个个的文件，程序的结构更清晰，方便管理。</li>
</ul>
<p>模块可以分为三类：</p>
<ul>
<li><strong>内置模块</strong>：Python自带了很多常用的模块，如random、math、datetime等等。这些模块可以帮助我们避免重复编写代码，提高开发效率。</li>
<li><strong>第三方模块</strong>：除了内置模块外，Python的第三方模块也非常丰富，如numpy、pandas、scipy等等。这些模块提供了各种功能，可以帮助我们更高效地开发程序。</li>
<li><strong>自定义模块</strong>：除了内置模块和第三方模块外，我们还可以自己编写模块。自定义模块可以包含变量、函数、类等，并可在程序中被引用。</li>
</ul>
<h2>包</h2>
<ul>
<li>Python包是由一个或多个<code>.py</code>文件模块组成的集合（文件夹）。</li>
<li>包是一个完成特定任务的工具箱，可以包含多个模块、函数、类等。</li>
<li>一个包必须含有一个__init__.py文件，它用于标识当前文件夹是一个包。这个文件可以是空的，但必须存在。</li>
<li>包可以嵌套，即一个包可以包含其他包。</li>
</ul>
<h2>库</h2>
<ul>
<li>库是指一组已经编写好的可重用代码的集合。</li>
<li>通常包含有用的功能、数据结构、算法和接口。</li>
<li>为了在帮助程序员更快速地实现特定的任务，可以让程序员不必自己重新编写所有代码。这些代码可以在不同的项目中被重复使用，从而提高开发效率和代码质量。</li>
</ul>
<h2>分支语句</h2>
<p>==待完善==</p>
<h2>循环语句</h2>
<p>==待完善==</p>
<h2>异常处理语句</h2>
<ul>
<li>异常处理是用于捕获和处理程序中可能出现的错误或异常情况的一种机制。</li>
<li>通过异常处理，我们可以更好地控制程序的执行流程，提高程序的健壮性和可靠性。</li>
<li>异常处理包括了<code>try</code>、<code>except</code>、<code>finally</code>、<code>raise</code>语句。</li>
</ul>
<h3>执行一段代码</h3>
<ul>
<li><code>try</code>语句用于尝试执行一段代码。</li>
<li>在try语句中，我们可以编写要尝试执行的代码块，并在except语句中指定要捕获的异常类型和处理方式。如果在try语句块中出现了与except语句中指定的异常类型匹配的异常，则会执行except语句块中的代码。</li>
</ul>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token keyword">try</span><span class="token punctuation">:</span>  </span>
<span class="line">    <span class="token comment"># 尝试执行的代码块</span></span>
<span class="line"><span class="token keyword">except</span> ExceptionType<span class="token punctuation">:</span>  </span>
<span class="line">    <span class="token comment"># 处理异常的代码块</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>捕获异常代码</h3>
<ul>
<li><code>except</code>语句用于捕获try语句块中出现的异常，并执行相应的处理代码。</li>
<li><code>except</code>语句可以指定多个异常类型，也可以使用多个<code>except</code>语句来处理不同的异常类型。</li>
</ul>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token keyword">try</span><span class="token punctuation">:</span>  </span>
<span class="line">    <span class="token comment"># 尝试执行的代码块  </span></span>
<span class="line"><span class="token keyword">except</span> ExceptionType1<span class="token punctuation">:</span>  </span>
<span class="line">    <span class="token comment"># 处理异常类型1的代码块  </span></span>
<span class="line"><span class="token keyword">except</span> ExceptionType2<span class="token punctuation">:</span>  </span>
<span class="line">    <span class="token comment"># 处理异常类型2的代码块</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>释放资源代码</h3>
<ul>
<li><code>finally</code>语句用于在try和except语句执行完毕后执行一段代码，无论是否发生异常都会执行。</li>
<li>通常用于资源的清理和释放操作。</li>
</ul>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token keyword">try</span><span class="token punctuation">:</span>  </span>
<span class="line">    <span class="token comment"># 尝试执行的代码块  </span></span>
<span class="line"><span class="token keyword">except</span> ExceptionType<span class="token punctuation">:</span>  </span>
<span class="line">    <span class="token comment"># 处理异常的代码块  </span></span>
<span class="line"><span class="token keyword">finally</span><span class="token punctuation">:</span>  </span>
<span class="line">    <span class="token comment"># 无论是否发生异常都会执行的代码块</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>手动抛出异常</h3>
<ul>
<li><code>raise</code>语句用于手动抛出一个异常。</li>
<li>手动触发一个异常，并在except语句中捕获并处理它。</li>
</ul>
<div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token comment"># ExceptionType是异常类型，args是可选的异常参数。</span></span>
<span class="line"><span class="token keyword">raise</span> ExceptionType<span class="token punctuation">(</span>args<span class="token punctuation">)</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h2>面向对象编程</h2>
<ul>
<li>面向对象编程是Python的一种重要特性，它允许你以更直观、更自然的方式组织和编写代码。</li>
</ul>
<h3>继承</h3>
<ul>
<li>一个类可以从其他类继承属性和方法。</li>
<li>可以创建一个更加特定的类，它继承了父类的所有属性和方法，并可以添加或覆盖它们。</li>
</ul>
<h3>封装</h3>
<ul>
<li>封装在面向对象开发里是最基础的一环。</li>
<li>可以把业务知识内聚在类里面，对外暴露较少知识的接口，方便调用方调用，同时也提高了代码的维护性、可读性以及扩展性。</li>
</ul>
<h3>多态</h3>
<ul>
<li>多态是指一个接口可以有多种实现方式。</li>
<li>多态通常通过动态类型来实现。这意味着对象的类型在运行时确定，而不是在编译时确定。</li>
<li>这为代码提供了更大的灵活性。</li>
</ul>
<h3>抽象</h3>
<ul>
<li>抽象是一种隐藏对象的某些细节，只展示必要信息的方法。</li>
<li>若要手动实现将一个类进行抽象化编程，抽象类需要让类继承<code>abc</code>模块。</li>
<li>可以通过继承抽象基类（ABC）来实现抽象。抽象基类是一个包含抽象方法的类，这些方法没有实现。任何从抽象基类派生的非抽象类都必须实现这些抽象方法。</li>
</ul>
<h2>进阶知识</h2>
<p>详细总结：<a href="/software/Language-Python3-%E8%BF%9B%E9%98%B6%E7%9F%A5%E8%AF%86%E6%80%BB%E7%BB%93.html" target="_blank">Language-Python3-进阶知识总结</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Pip - 热门推荐 - 第三方类库</title>
      <link>https://blog.magictable.ha.cn/software/Package-Pip-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E7%AC%AC%E4%B8%89%E6%96%B9%E7%B1%BB%E5%BA%93.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Pip-%E7%83%AD%E9%97%A8%E6%8E%A8%E8%8D%90-%E7%AC%AC%E4%B8%89%E6%96%B9%E7%B1%BB%E5%BA%93.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Pip - 热门推荐 - 第三方类库</source>
      <description>文章摘要： pip（python包管理器）工具第三方类库推荐。 LangChain 详细总结：</description>
      <category>软件程序/软件包</category>
      <pubDate>Thu, 10 Aug 2023 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> pip（python包管理器）工具第三方类库推荐。</p>
<!-- more -->
<h2>LangChain</h2>
<ul>
<li></li>
</ul>
<p>详细总结：<a href="/software/Library-Pip-LangChain.html" target="_blank">Library-Pip-LangChain</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Package - Pip - 终端命令 - pip</title>
      <link>https://blog.magictable.ha.cn/software/Package-Pip-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-pip.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Pip-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-pip.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Pip - 终端命令 - pip</source>
      <description>文章摘要： pip（python包管理器）第三方库命令查询手册。 警告 镜像源请尽可能只使用其中一个，不要下载的第三方库是在多个不同地方的镜像源下载的。（这有可能由于不同镜像源的不及时同步导致出现第三方库有问题） 管理第三方库 安装第三方库 升级第三方库 卸载第三方库 离线安装第三方库 显示当前python环境下已安装的所有第三方库 导出本地所用到的第...</description>
      <category>软件程序/软件包</category>
      <pubDate>Thu, 10 Aug 2023 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> pip（python包管理器）第三方库命令查询手册。</p>
<!-- more -->
<div class="hint-container warning">
<p class="hint-container-title">警告</p>
<ul>
<li>镜像源请尽可能只使用其中一个，不要下载的第三方库是在多个不同地方的镜像源下载的。（这有可能由于不同镜像源的不及时同步导致出现第三方库有问题）</li>
</ul>
</div>
<h2>管理第三方库</h2>
<h3>安装第三方库</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 下载最新版本</span></span>
<span class="line">pip <span class="token function">install</span> <span class="token punctuation">[</span>库名<span class="token punctuation">]</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 下载指定版本</span></span>
<span class="line">pip <span class="token function">install</span> <span class="token punctuation">[</span>库名<span class="token punctuation">]</span><span class="token operator">==</span>X.X</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 下载指定最低版本以上</span></span>
<span class="line">pip <span class="token function">install</span> <span class="token punctuation">[</span>库名<span class="token punctuation">]</span><span class="token operator">&gt;=</span>X.X</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 通过requirements.txt安装第三方库</span></span>
<span class="line">pip <span class="token function">install</span> <span class="token parameter variable">-r</span> <span class="token punctuation">[</span>requirements.txt<span class="token punctuation">]</span></span>
<span class="line">pip <span class="token function">install</span> <span class="token parameter variable">-r</span> <span class="token punctuation">[</span>完整路径+requirements.txt<span class="token punctuation">]</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>升级第三方库</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 以管理员身份升级库</span></span>
<span class="line">pip <span class="token function">install</span> <span class="token parameter variable">--upgrade</span> <span class="token punctuation">[</span>库名<span class="token punctuation">]</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h3>卸载第三方库</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 卸载第三方库</span></span>
<span class="line">pip uninstall <span class="token punctuation">[</span>库名<span class="token punctuation">]</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h3>离线安装第三方库</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 安装.whl文件</span></span>
<span class="line">pip <span class="token function">install</span> whl <span class="token punctuation">[</span>文件名.whl<span class="token punctuation">]</span></span>
<span class="line">pip <span class="token function">install</span> whl <span class="token punctuation">[</span>完成路径.whl<span class="token punctuation">]</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 安装下载下来的源文件第三方库，执行源文件下的setup.py进行安装</span></span>
<span class="line">python setup.py <span class="token function">install</span></span>
<span class="line">python <span class="token punctuation">[</span>完整路径+setup.py<span class="token punctuation">]</span> <span class="token function">install</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>显示当前python环境下已安装的所有第三方库</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 显示当前python环境的本地第三方库</span></span>
<span class="line">pip list</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 查询需要升级的第三方库</span></span>
<span class="line">pip list <span class="token parameter variable">-o</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>导出本地所用到的第三方包的名称和版本</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 当需要将项目分享给别人时，别人需要自行下载项目所依赖的第三方库才能正常运行</span></span>
<span class="line"><span class="token comment"># 导出项目所用到的第三方库</span></span>
<span class="line">pip freeze <span class="token operator">&gt;</span> requirements.txt</span>
<span class="line">pip freeze <span class="token operator">&gt;</span> <span class="token punctuation">[</span>完整路径+requirements.txt<span class="token punctuation">]</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>pip信息查询命令</h2>
<h3>查询python和pip的处理器架构</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line">python <span class="token parameter variable">-c</span> <span class="token string">"import platform;print(platform.architecture()[0]);print(platform.machine())"</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>查询python信息</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 查看版本信息</span></span>
<span class="line">python <span class="token parameter variable">--version</span></span>
<span class="line">python <span class="token parameter variable">-V</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 查看python本地存储的目录</span></span>
<span class="line"><span class="token function">which</span> python3</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>查询pip信息</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 查看版本信息</span></span>
<span class="line">pip <span class="token parameter variable">--version</span></span>
<span class="line">pip <span class="token parameter variable">-V</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 显示pip版本、本地存储的目录</span></span>
<span class="line">python <span class="token parameter variable">-m</span> pip <span class="token parameter variable">--version</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>查询本地第三方库信息</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 显示相关信息，不显示详细的本地相关文件</span></span>
<span class="line">pip show <span class="token punctuation">[</span>库名<span class="token punctuation">]</span></span>
<span class="line"></span>
<span class="line"><span class="token comment"># 显示相关信息，包含每个详细文件位置</span></span>
<span class="line">pip show <span class="token parameter variable">-f</span> <span class="token punctuation">[</span>库名<span class="token punctuation">]</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>查询本地第三方库的依赖关系</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 需要先通过pip安装pipdeptree第三方库</span></span>
<span class="line"><span class="token comment"># 查看详细依赖关系的方法</span></span>
<span class="line">pipdeptree <span class="token parameter variable">-p</span> <span class="token punctuation">[</span>库名<span class="token punctuation">]</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>存储库</h2>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<ul>
<li>修改的是pip存储库（配置文件），而记录的数据是镜像源站点的URL。</li>
</ul>
</div>
<h3>临时更换镜像源</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># 指定镜像源来安装第三方库</span></span>
<span class="line">pip <span class="token function">install</span> <span class="token punctuation">[</span>库名<span class="token punctuation">]</span> <span class="token parameter variable">-i</span> <span class="token punctuation">[</span>镜像源地址<span class="token punctuation">]</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h3>添加指定的默认镜像源</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line">pip config <span class="token builtin class-name">set</span> global.index-url <span class="token punctuation">[</span>镜像源地址<span class="token punctuation">]</span></span>
<span class="line"><span class="token comment"># 提示：配置文件将存储在“/home/用户/.config/pip/pip.conf”</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><p>通过手动修改文件的方式来更换镜像源</p>
<blockquote>
<ul>
<li>修改<code>/home/用户/.config/pip/</code>目录下的<code>pip.conf</code>文件。</li>
<li>改为如下内容：</li>
</ul>
</blockquote>
<div class="language-txt line-numbers-mode" data-highlighter="prismjs" data-ext="txt"><pre><code class="language-txt"><span class="line">[global]</span>
<span class="line">index-url = https://mirrors.huaweicloud.com/repository/pypi/simple</span>
<span class="line">trusted-host = mirrors.huaweicloud.com</span>
<span class="line">timeout = 120</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>查看已添加的镜像源</h3>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line">pip config list</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Package - Pip</title>
      <link>https://blog.magictable.ha.cn/software/Package-Pip.html</link>
      <guid>https://blog.magictable.ha.cn/software/Package-Pip.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">Package - Pip</source>
      <description>文章摘要： pip（python包管理器）工具。 相关信息 外部相关文章 pip包管理工具的官方仓库是：pypi 内部相关文章 Python 3 编程语言： 简介 简要说明 pip 是最为广泛使用的 Python 包管理器。 用于安装和管理 Python 包和依赖项。 主要功能 安装包：pip 可以从 Python 包索引（PyPI）或其他索引安装 P...</description>
      <category>软件程序/软件包</category>
      <pubDate>Thu, 10 Aug 2023 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> pip（python包管理器）工具。</p>
<!-- more -->
<div class="hint-container info">
<p class="hint-container-title">相关信息</p>
<p>外部相关文章</p>
<ul>
<li>pip包管理工具的官方仓库是：<a href="https://pypi.org/" target="_blank" rel="noopener noreferrer">pypi</a></li>
</ul>
<p>内部相关文章</p>
<ul>
<li>Python 3 编程语言：<a href="/software/Language-Python3.html" target="_blank">Language-Python3</a></li>
</ul>
</div>
<h2>简介</h2>
<p>简要说明</p>
<ul>
<li>pip 是最为广泛使用的 Python 包管理器。</li>
<li>用于安装和管理 Python 包和依赖项。</li>
</ul>
<p>主要功能</p>
<ul>
<li><strong>安装包</strong>：pip 可以从 Python 包索引（PyPI）或其他索引安装 Python 包。</li>
<li><strong>卸载包</strong>：pip 可以卸载已安装的 Python 包。</li>
<li><strong>列出已安装的包</strong>：pip 可以列出当前环境中所有已安装的包及其版本。</li>
<li><strong>包的升级和降级</strong>：pip 允许用户升级到包的最新版本或降级到旧版本。</li>
<li><strong>搜索包</strong>：pip 可以在 PyPI 上搜索包。</li>
<li><strong>显示包信息</strong>：pip 可以显示包的详细信息，包括依赖关系、版本等。</li>
<li><strong>支持虚拟环境</strong>：pip 可以在 Python 虚拟环境中安装包，避免全局环境的污染。</li>
</ul>
<p>注意事项</p>
<ul>
<li><strong>版本兼容性</strong>：在使用 pip 安装包时，需要注意包与 Python 版本的兼容性。</li>
<li><strong>依赖冲突</strong>：pip 在安装包时可能会遇到依赖冲突，需要用户手动解决。</li>
<li><strong>权限问题</strong>：在某些系统上，可能需要管理员权限才能安装包。</li>
<li><strong>安全风险</strong>：从不可信的源安装包可能存在安全风险。</li>
<li><strong>网络问题</strong>：pip 需要网络连接来下载包，网络问题可能导致安装失败。</li>
</ul>
<p>适用场景</p>
<ul>
<li><strong>Python 开发</strong>：任何 Python 项目开发中，需要安装和管理依赖包。</li>
<li><strong>环境搭建</strong>：在创建新的 Python 环境时，使用 pip 安装必要的包。</li>
<li><strong>自动化部署</strong>：在自动化脚本中，使用 pip 安装依赖项以部署应用程序。</li>
<li><strong>教育和研究</strong>：在教育或研究环境中，使用 pip 安装用于教学和研究的数据处理和分析包。</li>
<li><strong>包管理</strong>：对于需要维护多个 Python 版本和项目的用户，pip 是管理不同环境包的首选工具。</li>
</ul>
<h2>安装与卸载</h2>
<p>详细总结：<a href=""></a></p>
<h2>终端命令</h2>
<p>详细总结：<a href="/software/Package-Pip-%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4-pip.html" target="_blank">Package-Pip-终端命令-pip</a></p>
<h2>配置文件</h2>
<p>详细总结：<a href=""></a></p>
<h2>热门推荐</h2>
<p>详细总结：<a href=""></a></p>
<h2>问题总结</h2>
<p>详细总结：<a href=""></a></p>
]]></content:encoded>
    </item>
    <item>
      <title>数据资产</title>
      <link>https://blog.magictable.ha.cn/%E6%95%B0%E6%8D%AE%E8%B5%84%E4%BA%A7.html</link>
      <guid>https://blog.magictable.ha.cn/%E6%95%B0%E6%8D%AE%E8%B5%84%E4%BA%A7.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">数据资产</source>
      <description>文章摘要： 从网络中或私人存储的数据文件，该页面内容将会动态更新。若出现无法访问或数据数据丢失，请及时联系博主。 归档 暂无 工程 字体 JetBrains Mono：等宽、无衬线字体。 词库 暂无 项目源码 暂无 代码仓库 暂无 三维模型 暂无 AI数据集 DrivingDojo：官方网站，推进交互式和知识丰富的驾驶世界模型。 软件包 操作系统 De...</description>
      <pubDate>Wed, 09 Aug 2023 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 从网络中或私人存储的数据文件，该页面内容将会动态更新。若出现无法访问或数据数据丢失，请及时联系博主。</p>
<!-- more-->
<h2>归档</h2>
<ul>
<li>暂无</li>
</ul>
<h2>工程</h2>
<h3>字体</h3>
<ul>
<li>JetBrains Mono：等宽、无衬线字体。</li>
</ul>
<h3>词库</h3>
<ul>
<li>暂无</li>
</ul>
<h3>项目源码</h3>
<ul>
<li>暂无</li>
</ul>
<h3>代码仓库</h3>
<ul>
<li>暂无</li>
</ul>
<h3>三维模型</h3>
<ul>
<li>暂无</li>
</ul>
<h3>AI数据集</h3>
<ul>
<li>DrivingDojo：<a href="https://drivingdojo.github.io/" target="_blank" rel="noopener noreferrer">官方网站</a>，推进交互式和知识丰富的驾驶世界模型。</li>
</ul>
<h2>软件包</h2>
<h3>操作系统</h3>
<ul>
<li>Debian Linux：<a href="https://www.debian.org/distrib/" target="_blank" rel="noopener noreferrer">官方网站</a>，操作系统。</li>
<li>Windows：<a href="https://www.microsoft.com/zh-cn/windows/" target="_blank" rel="noopener noreferrer">官方网站</a>，Microsoft 公司提供的操作系统。</li>
</ul>
<h3>实用工具</h3>
<ul>
<li>Firefox：<a href="https://www.mozilla.org/zh-CN/firefox/" target="_blank" rel="noopener noreferrer">官方网站</a>，隐私放在首位的浏览器软件。</li>
<li>Thunderbird：<a href="https://www.thunderbird.net/zh-CN/" target="_blank" rel="noopener noreferrer">官方网站</a>，电子邮件、聊天、通讯录、日历、文件快传、RSS收取点、新闻组。</li>
<li>Obsidian：<a href="https://obsidian.md/" target="_blank" rel="noopener noreferrer">官方网站</a>，私密且灵活的笔记软件。</li>
<li>Folo：<a href="https://folo.is/" target="_blank" rel="noopener noreferrer">官方网站</a>，RSS 订阅工具。</li>
<li>LibreOffice：<a href="https://www.libreoffice.org/" target="_blank" rel="noopener noreferrer">官方网站</a>，自由免费的全能办公套件。</li>
<li>OBS-Studio：<a href="https://obsproject.com/" target="_blank" rel="noopener noreferrer">官方网站</a>，视频录制和直播软件。</li>
<li>VLC：<a href="https://www.videolan.org/vlc/" target="_blank" rel="noopener noreferrer">官方网站</a>，多媒体播放器软件及框架。</li>
<li>Transmission：<a href="https://transmissionbt.com/" target="_blank" rel="noopener noreferrer">官方网站</a>，Bittorrent 软件。</li>
<li>imToken<a href="https://www.token.im/" target="_blank" rel="noopener noreferrer">官方网站</a>，区块链钱包软件。</li>
<li>飞书：<a href="https://www.feishu.cn/" target="_blank" rel="noopener noreferrer">官方网站</a>，效率办公软件。</li>
<li>QQ：<a href="https://im.qq.com/index/#downloadAnchor" target="_blank" rel="noopener noreferrer">官方网站</a>，即时通讯软件。</li>
<li>网易云音乐：<a href="https://music.163.com/" target="_blank" rel="noopener noreferrer">官方网站</a>，音乐平台和软件。</li>
<li>抖音：<a href="https://www.douyin.com/" target="_blank" rel="noopener noreferrer">官方网站</a>，短视频平台。</li>
<li>小红书：<a href="https://www.xiaohongshu.com/" target="_blank" rel="noopener noreferrer">官方网站</a>，生活方式平台和消费决策入口。</li>
</ul>
<h3>艺术创作</h3>
<ul>
<li>OpenShot Video Editor:<a href="https://www.openshot.org/" target="_blank" rel="noopener noreferrer">官方网站</a>，音视频剪辑软件。</li>
<li>Krita：<a href="https://krita.org/zh-cn/" target="_blank" rel="noopener noreferrer">官方网站</a>，数字绘画软件。</li>
<li>GIMP：<a href="https://www.gimp.org/" target="_blank" rel="noopener noreferrer">官方网站</a>，图像编辑器软件。</li>
<li>Blender：<a href="https://www.blender.org/" target="_blank" rel="noopener noreferrer">官方网站</a>，3D创作软件。</li>
<li>FreeCAD：<a href="https://www.freecad.org/" target="_blank" rel="noopener noreferrer">官方网站</a>，参数化建模软件，适用工业设计，图纸设计，电路图设计。</li>
<li>OpenSCAD：<a href="https://openscad.org/" target="_blank" rel="noopener noreferrer">官方网站</a>，编程风格的 3D CAD 建模软件。</li>
<li>QGIS：<a href="https://www.qgis.org" target="_blank" rel="noopener noreferrer">官方网站</a>，地理信息系统软件。</li>
</ul>
<h3>程序开发</h3>
<ul>
<li>Sublime Text：<a href="https://www.sublimetext.com/" target="_blank" rel="noopener noreferrer">官方网站</a>，专为代码、标记和文章设计的精致文本编辑器。</li>
<li>Visual Studio Code：<a href="https://code.visualstudio.com/" target="_blank" rel="noopener noreferrer">官方网站</a>，代码编辑器软件。</li>
<li>Intellij IDEA：<a href="https://www.jetbrains.com/zh-cn/idea/" target="_blank" rel="noopener noreferrer">官方网站</a>，代码编辑器软件。</li>
<li>OpenPLC：<a href="https://autonomylogic.com/" target="_blank" rel="noopener noreferrer">官方网站</a>，基于 Beremiz IDE 的多硬件可编程逻辑控制器套件。</li>
</ul>
<h3>运维管理</h3>
<ul>
<li>Remmina：<a href="https://remmina.org/" target="_blank" rel="noopener noreferrer">官方网站</a>，远程访问软件。</li>
<li>Virtual Box：<a href="https://www.oracle.com/cn/virtualization/virtualbox/" target="_blank" rel="noopener noreferrer">官方网站</a>，虚拟化软件。</li>
<li>Boxes：<a href="">官方网站</a>，虚拟化软件。</li>
</ul>
<h3>中间件</h3>
<ul>
<li>Git：<a href="https://git-scm.com/" target="_blank" rel="noopener noreferrer">官方下载</a>，分布式版本控制工具。</li>
<li>Python：<a href="https://www.python.org/downloads/" target="_blank" rel="noopener noreferrer">官方下载</a>，Python 编程语言，包含 pip 依赖库管理工具。</li>
<li>Java：<a href="https://www.oracle.com/java/technologies/downloads/" target="_blank" rel="noopener noreferrer">官方下载</a>，Java 编程语言。</li>
<li>Maven：<a href="https://maven.apache.org/download.cgi" target="_blank" rel="noopener noreferrer">官网下载</a>，Java 依赖库管理工具。</li>
<li>Gradle：<a href="https://gradle.org/" target="_blank" rel="noopener noreferrer">官方下载</a>，构建工具。</li>
<li>NodeJS：<a href="https://nodejs.org/zh-cn/download" target="_blank" rel="noopener noreferrer">官方下载</a>，JavaScript 运行时环境，包含 npm 依赖库管理工具。</li>
</ul>
<h3>数据库</h3>
<ul>
<li>MySQL：<a href="https://dev.mysql.com/downloads/mysql/" target="_blank" rel="noopener noreferrer">官方网站</a>，关系型数据库软件。</li>
</ul>
<h2>视频</h2>
<h3>时事录像</h3>
<ul>
<li>暂无</li>
</ul>
<h3>影视视频</h3>
<ul>
<li>游戏电影剪辑</li>
<li>暂无</li>
</ul>
<h3>视频素材</h3>
<ul>
<li>暂无</li>
</ul>
<h3>动态壁纸</h3>
<ul>
<li>暂无</li>
</ul>
<h2>图片</h2>
<h3>精选壁纸</h3>
<ul>
<li>暂无</li>
</ul>
<h3>图片参考</h3>
<ul>
<li>暂无</li>
</ul>
<h3>图片素材</h3>
<ul>
<li>暂无</li>
</ul>
<h3>图标库</h3>
<ul>
<li>暂无</li>
</ul>
<h3>表情包</h3>
<ul>
<li>暂无</li>
</ul>
<h2>文档</h2>
<h3>模板-文档（Word）</h3>
<ul>
<li>暂无</li>
</ul>
<h3>模板-表格（Excel）</h3>
<ul>
<li>暂无</li>
</ul>
<h3>模板-幻灯片演示（PPT）</h3>
<ul>
<li>暂无</li>
</ul>
<h3>文献论文</h3>
<ul>
<li>暂无</li>
</ul>
<h3>开发文档</h3>
<ul>
<li>Oracle官方文档：<a href="https://docs.oracle.com/en/" target="_blank" rel="noopener noreferrer">官方网站</a>，。</li>
</ul>
<h3>小说</h3>
<ul>
<li>暂无</li>
</ul>
<h2>音频</h2>
<h3>音乐库</h3>
<ul>
<li>私人音乐库：<a href="https://pan.baidu.com/s/1dSqASM0XOiuX2o63RLM62w?pwd=2035" target="_blank" rel="noopener noreferrer">百度网盘</a></li>
</ul>
<h3>纯音乐</h3>
<h3>白噪声</h3>
<ul>
<li>暂无</li>
</ul>
<h3>音乐集</h3>
<h3>素材</h3>
<ul>
<li>暂无</li>
</ul>
<h3>语音包</h3>
<ul>
<li>崩坏3-游戏角色-原始音频文件：<a href="https://pan.baidu.com/s/1nEBIooUNe9ew2uG1qUjtcw?pwd=2035" target="_blank" rel="noopener noreferrer">百度网盘</a></li>
<li>崩坏3-游戏角色-音频数据集：<a href="https://pan.baidu.com/s/1hDCwoeH58Gy8z90XrbxiLw?pwd=2035" target="_blank" rel="noopener noreferrer">百度网盘</a></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>新闻资讯</title>
      <link>https://blog.magictable.ha.cn/%E6%96%B0%E9%97%BB%E8%B5%84%E8%AE%AF.html</link>
      <guid>https://blog.magictable.ha.cn/%E6%96%B0%E9%97%BB%E8%B5%84%E8%AE%AF.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">新闻资讯</source>
      <description>文章摘要： 收集并整理相关新闻信息资讯。 生活变化 技术革新 地月空间DRO探索研究 地月空间DRO探索研究选取的DRO是一类距离地球约31到45万公里、距离月球约7到10万公里的轨道，可以看作连接地球、月球和深空的交通枢纽，具有卫星可以低能耗进入、稳定停泊、低能耗全域可达等优点。 未来规划 （2025年）“十四五”机器人产业发展规划 到 2025 年...</description>
      <pubDate>Wed, 09 Aug 2023 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 收集并整理相关新闻信息资讯。</p>
<!-- more-->
<h2>生活变化</h2>
<h2>技术革新</h2>
<h3>地月空间DRO探索研究</h3>
<p>地月空间DRO探索研究选取的DRO是一类距离地球约31到45万公里、距离月球约7到10万公里的轨道，可以看作连接地球、月球和深空的交通枢纽，具有卫星可以低能耗进入、稳定停泊、低能耗全域可达等优点。</p>
<blockquote>
<p><img src="https://bkimg.cdn.bcebos.com/pic/6a63f6246b600c338744e49a3b16460fd9f9d72a0b15?x-bce-process=image/format,f_auto/watermark,image_d2F0ZXIvYmFpa2UyNzI,g_7,xp_5,yp_5,P_20/resize,m_lfit,limit_1,h_1080" alt=""></p>
</blockquote>
<h2>未来规划</h2>
<h3>（2025年）“十四五”机器人产业发展规划</h3>
<p>到 2025 年，我国成为全球机器人技术创新策源地、高端制造集聚地和集成应用新高地。</p>
<p>建成 3~5 个有国际影响力的产业集群。制造业机器人密度实现翻番。</p>
<p>到 2035 年，我国机器人产业综合实力达到国际领先水平，机器人成为经济发展、人民生活、社会治理的重要组成。</p>
<p>信息来源：<a href="https://www.gov.cn/zhengce/zhengceku/2021-12/28/content_5664988.htm" target="_blank" rel="noopener noreferrer">中华人民共和国中央人民政府（中国政府网）</a></p>
<h3>（2035年）北斗卫星导航系统2035年前发展规划</h3>
<p>2024年11月28日上午，中国卫星导航系统管理办公室在京组织召开纪念北斗卫星导航系统工程建设三十周年座谈会，发布《北斗卫星导航系统2035年前发展规划》。</p>
<blockquote>
<p>“计划2025年完成下一代北斗系统关键技术攻关；2027年左右发射3颗先导试验卫星，开展下一代新技术体制试验；2029年左右开始发射下一代北斗系统组网卫星；2035年完成下一代北斗系统建设。” —— 杨长风</p>
</blockquote>
<p>下一代北斗系统还将建设集成高效的一体化地面系统，实现资源弹性调度、数据共享使用、业务连续运行；覆盖地表至深空的各类用户终端，以及与其他不依赖卫星的定位导航授时手段融合的各类用户终端，实现用户多场景、高精度、智能化使用。</p>
<p>信息来源：<a href="https://www.gov.cn/yaowen/liebiao/202411/content_6989829.htm" target="_blank" rel="noopener noreferrer">中华人民共和国中央人民政府（中国政府网）</a></p>
<h3>（2045年）2045年前完成在月球建设“国际月球科研站”</h3>
<p>2024年04月24日，神舟十八号载人飞行任务新闻发布会提到。</p>
<p>国际月球科研站将按照2个阶段分步实施，第一步是基本型建设阶段，2035年前，以月球南极为核心，建成功能基本齐备、要素基本配套的综合科学设施。第二步是拓展型建设阶段，2045年前，以月球轨道站为枢纽，建成功能完善、相当规模、稳定运行的设备设施。</p>
<p>月球是一个起点，国际月球科研站就为以后人类走向更远深空提供一个长时间科研研究，长时间能够在上面进行工作、生活。为以后奔向火星，奔向更远的深空做技术储备和物资、人力上的储备。</p>
<p>信息来源：<a href="https://news.cctv.com/2024/04/25/ARTIPscNE90TrGrzKCFVvcIG240425.shtml" target="_blank" rel="noopener noreferrer">中央广播电视总台（央视网）</a></p>
<h3>（2050年）建成聚变能原型电站</h3>
<p>2035年前，中国将建设、运行聚变工程实验堆（CFETR），开展稳态、高效、安全聚变堆科学研究；到2050年，建成聚变能原型电站，探索聚变能电站的工程、安全、经济性。</p>
<p>信息来源：<a href="https://baijiahao.baidu.com/s?id=1790154393758206686" target="_blank" rel="noopener noreferrer">全球技术地图</a></p>
<h2>时间线</h2>
<h3>（2025-05-15）太空卫星计算星座</h3>
<p>2025年5月14日12时12分，国星宇航、之江实验室携手在酒泉卫星发射中心使用长征二号丁运载火箭，成功将全球首个太空计算卫星星座发射升空，卫星顺利进入预定轨道。</p>
<p>太空计算卫星星座是国星宇航发起的“星算”计划首发星座，也是之江实验室“三体计算星座”的首发星座。</p>
<p>本次发射的星座包含12颗计算卫星，搭载80亿参数的天基模型，实现了“算力上天、在轨组网、模型上天”，可对L0-L4级卫星数据进行在轨处理、推理，将执行异轨卫星激光接入、天文科学观测等在轨任务。</p>
<h3>（2024-xx-xx）Genesis综合物理仿真平台</h3>
<p>根据Genesis的发布页面介绍，Genesis是一个<strong>综合物理仿真平台</strong>，专为obotics, Embodied AI, &amp; Physical AI应用而设计。**该核心物理引擎通过在上层运行的生成代理框架进一步增强，旨在为机器人及其他领域实现全自动数据生成。**生成框架旨在自动生成数据，包括以下模式：</p>
<ol>
<li>物理精确且空间一致的视频</li>
<li>相机运动和参数</li>
<li>人物和动物的动作</li>
<li>机器人操纵和运动策略，可部署到现实世界</li>
<li>全互动3D场景</li>
<li>开放世界关节对象生成</li>
<li>语音、面部动画和情感</li>
</ol>
<p>Genesis的物理引擎由VLM-based generated agent提供支持，该agent使用底层仿真提供的API作为创建4D动态世界的工具，然后将其用作提取各种数据模式的基础数据源。与生成相机和物体运动的模块一起，我们能够生成物理精确且视图一致的视频和其他数据形式。</p>
<p>信息来源：<a href="https://genesis-world.readthedocs.io/en/latest/index.html" target="_blank" rel="noopener noreferrer">Genesis官网</a></p>
<h3>（2024-08-20）解限机（Mecha BREAK）</h3>
<p>西山居游戏推出的“解限机（Mecha BREAK）”首次展示了采用设备端小语言模型 NVIDIA Nemotron-4 4B 的 ACE 技术，它使游戏角色提供更快、更准确的响应。</p>
<p>NVIDIA发布了首款使用了NVIDIA ACE以及数字人技术并进行演示的《解限机》demo视频，基于该项技术，驾驶员们可以在设备端运行ACE来使用自然语言与场景中的游戏角色进行互动。</p>
<p><strong>ACE NIM 微服务</strong>使开发者可以通过云端或 RTX AI PC 和工作站部署先进的生成式 AI 模型，从而将 AI 引入他们的游戏和应用。通过 ACE NIM 微服务，非玩家角色 （NPC）可以在游戏中与玩家进行实时动态互动和对话。</p>
<p>信息来源：<a href="https://www.mechabreak.cn/index/index.html#/news-article/7386/183" target="_blank" rel="noopener noreferrer">解限机官网</a>、<a href="https://www.nvidia.cn/geforce/news/mecha-break-nvidia-ace-nims-rtx-pc-laptop-games-apps/" target="_blank" rel="noopener noreferrer">NVIDIA官网</a></p>
<h3>（2023-10-18）全球人工智能治理倡议</h3>
<p>各国应在人工智能治理中加强信息交流和技术合作，共同做好风险防范，形成具有广泛共识的人工智能治理框架和标准规范，不断提升人工智能技术的安全性、可靠性、可控性、公平性。我们欢迎各国政府、国际组织、企业、科研院校、民间机构和公民个人等各主体秉持共商共建共享的理念，协力共同促进人工智能治理。</p>
<p>信息来源：<a href="https://www.cac.gov.cn/2023-10/18/c_1699291032884978.htm" target="_blank" rel="noopener noreferrer">中央网络安全和信息化委员会办公室（网信办）</a></p>
]]></content:encoded>
      <enclosure url="https://bkimg.cdn.bcebos.com/pic/6a63f6246b600c338744e49a3b16460fd9f9d72a0b15?x-bce-process=image/format,f_auto/watermark,image_d2F0ZXIvYmFpa2UyNzI,g_7,xp_5,yp_5,P_20/resize,m_lfit,limit_1,h_1080" type="image/"/>
    </item>
    <item>
      <title>更新日志</title>
      <link>https://blog.magictable.ha.cn/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97.html</link>
      <guid>https://blog.magictable.ha.cn/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">更新日志</source>
      <description>文章摘要： 知识库完成进度 [15%]，仍然需要继续努力。 任务规划 搭建人类社会知识指难：完善自身、社会、环境之间的最优解决方案，提高自身应对第三方对象的谋略和国家政策的应对能力。 [ ] PUA（一种给人洗脑的机制） [ ] 完善（环境、社会）、（道德、法律）、（经济、政策） [ ] 生理健康、心理健康 系统环境搭建：整理操作操作系统。 常用软件总...</description>
      <pubDate>Wed, 09 Aug 2023 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 知识库完成进度 [15%]，仍然需要继续努力。</p>
<!-- more -->
<h2>任务规划</h2>
<p><strong>搭建人类社会知识指难</strong>：完善自身、社会、环境之间的最优解决方案，提高自身应对第三方对象的谋略和国家政策的应对能力。</p>
<ul>
<li>[ ] PUA（一种给人洗脑的机制）</li>
<li>[ ] 完善（环境、社会）、（道德、法律）、（经济、政策）</li>
<li>[ ] 生理健康、心理健康</li>
</ul>
<p><strong>系统环境搭建</strong>：整理操作操作系统。</p>
<p><strong>常用软件总结</strong>：常用中间件软件的安装与配置方案，以及异常处理流程。</p>
<p><strong>软件开发知识库</strong>：需要软件开发时需要用到的编程语言、设计模式、软件架构、开发框架、API接口设计，以及开发规范和经验。</p>
<p><strong>收集并整理微服务服务程序代码</strong>：软件开发正在向 “微服务软件架构” 方向发展，即将服务拆分为最小单位，并实现自主管理自主运行。并通过 “服务注册平台” 统一管理，并为 “上层的应用软件服务” 或 “其他底层的微服务” 提供服务发现（服务IP地址）进行连接交互。</p>
<p><strong>完善个人项目</strong>：整理项目的需求分析和技术选型方案，并记录项目开发过程中遇到的问题和解决方案，为以后可能遇到类似的问题提供可靠来源。</p>
<p><strong>对接大模型</strong>：让博客中编写的文章作为大模型的知识库，不断完善，并为自身提供专属的知识解答。</p>
<h2>补丁计划</h2>
<ul>
<li>完善个人知识库，增加文章的双向链接紧密程度。</li>
</ul>
<h2>已知漏洞</h2>
<ul>
<li>缺少Git工具在 “团队协作流程” 和 “跨团队协作流程” 中的使用总结和流程图。</li>
<li>缺少微服务架构的项目实战的完整知识总结。</li>
<li>如何解决 Node.js，版本问题，不使用第三方工具，如何在本地安装多个版本的Node.js，并只在项目中手动指定所需的Node.js目录位置，实现不同项目手动指定Node.js版本，同时不使用其他第三方工具。</li>
<li>如何看懂论文。</li>
<li>人类社会生存指难。</li>
<li>RSS订阅：知识库内部的文章经常修改变动导致URL路径也经常变化，这不利于外部文章关联知识库内部的文章。如何实现知识库内部的文章URL发生变化的时候，能向有进行关联的外部文章发送 “订阅提醒和自动更新” 的功能。</li>
<li>包管理工具/应用商店：如何实现操作系统中管理多个不同版本的软件（软件包），并且能够很好的管理软件（软件包）之间的依赖关系。（目前实现的是将一个软件所需的依赖全部打包在一起，但占用容量大）</li>
</ul>
<h2>更新日志</h2>
<h3>2025-11</h3>
<p>再次更新顶级目录结构，具体如下：</p>
<ul>
<li><strong>任务、日记、数据</strong>：实时可变数据。</li>
<li><strong>工作、私人、项目</strong>：日常记录数据。</li>
<li><strong>联系人、资源、知识</strong>：总结笔记数据。</li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p><strong>发现问题</strong>：应当把生活中的任何事物都要考虑在内，这样能形成更加紧密的联系和管理。</p>
<p><strong>解决方案</strong>：将笔记分为“任务、日记、第三方数据”、“工作、私人、项目”、“联系人、资源、知识”；其中“<strong>任务和日记</strong>”是其他分类中都必不可少的，将统一在此处管理；使用“<strong>可视化</strong>”方式在上层最终筛选和展示出来。</p>
<p><strong>未来规划</strong>：提高笔记自动化程度，实现AI自动更新和管理。</p>
</div>
<h3>2025-06</h3>
<ul>
<li>博客文章进一步整理分类。</li>
<li>考虑到博客文章过多导致Github上网站大小限制，以及涉及违法和隐私的文章，将会整理到本地仅自己可看，也降低了部署在Github上的存储大小。</li>
</ul>
<p>知识类 - 笔记分类</p>
<ul>
<li><code>note</code>&nbsp;- 学习笔记（日记、摘录、论文、方案、技术）</li>
<li><code>design</code>&nbsp;- 艺术设计（风格、视觉）</li>
<li><code>software</code>&nbsp;- 软件程序（设计模式、软件架构、数据结构、算法设计、程序语言、代码类库、操作系统、软件包）</li>
<li><code>hardware</code>&nbsp;- 硬件设备（原材料、加工工艺、元器件、产品设备）</li>
<li><code>rule</code>&nbsp;- 世界规则（健康、环境、社会、道德、法律、经济、政策）</li>
</ul>
<p>数据类 - 笔记分类</p>
<ul>
<li><code>diary</code> - 日记（文件以<code>YYYY-MM-DD_HHmmss</code>格式命名）</li>
<li><code>contact</code> - 联系人（家人、老乡、朋友、老师、同学、公司、客户、陌生人）</li>
<li><code>data</code> - 个人数据（工作、私人、项目、资源）</li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p><strong>发现问题</strong>：考虑到博客文章过多导致Github上网站大小限制，以及涉及违法和隐私。</p>
<p><strong>解决方案</strong>：配置仅将“<code>note/</code>、<code>hardware/</code>、<code>rule/</code>”目录下的文章才会被发布到博客上，也降低了部署在Github上的存储大小。</p>
<p><strong>未来规划</strong>：提高“本地文章”和“博客上的文章”之间的统一管理程度。</p>
</div>
<h3>2025-01</h3>
<ul>
<li>博客中将包含各行业所需的知识库，实现在有想法的时候及时记录保持起来，无需花大量时间思考应该记录在哪里而烦恼。</li>
<li>VuePress 静态博客主题已经进行升级和Markdown编写格式适配，解决了之前的 “提示代码块”的问题。</li>
<li>当前博客仍然处于急剧扩张和内容完善阶段，暂不提供RSS订阅功能。</li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p><strong>发现问题</strong>：VuePress 静态博客主题与 Obsidian 笔记软件的整合程度有待提升和优化。以及目录结构后续会进一步细化，并继续延续之前的扩展方式。</p>
<p><strong>解决方案</strong>：暂无。</p>
<p><strong>未来规划</strong>：完善笔记内容和知识图谱关联程度。</p>
</div>
<h3>2024-12</h3>
<ul>
<li>博客中的文章经过多次迭代修改，已经确定使用一层目录来进行大分类，详细分类通过 “小分类英文名 + 具体内容” 的方式对文章进行命名。通过英文和中文的命名方式提高差异度，能够快速定位和缩小范围。</li>
<li>该命名方式非常实用，文章链接不受目录结构的变化而经常发生改动。</li>
<li>主要标签（知识总结、查询手册、问题总结、热门推荐）、状态标签（已停滞、待完善、进行中、已完成）</li>
<li>为了能让文章能通过名称就能够快速查阅所需知识，应优先查看命名中最少用到 <code>-</code> 符号的文章，这类文章是其他相关文章的链接整合作用，能够通过该文章跳转到其他相关文章，实现在不修改其他文章命名的情况下扩展该类别的文章，运用到了“开闭原则”。</li>
<li>将文章的多个部分的内容拆分成多个文章，并通过"烤肉串命名法（kebab-case）"在文件名后面不断追加新标题，运用到了“单一职责原则”。</li>
<li>由于部分文章会通过链接的形式被多次提及和复用，文章之间的双向链接构成了“关系图谱”知识库，运用到了“组合/聚合复用原则”。</li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p><strong>发现问题</strong>：新博客主题的部署和配置没有完全理解，发布的文章出现部分无法正确展示。</p>
<p><strong>解决方案</strong>：仅保留实用的功能部分，但仍有 “提示文本块” 无法正确展示。</p>
<p><strong>未来规划</strong>：后续在博客和文章基本完善后，对外提供RSS订阅功能，实现读者能通过有RSS订阅功能的客户端软件来及时接收到博客的文章更新信息。</p>
</div>
<h3>2024-11</h3>
<ul>
<li>第二版博客正式上线，使用 VuePress 静态博客主题，并部署在Github上，不同的是编辑文章的软件是使用Obsidian笔记软件。</li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p><strong>发现问题</strong>：Obsidian和VuePress对Markdown语法格式有些许不同，因此需要重点调整一下文章中使用的语法。</p>
<p><strong>解决方案</strong>：仅手动和对两者都支持的语法，总结出都支持的编写规范。</p>
<p><strong>未来规划</strong>：需要进一步完善标签和分类，提高新文章的可扩展性。完善文章之间的关联性，构成完善的知识图谱。</p>
</div>
<h3>2024-10</h3>
<ul>
<li>将所需要的知识二次整理成更易于理解的方式展示和查询。</li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p><strong>发现问题</strong>：随着博客文章越来越多，文章管理和查询的效率就变得很低。</p>
<p><strong>解决方案</strong>：使用Obsidian笔记软件来实现管理和编辑文章，最主要的是实现可视化的双向链接。</p>
<p><strong>未来规划</strong>：完善标签和分类，并能够对文章提供高可扩展性。</p>
</div>
<h3>2023-08</h3>
<ul>
<li>第一版博客正式上线，使用 Hexo 博客主题，并部署在Github上，平时通过VScode代码编辑器来更新文章和上传同步到GitHub上更新博客页面。</li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p><strong>发现问题</strong>：博客主题本身有不足的地方，但是美观实用。</p>
<p><strong>解决方案</strong>：避开文章的不足的地方，整理出了一份较为合理的博客文章编写规范。</p>
<p><strong>未来规划</strong>：希望在未来找到新的博客主题。</p>
</div>
<h3>2023-06</h3>
<ul>
<li>使用动态博客还是静态博客？我最终选择了静态博客，因为深思熟虑之后发现自己不需要后台管理或者更新数据库的功能，同时静态博客能够免费部署在Github等代码托管平台上。</li>
</ul>
<div class="hint-container note">
<p class="hint-container-title">注释</p>
<p><strong>发现问题</strong>：静态博客部署到GitHub流程和冲突问题。</p>
<p><strong>解决方案</strong>：使用VScode代码编辑工具，该工具提供了Git管理插件页面，完成部署后，后续很少再通过命令对文章进行同步和发布。</p>
<p><strong>未来规划</strong>：挑选一个喜欢的博客主题，并不断完善知识库笔记。</p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>网站导航</title>
      <link>https://blog.magictable.ha.cn/%E7%BD%91%E7%AB%99%E5%AF%BC%E8%88%AA.html</link>
      <guid>https://blog.magictable.ha.cn/%E7%BD%91%E7%AB%99%E5%AF%BC%E8%88%AA.html</guid>
      <source url="https://blog.magictable.ha.cn/rss.xml">网站导航</source>
      <description>文章摘要： 博主个人整理的第三方网站导航，该页面内容将会动态更新。若你发现网站无法使用或有更好的网站，也可以联系博主并分享个人的看法。 导航网站 cxy521，程序员相关的导航网站。 语学习资源导航，。 CliCli，二次元网站导航平台。 果汁导航，网站导航平台。 媒体志，科技媒体官网收集和查询平台。 updatestar，免费软件下载收集平台。 li...</description>
      <pubDate>Wed, 09 Aug 2023 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><strong>文章摘要：</strong> 博主个人整理的第三方网站导航，该页面内容将会动态更新。若你发现网站无法使用或有更好的网站，也可以联系博主并分享个人的看法。</p>
<!-- more-->
<h2>导航网站</h2>
<ul>
<li><a href="http://www.cxy521.com/" target="_blank" rel="noopener noreferrer">cxy521</a>，程序员相关的导航网站。</li>
<li><a href="https://en.knowledgefxg.com/" target="_blank" rel="noopener noreferrer">语学习资源导航</a>，。</li>
<li><a href="https://clicli.com.cn/" target="_blank" rel="noopener noreferrer">CliCli</a>，二次元网站导航平台。</li>
<li><a href="http://guozhivip.com/" target="_blank" rel="noopener noreferrer">果汁导航</a>，网站导航平台。</li>
<li><a href="http://www.meitizhi.com/" target="_blank" rel="noopener noreferrer">媒体志</a>，科技媒体官网收集和查询平台。</li>
<li><a href="https://www.updatestar.com/" target="_blank" rel="noopener noreferrer">updatestar</a>，免费软件下载收集平台。</li>
<li><a href="https://tools.liumingye.cn" target="_blank" rel="noopener noreferrer">liumingye在线工具</a>，在线实用工具收集平台。</li>
<li><a href="https://flathub.org/" target="_blank" rel="noopener noreferrer">Flathub</a>，获取所有你喜爱应用的最新版本，适用于任何 Linux 发行版。</li>
</ul>
<h2>实用工具</h2>
<ul>
<li><a href="https://chat.z.ai/" target="_blank" rel="noopener noreferrer">Z.ai</a>，国内，GLM模型web交互网站。</li>
<li><a href="https://chatglm.cn/main/alltoolsdetail" target="_blank" rel="noopener noreferrer">智谱AI</a>，国内，生成式 AI 助手。</li>
<li><a href="https://metaso.cn/" target="_blank" rel="noopener noreferrer">秘塔AI搜索</a>，国内，搜索引擎网站，搭载大模型。</li>
<li><a href="https://baike.baidu.com/" target="_blank" rel="noopener noreferrer">百度百科</a>，百度公司推出的网络百科全书。（<em>这不是搜索引擎，而是百度知识库</em>）</li>
<li><a href="https://zh.wikihow.com/" target="_blank" rel="noopener noreferrer">wikiHow</a>，互联网上最值得信赖的指南网站。</li>
<li><a href="https://yandex.com/" target="_blank" rel="noopener noreferrer">Yandex</a>，国外，搜索引擎网站,较少限制。</li>
<li><a href="https://rsshub.netlify.app/zh/" target="_blank" rel="noopener noreferrer">RSSHub</a>，是一个开源、简单易用、易于扩展的 RSS 生成器，可以给任何奇奇怪怪的内容生成 RSS 订阅源。</li>
<li><a href="https://www.json.cn/" target="_blank" rel="noopener noreferrer">Json.cn</a>，在线格式转换和工具、教程、博客文章、AI 导航。</li>
<li><a href="https://snapany.com/zh" target="_blank" rel="noopener noreferrer">SnapAny</a>，视频图片解析下载网站。</li>
<li><a href="https://excalidraw.com/" target="_blank" rel="noopener noreferrer">Excalidraw</a>，在线绘图白板网站。</li>
<li><a href="https://mermaid.live/edit" target="_blank" rel="noopener noreferrer">Mermaid</a>，在线图表编辑。</li>
<li><a href="https://zmdmap.com/" target="_blank" rel="noopener noreferrer">终末地资源收集互动地图</a>，明日方舟终末地资源收集互动地图工具网站。</li>
</ul>
<h2>资源网站</h2>
<h3>工程项目</h3>
<p>字体</p>
<ul>
<li><a href="https://font.icu/" target="_blank" rel="noopener noreferrer">Free Font</a>，可免费商用字体网站。</li>
</ul>
<p>3D模型</p>
<ul>
<li><a href="https://makerworld.com.cn/zh" target="_blank" rel="noopener noreferrer">MakerWorld</a>，让每一位爱好者走进并探索无限的 3D 打印世界，提供数十万免费模型，鼓励沟通、交流和分享，激活创意，丰富人们的想象空间，让创意生活更精彩。</li>
<li><a href="https://free3d.com/" target="_blank" rel="noopener noreferrer">Free3D</a></li>
<li><a href="https://www.aplaybox.com/" target="_blank" rel="noopener noreferrer">模之屋</a>，免费，但需要登录账号。</li>
<li><a href="https://pvp.icreate.qq.com/" target="_blank" rel="noopener noreferrer">荣耀萤火计划</a>，王者荣耀官方对外提供的图像、模型、音频等数据资源。</li>
</ul>
<p>地图</p>
<ul>
<li><a href="https://www.geofabrik.de/" target="_blank" rel="noopener noreferrer">geofabrik</a>，地图网站。</li>
</ul>
<p>图标</p>
<ul>
<li><a href="https://fontawesome.com/" target="_blank" rel="noopener noreferrer">fontawesome</a>，图标网站。</li>
</ul>
<p>AI数据集</p>
<ul>
<li><a href="https://opendatalab.com/" target="_blank" rel="noopener noreferrer">OpenDataLab</a>，国内，高质量开放数据集网站。</li>
<li><a href="http://corpus.zhonghuayuwen.org/" target="_blank" rel="noopener noreferrer">语料库在线</a>，自然语言处理中文相关数据集。</li>
<li><a href="https://www.datasetlist.com/" target="_blank" rel="noopener noreferrer">Dataset list</a>，各类机器学习数据集网站。</li>
</ul>
<h3>影视动漫</h3>
<ul>
<li><a href="https://tv.cctv.com/" target="_blank" rel="noopener noreferrer">央视网</a>，中国国家官方视频网站。</li>
<li><a href="https://www.bilibili.com/" target="_blank" rel="noopener noreferrer">哔哩哔哩</a>，偏向二次元视频网站。</li>
<li><a href="https://cilixiong.org/" target="_blank" rel="noopener noreferrer">磁力熊</a>，免费在线观看和下载，高质量，网速快。</li>
<li><a href="https://www.wangfei1.cc/" target="_blank" rel="noopener noreferrer">wangfei.TV</a>，。</li>
<li><a href="https://www.novipnoad.net/" target="_blank" rel="noopener noreferrer">NO影视</a>，国外，快速，在线观看，偏向国外影视，。</li>
<li><a href="https://subhd.tv/" target="_blank" rel="noopener noreferrer">SubHD</a>，影视字幕提供网站。</li>
</ul>
<h3>图片壁纸</h3>
<ul>
<li><a href="https://www.airpano.com/" target="_blank" rel="noopener noreferrer">Airpano</a>，专注于360度全景航拍与虚拟现实内容制作的俄罗斯国际团队，通过无人机、热气球等技术手段，拍摄全球300多个地标的超高分辨率全景图像和视频，并提供沉浸式的3D漫游体验。</li>
<li><a href="https://www.zcool.com.cn/" target="_blank" rel="noopener noreferrer">ZCOOL站酷</a>，艺术家网站。</li>
<li><a href="https://huaban.com/" target="_blank" rel="noopener noreferrer">花瓣</a>，访问速度快速。</li>
<li><a href="https://livewallp.com/" target="_blank" rel="noopener noreferrer">Live Wallpaper</a>，国外，访问速度缓慢，动态壁纸。</li>
</ul>
<h3>文档文献</h3>
<ul>
<li><a href="https://zh.101isfp.ru/" target="_blank" rel="noopener noreferrer">z-library</a>，世界上最大的电子图书馆。</li>
<li><a href="https://zh.wikibooks.org/" target="_blank" rel="noopener noreferrer">维基百科书</a>，人人可编辑的自由教学读本。</li>
<li><a href="https://pubscholar.cn/" target="_blank" rel="noopener noreferrer">pubscholar工艺学术平台</a>，中国科学院推出的文献学术平台。</li>
<li><a href="https://m.ncpssd.cn/" target="_blank" rel="noopener noreferrer">国家哲学社会科学文献中心</a>，。</li>
</ul>
<h3>音乐音效</h3>
<ul>
<li><a href="https://www.mvmp3.com/" target="_blank" rel="noopener noreferrer">无名音乐网</a>，音乐下载。</li>
<li><a href="https://music.wandhi.com/" target="_blank" rel="noopener noreferrer">玩的嗨娱乐网</a>，音乐下载器。</li>
</ul>
<h3>游戏娱乐</h3>
<ul>
<li><a href="https://www.ali213.net/" target="_blank" rel="noopener noreferrer">游侠网</a>,各类游戏下载。</li>
<li><a href="https://dl.3dmgame.com/" target="_blank" rel="noopener noreferrer">3DMGAME</a>，各类游戏下载。</li>
<li><a href="https://www.gamersky.com/" target="_blank" rel="noopener noreferrer">游民星空</a>，各类游戏下载。</li>
<li><a href="https://bbsmc.net/" target="_blank" rel="noopener noreferrer">Minecraft资源社区</a>，我的世界游戏社区。</li>
<li><a href="https://www.minegraph.cn/" target="_blank" rel="noopener noreferrer">MGC中文图形站</a>，我的世界光影包资源包下载网站。</li>
</ul>
<h2>官方网站</h2>
<h3>国家政务</h3>
<ul>
<li><a href="https://www.gov.cn/" target="_blank" rel="noopener noreferrer">中华人民共和国中央人民政府</a>，中国官网，下分为<a href="https://www.gov.cn/home/2023-03/29/content_5748953.htm" target="_blank" rel="noopener noreferrer">国务院部门网站</a>、<a href="https://www.gov.cn/home/2023-03/29/content_5748954.htm" target="_blank" rel="noopener noreferrer">地方政府网站</a>、<a href="https://www.gov.cn/home/2023-03/29/content_5748955.htm" target="_blank" rel="noopener noreferrer">驻港澳机构网站</a>、<a href="https://www.gov.cn/home/2023-03/29/content_5748956.htm" target="_blank" rel="noopener noreferrer">驻外机构</a>。</li>
<li><a href="http://www.npc.gov.cn/npc/index.html" target="_blank" rel="noopener noreferrer">中国人民代表大会（全国人大）</a>，。</li>
<li><a href="http://www.cppcc.gov.cn/" target="_blank" rel="noopener noreferrer">中国人民政治协会会议全国委员会（全国政协）</a>，。</li>
<li><a href="https://www.ccdi.gov.cn/" target="_blank" rel="noopener noreferrer">中华人民共和国国家监察委员会（国家监察委员会）</a>，。</li>
<li><a href="https://www.court.gov.cn/index.html" target="_blank" rel="noopener noreferrer">中华人民共和国最高人民法院(最高人民法院)</a>，。</li>
<li><a href="https://www.spp.gov.cn/" target="_blank" rel="noopener noreferrer">中华人民共和国最高人民检察院（最高人民检察院）</a>，。</li>
<li><a href="http://about.chinahonker.cn/" target="_blank" rel="noopener noreferrer">中国红客</a>，。</li>
<li><a href="https://www.cac.gov.cn/" target="_blank" rel="noopener noreferrer">中央网信办（国家网信办）</a>，。</li>
<li><a href="http://www.sic.gov.cn/" target="_blank" rel="noopener noreferrer">国家信息中心（国家电子政务外网管理中心）</a>，主要负责信息化建设与发展研究及技术支撑，开展宏观经济监测预测预警及重大问题研究，推动国民经济和社会发展信息资源汇集及开发利用，推进数字经济发展，负责国家电子政务外网的建设运行维护及相关管理工作，承担大数据应用开发工作。</li>
<li><a href="https://www.xhinst.net/" target="_blank" rel="noopener noreferrer">新华社研究院</a>，。</li>
<li><a href="https://www.iso.org" target="_blank" rel="noopener noreferrer">ISO</a>，可信商品和服务的全球标准。</li>
</ul>
<h3>慈善基金会</h3>
<ul>
<li><a href="https://www.apache.org/" target="_blank" rel="noopener noreferrer">Apache</a>，专门为运作一个开源软件项目的 Apache 的团体提供支持的非盈利性组织。</li>
<li><a href="https://www.mozilla.org/zh-CN/" target="_blank" rel="noopener noreferrer">Mozilla</a>，Mozilla 正致力于让网民重掌互联网。</li>
<li><a href="https://www.openatom.cn/" target="_blank" rel="noopener noreferrer">开放原子开源基金会</a>，国内开源基金会。</li>
</ul>
<h3>社区论坛</h3>
<ul>
<li><a href="https://hellogithub.com/" target="_blank" rel="noopener noreferrer">HelloGitHub</a>，面向开发者的社区项目，旨在分享和推荐开源项目。</li>
<li><a href="https://www.oschina.net/" target="_blank" rel="noopener noreferrer">OSCHINA</a>，中国开源论坛网站，偏IT行业。</li>
<li><a href="https://www.csdn.net/" target="_blank" rel="noopener noreferrer">CSDN</a>，CSDN 作为中国专业开发者社区、开源与大模型时代的开发者生产力平台，为开发者和开发组织提供内容、代码、工具服务，为技术企业提供生态市场与人才服务。</li>
<li><a href="https://pkmer.cn/" target="_blank" rel="noopener noreferrer">PKMER</a>，打造东半球强大的知识管理社区。</li>
<li><a href="https://zh.ifixit.com/" target="_blank" rel="noopener noreferrer">IFIXIT</a>，以维修为主题的全球性互助社区。</li>
<li><a href="https://www.modelscope.cn/home" target="_blank" rel="noopener noreferrer">魔塔社区</a>，打造下一代开源的模型即服务共享平台。</li>
<li><a href="https://www.liblib.art/" target="_blank" rel="noopener noreferrer">LibLibAI</a>，AI生图工具创作平台，模型数量多，国内网速好。</li>
<li><a href="https://devpress.csdn.net/" target="_blank" rel="noopener noreferrer">DevPress</a>，依托 DevPress 为企业客户构建品牌推广、活动营销和学习交流的一站式在线服务平台。</li>
<li><a href="https://segmentfault.com/" target="_blank" rel="noopener noreferrer">segmentfault</a>，中国新一代技术问答社区。</li>
<li><a href="https://linux.cn/" target="_blank" rel="noopener noreferrer">Linux中国</a>，。</li>
<li><a href="https://www.qbitai.com/" target="_blank" rel="noopener noreferrer">量子位</a>，。</li>
<li><a href="https://www.jiqizhixin.com/" target="_blank" rel="noopener noreferrer">机械之心</a>，。</li>
<li><a href="https://www.xiaomi.cn/" target="_blank" rel="noopener noreferrer">小米社区</a>，。</li>
<li><a href="https://www.loongnix.cn/zh/" target="_blank" rel="noopener noreferrer">龙芯开源社区</a>，。</li>
<li><a href="https://www.loongbbs.cn/" target="_blank" rel="noopener noreferrer">龙芯爱好者社区</a>，。</li>
<li><a href="https://www.jlc-bbs.com/" target="_blank" rel="noopener noreferrer">嘉立创社区</a>，电子/机械技术交流社区。</li>
<li><a href="http://forum.orangepi.cn/" target="_blank" rel="noopener noreferrer">Orangepi</a>，香橙派开发板社区。</li>
<li><a href="https://www.zfrontier.com/" target="_blank" rel="noopener noreferrer">装备前线</a>，。</li>
<li><a href="https://www.gcores.com/" target="_blank" rel="noopener noreferrer">机核</a>，。</li>
</ul>
<h3>博客新闻</h3>
<ul>
<li><a href="https://linuxconfig.org/" target="_blank" rel="noopener noreferrer">LinuxConfig.org</a>，GNU/Linux 提供全面教程、指南和系统管理工具的可信资源。</li>
<li><a href="https://www.iteye.com/" target="_blank" rel="noopener noreferrer">ITeye</a>，讨论Java的社区。</li>
<li><a href="https://pdai.tech/" target="_blank" rel="noopener noreferrer">Java全栈知识体系</a>，技术博客网站。</li>
<li><a href="https://d.aigclink.ai/" target="_blank" rel="noopener noreferrer">AIGCLINK</a>，AI开源方案库-传递最新AI应用落地解决方案。</li>
<li><a href="https://saduck.top/" target="_blank" rel="noopener noreferrer">SaDuck</a>，公务员相关考试总结的个人博客。</li>
<li><a href="https://www.mr-wu.cn/blog/" target="_blank" rel="noopener noreferrer">吴川斌的博客</a>，专注于“智能硬件、嵌入式系统、物联网、电子产品设计美学”的独立博客。</li>
<li><a href="https://mxts.jiujiuer.xyz/" target="_blank" rel="noopener noreferrer">神社的储物间</a>，个人博客，技术博主，赛博朋克风格的网站页面设计。</li>
<li><a href="https://caovan.com/" target="_blank" rel="noopener noreferrer">草凡博客</a>，有关人工智能和应用方面的文章。</li>
<li><a href="https://techdiylife.github.io/blog/" target="_blank" rel="noopener noreferrer">AI开发者-就爱瞎鼓捣</a>，人工智能方向博主。</li>
<li><a href="https://www.8kiz.cn/" target="_blank" rel="noopener noreferrer">小蓝博客</a>，。</li>
<li><a href="https://www.rainmorime.com/" target="_blank" rel="noopener noreferrer">RainMorime</a>，。</li>
<li><a href="https://rasa.com/blog/" target="_blank" rel="noopener noreferrer">RASA官网博客</a>，英文文章，rasa 聊天机器人框架官网博客，能更加容易了解 rasa 的实现流程和成长路线。</li>
<li><a href="https://www.worldlabs.ai/" target="_blank" rel="noopener noreferrer">World Labs</a>，。</li>
<li><a href="https://lilianweng.github.io/" target="_blank" rel="noopener noreferrer">Lil'Log</a>，。</li>
<li><a href="https://antfu.me/" target="_blank" rel="noopener noreferrer">Anthony Fu</a>，英文文章。</li>
<li><a href="https://www.sivalabs.in/" target="_blank" rel="noopener noreferrer">sivalabs</a>，英文文章，Java博主，人工智能。</li>
<li><a href="https://blog.mthreads.com/" target="_blank" rel="noopener noreferrer">摩尔线程博客</a>，。</li>
<li><a href="https://developer.nvidia.com/zh-cn/blog" target="_blank" rel="noopener noreferrer">NVIDIA技术博客</a>，。</li>
<li><a href="https://www.freertos.org/zh-cn-cmn-s/Community/Blogs/Blog" target="_blank" rel="noopener noreferrer">FreeRTOS博客</a>，。</li>
<li><a href="https://www.ign.com.cn/" target="_blank" rel="noopener noreferrer">IGN中国</a>，专注于第一时间向用户提供游戏、影视、动漫、数码等泛娱乐领域的资讯。</li>
<li><a href="https://tgs.cesa.or.jp/" target="_blank" rel="noopener noreferrer">TGS东京电玩展</a>，。</li>
<li><a href="https://www.infoq.com/" target="_blank" rel="noopener noreferrer">InfoQ</a>，。</li>
</ul>
<h3>播客广播</h3>
<ul>
<li><a href="https://xyzrank.com/" target="_blank" rel="noopener noreferrer">中文播客榜</a>，专注于中文播客市场平台，提供不同分类的榜单和详细的节目信息，方便用户订阅和收听‌。</li>
<li><a href="https://www.cnr.cn/" target="_blank" rel="noopener noreferrer">中央广播电视总台（央广网）</a>，中国最大的以有声资讯为特色的综合新闻网站。</li>
<li><a href="https://sv101.fireside.fm/" target="_blank" rel="noopener noreferrer">硅谷101</a>，。</li>
</ul>
<h3>镜像站点</h3>
<ul>
<li><a href="https://mirrors.huaweicloud.com/" target="_blank" rel="noopener noreferrer">华为云开源软件镜像站</a>，适用商业部署，版本老旧。</li>
<li><a href="https://mirrors.tuna.tsinghua.edu.cn/" target="_blank" rel="noopener noreferrer">清华大学开源软件镜像站</a>，适用开发研究，版本较新。</li>
<li><a href="http://mirrors.ustc.edu.cn/" target="_blank" rel="noopener noreferrer">中国科技大学开源软件镜像站</a>，。</li>
<li><a href="https://developer.aliyun.com/" target="_blank" rel="noopener noreferrer">阿里巴巴开源软件镜像站</a>，。</li>
<li><a href="http://mirror.kaiyuanshe.cn/" target="_blank" rel="noopener noreferrer">开源社</a>，。</li>
</ul>
<h3>服务平台</h3>
<ul>
<li><a href="https://boinc.berkeley.edu/" target="_blank" rel="noopener noreferrer">BOINC（伯克利开放式网络计算平台）</a>，分布式科学计算平台。</li>
<li><a href="https://www.worldcommunitygrid.org/" target="_blank" rel="noopener noreferrer">World Community Grid</a>，。</li>
<li><a href="https://data.stats.gov.cn/" target="_blank" rel="noopener noreferrer">National Data 国家数据</a>，国家统计局提供的实时数据。</li>
<li><a href="https://gjzwfw.www.gov.cn/" target="_blank" rel="noopener noreferrer">国家政务服务平台</a>，全国一体化在线政务服务平台。</li>
<li><a href="https://std.samr.gov.cn/" target="_blank" rel="noopener noreferrer">全国标准信息公共服务平台</a>，。</li>
<li><a href="https://beian.miit.gov.cn/#/Integrated/index" target="_blank" rel="noopener noreferrer">工业和信息化部政务服务平台</a>，工业和信息化部，ICP/IP地址/域名信息备案管理系统，中国大陆 ICP 备案网站。</li>
<li><a href="https://beian.mps.gov.cn/#/query/webSearch" target="_blank" rel="noopener noreferrer">全国互联网安全管理服务平台</a>，公安部，确保互联网的安全稳定运行，保护人民的信息安全和国家安全。</li>
<li><a href="https://www.huaweicloud.com/" target="_blank" rel="noopener noreferrer">华为云服务平台</a>，云服务。</li>
<li><a href="https://cloud.baidu.com/" target="_blank" rel="noopener noreferrer">百度云服务平台</a>，云服务。</li>
<li><a href="https://github.com/" target="_blank" rel="noopener noreferrer">GitHub</a>，开源代码托管平台。</li>
<li><a href="https://gitee.com/" target="_blank" rel="noopener noreferrer">Gitee</a>，基于 Git 的代码托管平台。</li>
<li><a href="https://huggingface.co/" target="_blank" rel="noopener noreferrer">Hugging Face</a>，开源模型托管平台。</li>
<li><a href="https://misskey-hub.net/cn/" target="_blank" rel="noopener noreferrer">Misskey</a>，社交平台、去中心化开源社交平台，基于 ActivityPub 分布式通信协议实现以不同服务器作为类似群聊的服务单位。</li>
<li><a href="http://www.beidou.gov.cn/" target="_blank" rel="noopener noreferrer">北斗卫星导航系统</a>，地图、定位、路线规划。</li>
<li><a href="https://www.jlc.com/" target="_blank" rel="noopener noreferrer">嘉立创</a>，一站式产业互联智造平台，。</li>
<li><a href="https://xometry.asia/zh-hans/" target="_blank" rel="noopener noreferrer">择幂（上海）科技有限公司</a>，一站式按需制造服务商，只需上传3D图纸、获取实时报价、下单购买三步即可获得所需零部件。</li>
<li><a href="https://www.wenext.cn/main/" target="_blank" rel="noopener noreferrer">深圳市未来工场科技有限公司（未来工场）</a>，提供3D打印、CNC、钣金、模具等多工艺一站式供应链管理服务的高科技智能制造企业。</li>
<li><a href="https://meviy.misumi.com.cn/zh_cn-cn/" target="_blank" rel="noopener noreferrer">meviy</a>，机加工/钣金加工。</li>
<li><a href="https://www.yihuichuang.com/index.html" target="_blank" rel="noopener noreferrer">易绘创</a>，推动图文广告行业走向自助化、惠民化、高效化和隐私化，携手合作加工厂为全国各地的用户提供更优质的图文广告产品及服务。</li>
</ul>
<h3>开放平台</h3>
<ul>
<li><a href="https://open.unionpay.com/" target="_blank" rel="noopener noreferrer">中国银联开放平台</a>，。</li>
<li><a href="https://open.alipay.com/" target="_blank" rel="noopener noreferrer">支付宝开放平台</a>，。</li>
<li><a href="https://open.feishu.cn/" target="_blank" rel="noopener noreferrer">飞书开放平台</a>，。</li>
<li><a href="https://developer.baidu.com/" target="_blank" rel="noopener noreferrer">百度开发者中心</a>，。</li>
<li><a href="https://open.baidu.com/" target="_blank" rel="noopener noreferrer">百度数据开放平台</a>，。</li>
<li><a href="https://fanyi-api.baidu.com/" target="_blank" rel="noopener noreferrer">百度翻译开放平台</a>，。</li>
<li><a href="https://lbsyun.baidu.com/" target="_blank" rel="noopener noreferrer">百度地图开放平台</a>，。</li>
<li><a href="https://open.tencent.com/" target="_blank" rel="noopener noreferrer">腾讯开放平台</a>，。</li>
<li><a href="https://open.weixin.qq.com/" target="_blank" rel="noopener noreferrer">微信开放平台</a>，。</li>
<li><a href="https://q.qq.com/" target="_blank" rel="noopener noreferrer">QQ开放平台</a>，。</li>
<li><a href="https://developer.meituan.com/" target="_blank" rel="noopener noreferrer">美团开放平台</a>，。</li>
<li><a href="https://developer.open-douyin.com/" target="_blank" rel="noopener noreferrer">抖音开放平台</a>，。</li>
<li><a href="https://open.es.xiaojukeji.com/" target="_blank" rel="noopener noreferrer">滴滴企业开放平台</a>，。</li>
</ul>
<h2>服务平台</h2>
<p>LLM大模型平台</p>
<ul>
<li><a href="https://ollama.com/" target="_blank" rel="noopener noreferrer">ollama</a>，。</li>
</ul>
<h2>其他网站</h2>
<h3>学习网站</h3>
<ul>
<li><a href="https://www.codedex.io/" target="_blank" rel="noopener noreferrer">codedex</a>，以游戏化编程学习为核心的互动教育平台，旨在通过趣味性的方式帮助用户掌握Python、HTML/CSS、JavaScript、React等多种技术技能。。</li>
<li><a href="https://diaosubiji.com/" target="_blank" rel="noopener noreferrer">雕塑笔记</a>，以三维动态的形式学习人体的网站。</li>
<li><a href="https://enpuz.com/" target="_blank" rel="noopener noreferrer">Enpuz</a>，英语学习 AI 小工具。</li>
<li><a href="https://www.deelmind.com/" target="_blank" rel="noopener noreferrer">极客方舟</a>，懂进攻，知防守；先正向，后逆向。</li>
<li><a href="https://wangchujiang.com/linux-command/hot.html" target="_blank" rel="noopener noreferrer">wangchujiang</a>，Linux 命令查询网站，其他人的个人博客网站。</li>
<li><a href="https://wiki.debian.org/zh_CN/FrontPage" target="_blank" rel="noopener noreferrer">Debian Linux</a>，Debian Linux 官方文档。</li>
<li><a href="https://markdown.com.cn/" target="_blank" rel="noopener noreferrer">Markdown官方教程</a>，轻量级标记语言，以纯文本格式编写文档。</li>
<li><a href="https://www.midjourny.cn/" target="_blank" rel="noopener noreferrer">MJ AI绘画中文站</a>，AI 绘画，线上创作，包含免费且全面的教程。</li>
<li><a href="">LibLib AI</a>，。</li>
<li><a href="https://katex.org/" target="_blank" rel="noopener noreferrer">KATEX</a>，最快的 Web 数学排版库。</li>
<li><a href="https://mermaid.js.org/" target="_blank" rel="noopener noreferrer">Mermaid</a>，基于JavaScript的图表和图表工具,该工具渲染Markdown启发的文本定义,以动态创建和修改图表。</li>
</ul>
<h3>AI应用网站</h3>
<ul>
<li><a href="https://www.modelscope.cn/studios/FolkeCD/AI_leidianjiangjun/summary" target="_blank" rel="noopener noreferrer">语音合成 - 魔塔社区</a>，AI雷电将军在线语音生成（GPT-SoVITS）。</li>
<li></li>
</ul>
<h3>BitTorrent种子</h3>
<ul>
<li><a href="https://laowanguc.top/" target="_blank" rel="noopener noreferrer">老王磁力</a></li>
</ul>
<h3>购物海淘</h3>
<ul>
<li><a href="https://www.cnrmall.com/" target="_blank" rel="noopener noreferrer">央广购物</a>，。</li>
<li><a href="https://www.dewu.com/" target="_blank" rel="noopener noreferrer">得物</a>，。</li>
<li><a href="https://www.jd.com/" target="_blank" rel="noopener noreferrer">京东</a>，。</li>
<li><a href="https://www.xiaomiyoupin.com/" target="_blank" rel="noopener noreferrer">小米有品</a>，。</li>
<li><a href="https://drop.com/home" target="_blank" rel="noopener noreferrer">DRIP</a>，键盘。</li>
<li><a href="http://www.43ppw.com/" target="_blank" rel="noopener noreferrer">经典品牌网</a>，。</li>
<li><a href="https://www.smzdm.com/" target="_blank" rel="noopener noreferrer">什么值得买</a>，。</li>
</ul>
<h3>科技公司</h3>
<ul>
<li><a href="">IBM</a>，。</li>
<li><a href="">谷歌</a>，。</li>
<li><a href="">亚马逊</a>，。</li>
<li><a href="">NVIDIA</a>，。</li>
<li><a href="">微软</a>，。</li>
<li><a href="">百度</a>，。</li>
<li><a href="">腾讯</a>，。</li>
<li><a href="">阿里巴巴</a>，。</li>
<li><a href="">华为</a>，。</li>
<li><a href="">小米</a>，。</li>
</ul>
<h3>机器人行业</h3>
<ul>
<li><a href="https://www.zhiyuan-robot.com/" target="_blank" rel="noopener noreferrer">智元机器人</a>，。</li>
<li><a href="http://www.exrobots.net/" target="_blank" rel="noopener noreferrer">EX仿生人形机器人（大连蒂艾斯科技发展股份有限公司）</a>，。</li>
<li><a href="https://www.unitree.com/" target="_blank" rel="noopener noreferrer">UNITREE（宇树）</a>，。</li>
<li><a href="https://www.engineai.com.cn/" target="_blank" rel="noopener noreferrer">ENGINEAI（众擎）</a>，深圳市众擎机器人科技有限公司，专注于通用智能机器人及行业场景方案，包括人形机器人和其它相关产品的研发生产。</li>
<li><a href="https://clonerobotics.com/" target="_blank" rel="noopener noreferrer">CLONE</a>，以其创新的人造肌肉技术和对未来的宏伟规划，在机器人领域展现出巨大的潜力。</li>
<li><a href="https://www.cartesia.ai/" target="_blank" rel="noopener noreferrer">Cartesia</a>，「构建具有长记忆能力的实时智能，无论你身在何处都能运行。」而其中一部分目标便是「把（Mamba）这些前沿模型带给我们的客户，帮助他们构建实时 AI 应用的未来。」</li>
<li><a href="https://www.shengwang.cn/" target="_blank" rel="noopener noreferrer">声网</a>，实时音视频 API 平台行业开创者，专业服务商。</li>
<li><a href="https://bostondynamics.com/" target="_blank" rel="noopener noreferrer">波士顿动力公司</a>，。</li>
</ul>
<h3>区块链平台</h3>
<ul>
<li><a href="https://ethereum.org/zh/" target="_blank" rel="noopener noreferrer">以太坊</a></li>
</ul>
]]></content:encoded>
    </item>
  </channel>
</rss>