<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>编程那些事儿</title><link>https://before80.github.io/prgms/</link><description>Recent content on 编程那些事儿</description><generator>Hugo</generator><language>zh-cn</language><atom:link href="https://before80.github.io/prgms/index.xml" rel="self" type="application/rss+xml"/><item><title>Windows 11 常用快捷键速查表</title><link>https://before80.github.io/prgms/CheatSheet/winShortcutKey/</link><pubDate>Tue, 21 Apr 2026 19:27:20 +0800</pubDate><guid>https://before80.github.io/prgms/CheatSheet/winShortcutKey/</guid><description>&lt;h1 id="windows-11-常用快捷键速查表-"&gt;Windows 11 常用快捷键速查表 🪟&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;按功能分类，方便快速查找和使用&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="-系统通用快捷键"&gt;🔧 系统通用快捷键&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;快捷键&lt;/th&gt;
 &lt;th&gt;功能说明&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Win&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;打开/关闭开始菜单&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Win + A&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;打开快速设置（网络、音量、亮度等）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Win + B&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;聚焦系统托盘区域&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Win + D&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;显示/隐藏桌面（最小化/恢复所有窗口）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Win + E&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;打开文件资源管理器&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Win + I&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;打开系统设置&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Win + L&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;锁定电脑&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Win + M&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;最小化所有窗口&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Win + Shift + M&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;恢复最小化的窗口&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Win + R&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;打开&amp;quot;运行&amp;quot;对话框&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Win + S&lt;/code&gt; / &lt;code&gt;Win + Q&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;打开搜索&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Win + T&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;循环切换任务栏应用&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Win + X&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;打开快捷菜单（类似右键开始按钮）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Win + Z&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;打开贴靠布局（窗口分屏）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Win + .&lt;/code&gt; 或 &lt;code&gt;Win + ;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;打开表情符号面板&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Win + V&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;打开剪贴板历史记录&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Win + P&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;打开投影模式选择&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Win + Ctrl + D&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;创建新虚拟桌面&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Win + Ctrl + F4&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;关闭当前虚拟桌面&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Win + Ctrl + ←/→&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;切换虚拟桌面&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Alt + F4&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;关闭当前窗口/程序&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Alt + Tab&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;在打开的应用间切换&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Alt + Esc&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;按顺序循环切换窗口&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Ctrl + Shift + Esc&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;直接打开任务管理器&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Win + Shift + S&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;截图（区域/窗口/全屏）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Print Screen&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;全屏截图（可设置直接保存到剪贴板）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="-窗口管理与贴靠布局"&gt;🪟 窗口管理与贴靠布局&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;快捷键&lt;/th&gt;
 &lt;th&gt;功能说明&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Win + ←&lt;/code&gt; / &lt;code&gt;→&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;将窗口贴靠到屏幕左/右半侧&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Win + ↑&lt;/code&gt; / &lt;code&gt;↓&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;最大化 / 还原或最小化窗口&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Win + Shift + ←&lt;/code&gt; / &lt;code&gt;→&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;将窗口移动到另一个显示器&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Win + Home&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;最小化/恢复除当前窗口外的所有窗口&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Win + Tab&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;打开任务视图（查看所有窗口和虚拟桌面）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;F11&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;全屏/退出全屏（部分应用支持）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="-文件资源管理器快捷键"&gt;📁 文件资源管理器快捷键&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;快捷键&lt;/th&gt;
 &lt;th&gt;功能说明&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Ctrl + T&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;添加新标签(在同一个窗口打开主文件夹)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Ctrl + N&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;在新窗口中打开当前文件夹&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Ctrl + W&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;关闭当前资源管理器聚焦所在的标签页, 若只有一个标签页,则关闭窗口&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Ctrl + Shift + N&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;新建文件夹&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Alt + ↑&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;返回上一级文件夹&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Alt + ←&lt;/code&gt; / &lt;code&gt;→&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;后退 / 前进导航历史&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Alt + D&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;聚焦地址栏(与腾讯电脑管家中的截图工具快捷键冲突)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Ctrl + F&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;聚焦搜索框&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;F2&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;重命名选中文件/文件夹&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;F5&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;刷新当前视图&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Ctrl + Shift + E&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;显示当前文件夹的上级目录树&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Alt + Enter&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;打开选中项目的属性&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Ctrl + Tab&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;切换到&lt;strong&gt;下一个&lt;/strong&gt;标签页&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Ctrl + Shift + Tab&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;切换到&lt;strong&gt;上一个&lt;/strong&gt;标签页&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Ctrl + 数字 (1-9)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;直接跳转到第 N 个标签页&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="-文本编辑通用快捷键"&gt;⌨️ 文本编辑通用快捷键&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;快捷键&lt;/th&gt;
 &lt;th&gt;功能说明&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Ctrl + C&lt;/code&gt; / &lt;code&gt;V&lt;/code&gt; / &lt;code&gt;X&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;复制 / 粘贴 / 剪切&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Ctrl + Z&lt;/code&gt; / &lt;code&gt;Y&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;撤销 / 重做&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Ctrl + A&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;全选&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Ctrl + F&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;查找&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Ctrl + H&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;替换&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Ctrl + S&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;保存&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Ctrl + P&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;打印&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Ctrl + B&lt;/code&gt; / &lt;code&gt;I&lt;/code&gt; / &lt;code&gt;U&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;加粗 / 斜体 / 下划线（部分应用）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Ctrl + ←&lt;/code&gt; / &lt;code&gt;→&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;按单词移动光标&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Ctrl + Backspace&lt;/code&gt; / &lt;code&gt;Delete&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;删除前/后一个单词&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Shift + 方向键&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;选中文本&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Ctrl + Shift + 方向键&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;按单词选中文本&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="-浏览器通用快捷键edgechrome等"&gt;🌐 浏览器通用快捷键（Edge/Chrome等）&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;快捷键&lt;/th&gt;
 &lt;th&gt;功能说明&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Ctrl + T&lt;/code&gt; / &lt;code&gt;W&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;新建 / 关闭标签页&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Ctrl + Shift + T&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;恢复最近关闭的标签页&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Ctrl + Tab&lt;/code&gt; / &lt;code&gt;Ctrl + PgUp&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;切换到下一个标签页&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Ctrl + Shift + Tab&lt;/code&gt; / &lt;code&gt;Ctrl + PgDn&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;切换到上一个标签页&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Ctrl + 1~8&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;切换到指定位置的标签页&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Ctrl + 9&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;切换到最后一个标签页&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Ctrl + L&lt;/code&gt; / &lt;code&gt;Alt + D&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;聚焦地址栏&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Ctrl + R&lt;/code&gt; / &lt;code&gt;F5&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;刷新页面&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Ctrl + Shift + R&lt;/code&gt; / &lt;code&gt;Ctrl + F5&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;强制刷新（忽略缓存）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Ctrl + D&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;添加当前页到收藏夹&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Ctrl + H&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;打开历史记录&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Ctrl + J&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;打开下载内容&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;F11&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;切换全屏模式&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="-游戏与辅助功能"&gt;🎮 游戏与辅助功能&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;快捷键&lt;/th&gt;
 &lt;th&gt;功能说明&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Win + G&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;打开 Xbox Game Bar（游戏录制、性能监控等）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Win + Alt + R&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;开始/停止游戏录制（需Game Bar）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Win + Alt + G&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;录制最近30秒游戏（需开启后台录制）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Win + +&lt;/code&gt; / &lt;code&gt;-&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;打开放大镜并放大/缩小&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Win + Esc&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;退出放大镜&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Win + Ctrl + C&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;打开/关闭颜色滤镜（需提前在设置中启用）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Win + Ctrl + N&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;打开讲述人设置&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Win + Ctrl + S&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;打开语音识别&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>HTTP 状态码</title><link>https://before80.github.io/prgms/CheatSheet/httpStatusCode/</link><pubDate>Sat, 18 Apr 2026 11:30:20 +0800</pubDate><guid>https://before80.github.io/prgms/CheatSheet/httpStatusCode/</guid><description>&lt;h2 id="-http-状态码完整速查表rfc-9110-标准版"&gt;📊 HTTP 状态码完整速查表（RFC 9110 标准版）&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;🔍 &lt;strong&gt;图例&lt;/strong&gt;：&lt;code&gt;✅&lt;/code&gt; 核心标准｜&lt;code&gt;🌐&lt;/code&gt; WebDAV/协议扩展｜&lt;code&gt;⚠️&lt;/code&gt; 已废弃/保留｜&lt;code&gt;🔬&lt;/code&gt; 实验性｜&lt;code&gt;📉&lt;/code&gt; 极少使用/历史遗留&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="1xx-信息性informational"&gt;1xx 信息性（Informational）&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;状态码&lt;/th&gt;
 &lt;th&gt;英文名称&lt;/th&gt;
 &lt;th&gt;中文译名&lt;/th&gt;
 &lt;th&gt;标准来源&lt;/th&gt;
 &lt;th&gt;核心说明与典型场景&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;100&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Continue&lt;/td&gt;
 &lt;td&gt;继续&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;客户端应继续发送请求体（配合 &lt;code&gt;Expect: 100-continue&lt;/code&gt;）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;101&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Switching Protocols&lt;/td&gt;
 &lt;td&gt;切换协议&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;服务器同意升级协议（如 &lt;code&gt;Upgrade: websocket&lt;/code&gt;）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;102&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Processing&lt;/td&gt;
 &lt;td&gt;处理中&lt;/td&gt;
 &lt;td&gt;RFC 4918&lt;/td&gt;
 &lt;td&gt;WebDAV 扩展，防代理/客户端超时，需异步返回进度&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;103&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Early Hints&lt;/td&gt;
 &lt;td&gt;早期提示&lt;/td&gt;
 &lt;td&gt;RFC 8297&lt;/td&gt;
 &lt;td&gt;在完整响应前预加载关键资源（如 &lt;code&gt;&amp;lt;link rel=preload&amp;gt;&lt;/code&gt;）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="2xx-成功success"&gt;2xx 成功（Success）&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;状态码&lt;/th&gt;
 &lt;th&gt;英文名称&lt;/th&gt;
 &lt;th&gt;中文译名&lt;/th&gt;
 &lt;th&gt;标准来源&lt;/th&gt;
 &lt;th&gt;核心说明与典型场景&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;200&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;OK&lt;/td&gt;
 &lt;td&gt;成功&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;请求成功，响应体含结果（GET/POST/PUT 默认）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;201&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Created&lt;/td&gt;
 &lt;td&gt;已创建&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;新资源已创建，&lt;strong&gt;必须&lt;/strong&gt;返回 &lt;code&gt;Location&lt;/code&gt; 头指向新资源&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;202&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Accepted&lt;/td&gt;
 &lt;td&gt;已接受&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;请求已入队异步处理，不保证最终成功（如后台任务）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;203&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Non-Authoritative Information&lt;/td&gt;
 &lt;td&gt;非授权信息&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;响应来自中间节点（代理/缓存），非源服务器权威数据&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;204&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;No Content&lt;/td&gt;
 &lt;td&gt;无内容&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;成功但无响应体（常用于 &lt;code&gt;DELETE&lt;/code&gt;/&lt;code&gt;PUT&lt;/code&gt;）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;205&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Reset Content&lt;/td&gt;
 &lt;td&gt;重置内容&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;成功，要求客户端重置表单/视图（如清空输入框）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;206&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Partial Content&lt;/td&gt;
 &lt;td&gt;部分内容&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;范围请求成功（断点续传，需 &lt;code&gt;Content-Range&lt;/code&gt;）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;207&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Multi-Status&lt;/td&gt;
 &lt;td&gt;多状态&lt;/td&gt;
 &lt;td&gt;RFC 4918&lt;/td&gt;
 &lt;td&gt;WebDAV，XML 响应包含多个子资源独立状态&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;208&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Already Reported&lt;/td&gt;
 &lt;td&gt;已报告&lt;/td&gt;
 &lt;td&gt;RFC 5842&lt;/td&gt;
 &lt;td&gt;WebDAV，集合成员已在本响应中报告，避免重复列举&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;226&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;IM Used&lt;/td&gt;
 &lt;td&gt;实例操纵已使用&lt;/td&gt;
 &lt;td&gt;RFC 3229&lt;/td&gt;
 &lt;td&gt;Delta 编码/差异更新成功&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="3xx-重定向redirection"&gt;3xx 重定向（Redirection）&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;状态码&lt;/th&gt;
 &lt;th&gt;英文名称&lt;/th&gt;
 &lt;th&gt;中文译名&lt;/th&gt;
 &lt;th&gt;标准来源&lt;/th&gt;
 &lt;th&gt;核心说明与典型场景&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;300&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Multiple Choices&lt;/td&gt;
 &lt;td&gt;多种选择&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;资源有多种表示（语言/格式），需客户端自行选择&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;301&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Moved Permanently&lt;/td&gt;
 &lt;td&gt;永久移动&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;资源永久迁移，&lt;strong&gt;SEO 权重转移&lt;/strong&gt;，缓存长期有效&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;302&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Found&lt;/td&gt;
 &lt;td&gt;临时重定向&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;⚠️ 历史兼容码。浏览器&lt;strong&gt;可能&lt;/strong&gt;将 POST 转为 GET，语义不严格&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;303&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;See Other&lt;/td&gt;
 &lt;td&gt;查看其他位置&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;明确指示用 &lt;code&gt;GET&lt;/code&gt; 请求新 URI，&lt;strong&gt;防表单重复提交&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;304&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Not Modified&lt;/td&gt;
 &lt;td&gt;未修改&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;缓存有效，不返回主体（配合 &lt;code&gt;If-None-Match&lt;/code&gt; 等）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;305&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Use Proxy&lt;/td&gt;
 &lt;td&gt;使用代理&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;⚠️ &lt;strong&gt;已废弃&lt;/strong&gt;，存在安全风险，现代客户端已忽略&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;306&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Unused&lt;/td&gt;
 &lt;td&gt;未使用&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;⚠️ IANA 保留码，无定义，不应使用&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;307&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Temporary Redirect&lt;/td&gt;
 &lt;td&gt;临时重定向&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;严格保持原请求方法&lt;/strong&gt;（POST→POST），替代 302 的现代标准&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;308&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Permanent Redirect&lt;/td&gt;
 &lt;td&gt;永久重定向&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;严格保持原请求方法&lt;/strong&gt;，替代 301 的现代标准（原 RFC 7538）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="4xx-客户端错误client-error"&gt;4xx 客户端错误（Client Error）&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;状态码&lt;/th&gt;
 &lt;th&gt;英文名称&lt;/th&gt;
 &lt;th&gt;中文译名&lt;/th&gt;
 &lt;th&gt;标准来源&lt;/th&gt;
 &lt;th&gt;核心说明与典型场景&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;400&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Bad Request&lt;/td&gt;
 &lt;td&gt;错误请求&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;语法错误、参数无效、JSON/XML 解析失败&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;401&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Unauthorized&lt;/td&gt;
 &lt;td&gt;未认证&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;缺少或无效凭证&lt;/strong&gt;，响应&lt;strong&gt;必须&lt;/strong&gt;包含 &lt;code&gt;WWW-Authenticate&lt;/code&gt; 头&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;402&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Payment Required&lt;/td&gt;
 &lt;td&gt;需付费&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;⚠️ IANA 保留，预留给数字支付系统，极少使用&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;403&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Forbidden&lt;/td&gt;
 &lt;td&gt;禁止访问&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;服务器理解请求但拒绝执行（权限不足、IP 封禁等）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;404&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Not Found&lt;/td&gt;
 &lt;td&gt;未找到&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;资源不存在或 URI 路径错误&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;405&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Method Not Allowed&lt;/td&gt;
 &lt;td&gt;方法不允许&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;请求方法不被支持，响应&lt;strong&gt;必须&lt;/strong&gt;包含 &lt;code&gt;Allow&lt;/code&gt; 头&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;406&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Not Acceptable&lt;/td&gt;
 &lt;td&gt;不可接受&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;无法提供 &lt;code&gt;Accept&lt;/code&gt; 要求的媒体类型/语言/编码&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;407&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Proxy Authentication Required&lt;/td&gt;
 &lt;td&gt;需代理认证&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;需通过 HTTP 代理身份验证（类似 401，但针对代理）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;408&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Request Timeout&lt;/td&gt;
 &lt;td&gt;请求超时&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;客户端未在服务器等待时间内完成请求&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;409&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Conflict&lt;/td&gt;
 &lt;td&gt;冲突&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;请求与当前资源状态冲突（如并发修改、版本不一致）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;410&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Gone&lt;/td&gt;
 &lt;td&gt;已失效&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;资源&lt;strong&gt;永久删除&lt;/strong&gt;，客户端应移除相关缓存与链接&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;411&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Length Required&lt;/td&gt;
 &lt;td&gt;需内容长度&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;缺少 &lt;code&gt;Content-Length&lt;/code&gt; 头（严格模式服务器要求）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;412&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Precondition Failed&lt;/td&gt;
 &lt;td&gt;前置条件失败&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;If-Match&lt;/code&gt;/&lt;code&gt;If-Unmodified-Since&lt;/code&gt; 等条件不满足&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;413&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Payload Too Large&lt;/td&gt;
 &lt;td&gt;请求体过大&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;原名 &lt;code&gt;Request Entity Too Large&lt;/code&gt;，RFC 7231 更新&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;414&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;URI Too Long&lt;/td&gt;
 &lt;td&gt;URI 过长&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;请求 URI 超过服务器限制（通常 &amp;gt;2KB~8KB）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;415&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Unsupported Media Type&lt;/td&gt;
 &lt;td&gt;不支持的媒体类型&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;Content-Type&lt;/code&gt; 不被服务器接受&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;416&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Range Not Satisfiable&lt;/td&gt;
 &lt;td&gt;范围无法满足&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;Range&lt;/code&gt; 头指定范围无效或超出资源大小&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;417&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Expectation Failed&lt;/td&gt;
 &lt;td&gt;期望失败&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;Expect&lt;/code&gt; 头要求（如 &lt;code&gt;100-continue&lt;/code&gt;）无法满足&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;418&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;I&amp;rsquo;m a teapot&lt;/td&gt;
 &lt;td&gt;我是个茶壶&lt;/td&gt;
 &lt;td&gt;RFC 2324&lt;/td&gt;
 &lt;td&gt;🔬 实验性状态码，IANA 正式注册，常用于防爬虫或 API 彩蛋&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;421&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Misdirected Request&lt;/td&gt;
 &lt;td&gt;错误定向的请求&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;HTTP/2+ 中请求发往不支持该目标主机的服务器&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;422&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Unprocessable Entity&lt;/td&gt;
 &lt;td&gt;无法处理的实体&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;✅ &lt;strong&gt;核心标准&lt;/strong&gt;（原 WebDAV 扩展，2022 年正式并入）。REST API 事实标准：语义/业务校验失败&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;423&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Locked&lt;/td&gt;
 &lt;td&gt;已锁定&lt;/td&gt;
 &lt;td&gt;RFC 4918&lt;/td&gt;
 &lt;td&gt;WebDAV，资源被锁定防止并发修改&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;424&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Failed Dependency&lt;/td&gt;
 &lt;td&gt;依赖失败&lt;/td&gt;
 &lt;td&gt;RFC 4918&lt;/td&gt;
 &lt;td&gt;WebDAV，因前置请求失败导致当前请求失败&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;425&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Too Early&lt;/td&gt;
 &lt;td&gt;过早&lt;/td&gt;
 &lt;td&gt;RFC 8470&lt;/td&gt;
 &lt;td&gt;拒绝处理可能被重放的请求（TLS 早期数据/0-RTT）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;426&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Upgrade Required&lt;/td&gt;
 &lt;td&gt;需升级&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;客户端需升级协议版本才能继续&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;428&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Precondition Required&lt;/td&gt;
 &lt;td&gt;需前置条件&lt;/td&gt;
 &lt;td&gt;RFC 6585&lt;/td&gt;
 &lt;td&gt;要求使用条件请求头防并发覆盖（常配 &lt;code&gt;If-Match&lt;/code&gt;）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;429&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Too Many Requests&lt;/td&gt;
 &lt;td&gt;请求过多&lt;/td&gt;
 &lt;td&gt;RFC 6585&lt;/td&gt;
 &lt;td&gt;限流触发，通常配合 &lt;code&gt;Retry-After&lt;/code&gt; 头&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;431&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Request Header Fields Too Large&lt;/td&gt;
 &lt;td&gt;请求头过大&lt;/td&gt;
 &lt;td&gt;RFC 6585&lt;/td&gt;
 &lt;td&gt;请求头字段超过限制（如 Cookie 过大）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;451&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Unavailable For Legal Reasons&lt;/td&gt;
 &lt;td&gt;因法律原因不可用&lt;/td&gt;
 &lt;td&gt;RFC 7725&lt;/td&gt;
 &lt;td&gt;政府审查、版权下架、合规限制&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="5xx-服务器错误server-error"&gt;5xx 服务器错误（Server Error）&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;状态码&lt;/th&gt;
 &lt;th&gt;英文名称&lt;/th&gt;
 &lt;th&gt;中文译名&lt;/th&gt;
 &lt;th&gt;标准来源&lt;/th&gt;
 &lt;th&gt;核心说明与典型场景&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;500&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Internal Server Error&lt;/td&gt;
 &lt;td&gt;服务器内部错误&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;通用未预料异常（代码抛异常、配置错误、依赖崩溃）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;501&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Not Implemented&lt;/td&gt;
 &lt;td&gt;未实现&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;服务器不支持该请求方法&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;502&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Bad Gateway&lt;/td&gt;
 &lt;td&gt;网关错误&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;反向代理/网关收到上游无效响应&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;503&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Service Unavailable&lt;/td&gt;
 &lt;td&gt;服务不可用&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;临时过载/维护，&lt;strong&gt;建议&lt;/strong&gt;配合 &lt;code&gt;Retry-After&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;504&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Gateway Timeout&lt;/td&gt;
 &lt;td&gt;网关超时&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;代理/网关未及时收到上游响应&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;505&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;HTTP Version Not Supported&lt;/td&gt;
 &lt;td&gt;HTTP 版本不支持&lt;/td&gt;
 &lt;td&gt;RFC 9110&lt;/td&gt;
 &lt;td&gt;服务器不支持请求的 HTTP 版本&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;506&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Variant Also Negotiates&lt;/td&gt;
 &lt;td&gt;变体也协商&lt;/td&gt;
 &lt;td&gt;RFC 2295&lt;/td&gt;
 &lt;td&gt;📉 透明内容协商循环，现代架构极少使用&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;507&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Insufficient Storage&lt;/td&gt;
 &lt;td&gt;存储空间不足&lt;/td&gt;
 &lt;td&gt;RFC 4918&lt;/td&gt;
 &lt;td&gt;WebDAV，服务器无法存储资源表示（磁盘满/配额超）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;508&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Loop Detected&lt;/td&gt;
 &lt;td&gt;检测到循环&lt;/td&gt;
 &lt;td&gt;RFC 5842&lt;/td&gt;
 &lt;td&gt;WebDAV，处理集合时检测到无限循环&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;510&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Not Extended&lt;/td&gt;
 &lt;td&gt;未扩展&lt;/td&gt;
 &lt;td&gt;RFC 2774&lt;/td&gt;
 &lt;td&gt;📉 已基本被现代 API 弃用&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;511&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Network Authentication Required&lt;/td&gt;
 &lt;td&gt;需网络认证&lt;/td&gt;
 &lt;td&gt;RFC 6585&lt;/td&gt;
 &lt;td&gt;拦截式门户（Captive Portal）要求登录（如酒店 WiFi）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="-本次核心修正与最佳实践"&gt;🛠️ 本次核心修正与最佳实践&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;易错点&lt;/th&gt;
 &lt;th&gt;修正说明&lt;/th&gt;
 &lt;th&gt;工程建议&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;422&lt;/code&gt; 标准归属&lt;/td&gt;
 &lt;td&gt;2022 年 RFC 9110 已将 &lt;code&gt;422&lt;/code&gt; 从 WebDAV 提升为 &lt;strong&gt;HTTP 核心标准&lt;/strong&gt;。&lt;/td&gt;
 &lt;td&gt;RESTful API 参数/业务校验失败时，&lt;strong&gt;优先使用 &lt;code&gt;422&lt;/code&gt;&lt;/strong&gt; 而非 &lt;code&gt;400&lt;/code&gt;，便于前后端区分“语法错误”与“语义错误”。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;302&lt;/code&gt; 方法转换&lt;/td&gt;
 &lt;td&gt;RFC 9110 §15.4.3 明确：方法转换是&lt;strong&gt;历史浏览器行为&lt;/strong&gt;，非协议强制。&lt;/td&gt;
 &lt;td&gt;新项目统一使用 &lt;code&gt;307&lt;/code&gt;（临时）/&lt;code&gt;308&lt;/code&gt;（永久）保证方法一致性，避免 POST 数据丢失。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;401&lt;/code&gt; 强制头&lt;/td&gt;
 &lt;td&gt;RFC 9110 §15.5.2 规定：&lt;code&gt;401&lt;/code&gt; 响应&lt;strong&gt;必须&lt;/strong&gt;携带 &lt;code&gt;WWW-Authenticate&lt;/code&gt; 挑战头。&lt;/td&gt;
 &lt;td&gt;未登录/Token 失效时返回 &lt;code&gt;401&lt;/code&gt; 并附带 &lt;code&gt;WWW-Authenticate: Bearer&lt;/code&gt; 或 &lt;code&gt;Basic&lt;/code&gt;。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;500&lt;/code&gt; 滥用&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;500&lt;/code&gt; 仅用于&lt;strong&gt;未捕获的未知异常&lt;/strong&gt;。&lt;/td&gt;
 &lt;td&gt;已知故障应使用更精准状态码：上游超时→&lt;code&gt;504&lt;/code&gt;，依赖不可用→&lt;code&gt;503&lt;/code&gt;，配置缺失→&lt;code&gt;501&lt;/code&gt;。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;云厂商私有码&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;444&lt;/code&gt;, &lt;code&gt;499&lt;/code&gt;, &lt;code&gt;520~527&lt;/code&gt; 等&lt;strong&gt;非 HTTP 标准&lt;/strong&gt;，仅限特定生态内部使用。&lt;/td&gt;
 &lt;td&gt;对外 API 严禁返回私有码；内部系统若使用需在文档中明确定义。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="-权威参考网址官方标准"&gt;🌐 权威参考网址（官方标准）&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;资源类型&lt;/th&gt;
 &lt;th&gt;链接&lt;/th&gt;
 &lt;th&gt;说明&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;IANA 官方注册表&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml"&gt;https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;全球唯一权威来源，实时更新&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;RFC 9110（HTTP Semantics）&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://www.rfc-editor.org/rfc/rfc9110.html"&gt;https://www.rfc-editor.org/rfc/rfc9110.html&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;2022 年发布，整合并替代 RFC 7231/7235/7230 等核心语义&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;RFC 6585（扩展状态码）&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://www.rfc-editor.org/rfc/rfc6585.html"&gt;https://www.rfc-editor.org/rfc/rfc6585.html&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;428&lt;/code&gt;/&lt;code&gt;429&lt;/code&gt;/&lt;code&gt;431&lt;/code&gt;/&lt;code&gt;511&lt;/code&gt; 来源&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;RFC 4918 / 5842（WebDAV）&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://www.rfc-editor.org/rfc/rfc4918.html"&gt;https://www.rfc-editor.org/rfc/rfc4918.html&lt;/a&gt;&lt;br&gt;&lt;a href="https://www.rfc-editor.org/rfc/rfc5842.html"&gt;https://www.rfc-editor.org/rfc/rfc5842.html&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;102&lt;/code&gt;/&lt;code&gt;207&lt;/code&gt;/&lt;code&gt;208&lt;/code&gt;/&lt;code&gt;423&lt;/code&gt;/&lt;code&gt;424&lt;/code&gt;/&lt;code&gt;507&lt;/code&gt;/&lt;code&gt;508&lt;/code&gt; 来源&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;RFC 8297（Early Hints）&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://www.rfc-editor.org/rfc/rfc8297.html"&gt;https://www.rfc-editor.org/rfc/rfc8297.html&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;103&lt;/code&gt; 状态码规范&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Mozilla MDN 文档&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status"&gt;https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;开发者友好解读，含浏览器兼容性说明&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;提示&lt;/strong&gt;：所有状态码的最终解释权以 &lt;strong&gt;IANA Registry&lt;/strong&gt; 为准。实际开发中建议结合业务网关/监控体系自定义错误码（如 &lt;code&gt;code: 10001, msg: &amp;quot;xxx&amp;quot;&lt;/code&gt;），HTTP 状态码仅用于表达&lt;strong&gt;传输层与协议层语义&lt;/strong&gt;。&lt;/p&gt;</description></item><item><title>ASCII 字符对照表</title><link>https://before80.github.io/prgms/CheatSheet/ascii/</link><pubDate>Sat, 18 Apr 2026 11:10:22 +0800</pubDate><guid>https://before80.github.io/prgms/CheatSheet/ascii/</guid><description>&lt;h1 id="-完整-ascii-字符对照表0-127"&gt;📋 完整 ASCII 字符对照表（0-127）&lt;/h1&gt;
&lt;h1 id="-一控制字符control-characters-0-31--127"&gt;🔧 一、控制字符（Control Characters, 0-31 &amp;amp; 127）&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;注：控制字符在日常交流中极少读全名，编程/通信中通常直接使用缩写（如 &lt;code&gt;LF&lt;/code&gt;, &lt;code&gt;ESC&lt;/code&gt;）。下表按官方标准提供完整名称与读音。&lt;/p&gt;</description></item><item><title>希腊语字母表</title><link>https://before80.github.io/prgms/CheatSheet/greekAlphabet/</link><pubDate>Sat, 18 Apr 2026 10:32:12 +0800</pubDate><guid>https://before80.github.io/prgms/CheatSheet/greekAlphabet/</guid><description>&lt;h1 id="希腊语字母表"&gt;希腊语字母表&lt;/h1&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: center"&gt;序号&lt;/th&gt;
 &lt;th style="text-align: center"&gt;大写&lt;/th&gt;
 &lt;th style="text-align: center"&gt;小写&lt;/th&gt;
 &lt;th style="text-align: center"&gt;希腊语字母名称&lt;/th&gt;
 &lt;th style="text-align: center"&gt;名称读音 (现代希腊语, IPA)&lt;/th&gt;
 &lt;th style="text-align: center"&gt;英语名称&lt;/th&gt;
 &lt;th style="text-align: center"&gt;英语名称读音 (IPA)&lt;/th&gt;
 &lt;th style="text-align: center"&gt;中文谐音 (英语名称)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;1&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Α&lt;/td&gt;
 &lt;td style="text-align: center"&gt;α&lt;/td&gt;
 &lt;td style="text-align: center"&gt;άλφα&lt;/td&gt;
 &lt;td style="text-align: center"&gt;[ˈalfa]&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Alpha&lt;/td&gt;
 &lt;td style="text-align: center"&gt;/ˈælfə/&lt;/td&gt;
 &lt;td style="text-align: center"&gt;阿尔-法&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;2&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Β&lt;/td&gt;
 &lt;td style="text-align: center"&gt;β&lt;/td&gt;
 &lt;td style="text-align: center"&gt;βήτα&lt;/td&gt;
 &lt;td style="text-align: center"&gt;[ˈvita]&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Beta&lt;/td&gt;
 &lt;td style="text-align: center"&gt;/ˈbeɪtə/ (美) · /ˈbiːtə/ (英)&lt;/td&gt;
 &lt;td style="text-align: center"&gt;贝-塔(美式) / 比-塔(英式)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;3&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Γ&lt;/td&gt;
 &lt;td style="text-align: center"&gt;γ&lt;/td&gt;
 &lt;td style="text-align: center"&gt;γάμα&lt;/td&gt;
 &lt;td style="text-align: center"&gt;[ˈɣama]&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Gamma&lt;/td&gt;
 &lt;td style="text-align: center"&gt;/ˈɡæmə/&lt;/td&gt;
 &lt;td style="text-align: center"&gt;加-玛&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;4&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Δ&lt;/td&gt;
 &lt;td style="text-align: center"&gt;δ&lt;/td&gt;
 &lt;td style="text-align: center"&gt;δέλτα&lt;/td&gt;
 &lt;td style="text-align: center"&gt;[ˈðelta]&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Delta&lt;/td&gt;
 &lt;td style="text-align: center"&gt;/ˈdɛltə/&lt;/td&gt;
 &lt;td style="text-align: center"&gt;德尔-塔&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;5&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Ε&lt;/td&gt;
 &lt;td style="text-align: center"&gt;ε&lt;/td&gt;
 &lt;td style="text-align: center"&gt;έψιλον&lt;/td&gt;
 &lt;td style="text-align: center"&gt;[ˈepsilon]&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Epsilon&lt;/td&gt;
 &lt;td style="text-align: center"&gt;/ˈɛpsɪlɒn/ (英) · /ˈɛpsɪlɑːn/ (美)&lt;/td&gt;
 &lt;td style="text-align: center"&gt;艾普-西-隆&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;6&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Ζ&lt;/td&gt;
 &lt;td style="text-align: center"&gt;ζ&lt;/td&gt;
 &lt;td style="text-align: center"&gt;ζήτα&lt;/td&gt;
 &lt;td style="text-align: center"&gt;[ˈzita]&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Zeta&lt;/td&gt;
 &lt;td style="text-align: center"&gt;/ˈziːtə/ (美) · /ˈzɛtə/ (英)&lt;/td&gt;
 &lt;td style="text-align: center"&gt;齐-塔 / 泽-塔&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;7&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Η&lt;/td&gt;
 &lt;td style="text-align: center"&gt;η&lt;/td&gt;
 &lt;td style="text-align: center"&gt;ήτα&lt;/td&gt;
 &lt;td style="text-align: center"&gt;[ˈita]&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Eta&lt;/td&gt;
 &lt;td style="text-align: center"&gt;/ˈeɪtə/ (美) · /ˈiːtə/ (英)&lt;/td&gt;
 &lt;td style="text-align: center"&gt;艾-塔 / 伊-塔&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;8&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Θ&lt;/td&gt;
 &lt;td style="text-align: center"&gt;θ&lt;/td&gt;
 &lt;td style="text-align: center"&gt;θήτα&lt;/td&gt;
 &lt;td style="text-align: center"&gt;[ˈθita]&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Theta&lt;/td&gt;
 &lt;td style="text-align: center"&gt;/ˈθeɪtə/&lt;/td&gt;
 &lt;td style="text-align: center"&gt;西-塔*&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;9&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Ι&lt;/td&gt;
 &lt;td style="text-align: center"&gt;ι&lt;/td&gt;
 &lt;td style="text-align: center"&gt;γιώτα&lt;/td&gt;
 &lt;td style="text-align: center"&gt;[ˈʝota]&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Iota&lt;/td&gt;
 &lt;td style="text-align: center"&gt;/aɪˈoʊtə/&lt;/td&gt;
 &lt;td style="text-align: center"&gt;爱-欧-塔&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;10&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Κ&lt;/td&gt;
 &lt;td style="text-align: center"&gt;κ&lt;/td&gt;
 &lt;td style="text-align: center"&gt;κάπα&lt;/td&gt;
 &lt;td style="text-align: center"&gt;[ˈkapa]&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Kappa&lt;/td&gt;
 &lt;td style="text-align: center"&gt;/ˈkæpə/&lt;/td&gt;
 &lt;td style="text-align: center"&gt;卡-帕&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;11&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Λ&lt;/td&gt;
 &lt;td style="text-align: center"&gt;λ&lt;/td&gt;
 &lt;td style="text-align: center"&gt;λάμδα&lt;/td&gt;
 &lt;td style="text-align: center"&gt;[ˈlamda]&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Lambda&lt;/td&gt;
 &lt;td style="text-align: center"&gt;/ˈlæmdə/&lt;/td&gt;
 &lt;td style="text-align: center"&gt;兰-姆-达&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;12&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Μ&lt;/td&gt;
 &lt;td style="text-align: center"&gt;μ&lt;/td&gt;
 &lt;td style="text-align: center"&gt;μι&lt;/td&gt;
 &lt;td style="text-align: center"&gt;[mi]&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Mu&lt;/td&gt;
 &lt;td style="text-align: center"&gt;/mjuː/&lt;/td&gt;
 &lt;td style="text-align: center"&gt;谬&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;13&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Ν&lt;/td&gt;
 &lt;td style="text-align: center"&gt;ν&lt;/td&gt;
 &lt;td style="text-align: center"&gt;νι&lt;/td&gt;
 &lt;td style="text-align: center"&gt;[ni]&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Nu&lt;/td&gt;
 &lt;td style="text-align: center"&gt;/njuː/&lt;/td&gt;
 &lt;td style="text-align: center"&gt;纽&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;14&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Ξ&lt;/td&gt;
 &lt;td style="text-align: center"&gt;ξ&lt;/td&gt;
 &lt;td style="text-align: center"&gt;ξι&lt;/td&gt;
 &lt;td style="text-align: center"&gt;[ksi]&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Xi&lt;/td&gt;
 &lt;td style="text-align: center"&gt;/zaɪ/ (常见) · /ksiː/&lt;/td&gt;
 &lt;td style="text-align: center"&gt;扎伊 / 克西&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;15&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Ο&lt;/td&gt;
 &lt;td style="text-align: center"&gt;ο&lt;/td&gt;
 &lt;td style="text-align: center"&gt;όμικρον&lt;/td&gt;
 &lt;td style="text-align: center"&gt;[ˈomikron]&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Omicron&lt;/td&gt;
 &lt;td style="text-align: center"&gt;/ˈɑːmɪkrɑːn/ (美) · /ˈɒmɪkrɒn/ (英)&lt;/td&gt;
 &lt;td style="text-align: center"&gt;奥-米-克-隆&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;16&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Π&lt;/td&gt;
 &lt;td style="text-align: center"&gt;π&lt;/td&gt;
 &lt;td style="text-align: center"&gt;πι&lt;/td&gt;
 &lt;td style="text-align: center"&gt;[pi]&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Pi&lt;/td&gt;
 &lt;td style="text-align: center"&gt;/paɪ/&lt;/td&gt;
 &lt;td style="text-align: center"&gt;派&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;17&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Ρ&lt;/td&gt;
 &lt;td style="text-align: center"&gt;ρ&lt;/td&gt;
 &lt;td style="text-align: center"&gt;ρο&lt;/td&gt;
 &lt;td style="text-align: center"&gt;[ro]&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Rho&lt;/td&gt;
 &lt;td style="text-align: center"&gt;/roʊ/ (美) · /rəʊ/ (英)&lt;/td&gt;
 &lt;td style="text-align: center"&gt;罗&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;18&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Σ&lt;/td&gt;
 &lt;td style="text-align: center"&gt;σ/ς†&lt;/td&gt;
 &lt;td style="text-align: center"&gt;σίγμα&lt;/td&gt;
 &lt;td style="text-align: center"&gt;[ˈsiɣma]&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Sigma&lt;/td&gt;
 &lt;td style="text-align: center"&gt;/ˈsɪɡmə/&lt;/td&gt;
 &lt;td style="text-align: center"&gt;西格-玛&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;19&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Τ&lt;/td&gt;
 &lt;td style="text-align: center"&gt;τ&lt;/td&gt;
 &lt;td style="text-align: center"&gt;ταυ&lt;/td&gt;
 &lt;td style="text-align: center"&gt;[taf]&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Tau&lt;/td&gt;
 &lt;td style="text-align: center"&gt;/taʊ/ (常见) · /tɔː/&lt;/td&gt;
 &lt;td style="text-align: center"&gt;套 / 陶&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;20&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Υ&lt;/td&gt;
 &lt;td style="text-align: center"&gt;υ&lt;/td&gt;
 &lt;td style="text-align: center"&gt;ύψιλον&lt;/td&gt;
 &lt;td style="text-align: center"&gt;[ˈipsilon]&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Upsilon&lt;/td&gt;
 &lt;td style="text-align: center"&gt;/ˈʌpsɪlɒn/ (英) · /juːpˈsaɪlən/ (美)&lt;/td&gt;
 &lt;td style="text-align: center"&gt;伊普-西-隆 / 尤普-赛-隆&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;21&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Φ&lt;/td&gt;
 &lt;td style="text-align: center"&gt;φ&lt;/td&gt;
 &lt;td style="text-align: center"&gt;φι&lt;/td&gt;
 &lt;td style="text-align: center"&gt;[fi]&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Phi&lt;/td&gt;
 &lt;td style="text-align: center"&gt;/faɪ/ (常见) · /fiː/&lt;/td&gt;
 &lt;td style="text-align: center"&gt;费 / 菲&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;22&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Χ&lt;/td&gt;
 &lt;td style="text-align: center"&gt;χ&lt;/td&gt;
 &lt;td style="text-align: center"&gt;χι&lt;/td&gt;
 &lt;td style="text-align: center"&gt;[çi]&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Chi&lt;/td&gt;
 &lt;td style="text-align: center"&gt;/kaɪ/&lt;/td&gt;
 &lt;td style="text-align: center"&gt;凯&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;23&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Ψ&lt;/td&gt;
 &lt;td style="text-align: center"&gt;ψ&lt;/td&gt;
 &lt;td style="text-align: center"&gt;ψι&lt;/td&gt;
 &lt;td style="text-align: center"&gt;[psi]&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Psi&lt;/td&gt;
 &lt;td style="text-align: center"&gt;/saɪ/ (常见) · /psaɪ/&lt;/td&gt;
 &lt;td style="text-align: center"&gt;赛 / 普赛&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;24&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Ω&lt;/td&gt;
 &lt;td style="text-align: center"&gt;ω&lt;/td&gt;
 &lt;td style="text-align: center"&gt;ωμέγα&lt;/td&gt;
 &lt;td style="text-align: center"&gt;[oˈmeɣa]&lt;/td&gt;
 &lt;td style="text-align: center"&gt;Omega&lt;/td&gt;
 &lt;td style="text-align: center"&gt;/oʊˈmeɡə/ (美) · /əʊˈmeɡə/ (英)&lt;/td&gt;
 &lt;td style="text-align: center"&gt;欧-米-嘎&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;说明&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Plugin SDK Migration</title><link>https://before80.github.io/prgms/AI/openclaw/basic/tools/plugin/sdk-migration/</link><pubDate>Fri, 03 Apr 2026 15:33:23 +0800</pubDate><guid>https://before80.github.io/prgms/AI/openclaw/basic/tools/plugin/sdk-migration/</guid><description>&lt;h1 id="plugin-sdk-migration"&gt;Plugin SDK Migration&lt;/h1&gt;
&lt;p&gt;OpenClaw has moved from a broad backwards-compatibility layer to a modern plugin architecture with focused, documented imports. If your plugin was built before the new architecture, this guide helps you migrate.&lt;/p&gt;
&lt;h2 id="what-is-changing"&gt;What is changing&lt;/h2&gt;
&lt;p&gt;The old plugin system provided two wide-open surfaces that let plugins import anything they needed from a single entry point:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;openclaw/plugin-sdk/compat&lt;/code&gt;&lt;/strong&gt; — a single import that re-exported dozens of helpers. It was introduced to keep older hook-based plugins working while the new plugin architecture was being built.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;openclaw/extension-api&lt;/code&gt;&lt;/strong&gt; — a bridge that gave plugins direct access to host-side helpers like the embedded agent runner.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Both surfaces are now &lt;strong&gt;deprecated&lt;/strong&gt;. They still work at runtime, but new plugins must not use them, and existing plugins should migrate before the next major release removes them.&lt;/p&gt;</description></item><item><title>Building Channel Plugins</title><link>https://before80.github.io/prgms/AI/openclaw/basic/tools/plugin/sdk-channel-plugins/</link><pubDate>Fri, 03 Apr 2026 15:32:20 +0800</pubDate><guid>https://before80.github.io/prgms/AI/openclaw/basic/tools/plugin/sdk-channel-plugins/</guid><description>&lt;p&gt;This guide walks through building a channel plugin that connects OpenClaw to a messaging platform. By the end you will have a working channel with DM security, pairing, reply threading, and outbound messaging.&lt;/p&gt;
&lt;p&gt;If you have not built any OpenClaw plugin before, read &lt;a href="https://docs.openclaw.ai/plugins/building-plugins"&gt;Getting Started&lt;/a&gt; first for the basic package structure and manifest setup.&lt;/p&gt;
&lt;h2 id="how-channel-plugins-work"&gt;How channel plugins work&lt;/h2&gt;
&lt;p&gt;Channel plugins do not need their own send/edit/react tools. OpenClaw keeps one shared &lt;code&gt;message&lt;/code&gt; tool in core. Your plugin owns:&lt;/p&gt;</description></item><item><title>Building Plugins</title><link>https://before80.github.io/prgms/AI/openclaw/basic/tools/plugin/building-plugins/</link><pubDate>Fri, 03 Apr 2026 15:31:07 +0800</pubDate><guid>https://before80.github.io/prgms/AI/openclaw/basic/tools/plugin/building-plugins/</guid><description>&lt;p&gt;Plugins extend OpenClaw with new capabilities: channels, model providers, speech, image generation, web search, agent tools, or any combination.You do not need to add your plugin to the OpenClaw repository. Publish to &lt;a href="https://docs.openclaw.ai/tools/clawhub"&gt;ClawHub&lt;/a&gt; or npm and users install with &lt;code&gt;openclaw plugins install &amp;lt;package-name&amp;gt;&lt;/code&gt;. OpenClaw tries ClawHub first and falls back to npm automatically.&lt;/p&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Node &amp;gt;= 22 and a package manager (npm or pnpm)&lt;/li&gt;
&lt;li&gt;Familiarity with TypeScript (ESM)&lt;/li&gt;
&lt;li&gt;For in-repo plugins: repository cloned and &lt;code&gt;pnpm install&lt;/code&gt; done&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="what-kind-of-plugin"&gt;What kind of plugin?&lt;/h2&gt;
&lt;h3 id="channel-plugin"&gt;Channel plugin&lt;/h3&gt;
&lt;p&gt;Connect OpenClaw to a messaging platform (Discord, IRC, etc.)&lt;/p&gt;</description></item><item><title>Voice Call Plugin</title><link>https://before80.github.io/prgms/AI/openclaw/basic/tools/plugin/voice-call/</link><pubDate>Fri, 03 Apr 2026 15:29:41 +0800</pubDate><guid>https://before80.github.io/prgms/AI/openclaw/basic/tools/plugin/voice-call/</guid><description>&lt;h1 id="voice-call-plugin-语音通话插件"&gt;Voice Call Plugin 语音通话插件&lt;/h1&gt;
&lt;p&gt;Voice calls for OpenClaw via a plugin. Supports outbound notifications and multi-turn conversations with inbound policies.&lt;/p&gt;
&lt;p&gt;​	通过插件实现 OpenClaw 的语音通话。支持外呼通知以及遵循入站策略的多轮对话。&lt;/p&gt;
&lt;p&gt;Current providers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;twilio&lt;/code&gt; (Programmable Voice + Media Streams)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;telnyx&lt;/code&gt; (Call Control v2)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;plivo&lt;/code&gt; (Voice API + XML transfer + GetInput speech)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mock&lt;/code&gt; (dev/no network)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Quick mental model:&lt;/p&gt;</description></item><item><title>bundles</title><link>https://before80.github.io/prgms/AI/openclaw/basic/tools/plugin/bundles/</link><pubDate>Fri, 03 Apr 2026 15:15:56 +0800</pubDate><guid>https://before80.github.io/prgms/AI/openclaw/basic/tools/plugin/bundles/</guid><description>&lt;h1 id="plugin-bundles"&gt;Plugin Bundles&lt;/h1&gt;
&lt;p&gt;OpenClaw can install plugins from three external ecosystems: &lt;strong&gt;Codex&lt;/strong&gt;, &lt;strong&gt;Claude&lt;/strong&gt;, and &lt;strong&gt;Cursor&lt;/strong&gt;. These are called &lt;strong&gt;bundles&lt;/strong&gt; — content and metadata packs that OpenClaw maps into native features like skills, hooks, and MCP tools.&lt;/p&gt;
&lt;p&gt;​	OpenClaw 可以从三个外部生态系统安装插件：&lt;strong&gt;Codex&lt;/strong&gt;、&lt;strong&gt;Claude&lt;/strong&gt; 和 &lt;strong&gt;Cursor&lt;/strong&gt;。这些被称为 &lt;strong&gt;插件包&lt;/strong&gt;——OpenClaw 会将其中的内容和元数据包映射为技能、钩子和 MCP 工具等原生功能。&lt;/p&gt;</description></item><item><title>Community Plugins</title><link>https://before80.github.io/prgms/AI/openclaw/basic/tools/plugin/community/</link><pubDate>Fri, 03 Apr 2026 12:57:43 +0800</pubDate><guid>https://before80.github.io/prgms/AI/openclaw/basic/tools/plugin/community/</guid><description>&lt;h1 id="community-plugins"&gt;Community Plugins&lt;/h1&gt;
&lt;p&gt;Community plugins are third-party packages that extend OpenClaw with new channels, tools, providers, or other capabilities. They are built and maintained by the community, published on &lt;a href="https://docs.openclaw.ai/tools/clawhub"&gt;ClawHub&lt;/a&gt; or npm, and installable with a single command.&lt;/p&gt;
&lt;p&gt;​	社区插件是为 OpenClaw 扩展新渠道、工具、提供程序或其他功能的第三方包。它们由社区开发和维护，发布在 &lt;a href="https://docs.openclaw.ai/tools/clawhub"&gt;ClawHub&lt;/a&gt; 或 npm 上，可通过一条命令完成安装。&lt;/p&gt;</description></item><item><title>Node.js</title><link>https://before80.github.io/prgms/AI/openclaw/basic/install/node/</link><pubDate>Fri, 03 Apr 2026 12:29:05 +0800</pubDate><guid>https://before80.github.io/prgms/AI/openclaw/basic/install/node/</guid><description>&lt;p&gt;OpenClaw requires &lt;strong&gt;Node 22.14 or newer&lt;/strong&gt;. &lt;strong&gt;Node 24 is the default and recommended runtime&lt;/strong&gt; for installs, CI, and release workflows. Node 22 remains supported via the active LTS line. The &lt;a href="https://docs.openclaw.ai/install#alternative-install-methods"&gt;installer script&lt;/a&gt; will detect and install Node automatically — this page is for when you want to set up Node yourself and make sure everything is wired up correctly (versions, PATH, global installs).&lt;/p&gt;
&lt;p&gt;​	OpenClaw 需要 &lt;strong&gt;Node 22.14 或更高版本&lt;/strong&gt;。&lt;strong&gt;Node 24 是安装、持续集成（CI）和发布工作流的默认且推荐运行时&lt;/strong&gt;。Node 22 仍通过长期支持（LTS）主线获得支持。&lt;a href="https://docs.openclaw.ai/install#alternative-install-methods"&gt;安装脚本&lt;/a&gt;会自动检测并安装 Node —— 本页面适用于你想手动设置 Node 并确保所有配置（版本、环境变量 PATH、全局安装）均正确的情况。&lt;/p&gt;</description></item><item><title>Installer Internals</title><link>https://before80.github.io/prgms/AI/openclaw/basic/install/installer/</link><pubDate>Fri, 03 Apr 2026 11:29:30 +0800</pubDate><guid>https://before80.github.io/prgms/AI/openclaw/basic/install/installer/</guid><description>&lt;h1 id="installer-internals"&gt;Installer Internals&lt;/h1&gt;
&lt;p&gt;OpenClaw ships three installer scripts, served from &lt;code&gt;openclaw.ai&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;​	OpenClaw 附带三个安装脚本，均从 &lt;code&gt;openclaw.ai&lt;/code&gt; 提供。&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: left"&gt;Script&lt;/th&gt;
 &lt;th style="text-align: left"&gt;Platform&lt;/th&gt;
 &lt;th style="text-align: left"&gt;What it does&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://docs.openclaw.ai/install/installer#installsh"&gt;&lt;code&gt;install.sh&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;macOS / Linux / WSL&lt;/td&gt;
 &lt;td style="text-align: left"&gt;Installs Node if needed, installs OpenClaw via npm (default) or git, and can run onboarding. 如有需要则安装 Node，通过 npm（默认）或 git 安装 OpenClaw，并可运行onboarding流程。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://docs.openclaw.ai/install/installer#install-clish"&gt;&lt;code&gt;install-cli.sh&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;macOS / Linux / WSL&lt;/td&gt;
 &lt;td style="text-align: left"&gt;Installs Node + OpenClaw into a local prefix (&lt;code&gt;~/.openclaw&lt;/code&gt;). No root required. 将 Node 与 OpenClaw 安装到本地前缀（&lt;code&gt;~/.openclaw&lt;/code&gt;）。无需 root 权限。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://docs.openclaw.ai/install/installer#installps1"&gt;&lt;code&gt;install.ps1&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;Windows (PowerShell)&lt;/td&gt;
 &lt;td style="text-align: left"&gt;Installs Node if needed, installs OpenClaw via npm (default) or git, and can run onboarding. 如有需要则安装 Node，通过 npm（默认）或 git 安装 OpenClaw，并可运行onboarding流程。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="quick-commands"&gt;Quick commands&lt;/h2&gt;








&lt;ul class="nav nav-tabs" id="tabs-0" role="tablist"&gt;
 &lt;li class="nav-item"&gt;
 &lt;button class="nav-link active"
 id="tabs-00-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-00" role="tab"
 aria-controls="tabs-00-00" aria-selected="true"&gt;
 install.sh
 &lt;/button&gt;
 &lt;/li&gt;&lt;li class="nav-item"&gt;
 &lt;button class="nav-link"
 id="tabs-00-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-01" role="tab"
 aria-controls="tabs-00-01" aria-selected="false"&gt;
 install-cli.sh
 &lt;/button&gt;
 &lt;/li&gt;&lt;li class="nav-item"&gt;
 &lt;button class="nav-link"
 id="tabs-00-02-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-02" role="tab"
 aria-controls="tabs-00-02" aria-selected="false"&gt;
 install.ps1
 &lt;/button&gt;
 &lt;/li&gt;
&lt;/ul&gt;

&lt;div class="tab-content" id="tabs-0-content"&gt;
 &lt;div class="tab-body tab-pane fade show active"
 id="tabs-00-00" role="tabpanel" aria-labelled-by="tabs-00-00-tab" tabindex="0"&gt;
 &lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curl -fsSL --proto &lt;span style="color:#98c379"&gt;&amp;#39;=https&amp;#39;&lt;/span&gt; --tlsv1.2 https://openclaw.ai/install.sh &lt;span style="color:#abb2bf"&gt;|&lt;/span&gt; bash
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curl -fsSL --proto &lt;span style="color:#98c379"&gt;&amp;#39;=https&amp;#39;&lt;/span&gt; --tlsv1.2 https://openclaw.ai/install.sh &lt;span style="color:#abb2bf"&gt;|&lt;/span&gt; bash -s -- --help
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
 &lt;/div&gt;
 &lt;div class="tab-body tab-pane fade"
 id="tabs-00-01" role="tabpanel" aria-labelled-by="tabs-00-01-tab" tabindex="0"&gt;
 &lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curl -fsSL --proto &lt;span style="color:#98c379"&gt;&amp;#39;=https&amp;#39;&lt;/span&gt; --tlsv1.2 https://openclaw.ai/install-cli.sh &lt;span style="color:#abb2bf"&gt;|&lt;/span&gt; bash
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curl -fsSL --proto &lt;span style="color:#98c379"&gt;&amp;#39;=https&amp;#39;&lt;/span&gt; --tlsv1.2 https://openclaw.ai/install-cli.sh &lt;span style="color:#abb2bf"&gt;|&lt;/span&gt; bash -s -- --help
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
 &lt;/div&gt;
 &lt;div class="tab-body tab-pane fade"
 id="tabs-00-02" role="tabpanel" aria-labelled-by="tabs-00-02-tab" tabindex="0"&gt;
 &lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;iwr -useb https://openclaw.ai/install.ps1 &lt;span style="color:#abb2bf"&gt;|&lt;/span&gt; iex
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;&amp;amp;&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;([&lt;/span&gt;scriptblock&lt;span style="color:#54b1c7"&gt;]&lt;/span&gt;::Create&lt;span style="color:#54b1c7"&gt;((&lt;/span&gt;iwr -useb https://openclaw.ai/install.ps1&lt;span style="color:#54b1c7"&gt;)))&lt;/span&gt; -Tag beta -NoOnboard -DryRun
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
 &lt;/div&gt;
&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;If install succeeds but &lt;code&gt;openclaw&lt;/code&gt; is not found in a new terminal, see &lt;a href="https://docs.openclaw.ai/install/node#troubleshooting"&gt;Node.js troubleshooting&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Migrating</title><link>https://before80.github.io/prgms/AI/openclaw/basic/install/migrating/</link><pubDate>Fri, 03 Apr 2026 11:12:24 +0800</pubDate><guid>https://before80.github.io/prgms/AI/openclaw/basic/install/migrating/</guid><description>&lt;h1 id="migration-guide-迁移指南"&gt;Migration Guide 迁移指南&lt;/h1&gt;
&lt;p&gt;This guide moves an OpenClaw gateway to a new machine without redoing onboarding.&lt;/p&gt;
&lt;p&gt;​	本指南可将 OpenClaw gateway 迁移到新机器，且无需重新完成 onboarding配置。&lt;/p&gt;
&lt;h2 id="what-gets-migrated-需要迁移的内容"&gt;What Gets Migrated 需要迁移的内容&lt;/h2&gt;
&lt;p&gt;When you copy the &lt;strong&gt;state directory&lt;/strong&gt; (&lt;code&gt;~/.openclaw/&lt;/code&gt; by default) and your &lt;strong&gt;workspace&lt;/strong&gt;, you preserve:&lt;/p&gt;</description></item><item><title>Uninstall</title><link>https://before80.github.io/prgms/AI/openclaw/basic/install/uninstall/</link><pubDate>Fri, 03 Apr 2026 09:40:49 +0800</pubDate><guid>https://before80.github.io/prgms/AI/openclaw/basic/install/uninstall/</guid><description>&lt;h1 id="uninstall"&gt;Uninstall&lt;/h1&gt;
&lt;p&gt;Two paths:&lt;/p&gt;
&lt;p&gt;​	两种方法：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Easy path&lt;/strong&gt; if &lt;code&gt;openclaw&lt;/code&gt; is still installed.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;简易方法&lt;/strong&gt;（前提是 &lt;code&gt;openclaw&lt;/code&gt; 仍已安装）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Manual service removal&lt;/strong&gt; if the CLI is gone but the service is still running.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;手动移除服务&lt;/strong&gt;，适用于 CLI 已消失但服务仍在运行的情况。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="easy-path-cli-still-installed"&gt;Easy path (CLI still installed)&lt;/h2&gt;
&lt;p&gt;Recommended: use the built-in uninstaller:&lt;/p&gt;</description></item><item><title>Updating</title><link>https://before80.github.io/prgms/AI/openclaw/basic/install/updating/</link><pubDate>Fri, 03 Apr 2026 09:36:17 +0800</pubDate><guid>https://before80.github.io/prgms/AI/openclaw/basic/install/updating/</guid><description>&lt;h1 id="updating"&gt;Updating&lt;/h1&gt;
&lt;p&gt;Keep OpenClaw up to date.&lt;/p&gt;
&lt;h2 id="recommended-openclaw-update"&gt;Recommended: &lt;code&gt;openclaw update&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;The fastest way to update. It detects your install type (npm or git), fetches the latest version, runs &lt;code&gt;openclaw doctor&lt;/code&gt;, and restarts the gateway.&lt;/p&gt;
&lt;p&gt;​	最快的更新方式。它会检测你的安装类型（npm 或 git），获取最新版本，运行 &lt;code&gt;openclaw doctor&lt;/code&gt; 并重启网关。&lt;/p&gt;</description></item><item><title>第1章 捭阖——嘴皮子一开一合，人生剧本自己捏</title><link>https://before80.github.io/prgms/Philosophy/guiGuZi/1/</link><pubDate>Sat, 11 Apr 2026 21:52:00 +0800</pubDate><guid>https://before80.github.io/prgms/Philosophy/guiGuZi/1/</guid><description>&lt;h1 id="第一章-捭阖嘴皮子一开一合人生剧本自己捏"&gt;第一章 捭阖——&amp;ldquo;嘴皮子一开一合，人生剧本自己捏&amp;rdquo;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本章核心：沟通的本质是“开”与“关”，摸清对方底牌、掌控对话节奏，才能在人情场里游刃有余、进退自如。&lt;/p&gt;</description></item><item><title>第1章 原始——做人做事，先把天理搞明白</title><link>https://before80.github.io/prgms/Philosophy/suShu/Chapter-01-Original/</link><pubDate>Thu, 09 Apr 2026 10:58:00 +0800</pubDate><guid>https://before80.github.io/prgms/Philosophy/suShu/Chapter-01-Original/</guid><description>&lt;h1 id="第一章-原始做人做事先把天理搞明白"&gt;第一章 原始——&amp;ldquo;做人做事，先把天理搞明白&amp;rdquo;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本章核心：道、德、仁、义、礼是立身之本，看懂规律、踩准时机，才是聪明人的活法&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="11-夫道德仁义礼五者一体也"&gt;1.1 夫道、德、仁、义、礼，五者一体也。&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;原文&lt;/strong&gt;：夫道、德、仁、义、礼，五者一体也。&lt;/p&gt;</description></item><item><title>第1章 欢迎来到Python的世界</title><link>https://before80.github.io/prgms/Python/basic/Chapter-01-Hello-Python/</link><pubDate>Wed, 08 Apr 2026 13:22:00 +0800</pubDate><guid>https://before80.github.io/prgms/Python/basic/Chapter-01-Hello-Python/</guid><description>&lt;h1 id="第一章python-的前世今生"&gt;第一章：Python 的前世今生&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本章将带你穿越时光隧道，从荷兰的某个小隔间出发，一路狂奔到 2025 年，看看 Python 是如何从一条&amp;quot;小蛇&amp;quot;长成一条吞天巨蟒的。我们会讲历史、聊八卦、挖坟技术，顺便让你明白为什么 Python 能让全世界的程序员都忍不住喊出&amp;quot;真香&amp;quot;。&lt;/p&gt;</description></item><item><title>第1章：没有 Git 的世界，是一场灾难片</title><link>https://before80.github.io/prgms/Git/Chapter-01-Without-Git-The-World-Is-A-Disaster/</link><pubDate>Fri, 03 Apr 2026 19:36:48 +0800</pubDate><guid>https://before80.github.io/prgms/Git/Chapter-01-Without-Git-The-World-Is-A-Disaster/</guid><description>&lt;h1 id="第1章没有-git-的世界是一场灾难片"&gt;第1章：没有 Git 的世界，是一场灾难片&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;ldquo;在 Git 出现之前，程序员们都是在黑暗中摸索的勇士——只不过他们摸索的是无数个&amp;rsquo;最终版&amp;rsquo;文件夹。&amp;rdquo;&lt;/em&gt;&lt;/p&gt;</description></item><item><title>快速开始</title><link>https://before80.github.io/prgms/AI/openclaw/basic/start/getting-started/</link><pubDate>Thu, 02 Apr 2026 17:08:40 +0800</pubDate><guid>https://before80.github.io/prgms/AI/openclaw/basic/start/getting-started/</guid><description>&lt;h1 id="getting-started"&gt;Getting Started&lt;/h1&gt;
&lt;p&gt;Install OpenClaw, run onboarding, and chat with your AI assistant — all in about 5 minutes. By the end you will have a running Gateway, configured auth, and a working chat session.&lt;/p&gt;
&lt;p&gt;​	安装 OpenClaw、完成新手引导并与你的 AI 助手聊天——整个过程大约只需 5 分钟。完成后，你将拥有一个运行中的Gateway、已配置的身份验证，以及一个可正常使用的聊天会话。&lt;/p&gt;</description></item><item><title>第1章 Java 是什么——先搞清楚你将要学的是什么</title><link>https://before80.github.io/prgms/Java/basic/Chapter-01-what-is-java/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-01-what-is-java/</guid><description>&lt;h1 id="第一章-java-是什么先搞清楚你将要学的是什么"&gt;第一章 Java 是什么——先搞清楚你将要学的是什么&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;想象一下，你正准备学一门编程语言，结果发现它叫&amp;quot;爪哇&amp;quot;——一种咖啡的名字。你会不会以为这是咖啡公司出的编程语言？恭喜你，答对了！Java 还真就跟咖啡有着说不清道不明的关系。（当然，不是你想的那个&amp;quot;Java&amp;quot;，不是那个让你熬夜加班的续命神器。）本章我们来聊聊 Java 的前世今生，搞清楚你到底要学的是什么，以及为什么它能让你在职场中&amp;quot;续命&amp;quot;成功。&lt;/p&gt;</description></item><item><title>第1章：程序从 main 开始—— builtin 包</title><link>https://before80.github.io/prgms/go/std/Chapter-01-builtin/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-01-builtin/</guid><description>&lt;h1 id="第1章程序从-main-开始-builtin-包"&gt;第1章：程序从 main 开始—— builtin 包&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Go 语言的核心秘密，就藏在这个看不见摸不着的 &lt;code&gt;builtin&lt;/code&gt; 包里。&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="11-builtin-包解决什么问题"&gt;1.1 builtin 包解决什么问题&lt;/h2&gt;
&lt;p&gt;想象一下，你在学 Go 的第一天，兴冲冲地写下了：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;package&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;main&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;func&lt;/span&gt; &lt;span style="color:#00b1f7"&gt;main&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;()&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;var&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;n&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;int&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;=&lt;/span&gt; &lt;span style="color:#d19a66"&gt;42&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e5c07b"&gt;println&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;n&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;你没有 &lt;code&gt;import&lt;/code&gt; 任何东西，但 &lt;code&gt;int&lt;/code&gt;、&lt;code&gt;println&lt;/code&gt; 从哪来的？难道是凭空冒出来的？&lt;/p&gt;</description></item><item><title>第 1 章：C 语言简介与历史演变</title><link>https://before80.github.io/prgms/C/basic/Chapter-01-Introduction-and-History/</link><pubDate>Sun, 29 Mar 2026 22:34:00 +0800</pubDate><guid>https://before80.github.io/prgms/C/basic/Chapter-01-Introduction-and-History/</guid><description>&lt;h1 id="第-1-章c-语言简介与历史演变"&gt;第 1 章：C 语言简介与历史演变&lt;/h1&gt;
&lt;p&gt;想象一下，你穿越回了 1972 年的美国贝尔实验室。那时候的计算机还是个庞然大物——占用整栋楼的空调房，内存只有几十 KB，屏幕上跳动着绿色的字符。程序员们还在用汇编语言和机器直接对话，每写一行代码都得告诉 CPU &amp;ldquo;把这个寄存器里的数加到那个地址上去&amp;rdquo;。&lt;/p&gt;</description></item><item><title>第1章 C++概述与历史演进</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-01-CPP-Overview-and-History/</link><pubDate>Sun, 29 Mar 2026 21:43:08 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-01-CPP-Overview-and-History/</guid><description>&lt;h1 id="第1章-c概述与历史演进"&gt;第1章 C++概述与历史演进&lt;/h1&gt;
&lt;h2 id="11-c的诞生与发展历程"&gt;1.1 C++的诞生与发展历程&lt;/h2&gt;
&lt;p&gt;话说1979年，在贝尔实验室（Bell Labs）的一间办公室里，一位来自丹麦的计算机科学家Bjarne Stroustrup正在思考一个问题：&lt;strong&gt;&amp;ldquo;如果能让C语言支持面向对象，那该多好啊！&amp;rdquo;&lt;/strong&gt; 彼时的他大概没想到，这个念头会让他成为编程语言界的&amp;quot;C++之父&amp;quot;，并且让无数程序员在深夜对着模板错误信息发出绝望的呐喊。&lt;/p&gt;</description></item><item><title>第一章 Bun 是什么</title><link>https://before80.github.io/prgms/Js/tools/bun/Chapter-01-What-is-Bun/</link><pubDate>Sun, 29 Mar 2026 14:36:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/bun/Chapter-01-What-is-Bun/</guid><description>&lt;h1 id="第一章bun-是什么"&gt;第一章　Bun 是什么&lt;/h1&gt;
&lt;h2 id="11-bun-的定义与定位"&gt;1.1 Bun 的定义与定位&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Bun&lt;/strong&gt; 是一个&lt;strong&gt;一站式 JavaScript / TypeScript / JSX 工具包&lt;/strong&gt;。它用一个叫 &lt;code&gt;bun&lt;/code&gt; 的单一、无依赖的二进制文件，把运行时、打包器、包管理器、测试框架、Lint工具、Shell工具全部集成在一起。&lt;/p&gt;</description></item><item><title>第1章 esbuild是什么</title><link>https://before80.github.io/prgms/Js/tools/build/esbuild/Chapter-01-what-is-esbuild/</link><pubDate>Sat, 28 Mar 2026 11:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/build/esbuild/Chapter-01-what-is-esbuild/</guid><description>&lt;h1 id="chapter-01---esbuild-是什么"&gt;Chapter 01 - esbuild 是什么&lt;/h1&gt;
&lt;h2 id="11-定义一句话认识-esbuild"&gt;1.1 定义：一句话认识 esbuild&lt;/h2&gt;
&lt;p&gt;想象一下这个场景：你手搓了一个炫酷的网页，代码模块写得优雅又整洁，结果浏览器打开一看——满屏报错，理由是它&amp;quot;不认识&amp;quot;你的 &lt;code&gt;import&lt;/code&gt; 和 &lt;code&gt;export&lt;/code&gt;。&lt;/p&gt;</description></item><item><title>第1章 什么是 Rollup</title><link>https://before80.github.io/prgms/Js/tools/bundler/rollup/Chapter-01-What-Is-Rollup/</link><pubDate>Sat, 28 Mar 2026 11:38:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/bundler/rollup/Chapter-01-What-Is-Rollup/</guid><description>&lt;h1 id="第-1-章rollup-是什么"&gt;第 1 章　Rollup 是什么&lt;/h1&gt;
&lt;h2 id="11-官方定义专注于-es-module-的新一代打包工具"&gt;1.1 官方定义：专注于 ES Module 的新一代打包工具&lt;/h2&gt;
&lt;p&gt;如果把前端世界的打包工具比作一家餐厅，那 &lt;strong&gt;Rollup&lt;/strong&gt; 就是那个只做精品套餐、不卖自助餐的固执大厨。&lt;/p&gt;
&lt;p&gt;它的官方定义是这样的：&lt;strong&gt;Rollup 是一个 JavaScript 模块打包器（module bundler），专注于 ES Module 语法的打包工具&lt;/strong&gt;。听起来平平无奇对吧？就像说&amp;quot;这家餐厅是做菜的&amp;quot;一样敷衍。但魔鬼藏在细节里——它的核心卖点是&amp;quot;&lt;strong&gt;专注于 ES Module&lt;/strong&gt;&amp;ldquo;这五个字。&lt;/p&gt;</description></item><item><title>第1章 Create Next App 是什么</title><link>https://before80.github.io/prgms/Js/tools/scaffold/create-next-app/Chapter-01-what-is-create-next-app/</link><pubDate>Fri, 27 Mar 2026 21:12:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/scaffold/create-next-app/Chapter-01-what-is-create-next-app/</guid><description>&lt;h1 id="第一章--create-next-app-是什么"&gt;第一章 · Create Next App 是什么&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;欢迎来到第一章！这一章我们要搞清楚一个根本问题：Create Next App 到底是何方神圣？它凭什么值得你花时间学习？别急，且听我慢慢道来，保证让你笑着看完，还不忘记重点。&lt;/p&gt;</description></item><item><title>第1章 Create React App 是什么</title><link>https://before80.github.io/prgms/Js/tools/scaffold/create-react-app/Chapter-01-What-is-CRA/</link><pubDate>Fri, 27 Mar 2026 21:04:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/scaffold/create-react-app/Chapter-01-What-is-CRA/</guid><description>&lt;h1 id="第-1-章create-react-app-是什么"&gt;第 1 章　Create React App 是什么？&lt;/h1&gt;
&lt;h2 id="11-背景与诞生原因"&gt;1.1 背景与诞生原因&lt;/h2&gt;
&lt;h3 id="-一段不得不说的历史"&gt;🏛️ 一段不得不说的历史&lt;/h3&gt;
&lt;p&gt;话说很久很久以前——准确地说，是 2013 年——Facebook（现在叫 Meta，但很多人还是习惯叫它 Facebook）开源了一个叫做 &lt;strong&gt;React&lt;/strong&gt; 的前端框架。&lt;/p&gt;</description></item><item><title>第1章 Create-Vite 是什么</title><link>https://before80.github.io/prgms/Js/tools/scaffold/create-vite/Chapter-01-What-Is-Create-Vite/</link><pubDate>Fri, 27 Mar 2026 21:01:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/scaffold/create-vite/Chapter-01-What-Is-Create-Vite/</guid><description>&lt;h1 id="第一章create-vite-是什么"&gt;第一章：Create-Vite 是什么&lt;/h1&gt;
&lt;h2 id="11-create-vite-与-vite-的关系"&gt;1.1 Create-Vite 与 Vite 的关系&lt;/h2&gt;
&lt;p&gt;想象一下，你走进了一家全自动机器人餐厅。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Vite&lt;/strong&gt; 就是那个后厨里挥汗如雨的大厨——它负责真正把饭做出来（构建你的项目），切菜、炒菜、摆盘，一条龙服务。没有它，你的前端代码就只能是一堆原始食材（&lt;code&gt;.js&lt;/code&gt;、&lt;code&gt;.vue&lt;/code&gt;、&lt;code&gt;.css&lt;/code&gt; 文件），永远上不了餐桌。&lt;/p&gt;</description></item><item><title>第 1 章 Rust 语言基础</title><link>https://before80.github.io/prgms/Rust/basic/Chapter-01-Rust-Language-Basics/</link><pubDate>Fri, 27 Mar 2026 17:24:46 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/basic/Chapter-01-Rust-Language-Basics/</guid><description>&lt;h1 id="chapter-01-rust-语言基础"&gt;Chapter-01 Rust 语言基础&lt;/h1&gt;
&lt;h2 id="11-初识-rust"&gt;1.1 初识 Rust&lt;/h2&gt;
&lt;h3 id="111-rust-的设计目标性能安全并发"&gt;1.1.1 Rust 的设计目标：性能、安全、并发&lt;/h3&gt;
&lt;p&gt;想象一下，如果你是一个编程语言的创造者，你会想要什么？&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;性能快如闪电&lt;/strong&gt; ⚡ —— 最好能和 C/C++ 肩并肩，毕竟谁不想让自己的程序跑得飞快呢？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;安全第一&lt;/strong&gt; 🔒 —— 不想写出那些让人半夜惊醒的内存漏洞、悬垂指针、空指针异常&amp;hellip;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;并发无忧&lt;/strong&gt; 🔮 —— 多线程程序写起来简单，不会动不动就死锁或者数据竞争&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;恭喜你，Rust 就是为了解决这三个问题而生的！&lt;/p&gt;</description></item><item><title>第1章 认识 Vite</title><link>https://before80.github.io/prgms/Js/tools/build/vite/Chapter-01-Knowing-Vite/</link><pubDate>Fri, 27 Mar 2026 17:13:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/build/vite/Chapter-01-Knowing-Vite/</guid><description>&lt;h1 id="chapter-01-knowing-vite"&gt;Chapter-01-Knowing-Vite&lt;/h1&gt;
&lt;h1 id="第1章认识-vite"&gt;第1章：认识 Vite&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;在正式开始之前，让我们先来一场时光旅行。回到2018年，彼时的前端江湖还是 Webpack 的天下。那一年，你打开一个中大型项目，喝了杯咖啡，回来发现——浏览器还在转圈圈。🥲&lt;/p&gt;</description></item><item><title>第1章 什么是CSS</title><link>https://before80.github.io/prgms/CSS/basic/Chapter-01-What-is-CSS/</link><pubDate>Fri, 27 Mar 2026 16:53:00 +0800</pubDate><guid>https://before80.github.io/prgms/CSS/basic/Chapter-01-What-is-CSS/</guid><description>&lt;h1 id="第一章css-是什么"&gt;第一章：CSS 是什么&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;如果把网页比作一个人，那么 HTML 就是骨骼和器官，CSS 就是它的外衣和妆容。没有 CSS 的网页，就像一个人裸奔出门——技术上没问题，但回头率嘛&amp;hellip; 主要是惊恐的那种。&lt;/p&gt;</description></item><item><title>第1章 TypeScript概述与环境搭建</title><link>https://before80.github.io/prgms/Ts/basic/Chapter-01-TypeScript-Overview-and-Development-Environment/</link><pubDate>Thu, 26 Mar 2026 21:05:00 +0800</pubDate><guid>https://before80.github.io/prgms/Ts/basic/Chapter-01-TypeScript-Overview-and-Development-Environment/</guid><description>&lt;h2 id="11-typescript-是什么"&gt;1.1 TypeScript 是什么&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;JavaScript是你在凌晨3点写的代码，TypeScript是你第二天早上7点重新写的代码——只不过这次加了类型。&amp;rdquo; —— 某位被undefined和null折磨疯了的程序员&lt;/p&gt;</description></item><item><title>第1章 前端基础与React概述</title><link>https://before80.github.io/prgms/Js/frameworks/react/Chapter-01-Frontend-Basics-and-React-Overview/</link><pubDate>Wed, 25 Mar 2026 12:56:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/react/Chapter-01-Frontend-Basics-and-React-Overview/</guid><description>&lt;h1 id="chapter-01---前端基础与-react-概述"&gt;Chapter-01 - 前端基础与 React 概述&lt;/h1&gt;
&lt;h2 id="11-网页是如何工作的"&gt;1.1 网页是如何工作的&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;你有没有想过，当你往浏览器地址栏里敲下 &lt;code&gt;www.baidu.com&lt;/code&gt;，按下回车的那一瞬间，到底发生了什么？是什么力量让那些文字、图片、视频神奇地出现在你的屏幕上？是什么让一个&amp;quot;白纸一张&amp;quot;的浏览器变成了一个五彩斑斓的网页？这一切的幕后英雄，就是我们今天要揭开的秘密。&lt;/p&gt;</description></item><item><title>第1章 环境安装与项目创建</title><link>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-01-Environment-Setup/</link><pubDate>Wed, 25 Mar 2026 12:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-01-Environment-Setup/</guid><description>&lt;h1 id="第一章-环境安装与项目创建"&gt;第一章 环境安装与项目创建&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;别急着写代码，先把家伙事儿准备好！磨刀不误砍柴工，工欲善其事必先利其器，老祖宗的话不是白说的。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="11-开发环境准备"&gt;1.1 开发环境准备&lt;/h2&gt;
&lt;h3 id="111-nodejs-与-npmyarnpnpm-介绍"&gt;1.1.1 Node.js 与 npm/yarn/pnpm 介绍&lt;/h3&gt;
&lt;p&gt;如果把前端开发比作厨房做菜，那 Node.js 就是那口灶，而包管理器就是你手边那个装满调料的架子——没有它，你连盐都找不着，更别提起锅烧油了。所以在这本书的第一节，我们不聊 Vue，先聊聊 Vue 赖以生存的土壤：Node.js。&lt;/p&gt;</description></item><item><title>第 1 章 JavaScript 入门</title><link>https://before80.github.io/prgms/Js/basic/Chapter-01-JavaScript-Introduction/</link><pubDate>Tue, 24 Mar 2026 22:08:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/basic/Chapter-01-JavaScript-Introduction/</guid><description>&lt;h1 id="第-1-章-javascript-入门"&gt;第 1 章 JavaScript 入门&lt;/h1&gt;
&lt;p&gt;想象一下，你走进一家餐厅，服务员递给你一份菜单。菜单上写着：「JavaScript」。你心想：「哦，就是那个跟 Java 差不多的东西吧？」——朋友，你不是一个人。几乎每个初学者都掉进过这个坑。别急，咱们先来聊聊 JavaScript 的前世今生，保证让你拍案叫绝。&lt;/p&gt;</description></item><item><title>第1章：计算机发展简史</title><link>https://before80.github.io/prgms/linux/basic/Chapter-01-Computer-History/</link><pubDate>Mon, 23 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/linux/basic/Chapter-01-Computer-History/</guid><description>&lt;h1 id="第一章计算机发展简史"&gt;第一章：计算机发展简史&lt;/h1&gt;
&lt;h2 id="11-冯诺依曼体系结构计算机的基本组成"&gt;1.1 冯·诺依曼体系结构：计算机的基本组成&lt;/h2&gt;
&lt;p&gt;各位看官，今天我们要聊的可是计算机界的&amp;quot;五福临门&amp;quot;——冯·诺依曼体系结构的五大金刚！这五位大佬分别是：&lt;strong&gt;运算器&lt;/strong&gt;、&lt;strong&gt;控制器&lt;/strong&gt;、&lt;strong&gt;存储器&lt;/strong&gt;、&lt;strong&gt;输入设备&lt;/strong&gt;和&lt;strong&gt;输出设备&lt;/strong&gt;。别看它们名字朴实无华，它们可是计算机界的&amp;quot;复仇者联盟&amp;quot;，缺一个都不行！&lt;/p&gt;</description></item><item><title>第2章：Linux 简介与生态</title><link>https://before80.github.io/prgms/linux/basic/Chapter-02-Linux-Introduction/</link><pubDate>Mon, 23 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/linux/basic/Chapter-02-Linux-Introduction/</guid><description>&lt;h1 id="第二章linux-简介与生态"&gt;第二章：Linux 简介与生态&lt;/h1&gt;
&lt;h2 id="21-什么是-linux内核与发行版的区别"&gt;2.1 什么是 Linux？内核与发行版的区别&lt;/h2&gt;
&lt;p&gt;各位看官，经过上一章的历史熏陶，现在你应该对计算机的发展有了全面的认识。这回我们来聊聊 Linux 本身——到底什么是 Linux？它和 Windows、macOS 有什么区别？&lt;/p&gt;</description></item><item><title>第1章 词法元素</title><link>https://before80.github.io/prgms/go/basic/Chapter-01-Lexical-Elements/</link><pubDate>Fri, 20 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/basic/Chapter-01-Lexical-Elements/</guid><description>&lt;h1 id="第1章-词法元素"&gt;第1章 词法元素&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;你好啊！欢迎来到 Go 语言的第一章！这一章我们要聊的是 Go 代码的&amp;quot;基因&amp;quot;——词法元素。想象一下，如果把一门编程语言比作一个活生生的人，那词法元素就是这个人身上的细胞、器官和 DNA 序列。别担心，我会让这段旅程变得有趣而不是催眠。准备好了吗？Let&amp;rsquo;s Go！（看，我已经在用双关语了，这就是 Go 语言的魅力！）&lt;/p&gt;</description></item><item><title>第2章 反应——对方说话你装傻，底牌早就漏了光</title><link>https://before80.github.io/prgms/Philosophy/guiGuZi/2/</link><pubDate>Sat, 11 Apr 2026 21:52:00 +0800</pubDate><guid>https://before80.github.io/prgms/Philosophy/guiGuZi/2/</guid><description>&lt;h1 id="第二章-反应对方说话你装傻底牌早就漏了光"&gt;第二章 反应——&amp;ldquo;对方说话你装傻，底牌早就漏了光&amp;rdquo;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本章核心：倾听比表达更重要，用“反听”摸清虚实，用“象比”诱导真相，不战而屈人之兵。&lt;/p&gt;</description></item><item><title>第2章 正道 ——人是分等级的，你是哪一档？</title><link>https://before80.github.io/prgms/Philosophy/suShu/Chapter-02-TheRightPath/</link><pubDate>Thu, 09 Apr 2026 10:58:00 +0800</pubDate><guid>https://before80.github.io/prgms/Philosophy/suShu/Chapter-02-TheRightPath/</guid><description>&lt;h1 id="第二章-正道人是分等级的你是哪一档"&gt;第二章 正道——&amp;ldquo;人是分等级的，你是哪一档？&amp;rdquo;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本章核心：俊、豪、杰三种人才画像，用实在标准照出自己的段位&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="21-德足以怀远"&gt;2.1 德足以怀远，&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;原文&lt;/strong&gt;：德足以怀远，&lt;/p&gt;</description></item><item><title>第2章 Python的进化史</title><link>https://before80.github.io/prgms/Python/basic/Chapter-02-Python-Evolution/</link><pubDate>Wed, 08 Apr 2026 13:22:00 +0800</pubDate><guid>https://before80.github.io/prgms/Python/basic/Chapter-02-Python-Evolution/</guid><description>&lt;h1 id="第二章python-语法进化史--从远古到赛博朋克"&gt;第二章：Python 语法进化史 —— 从远古到赛博朋克&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;🎭 &lt;strong&gt;旁白&lt;/strong&gt;：欢迎来到 Python 语法的博物馆！请系好安全带，我们将乘坐时光机，从 1994 年的 Python 1.0 一路狂飙到 2026 年的 Python 3.14。这段旅程中，你会看到语言的&amp;quot;整容史&amp;quot;、语法的&amp;quot;断舍离&amp;quot;，以及那些让程序员又爱又恨的语法糖。准备好了吗？出发！&lt;/p&gt;</description></item><item><title>第2章：安装 Git —— 程序员的第一道门槛</title><link>https://before80.github.io/prgms/Git/Chapter-02-Installing-Git-The-First-Hurdle/</link><pubDate>Fri, 03 Apr 2026 19:36:48 +0800</pubDate><guid>https://before80.github.io/prgms/Git/Chapter-02-Installing-Git-The-First-Hurdle/</guid><description>&lt;h1 id="第2章安装-git--程序员的第一道门槛"&gt;第2章：安装 Git —— 程序员的第一道门槛&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;ldquo;安装 Git 很简单，他们说。只需要几分钟，他们说。然后你在官网下载界面等了半小时。&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="21-官网下载慢如蜗牛跨国网速的忧伤"&gt;2.1 官网下载慢如蜗牛：跨国网速的忧伤&lt;/h2&gt;
&lt;p&gt;你决定安装 Git。你打开浏览器，输入 &lt;code&gt;git-scm.com&lt;/code&gt;，点击 Download。&lt;/p&gt;</description></item><item><title>快速开始概览</title><link>https://before80.github.io/prgms/AI/openclaw/basic/start/onboarding-overview/</link><pubDate>Thu, 02 Apr 2026 18:58:41 +0800</pubDate><guid>https://before80.github.io/prgms/AI/openclaw/basic/start/onboarding-overview/</guid><description>&lt;h1 id="onboarding-overview"&gt;Onboarding Overview&lt;/h1&gt;
&lt;p&gt;OpenClaw has two onboarding paths. Both configure auth, the Gateway, and optional channels — they just differ in how you interact with the setup.&lt;/p&gt;
&lt;p&gt;​	OpenClaw 有两种 onboarding 路径。两者都会配置身份验证、网关以及可选的通道——它们的区别仅在于与设置交互的方式。&lt;/p&gt;</description></item><item><title>第2章 Java 版本演变史：从 1996 年到 2026 年</title><link>https://before80.github.io/prgms/Java/basic/Chapter-02-java-evolution/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-02-java-evolution/</guid><description>&lt;h1 id="第二章-java-版本演变史从-1996-年到-2026-年"&gt;第二章 Java 版本演变史：从 1996 年到 2026 年&lt;/h1&gt;
&lt;p&gt;「如果你在 1996 年告诉别人，2026 年这门语言还会是最流行的编程语言之一，他们可能会觉得你疯了。但 Java 就是这么倔强——别人写胶水代码，它写企业级系统；别人追新特性，它稳扎稳打地演进。Java 的历史，就像一部编程界的『活着的传奇』，每十年一次大变局，每次变局都让程序员又爱又恨。」&lt;/p&gt;</description></item><item><title>第2章：和世界说话——fmt 包</title><link>https://before80.github.io/prgms/go/std/Chapter-02-fmt/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-02-fmt/</guid><description>&lt;h1 id="第2章和世界说话fmt-包"&gt;第2章：和世界说话——fmt 包&lt;/h1&gt;
&lt;div class="td-alert td-alert--md alert alert-note" role="alert"&gt;&lt;div class="td-alert-heading alert-heading" role="heading"&gt;说明&lt;/div&gt;
 &lt;div class="td-alert-body"&gt;
 &lt;p&gt;如果说程序是一个人的话，那么 &lt;code&gt;fmt&lt;/code&gt; 包就是他的嘴和耳朵。没有它，你的程序就是个哑巴，耳聋眼瞎，只能在内存里自言自语，多可怜啊！&lt;/p&gt;
 &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;想象一下，你写了一个计算器程序，结果它只会默默算，算完就什么都不说——那用户怎么知道 1+1=2 呢？总不能要求用户去读内存吧？所以，&lt;code&gt;fmt&lt;/code&gt; 包就是程序对外交流的桥梁，让你的程序既能&amp;quot;说话&amp;quot;（输出），也能&amp;quot;听话&amp;quot;（输入）。&lt;/p&gt;</description></item><item><title>第 2 章：开发环境安装与第一个程序</title><link>https://before80.github.io/prgms/C/basic/Chapter-02-Development-Environment/</link><pubDate>Sun, 29 Mar 2026 22:34:00 +0800</pubDate><guid>https://before80.github.io/prgms/C/basic/Chapter-02-Development-Environment/</guid><description>&lt;h1 id="第-2-章开发环境安装与第一个程序"&gt;第 2 章：开发环境安装与第一个程序&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;上一章我们学会了 C 语言是什么、能干什么、前景如何，是不是已经摩拳擦掌、跃跃欲试了？但是等等——磨刀不误砍柴工！这一章咱们先来把&amp;quot;武器库&amp;quot;给搭建好。编程语言再好，也得有个趁手的家伙事儿不是？&lt;/p&gt;</description></item><item><title>第2章 开发环境搭建与工具链</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-02-Development-Environment/</link><pubDate>Sun, 29 Mar 2026 21:43:08 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-02-Development-Environment/</guid><description>&lt;h1 id="第2章-开发环境搭建与工具链"&gt;第2章 开发环境搭建与工具链&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;古人云：&amp;ldquo;工欲善其事，必先利其器。&amp;ldquo;在C++的江湖里，没有一套趁手的开发环境，你连写代码的勇气都没有。本章将带你穿越Windows、Linux、macOS三大操作系统，亲手打造一个能让代码飞起来的开发环境。我们还会深入剖析C++代码是如何从一堆字符变成可执行程序的整个过程。准备好了吗？Let&amp;rsquo;s Rock!&lt;/p&gt;</description></item><item><title>第二章 历史与演进</title><link>https://before80.github.io/prgms/Js/tools/bun/Chapter-02-History-and-Evolution/</link><pubDate>Sun, 29 Mar 2026 14:36:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/bun/Chapter-02-History-and-Evolution/</guid><description>&lt;h1 id="第二章历史与演进"&gt;第二章　历史与演进&lt;/h1&gt;
&lt;h2 id="21-bun-的诞生背景"&gt;2.1 Bun 的诞生背景&lt;/h2&gt;
&lt;p&gt;2022 年，一个叫 &lt;strong&gt;Jarred Sumner&lt;/strong&gt; 的哥们实在受不了 Node.js 的慢速度，决定自己动手写一个更快的 JavaScript 运行时。他创立了 &lt;strong&gt;Oven 公司&lt;/strong&gt;（中文社区戏称&amp;quot;烤箱公司&amp;quot;——JavaScript 运行时，烤箱烤面包很快，名字还挺贴切），全职维护 Bun。&lt;/p&gt;</description></item><item><title>第2章 历史与演进</title><link>https://before80.github.io/prgms/Js/tools/build/esbuild/Chapter-02-history-and-evolution/</link><pubDate>Sat, 28 Mar 2026 11:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/build/esbuild/Chapter-02-history-and-evolution/</guid><description>&lt;h2 id="21-诞生背景传统构建工具的速度瓶颈"&gt;2.1 诞生背景：传统构建工具的速度瓶颈&lt;/h2&gt;
&lt;p&gt;话说前端圈子的构建工具发展史，就是一部&amp;quot;蜗牛进化史&amp;quot;。&lt;/p&gt;
&lt;p&gt;2010 年代初期，前端项目还很单纯——写几个 HTML、几个 CSS、几个 JS 文件，用手直接在 &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; 标签里写代码，搞定了。那时候的&amp;quot;构建工具&amp;quot;基本等于一个 FTP 上传工具，把文件拖进服务器就完事了。&lt;/p&gt;</description></item><item><title>第2章 历史与演进</title><link>https://before80.github.io/prgms/Js/tools/bundler/rollup/Chapter-02-History-and-Evolution/</link><pubDate>Sat, 28 Mar 2026 11:38:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/bundler/rollup/Chapter-02-History-and-Evolution/</guid><description>&lt;h1 id="第-2-章历史沿革与版本演进"&gt;第 2 章　历史沿革与版本演进&lt;/h1&gt;
&lt;hr&gt;
&lt;h2 id="21-诞生背景"&gt;2.1 诞生背景&lt;/h2&gt;
&lt;p&gt;2008 年，Chrome V8 引擎的诞生让 JavaScript 第一次有了&amp;quot;快&amp;quot;的可能；2015 年，ES6（ES2015）正式落地，JavaScript 有了官方的模块系统。就在这样的时代背景下，一个叫 &lt;strong&gt;Rich Harris&lt;/strong&gt; 的英国小哥，正在为自己的另一个作品——&lt;strong&gt;Svelte&lt;/strong&gt;（2016年正式发布）——寻找一个合适的打包工具。&lt;/p&gt;</description></item><item><title>第2章 历史与演进</title><link>https://before80.github.io/prgms/Js/tools/bundler/rollup/Chapter-02-What-Is-Rollup/</link><pubDate>Sat, 28 Mar 2026 11:38:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/bundler/rollup/Chapter-02-What-Is-Rollup/</guid><description>&lt;h1 id="第-1-章rollup-是什么"&gt;第 1 章　Rollup 是什么&lt;/h1&gt;
&lt;h2 id="11-官方定义专注于-es-module-的新一代打包工具"&gt;1.1 官方定义：专注于 ES Module 的新一代打包工具&lt;/h2&gt;
&lt;p&gt;如果把前端世界的打包工具比作一家餐厅，那 &lt;strong&gt;Rollup&lt;/strong&gt; 就是那个只做精品套餐、不卖自助餐的固执大厨。&lt;/p&gt;
&lt;p&gt;它的官方定义是这样的：&lt;strong&gt;Rollup 是一个 JavaScript 模块打包器（module bundler），专注于 ES Module 语法的打包工具&lt;/strong&gt;。听起来平平无奇对吧？就像说&amp;quot;这家餐厅是做菜的&amp;quot;一样敷衍。但魔鬼藏在细节里——它的核心卖点是&amp;quot;&lt;strong&gt;专注于 ES Module&lt;/strong&gt;&amp;ldquo;这五个字。&lt;/p&gt;</description></item><item><title>第2章 Create Next App有什么用</title><link>https://before80.github.io/prgms/Js/tools/scaffold/create-next-app/Chapter-02-what-can-it-do/</link><pubDate>Fri, 27 Mar 2026 21:12:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/scaffold/create-next-app/Chapter-02-what-can-it-do/</guid><description>&lt;h1 id="第二章--有什么用"&gt;第二章 · 有什么用&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;上一章我们知道了 Create Next App 是什么，这一章我们要搞清楚一个灵魂问题：&lt;strong&gt;它到底能帮你干啥&lt;/strong&gt;？它解决了什么痛点？为什么你应该用它？本章将用大量实例和对比告诉你答案。&lt;/p&gt;</description></item><item><title>第2章 Create React App 有什么用</title><link>https://before80.github.io/prgms/Js/tools/scaffold/create-react-app/Chapter-02-What-is-CRA-used-for/</link><pubDate>Fri, 27 Mar 2026 21:04:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/scaffold/create-react-app/Chapter-02-What-is-CRA-used-for/</guid><description>&lt;h1 id="第-2-章create-react-app-有什么用"&gt;第 2 章　Create React App 有什么用？&lt;/h1&gt;
&lt;h2 id="21-快速初始化-react-项目"&gt;2.1 快速初始化 React 项目&lt;/h2&gt;
&lt;h3 id="-你还在一条一条手动装依赖吗"&gt;🚀 你还在一条一条手动装依赖吗？&lt;/h3&gt;
&lt;p&gt;先来算一笔时间账。&lt;/p&gt;
&lt;p&gt;没有 CRA 的时候，创建一个 React 项目是这样婶儿的：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;第一步：mkdir my-react-app
第二步：npm init -y
第三步：npm install react react-dom
第四步：npm install --save-dev webpack webpack-cli webpack-dev-server babel-loader
第五步：npm install --save-dev @babel/core @babel/preset-env @babel/preset-react
第六步：npm install --save-dev css-loader style-loader html-webpack-plugin
第七步：创建 webpack.config.js
第八步：创建 .babelrc
第九步：创建 public/index.html
第十步：创建 src/index.js
第十一步：创建 src/App.js
第十二步：配置 package.json scripts
第十三步：npm start —— 哦豁，报错了
第十四步：修报错
第十五步：npm start —— 又有报错
……（循环往复）
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;等你把以上流程走完，你的咖啡已经凉透了，午饭时间到了，下午茶时间也到了，然后你发现——还没开始写一行真正有价值的 React 代码。&lt;/p&gt;</description></item><item><title>第2章 Create-Vite 能做什么</title><link>https://before80.github.io/prgms/Js/tools/scaffold/create-vite/Chapter-02-What-Can-Create-Vite-Do/</link><pubDate>Fri, 27 Mar 2026 21:01:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/scaffold/create-vite/Chapter-02-What-Can-Create-Vite-Do/</guid><description>&lt;h1 id="第二章create-vite-能做什么用途"&gt;第二章：Create-Vite 能做什么（用途）&lt;/h1&gt;
&lt;h2 id="21-快速初始化前端项目"&gt;2.1 快速初始化前端项目&lt;/h2&gt;
&lt;h3 id="211-什么是初始化为什么它值得专门做一个工具"&gt;2.1.1 什么是&amp;quot;初始化&amp;quot;？为什么它值得专门做一个工具？&lt;/h3&gt;
&lt;p&gt;写代码之前，项目要先&amp;quot;站起来&amp;quot;。这个&amp;quot;站起来&amp;quot;的过程，就是&lt;strong&gt;初始化&lt;/strong&gt;（Initialization）。&lt;/p&gt;</description></item><item><title>第 2 章 所有权系统</title><link>https://before80.github.io/prgms/Rust/basic/Chapter-02-Ownership-System/</link><pubDate>Fri, 27 Mar 2026 17:24:46 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/basic/Chapter-02-Ownership-System/</guid><description>&lt;h1 id="chapter-02-所有权系统ownership"&gt;Chapter-02 所有权系统（Ownership）&lt;/h1&gt;
&lt;h2 id="21-所有权概述"&gt;2.1 所有权概述&lt;/h2&gt;
&lt;p&gt;欢迎来到 Rust 最独特、最核心的概念——&lt;strong&gt;所有权系统&lt;/strong&gt;（Ownership System）！&lt;/p&gt;
&lt;p&gt;如果说 Rust 是一座大厦，那所有权就是这座大厦的地基。没有它，Rust 就不可能实现&amp;quot;内存安全 + 无 GC + 零成本抽象&amp;quot;的三位一体神话。&lt;/p&gt;</description></item><item><title>第2章 环境准备与安装</title><link>https://before80.github.io/prgms/Js/tools/build/vite/Chapter-02-Environment-Setup/</link><pubDate>Fri, 27 Mar 2026 17:13:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/build/vite/Chapter-02-Environment-Setup/</guid><description>&lt;h1 id="chapter-02-environment-setup"&gt;Chapter-02-Environment-Setup&lt;/h1&gt;
&lt;h1 id="第2章环境准备与安装"&gt;第2章：环境准备与安装&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;古人云：&amp;ldquo;工欲善其事，必先利其器。&amp;rdquo; 在正式开始写代码之前，我们得先把开发环境整利索了。&lt;/p&gt;
&lt;p&gt;这一章，我们会解决几个灵魂拷问：&lt;/p&gt;</description></item><item><title>第2章 CSS历史与技术演进</title><link>https://before80.github.io/prgms/CSS/basic/Chapter-02-CSS-History-and-Technical-Evolution/</link><pubDate>Fri, 27 Mar 2026 16:53:00 +0800</pubDate><guid>https://before80.github.io/prgms/CSS/basic/Chapter-02-CSS-History-and-Technical-Evolution/</guid><description>&lt;h1 id="第二章css-历史与技术演进"&gt;第二章：CSS 历史与技术演进&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;如果把 CSS 的发展历程拍成一部电影，那它一定是一部史诗级大片。有过黑暗时代（表格布局），有过文艺复兴（Flexbox/Grid），有过工具革命（Sass/Less），也有过哲学之争（Tailwind CSS vs 传统 CSS）。准备好了吗？让我们一起走进这部 CSS 史诗。&lt;/p&gt;</description></item><item><title>第2章 类型基础：原始类型与类型注解</title><link>https://before80.github.io/prgms/Ts/basic/Chapter-02-Primitive-Types-and-Type-Annotations/</link><pubDate>Thu, 26 Mar 2026 21:05:00 +0800</pubDate><guid>https://before80.github.io/prgms/Ts/basic/Chapter-02-Primitive-Types-and-Type-Annotations/</guid><description>&lt;h1 id="第-2-章-类型基础原始类型与类型注解"&gt;第 2 章 类型基础：原始类型与类型注解&lt;/h1&gt;
&lt;h2 id="21-类型概述"&gt;2.1 类型概述&lt;/h2&gt;
&lt;p&gt;在正式进入TypeScript的类型世界之前，我们需要先了解一下&amp;quot;类型&amp;quot;这个概念。&lt;/p&gt;</description></item><item><title>第2章 Node.js与包管理器</title><link>https://before80.github.io/prgms/Js/frameworks/react/Chapter-02-Node.js-and-Package-Managers/</link><pubDate>Wed, 25 Mar 2026 12:56:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/react/Chapter-02-Node.js-and-Package-Managers/</guid><description>&lt;h1 id="chapter-02---nodejs-与包管理器"&gt;Chapter-02 - Node.js 与包管理器&lt;/h1&gt;
&lt;h2 id="21-nodejs-简介"&gt;2.1 Node.js 简介&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;你有没有想过这样一个问题：JavaScript 这门语言，不是只能在浏览器里运行吗？它是怎么跑到服务器上去的？Node.js 就是这个&amp;quot;魔法&amp;quot;的化身——它把 Chrome 浏览器的 V8 引擎单独拎出来，放到一个没有浏览器的环境里运行，于是 JavaScript 第一次能够在服务器端大展拳脚。&lt;/p&gt;</description></item><item><title>第2章 初识 Vue 3</title><link>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-02-First-Steps/</link><pubDate>Wed, 25 Mar 2026 12:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-02-First-Steps/</guid><description>&lt;h1 id="第二章-初识-vue-3"&gt;第二章 初识 Vue 3&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;学完环境配置，终于可以和 Vue 3 正式见面了！在开始写代码之前，我们先来认识一下 Vue 3 这个&amp;quot;新朋友&amp;quot;——它是谁？它从哪里来？它的独门绝技是什么？读完这一章，你会对 Vue 3 有一个整体的认知，不再是&amp;quot;只会跟着教程敲代码&amp;quot;的小白，而是真正理解 Vue 3 设计哲学的开发者。&lt;/p&gt;</description></item><item><title>第 2 章 开发环境</title><link>https://before80.github.io/prgms/Js/basic/Chapter-02-Development-Environment/</link><pubDate>Tue, 24 Mar 2026 22:08:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/basic/Chapter-02-Development-Environment/</guid><description>&lt;h1 id="第-2-章-开发环境"&gt;第 2 章 开发环境&lt;/h1&gt;
&lt;p&gt;工欲善其事，必先利其器。在开始写 JavaScript 代码之前，咱们得先准备好趁手的家伙事儿。这一章，我们来搭建 JavaScript 的开发环境，让你从「新手村」正式出道。&lt;/p&gt;</description></item><item><title>第2章 特殊指令与构建约束</title><link>https://before80.github.io/prgms/go/basic/Chapter-02-Special-Directives-and-Build-Constraints/</link><pubDate>Fri, 20 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/basic/Chapter-02-Special-Directives-and-Build-Constraints/</guid><description>&lt;h1 id="第2章-特殊指令与构建约束"&gt;第2章 特殊指令与构建约束&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;欢迎来到第二章！这一章我们要聊的是 Go 语言的&amp;quot;隐身术&amp;quot;——特殊指令和构建约束。你知道吗？Go 的代码可以在不同平台上有不同的表现，就像变色龙一样，可以根据环境改变颜色。构建约束就是 Go 语言的&amp;quot;变色&amp;quot;机制，而特殊指令则是一些&amp;quot;魔法咒语&amp;quot;，可以改变编译器的行为。准备好了吗？让我们开始这段&amp;quot;魔法&amp;quot;之旅！&lt;/p&gt;</description></item><item><title>第3章 内揵——关系不是硬凑的，是顺着毛摸出来的</title><link>https://before80.github.io/prgms/Philosophy/guiGuZi/3/</link><pubDate>Sat, 11 Apr 2026 21:52:00 +0800</pubDate><guid>https://before80.github.io/prgms/Philosophy/guiGuZi/3/</guid><description>&lt;h1 id="第三章-内揵关系不是硬凑的是顺着毛摸出来的"&gt;第三章 内揵——&amp;ldquo;关系不是硬凑的，是顺着毛摸出来的&amp;rdquo;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本章核心：人际绑定讲究“内合”，找准连接点、顺应时势、灵活进退，才能建立牢不可破的信任纽带。&lt;/p&gt;</description></item><item><title>第3章 求人之志——自我管理指南：如何管住自己，稳步向前</title><link>https://before80.github.io/prgms/Philosophy/suShu/Chapter-03-SeekingTalent/</link><pubDate>Thu, 09 Apr 2026 10:58:00 +0800</pubDate><guid>https://before80.github.io/prgms/Philosophy/suShu/Chapter-03-SeekingTalent/</guid><description>&lt;h1 id="第三章-求人之志自我管理指南如何管住自己稳步向前"&gt;第三章 求人之志——&amp;ldquo;自我管理指南：如何管住自己，稳步向前&amp;rdquo;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本章核心：修身养性十八法，砍掉包袱、留足后路、踏实做事&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="31-绝嗜禁欲所以除累"&gt;3.1 绝嗜禁欲，所以除累。&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;原文&lt;/strong&gt;：绝嗜禁欲，所以除累。&lt;/p&gt;</description></item><item><title>第3章 安装Python</title><link>https://before80.github.io/prgms/Python/basic/Chapter-03-Installation/</link><pubDate>Wed, 08 Apr 2026 13:22:00 +0800</pubDate><guid>https://before80.github.io/prgms/Python/basic/Chapter-03-Installation/</guid><description>&lt;h1 id="第三章python-314-安装指南让你的电脑穿上蟒蛇新装"&gt;第三章：Python 3.14 安装指南——让你的电脑穿上&amp;quot;蟒蛇&amp;quot;新装&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;🎉 恭喜你！从这一刻起，你正式踏上了 Python 编程的征程。接下来的内容将手把手教你如何把 Python 3.14 请进你的电脑。准备好了吗？让我们开始吧！&lt;/p&gt;</description></item><item><title>第3章：Git 基础配置 —— 不穿衣服就出门的后果</title><link>https://before80.github.io/prgms/Git/Chapter-03-git-basics-configuration/</link><pubDate>Fri, 03 Apr 2026 19:36:48 +0800</pubDate><guid>https://before80.github.io/prgms/Git/Chapter-03-git-basics-configuration/</guid><description>&lt;h1 id="第3章git-基础配置--不穿衣服就出门的后果"&gt;第3章：Git 基础配置 —— 不穿衣服就出门的后果&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;ldquo;配置做得好，提交没烦恼；配置做不好，绿格子全跑。&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="31-一个悲伤的故事小明的-git-惨剧贡献图为零"&gt;3.1 一个悲伤的故事：小明的 Git 惨剧（贡献图为零）&lt;/h2&gt;
&lt;p&gt;小明是个勤奋的程序员，每天加班到深夜，代码写得飞起。三个月后，他信心满满地打开 GitHub，准备欣赏自己那密密麻麻的绿色贡献图（Contribution Graph）——那是程序员的荣誉勋章，是熬夜的见证，是实力的象征！&lt;/p&gt;</description></item><item><title>Onboarding (macOS App)</title><link>https://before80.github.io/prgms/AI/openclaw/basic/start/onboarding/</link><pubDate>Fri, 03 Apr 2026 08:36:08 +0800</pubDate><guid>https://before80.github.io/prgms/AI/openclaw/basic/start/onboarding/</guid><description>&lt;h1 id="onboarding-macos-app"&gt;Onboarding (macOS App)&lt;/h1&gt;
&lt;p&gt;This doc describes the &lt;strong&gt;current&lt;/strong&gt; first‑run setup flow. The goal is a smooth “day 0” experience: pick where the Gateway runs, connect auth, run the wizard, and let the agent bootstrap itself. For a general overview of onboarding paths, see &lt;a href="https://docs.openclaw.ai/start/onboarding-overview"&gt;Onboarding Overview&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;​	本文档介绍了 &lt;strong&gt;当前&lt;/strong&gt; 的首次运行设置流程。其目标是实现流畅的“第0天”体验：选择 Gateway 运行位置、连接身份验证、运行向导并让代理自动完成引导。有关入职路径的总体概述，请参阅 &lt;a href="https://docs.openclaw.ai/start/onboarding-overview"&gt;Onboarding 概述&lt;/a&gt;。&lt;/p&gt;</description></item><item><title>Onboarding (CLI)</title><link>https://before80.github.io/prgms/AI/openclaw/basic/start/wizard/</link><pubDate>Thu, 02 Apr 2026 19:48:32 +0800</pubDate><guid>https://before80.github.io/prgms/AI/openclaw/basic/start/wizard/</guid><description>&lt;h1 id="onboarding-cli"&gt;Onboarding (CLI)&lt;/h1&gt;
&lt;p&gt;CLI onboarding is the &lt;strong&gt;recommended&lt;/strong&gt; way to set up OpenClaw on macOS, Linux, or Windows (via WSL2; strongly recommended). It configures a local Gateway or a remote Gateway connection, plus channels, skills, and workspace defaults in one guided flow.&lt;/p&gt;
&lt;p&gt;​	CLI onboarding 接入是在 macOS、Linux 或 Windows（通过 WSL2；强烈推荐）上设置 OpenClaw 的&lt;strong&gt;推荐&lt;/strong&gt;方式。它可在一个引导流程中配置本地 Gateway 或远程 Gateway 连接，以及 channels、skills 和 workspace 默认设置。&lt;/p&gt;</description></item><item><title>第3章 Java 版本选择指南——我该学哪个版本？</title><link>https://before80.github.io/prgms/Java/basic/Chapter-03-version-selection/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-03-version-selection/</guid><description>&lt;h1 id="第三章-java-版本选择指南我该学哪个版本"&gt;第三章 Java 版本选择指南——我该学哪个版本？&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;世界上只有两种编程语言：一种是被人骂的，一种是没人用的。&amp;rdquo; —— Java 两个都占了，但骂的人更多，说明用的人更多。&lt;/p&gt;</description></item><item><title>第3章：程序出错怎么办——errors 包与 panic/recover</title><link>https://before80.github.io/prgms/go/std/Chapter-03-errors/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-03-errors/</guid><description>&lt;h1 id="第3章程序出错怎么办errors-包与-panicrecover"&gt;第3章：程序出错怎么办——errors 包与 panic/recover&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;代码跑得通，世界一片祥和；代码一报错，天塌地陷。&amp;rdquo; —— 某位被 bug 毒打过的程序员&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;程序运行从来不会一帆风顺，网络会断开、文件会丢失、用户会输入奇奇怪怪的东西。作为一门成熟的编程语言，Go 为我们准备了完善的错误处理机制。在这一章里，让我们一起来看看 Go 是如何优雅地表达和处理&amp;quot;意外&amp;quot;的。&lt;/p&gt;</description></item><item><title>第 3 章：C 程序基本结构</title><link>https://before80.github.io/prgms/C/basic/Chapter-03-Basic-Program-Structure/</link><pubDate>Sun, 29 Mar 2026 22:34:00 +0800</pubDate><guid>https://before80.github.io/prgms/C/basic/Chapter-03-Basic-Program-Structure/</guid><description>&lt;h1 id="第-3-章c-程序基本结构"&gt;第 3 章：C 程序基本结构&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;🧐 想象一下，你要建一座房子。首先你得知道房子有哪些&amp;quot;标配房间&amp;quot;吧？门在哪里、客厅怎么走、窗户朝哪开。C 程序也一样，有它固定的&amp;quot;房间格局&amp;quot;，你不按这个格局来，编译器（compiler）就一脸懵，不知道你想干嘛。&lt;/p&gt;</description></item><item><title>第3章 C++程序基本结构</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-03-Basic-Program-Structure/</link><pubDate>Sun, 29 Mar 2026 21:43:08 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-03-Basic-Program-Structure/</guid><description>&lt;h1 id="第3章-c程序基本结构"&gt;第3章 C++程序基本结构&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;🎭 欢迎来到C++的&amp;quot;装修手册&amp;quot;！你以为会写&lt;code&gt;cout &amp;lt;&amp;lt; &amp;quot;Hello World&amp;quot;&lt;/code&gt;就学会C++了？太天真了！让我们来看看代码背后那些不为人知的秘密——或者说，让你的代码看起来像专业人士写的那些套路。&lt;/p&gt;</description></item><item><title>第三章 有什么用</title><link>https://before80.github.io/prgms/Js/tools/bun/Chapter-03-What-is-it-for/</link><pubDate>Sun, 29 Mar 2026 14:36:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/bun/Chapter-03-What-is-it-for/</guid><description>&lt;h1 id="第三章有什么用"&gt;第三章　有什么用&lt;/h1&gt;
&lt;h2 id="31-设计目标官方五大设计原则"&gt;3.1 设计目标（官方五大设计原则）&lt;/h2&gt;
&lt;p&gt;Bun 团队在设计 Bun 时有五大核心原则，这些原则指导着 Bun 的每一次迭代。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;💡 想象一下，如果厨房里只能有一把刀，这把刀要能切菜、切肉、削水果、开罐头——Bun 就是 JavaScript 世界的这把&amp;quot;瑞士军刀&amp;quot;。&lt;/p&gt;</description></item><item><title>第3章 esbuild能做什么</title><link>https://before80.github.io/prgms/Js/tools/build/esbuild/Chapter-03-what-can-esbuild-do/</link><pubDate>Sat, 28 Mar 2026 11:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/build/esbuild/Chapter-03-what-can-esbuild-do/</guid><description>&lt;h2 id="31-打包bundling"&gt;3.1 打包（Bundling）&lt;/h2&gt;
&lt;h3 id="311-多模块合并为单文件"&gt;3.1.1 多模块合并为单文件&lt;/h3&gt;
&lt;p&gt;想象一下你写了一个网页，有 50 个 &lt;code&gt;.js&lt;/code&gt; 文件，每个文件负责不同的功能——有的是处理表单验证的，有的是负责动画效果的，有的是处理网络请求的。&lt;/p&gt;</description></item><item><title>第3章 有什么用</title><link>https://before80.github.io/prgms/Js/tools/bundler/rollup/Chapter-03-What-Is-It-Used-For/</link><pubDate>Sat, 28 Mar 2026 11:38:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/bundler/rollup/Chapter-03-What-Is-It-Used-For/</guid><description>&lt;h1 id="第-3-章有什么用"&gt;第 3 章　有什么用&lt;/h1&gt;
&lt;h2 id="31-打包-javascript-库--npm-包"&gt;3.1 打包 JavaScript 库 / npm 包&lt;/h2&gt;
&lt;p&gt;这是 Rollup 最核心的使用场景，也是它的拿手好戏。如果你写了一个工具函数库、一个 UI 组件库，或者任何一个你想发布到 npm 上让其他开发者使用的项目，Rollup 几乎是你能找到的最佳打包方案。为什么这么说？&lt;/p&gt;</description></item><item><title>第3章 Create Next App怎么用</title><link>https://before80.github.io/prgms/Js/tools/scaffold/create-next-app/Chapter-03-how-to-use/</link><pubDate>Fri, 27 Mar 2026 21:12:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/scaffold/create-next-app/Chapter-03-how-to-use/</guid><description>&lt;h1 id="第三章--怎么用"&gt;第三章 · 怎么用&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;想象一下，你站在一家全自动拉面店门口，门口的大叔（其实是台会说话的点餐机）对你说：&amp;ldquo;欢迎光临！请问您要点什么？&amp;ldquo;你看了看菜单，发现除了&amp;quot;招牌豚骨拉面&amp;quot;之外什么都不认识，于是陷入了哲学三问：我是谁？我从哪来？我到底该按哪个按钮？&lt;/p&gt;</description></item><item><title>第3章 Create React App 怎么用</title><link>https://before80.github.io/prgms/Js/tools/scaffold/create-react-app/Chapter-03-How-to-use-CRA/</link><pubDate>Fri, 27 Mar 2026 21:04:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/scaffold/create-react-app/Chapter-03-How-to-use-CRA/</guid><description>&lt;h1 id="第-3-章create-react-app-怎么用"&gt;第 3 章　Create React App 怎么用？&lt;/h1&gt;
&lt;h2 id="31-环境准备"&gt;3.1 环境准备&lt;/h2&gt;
&lt;h3 id="-在开始之前你需要准备好这些工具"&gt;🛠️ 在开始之前：你需要准备好这些工具&lt;/h3&gt;
&lt;p&gt;想象一下，你要学做饭，你不能对着一堆原材料发呆，你需要灶台、锅、铲子。在 CRA 的世界里，&lt;strong&gt;Node.js 就是你的灶台，npm 就是你的锅&lt;/strong&gt;。&lt;/p&gt;</description></item><item><title>第3章 Create-Vite 怎么用</title><link>https://before80.github.io/prgms/Js/tools/scaffold/create-vite/Chapter-03-How-To-Use-Create-Vite/</link><pubDate>Fri, 27 Mar 2026 21:01:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/scaffold/create-vite/Chapter-03-How-To-Use-Create-Vite/</guid><description>&lt;h1 id="第三章create-vite-怎么用"&gt;第三章：Create-Vite 怎么用&lt;/h1&gt;
&lt;h2 id="31-环境准备nodejs--npm--pnpm--yarn"&gt;3.1 环境准备（Node.js / npm / pnpm / yarn）&lt;/h2&gt;
&lt;h3 id="311-在开始之前先问自己一个问题什么是-nodejs"&gt;3.1.1 在开始之前，先问自己一个问题：什么是 Node.js？&lt;/h3&gt;
&lt;p&gt;好，如果你已经知道 Node.js 是什么，可以直接跳到 3.1.2。&lt;/p&gt;</description></item><item><title>第 3 章 复合数据类型</title><link>https://before80.github.io/prgms/Rust/basic/Chapter-03-Compound-Data-Types/</link><pubDate>Fri, 27 Mar 2026 17:24:46 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/basic/Chapter-03-Compound-Data-Types/</guid><description>&lt;h1 id="chapter-03-复合数据类型"&gt;Chapter-03 复合数据类型&lt;/h1&gt;
&lt;h2 id="31-字符串与字符串切片"&gt;3.1 字符串与字符串切片&lt;/h2&gt;
&lt;p&gt;字符串是编程中最常用的数据类型之一。Rust 的字符串系统有点独特——它区分了 &lt;code&gt;String&lt;/code&gt; 和 &lt;code&gt;&amp;amp;str&lt;/code&gt;，这两种类型各有各的用途。理解它们的区别，是掌握 Rust 字符串处理的关键！&lt;/p&gt;</description></item><item><title>第3章 Vite 基础使用</title><link>https://before80.github.io/prgms/Js/tools/build/vite/Chapter-03-Vite-Basics/</link><pubDate>Fri, 27 Mar 2026 17:13:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/build/vite/Chapter-03-Vite-Basics/</guid><description>&lt;h1 id="chapter-03-vite-basics"&gt;Chapter-03-Vite-Basics&lt;/h1&gt;
&lt;h1 id="第3章vite-基础使用"&gt;第3章：Vite 基础使用&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;恭喜你成功安装了 Vite，并运行了第一个项目！现在，我们要把这个&amp;quot;会用&amp;quot;变成&amp;quot;用得溜&amp;quot;。&lt;/p&gt;
&lt;p&gt;这一章，我们来细细拆解 Vite 项目的每一个组成部分：入口 HTML 里藏着什么秘密？命令行的各种参数都是干嘛的？ES Modules 怎么玩？CSS、图片、JSON 这些资源怎么导入？路径别名怎么配？&lt;/p&gt;</description></item><item><title>第3章 编写你的第一个CSS页面</title><link>https://before80.github.io/prgms/CSS/basic/Chapter-03-Writing-Your-First-CSS-Page/</link><pubDate>Fri, 27 Mar 2026 16:53:00 +0800</pubDate><guid>https://before80.github.io/prgms/CSS/basic/Chapter-03-Writing-Your-First-CSS-Page/</guid><description>&lt;h1 id="第三章编写第一个-css-页面"&gt;第三章：编写第一个 CSS 页面&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;纸上得来终觉浅，绝知此事要躬行。看了这么多 CSS 历史和理论，是时候动手写代码了！这一章，我们将从零开始搭建一个真实的网页，让你的浏览器变成你的画布，CSS 变成你的画笔。&lt;/p&gt;</description></item><item><title>第3章 特殊类型与枚举</title><link>https://before80.github.io/prgms/Ts/basic/Chapter-03-Special-Types-and-Enums/</link><pubDate>Thu, 26 Mar 2026 21:05:00 +0800</pubDate><guid>https://before80.github.io/prgms/Ts/basic/Chapter-03-Special-Types-and-Enums/</guid><description>&lt;h1 id="第-3-章-特殊类型与枚举"&gt;第 3 章 特殊类型与枚举&lt;/h1&gt;
&lt;h2 id="31-any-类型"&gt;3.1 any 类型&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;any&lt;/code&gt;是TypeScript中最&amp;quot;特殊&amp;quot;的类型——它是所有类型的超集，代表&amp;quot;任意类型&amp;quot;。使用&lt;code&gt;any&lt;/code&gt;等于告诉TypeScript：&amp;ldquo;这一块我说了算，不要检查我。&amp;rdquo;&lt;/p&gt;</description></item><item><title>第3章 开发工具配置</title><link>https://before80.github.io/prgms/Js/frameworks/react/Chapter-03-Development-Tools-Setup/</link><pubDate>Wed, 25 Mar 2026 12:56:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/react/Chapter-03-Development-Tools-Setup/</guid><description>&lt;h1 id="chapter-03---开发工具配置"&gt;Chapter-03 - 开发工具配置&lt;/h1&gt;
&lt;h2 id="31-vs-code-下载与安装"&gt;3.1 VS Code 下载与安装&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;工欲善其事，必先利其器。作为 React 开发者，我们的&amp;quot;器&amp;quot;就是代码编辑器。目前市面上最流行的前端代码编辑器，当属 &lt;strong&gt;Visual Studio Code&lt;/strong&gt;（简称 VS Code）——它免费、开源、轻量、功能强大，而且是微软出品，质量有保证（这次真的是微软出品，不像某些别的产品……）。&lt;/p&gt;</description></item><item><title>第3章 Vue 3 核心语法</title><link>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-03-Core-Syntax/</link><pubDate>Wed, 25 Mar 2026 12:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-03-Core-Syntax/</guid><description>&lt;h1 id="第三章-vue-3-核心语法"&gt;第三章 Vue 3 核心语法&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;Vue 3 的核心语法就是你每天都要用的&amp;quot;家常便饭&amp;quot;。模板插值、条件渲染、列表渲染、事件处理、双向绑定、class 和 style 绑定——这些语法构成了 Vue 开发的基石。学好这一章，你就能写出大部分日常需求的代码了。这一章的内容非常实用，建议打开你的 IDE，跟着例子一个个敲过去，不要只看不练。&lt;/p&gt;</description></item><item><title>第 3 章 变量与数据类型</title><link>https://before80.github.io/prgms/Js/basic/Chapter-03-Variables-and-Data-Types/</link><pubDate>Tue, 24 Mar 2026 22:08:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/basic/Chapter-03-Variables-and-Data-Types/</guid><description>&lt;h1 id="第-3-章-变量与数据类型"&gt;第 3 章 变量与数据类型&lt;/h1&gt;
&lt;p&gt;如果说 JavaScript 是一门语言，那变量就是它的「词汇」，数据类型就是它的「语法」。不懂变量和数据类型，就等于不懂 JavaScript。这一章，我们来把这两件事彻底搞清楚。&lt;/p&gt;</description></item><item><title>第3章：选择与安装 Linux</title><link>https://before80.github.io/prgms/linux/install/Chapter-03-choosing-and-installing-linux/</link><pubDate>Mon, 23 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/linux/install/Chapter-03-choosing-and-installing-linux/</guid><description>&lt;h1 id="第三章选择与安装-linux"&gt;第三章：选择与安装 Linux&lt;/h1&gt;
&lt;h2 id="31-虚拟机-vs-实体机-vs-云服务器各种安装方式的优缺点对比"&gt;3.1 虚拟机 vs 实体机 vs 云服务器：各种安装方式的优缺点对比&lt;/h2&gt;
&lt;p&gt;俗话说的好，&amp;ldquo;工欲善其事，必先利其器&amp;rdquo;。在学习 Linux 这条不归路上，你第一步要做的决定，不是选哪个发行版，不是背哪个命令，而是——&lt;strong&gt;你要把 Linux 装在哪儿&lt;/strong&gt;？&lt;/p&gt;</description></item><item><title>第3章 类型系统</title><link>https://before80.github.io/prgms/go/basic/Chapter-03-Type-System/</link><pubDate>Fri, 20 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/basic/Chapter-03-Type-System/</guid><description>&lt;h1 id="第3章-类型系统"&gt;第3章 类型系统&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;欢迎来到第三章！这一章我们要聊的是 Go 语言的&amp;quot;基因改造&amp;quot;——类型系统。如果说 Go 语言是一个人，那类型系统就是这个人的&amp;quot;血统认证&amp;quot;。Go 是一种静态类型语言，这意味着每个变量都有一个类型，而且这个类型在编译时就确定了。但 Go 的类型系统又比 C++/Java 简洁得多，它没有类、没有继承、没有泛型（呃，Go 1.18 有了）——但这些都不影响它成为一个强大的类型系统。准备好了吗？让我们开始！&lt;/p&gt;</description></item><item><title>第4章 抵巇——裂缝不是灾难，是高手进场的VIP通道</title><link>https://before80.github.io/prgms/Philosophy/guiGuZi/4/</link><pubDate>Sat, 11 Apr 2026 21:52:00 +0800</pubDate><guid>https://before80.github.io/prgms/Philosophy/guiGuZi/4/</guid><description>&lt;h1 id="第四章-抵巇裂缝不是灾难是高手进场的vip通道"&gt;第四章 抵巇——&amp;ldquo;裂缝不是灾难，是高手进场的VIP通道&amp;rdquo;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本章核心：万事皆有裂痕，那是光照进来的地方。提前发现隐患、精准修补或果断接管，才是破局止损的底层逻辑。&lt;/p&gt;</description></item><item><title>第4章 本德宗道——人生避坑清单：什么最要命？什么最保命？</title><link>https://before80.github.io/prgms/Philosophy/suShu/Chapter-04-VirtueAndDao/</link><pubDate>Thu, 09 Apr 2026 10:58:00 +0800</pubDate><guid>https://before80.github.io/prgms/Philosophy/suShu/Chapter-04-VirtueAndDao/</guid><description>&lt;h1 id="第四章-本德宗道人生避坑清单什么最要命什么最保命"&gt;第四章 本德宗道——&amp;ldquo;人生避坑清单：什么最要命？什么最保命？&amp;rdquo;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本章核心：人生极值对照表，看透因果，守住安稳的基本盘&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="41-夫志心笃行之术长莫长於博谋"&gt;4.1 夫志心笃行之术，长莫长於博谋，&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;原文&lt;/strong&gt;：夫志心笃行之术，长莫长於博谋，&lt;/p&gt;</description></item><item><title>第4章 版本管理工具</title><link>https://before80.github.io/prgms/Python/basic/Chapter-04-Version-Manager/</link><pubDate>Wed, 08 Apr 2026 13:22:00 +0800</pubDate><guid>https://before80.github.io/prgms/Python/basic/Chapter-04-Version-Manager/</guid><description>&lt;h1 id="第四章python-版本管理器--让-python-学会影分身术"&gt;第四章：Python 版本管理器 —— 让 Python 学会「影分身术」&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;前置知识&lt;/strong&gt;：本章节会用到一点终端/命令行的概念，如果你还不知道终端是什么，建议先翻到附录看看&amp;quot;终端入门&amp;quot;。&lt;/p&gt;</description></item><item><title>第4章：第一个仓库 —— 见证奇迹的时刻</title><link>https://before80.github.io/prgms/Git/Chapter-04-first-repository/</link><pubDate>Fri, 03 Apr 2026 19:36:48 +0800</pubDate><guid>https://before80.github.io/prgms/Git/Chapter-04-first-repository/</guid><description>&lt;h1 id="第4章第一个仓库--见证奇迹的时刻"&gt;第4章：第一个仓库 —— 见证奇迹的时刻&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;ldquo;普通文件夹是凡人，Git 仓库是超级英雄。&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="41-仓库-vs-普通文件夹超能力觉醒"&gt;4.1 仓库 vs 普通文件夹：超能力觉醒&lt;/h2&gt;
&lt;p&gt;在成为 Git 用户之前，我们先要理解一个核心概念：&lt;strong&gt;什么是 Git 仓库？&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>个人助手设置</title><link>https://before80.github.io/prgms/AI/openclaw/basic/start/openclaw/</link><pubDate>Thu, 02 Apr 2026 20:09:59 +0800</pubDate><guid>https://before80.github.io/prgms/AI/openclaw/basic/start/openclaw/</guid><description>&lt;h1 id="personal-assistant-setup"&gt;Personal Assistant Setup&lt;/h1&gt;
&lt;p&gt;OpenClaw is a self-hosted gateway that connects WhatsApp, Telegram, Discord, iMessage, and more to AI agents. This guide covers the “personal assistant” setup: a dedicated WhatsApp number that behaves like your always-on AI assistant.&lt;/p&gt;
&lt;p&gt;​	OpenClaw 是一款自托管网关，可将 WhatsApp、Telegram、Discord、iMessage 等平台与智能体相连接。本指南将介绍“个人助手”的设置方法：一个专属的 WhatsApp 号码，可充当你全天候在线的人工智能助手。&lt;/p&gt;</description></item><item><title>第4章 Java 开发环境完全搭建指南</title><link>https://before80.github.io/prgms/Java/basic/Chapter-04-environment-setup/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-04-environment-setup/</guid><description>&lt;h1 id="第四章-java-开发环境完全搭建指南"&gt;第四章 Java 开发环境完全搭建指南&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;工欲善其事，必先利其器。在写第一行 Java 代码之前，咱们得先把开发环境整利索了。这一章，手把手带你从零搭起 Java 开发环境，保证你出去能跑 Hello World，回家能调 Bug。&lt;/p&gt;</description></item><item><title>第4章：让程序响应命令行——flag 包与 os 基础</title><link>https://before80.github.io/prgms/go/std/Chapter-04-flag-os/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-04-flag-os/</guid><description>&lt;h1 id="第4章让程序响应命令行flag-包与-os-基础"&gt;第4章：让程序响应命令行——flag 包与 os 基础&lt;/h1&gt;
&lt;p&gt;
 &lt;img src="https://img.shields.io/badge/Go-%e5%91%bd%e4%bb%a4%e8%a1%8c%e5%a4%84%e7%90%86-blue"
 alt="Go命令行"
 
 /&gt;
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;章前导读&lt;/strong&gt;：你有没有想过，为什么 &lt;code&gt;go run main.go -o output.txt&lt;/code&gt; 里的 &lt;code&gt;-o output.txt&lt;/code&gt; 能被程序&amp;quot;看懂&amp;quot;？是谁在默默做了翻译工作？答案就是本章的主角——&lt;code&gt;flag&lt;/code&gt; 包。而 &lt;code&gt;os&lt;/code&gt; 包则是 Go 程序与操作系统对话的万能翻译器。准备好了吗？让我们一起揭开命令行参数处理的神秘面纱！&lt;/p&gt;</description></item><item><title>第 4 章：数据类型与变量</title><link>https://before80.github.io/prgms/C/basic/Chapter-04-Data-Types-and-Variables/</link><pubDate>Sun, 29 Mar 2026 22:34:00 +0800</pubDate><guid>https://before80.github.io/prgms/C/basic/Chapter-04-Data-Types-and-Variables/</guid><description>&lt;h1 id="第-4-章数据类型与变量"&gt;第 4 章：数据类型与变量&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;程序员的三大幻觉：栈不会溢出、整数不会负、char 永远有符号。&amp;rdquo; —— 某不愿透露姓名的 C 大师&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;欢迎来到 C 语言最核心的章节之一：&lt;strong&gt;数据类型与变量&lt;/strong&gt;。&lt;/p&gt;</description></item><item><title>第 4B 章：作用域、链接与存储期 —— 程序的'地盘'之争</title><link>https://before80.github.io/prgms/C/basic/Chapter-04B-Scope-Linkage-Storage/</link><pubDate>Sun, 29 Mar 2026 22:34:00 +0800</pubDate><guid>https://before80.github.io/prgms/C/basic/Chapter-04B-Scope-Linkage-Storage/</guid><description>&lt;h1 id="第-4b-章作用域链接与存储期--程序的地盘之争"&gt;第 4B 章：作用域、链接与存储期 —— 程序的&amp;quot;地盘&amp;quot;之争&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;ldquo;C 语言的变量啊，它们也有自己的&amp;quot;势力范围&amp;rdquo;。有的变量是&amp;quot;宅男&amp;quot;，只在自己的小房间里活动；有的却是&amp;quot;社交达人&amp;quot;，满世界都能找到它。想知道你写的变量是哪种类型？那就跟我来！&amp;quot;&lt;/em&gt;&lt;/p&gt;</description></item><item><title>第 4C 章：类型限定符与原子操作</title><link>https://before80.github.io/prgms/C/basic/Chapter-04C-Type-Qualifiers-and-Atomics/</link><pubDate>Sun, 29 Mar 2026 22:34:00 +0800</pubDate><guid>https://before80.github.io/prgms/C/basic/Chapter-04C-Type-Qualifiers-and-Atomics/</guid><description>&lt;h1 id="第-4c-章类型限定符与原子操作"&gt;第 4C 章：类型限定符与原子操作&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;🎯 &lt;strong&gt;前置知识回顾&lt;/strong&gt;：本章是第 4 章的延伸章节。如果你已经掌握了变量、数据类型和基本运算，可以直接冲！如果你还在纠结 &lt;code&gt;int&lt;/code&gt; 和 &lt;code&gt;float&lt;/code&gt; 的区别，先去第 4 章打个卡，我们在这里等你。&lt;/p&gt;</description></item><item><title>第4章 基本数据类型与变量</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-04-Basic-Data-Types/</link><pubDate>Sun, 29 Mar 2026 21:43:08 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-04-Basic-Data-Types/</guid><description>&lt;h1 id="第4章-基本数据类型与变量"&gt;第4章 基本数据类型与变量&lt;/h1&gt;
&lt;h2 id="41-内置数据类型"&gt;4.1 内置数据类型&lt;/h2&gt;
&lt;p&gt;C++的内置类型就像是厨房里的基本食材——简单但能组合出无数美味！&lt;/p&gt;
&lt;p&gt;想象一下，你走进一家神奇的C++超市，货架上摆满了各种&amp;quot;数据类型&amp;quot;。有的只能装整数，像一个专门存放整数的冰箱；有的能装小数，像一个魔法锅；有的只能装字符，像一个字母盒子。选对食材，才能做出好菜！&lt;/p&gt;</description></item><item><title>第四章 用在哪里</title><link>https://before80.github.io/prgms/Js/tools/bun/Chapter-04-Where-to-use/</link><pubDate>Sun, 29 Mar 2026 14:36:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/bun/Chapter-04-Where-to-use/</guid><description>&lt;h1 id="第四章用在哪里"&gt;第四章　用在哪里&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;💡 如果你问&amp;quot;Bun 能干啥&amp;quot;，这章就是答案。它不是万能药，但在 JavaScript 开发的大部分高频场景里，Bun 都能让你少加班、早下班。&lt;/p&gt;</description></item><item><title>第4章 esbuild用在哪里</title><link>https://before80.github.io/prgms/Js/tools/build/esbuild/Chapter-04-where-is-esbuild-used/</link><pubDate>Sat, 28 Mar 2026 11:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/build/esbuild/Chapter-04-where-is-esbuild-used/</guid><description>&lt;h2 id="41-前端项目构建"&gt;4.1 前端项目构建&lt;/h2&gt;
&lt;h3 id="411-单页面应用spa"&gt;4.1.1 单页面应用（SPA）&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;单页面应用&lt;/strong&gt;（Single Page Application，简称 SPA）是这些年最流行的前端架构之一。&lt;/p&gt;
&lt;p&gt;它的特点是：整个应用只有一个 HTML 页面，后续的页面切换不需要从服务器加载新页面，而是通过 JavaScript 动态渲染不同的&amp;quot;视图&amp;quot;（View）。用户感觉页面在切换，实际上整个页面从来没刷新过——这就像看电视剧不换台，而是让演员在同一个舞台上换布景。&lt;/p&gt;</description></item><item><title>第4章 用在哪里</title><link>https://before80.github.io/prgms/Js/tools/bundler/rollup/Chapter-04-Where-Is-It-Used/</link><pubDate>Sat, 28 Mar 2026 11:38:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/bundler/rollup/Chapter-04-Where-Is-It-Used/</guid><description>&lt;h1 id="第-4-章用在哪里"&gt;第 4 章　用在哪里&lt;/h1&gt;
&lt;hr&gt;
&lt;h2 id="41-开源库--npm-包发布"&gt;4.1 开源库 / npm 包发布&lt;/h2&gt;
&lt;p&gt;如果说 Rollup 是前端构建工具链中的瑞士军刀，那 npm 包发布就是它最闪耀的舞台。为啥？因为 Rollup 天生就是为了&amp;quot;精准投放&amp;quot;而生的——它只想把你写的代码打包成最小可用的形式，不会往包里塞一堆乱七八糟的东西。&lt;/p&gt;</description></item><item><title>第4章 Create Next App用在哪</title><link>https://before80.github.io/prgms/Js/tools/scaffold/create-next-app/Chapter-04-where-to-use/</link><pubDate>Fri, 27 Mar 2026 21:12:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/scaffold/create-next-app/Chapter-04-where-to-use/</guid><description>&lt;p&gt;想象一下，你站在一片荒芜的代码沙漠中，眼前什么都没有，只有一个光秃秃的文件夹图标孤零零地躺在那里，旁边还有一个闪烁的光标，仿佛在嘲笑你：&amp;ldquo;来吧，从零开始构建一个世界吧！&amp;rdquo; 这时候，&lt;code&gt;create-next-app&lt;/code&gt; 就是你的创世神器，它能凭空变出一个完整的 Next.js 项目结构，让你不用手忙脚乱地敲 &lt;code&gt;mkdir&lt;/code&gt;、&lt;code&gt;touch&lt;/code&gt;、&lt;code&gt;npm init&lt;/code&gt; 一通乱操作。本章我们就来聊聊，这把&amp;quot;瑞士军刀&amp;quot;到底适合在哪些场景下挥舞，又应该在哪些情况下乖乖收进刀鞘。&lt;/p&gt;</description></item><item><title>第4章 Create React App 用在哪</title><link>https://before80.github.io/prgms/Js/tools/scaffold/create-react-app/Chapter-04-Where-to-use-CRA/</link><pubDate>Fri, 27 Mar 2026 21:04:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/scaffold/create-react-app/Chapter-04-Where-to-use-CRA/</guid><description>&lt;h1 id="第-4-章create-react-app-用在哪"&gt;第 4 章　Create React App 用在哪？&lt;/h1&gt;
&lt;h2 id="41-适用场景"&gt;4.1 适用场景&lt;/h2&gt;
&lt;h3 id="-cra-的舒适区在哪里"&gt;🎯 CRA 的舒适区在哪里？&lt;/h3&gt;
&lt;p&gt;在讨论 CRA 的适用场景之前，先来理解一个核心概念：&lt;strong&gt;单页应用（Single Page Application，简称 SPA）&lt;/strong&gt;。&lt;/p&gt;</description></item><item><title>第4章 Create-Vite 用在哪</title><link>https://before80.github.io/prgms/Js/tools/scaffold/create-vite/Chapter-04-Where-To-Use-Create-Vite/</link><pubDate>Fri, 27 Mar 2026 21:01:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/scaffold/create-vite/Chapter-04-Where-To-Use-Create-Vite/</guid><description>&lt;h1 id="第四章create-vite-用在哪适用场景"&gt;第四章：Create-Vite 用在哪（适用场景）&lt;/h1&gt;
&lt;h2 id="41-新项目初始化"&gt;4.1 新项目初始化&lt;/h2&gt;
&lt;h3 id="411-什么时候该用-create-vite-初始化新项目"&gt;4.1.1 什么时候该用 Create-Vite 初始化新项目？&lt;/h3&gt;
&lt;p&gt;这是 Create-Vite 最核心的使用场景——&lt;strong&gt;当你决定开始一个新项目时，第一件事就是用它来搭架子&lt;/strong&gt;。&lt;/p&gt;</description></item><item><title>第 4 章 泛型</title><link>https://before80.github.io/prgms/Rust/basic/Chapter-04-Generics/</link><pubDate>Fri, 27 Mar 2026 17:24:46 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/basic/Chapter-04-Generics/</guid><description>&lt;h1 id="chapter-04-泛型generics"&gt;Chapter-04 泛型（Generics）&lt;/h1&gt;
&lt;h2 id="41-泛型基础"&gt;4.1 泛型基础&lt;/h2&gt;
&lt;h3 id="411-泛型函数"&gt;4.1.1 泛型函数&lt;/h3&gt;
&lt;h4 id="4111--类型参数声明"&gt;4.1.1.1 &lt;T&gt; 类型参数声明&lt;/h4&gt;
&lt;p&gt;想象一下这个场景：你是一个餐厅老板，菜单上写着&amp;quot;可乐&amp;quot;。结果顾客点单时，有人要可口可乐，有人要百事可乐，有人要零度可乐&amp;hellip;你总不能给每种可乐都写一道菜吧？&lt;/p&gt;</description></item><item><title>第4章 vite.config.js/ts 详解</title><link>https://before80.github.io/prgms/Js/tools/build/vite/Chapter-04-Vite-Config/</link><pubDate>Fri, 27 Mar 2026 17:13:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/build/vite/Chapter-04-Vite-Config/</guid><description>&lt;h1 id="chapter-04-vite-config"&gt;Chapter-04-Vite-Config&lt;/h1&gt;
&lt;h1 id="第4章viteconfigjsts-详解"&gt;第4章：vite.config.js/ts 详解&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;如果说 Vite 是一个王国，那 &lt;code&gt;vite.config.js&lt;/code&gt; 就是这个王国的宪法——它定义了 Vite 的一切行为。&lt;/p&gt;
&lt;p&gt;前面我们只是蜻蜓点水地看了看配置文件的皮毛，这一章我们要把它彻底讲透：root、base、publicDir、cacheDir 等基础配置；server 里的端口、代理、HMR；build 里的输出、优化、分包；resolve 里的别名、扩展名；optimizeDeps 里的预构建；CSS、PostCSS、LogLevel&amp;hellip; 每一个配置项，我们都要讲清楚它是什么、怎么用、什么时候用。&lt;/p&gt;</description></item><item><title>第4章 CSS规则结构</title><link>https://before80.github.io/prgms/CSS/basic/Chapter-04-CSS-Rule-Structure/</link><pubDate>Fri, 27 Mar 2026 16:53:00 +0800</pubDate><guid>https://before80.github.io/prgms/CSS/basic/Chapter-04-CSS-Rule-Structure/</guid><description>&lt;h1 id="第四章css-规则的构成"&gt;第四章：CSS 规则的构成&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;CSS 就像一门语言，有自己的语法规则。学会这些规则，你就能写出规范、美观、易维护的 CSS 代码。这一章，我们将深入了解 CSS 的&amp;quot;语法&amp;quot;——从最小的组成部分开始。&lt;/p&gt;</description></item><item><title>第4章 接口与类型别名</title><link>https://before80.github.io/prgms/Ts/basic/Chapter-04-Interfaces-and-Type-Aliases/</link><pubDate>Thu, 26 Mar 2026 21:05:00 +0800</pubDate><guid>https://before80.github.io/prgms/Ts/basic/Chapter-04-Interfaces-and-Type-Aliases/</guid><description>&lt;h1 id="第-4-章-接口与类型别名"&gt;第 4 章 接口与类型别名&lt;/h1&gt;
&lt;h2 id="41-type-别名"&gt;4.1 type 别名&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;类型别名&lt;/strong&gt;（Type Alias）是TypeScript中给类型起名字的方式。就像你给变量起名字一样，类型别名让你可以给复杂的类型起一个简短的名字，让代码更易读。&lt;/p&gt;</description></item><item><title>第4章 第一个React项目——Vite与React 19</title><link>https://before80.github.io/prgms/Js/frameworks/react/Chapter-04-First-React-Project-Vite-React-19/</link><pubDate>Wed, 25 Mar 2026 12:56:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/react/Chapter-04-First-React-Project-Vite-React-19/</guid><description>&lt;h1 id="chapter-04---第一个-react-项目vite--react-19"&gt;Chapter-04 - 第一个 React 项目——Vite + React 19&lt;/h1&gt;
&lt;h2 id="41-为什么选-vite"&gt;4.1 为什么选 Vite？&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;在正式开始写代码之前，我们先来聊聊为什么是 Vite。可能有些同学听说过 Webpack，这个老牌构建工具曾经统治前端江湖近十年。而 Vite 是 2020 年才诞生的&amp;quot;小鲜肉&amp;quot;，但它一出场就以&amp;quot;闪电般的速度&amp;quot;征服了无数开发者。&lt;/p&gt;</description></item><item><title>第4章 响应式基础</title><link>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-04-Reactivity/</link><pubDate>Wed, 25 Mar 2026 12:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-04-Reactivity/</guid><description>&lt;h1 id="第四章-响应式基础"&gt;第四章 响应式基础&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;Vue 之所以能成为 Vue，最核心的秘密就是&amp;quot;响应式&amp;quot;。当数据变化时，视图自动更新——这看起来像魔法，但其实背后有一套精密的机制。理解响应式，是理解 Vue 本质的起点。本章我们会深入探讨 ref、reactive、computed、watch 这些核心 API，理解 Vue 3 响应式系统的工作原理。&lt;/p&gt;</description></item><item><title>第 4 章 运算符与表达式</title><link>https://before80.github.io/prgms/Js/basic/Chapter-04-Operators-and-Expressions/</link><pubDate>Tue, 24 Mar 2026 22:08:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/basic/Chapter-04-Operators-and-Expressions/</guid><description>&lt;h1 id="第-4-章-运算符与表达式"&gt;第 4 章 运算符与表达式&lt;/h1&gt;
&lt;p&gt;如果说变量是程序的「名词」，那运算符就是程序的「动词」——它们让数据动起来。JavaScript 的运算符种类繁多，从最基础的加减乘除，到高大上的可选链和空值合并运算符，这一章统统给你安排上。&lt;/p&gt;</description></item><item><title>第4章：Linux 桌面环境入门</title><link>https://before80.github.io/prgms/linux/install/Chapter-04-linux-desktop-environment-introduction/</link><pubDate>Mon, 23 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/linux/install/Chapter-04-linux-desktop-environment-introduction/</guid><description>&lt;h1 id="第四章linux-桌面环境入门"&gt;第四章：Linux 桌面环境入门&lt;/h1&gt;
&lt;h2 id="41-什么是桌面环境desktop-environment"&gt;4.1 什么是桌面环境（Desktop Environment）？&lt;/h2&gt;
&lt;p&gt;装好了 Linux 系统，打开电脑，满心期待地等着看一个漂亮的图形界面——结果你看到的是什么？&lt;/p&gt;</description></item><item><title>第4章 常量</title><link>https://before80.github.io/prgms/go/basic/Chapter-04-Constants/</link><pubDate>Fri, 20 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/basic/Chapter-04-Constants/</guid><description>&lt;h1 id="第4章-常量"&gt;第4章 常量&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;欢迎来到第四章！这一章我们要聊的是 Go 语言的&amp;quot;不变&amp;quot;哲学——常量。常量就像是编程世界里的&amp;quot;刻在石头上&amp;quot;，一旦定义就不能改变。常量在 Go 中有很多独特的特性，比如可以在编译时计算确定的值，还有那个神秘的 &lt;code&gt;iota&lt;/code&gt; 枚举器。准备好了吗？让我们开始！&lt;/p&gt;</description></item><item><title>第5章 飞箝——先给情绪价值，再拿实际筹码</title><link>https://before80.github.io/prgms/Philosophy/guiGuZi/5/</link><pubDate>Sat, 11 Apr 2026 21:52:00 +0800</pubDate><guid>https://before80.github.io/prgms/Philosophy/guiGuZi/5/</guid><description>&lt;h1 id="第五章-飞箝先给情绪价值再拿实际筹码"&gt;第五章 飞箝——&amp;ldquo;先给情绪价值，再拿实际筹码&amp;rdquo;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本章核心：识人用人的最高境界是“钩”与“控”。摸清需求、顺势捧接、柔性绑定，让资源与人脉为你所用。&lt;/p&gt;</description></item><item><title>第5章 遵义——管理避坑与人性照妖镜：别踩这些雷</title><link>https://before80.github.io/prgms/Philosophy/suShu/Chapter-05-FollowingRighteousness/</link><pubDate>Thu, 09 Apr 2026 10:58:00 +0800</pubDate><guid>https://before80.github.io/prgms/Philosophy/suShu/Chapter-05-FollowingRighteousness/</guid><description>&lt;h1 id="第五章-遵义管理避坑与人性照妖镜别踩这些雷"&gt;第五章 遵义——&amp;ldquo;管理避坑与人性照妖镜：别踩这些雷&amp;rdquo;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本章核心：做事带人三十六忌，看懂人心，避开翻车现场&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="51-以明示下者暗"&gt;5.1 以明示下者暗，&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;原文&lt;/strong&gt;：以明示下者暗，&lt;/p&gt;</description></item><item><title>第5章 虚拟环境</title><link>https://before80.github.io/prgms/Python/basic/Chapter-05-Virtual-Environment/</link><pubDate>Wed, 08 Apr 2026 13:22:00 +0800</pubDate><guid>https://before80.github.io/prgms/Python/basic/Chapter-05-Virtual-Environment/</guid><description>&lt;h1 id="第五章虚拟环境python-界的独栋别墅"&gt;第五章：虚拟环境——Python 界的&amp;quot;独栋别墅&amp;quot;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;想象一下：你住在一套巨大的公寓里，所有人共享同一个厨房、同一张床、同一个马桶。听起来很恐怖对吧？但如果不使用虚拟环境，这正是你的 Python 项目正在经历的事——所有包挤在一起，版本打架，互相看不顺眼。今天我们就来给每个项目买一套&amp;quot;独栋别墅&amp;quot;。&lt;/p&gt;</description></item><item><title>第5章：日常操作基本功 —— Git 世界的'基本功'</title><link>https://before80.github.io/prgms/Git/Chapter-05-daily-operations/</link><pubDate>Fri, 03 Apr 2026 19:36:48 +0800</pubDate><guid>https://before80.github.io/prgms/Git/Chapter-05-daily-operations/</guid><description>&lt;h1 id="第5章日常操作基本功--git-世界的基本功"&gt;第5章：日常操作基本功 —— Git 世界的&amp;quot;基本功&amp;quot;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;ldquo;基本功扎实，才能飞得更高。&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="51-git-add-不只是添加交互式添加--p-大法"&gt;5.1 &lt;code&gt;git add&lt;/code&gt; 不只是添加：交互式添加 &lt;code&gt;-p&lt;/code&gt; 大法&lt;/h2&gt;
&lt;p&gt;你以为 &lt;code&gt;git add&lt;/code&gt; 只是简单地把文件放进暂存区？太天真了！&lt;/p&gt;</description></item><item><title>CLI Setup Reference</title><link>https://before80.github.io/prgms/AI/openclaw/basic/start/wizard-cli-reference/</link><pubDate>Thu, 02 Apr 2026 20:15:18 +0800</pubDate><guid>https://before80.github.io/prgms/AI/openclaw/basic/start/wizard-cli-reference/</guid><description>&lt;h1 id="cli-setup-reference"&gt;CLI Setup Reference&lt;/h1&gt;
&lt;p&gt;This page is the full reference for &lt;code&gt;openclaw onboard&lt;/code&gt;. For the short guide, see &lt;a href="https://docs.openclaw.ai/start/wizard"&gt;Onboarding (CLI)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;​	此页面是&lt;code&gt;openclaw onboard&lt;/code&gt;的完整参考资料。如需简短指南，请参阅&lt;a href="https://docs.openclaw.ai/start/wizard"&gt;Onboarding (CLI)&lt;/a&gt;。&lt;/p&gt;
&lt;h2 id="what-the-wizard-does-向导的功能"&gt;What the wizard does 向导的功能&lt;/h2&gt;
&lt;p&gt;Local mode (default) walks you through:&lt;/p&gt;</description></item><item><title>第5章 Java 程序的运行与调试</title><link>https://before80.github.io/prgms/Java/basic/Chapter-05-run-and-debug/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-05-run-and-debug/</guid><description>&lt;h1 id="第五章-java-程序的运行与调试"&gt;第五章 Java 程序的运行与调试&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;把代码写出来只是第一步，让它跑起来、跑得对、跑得快，才是真正的本事。本章我们从 JVM 的运行原理讲起，再到 IDE 里如何和 bug 斗智斗勇，最后介绍几个命令行神器。准备好了吗？Let&amp;rsquo;s go！&lt;/p&gt;</description></item><item><title>第5章：放数据的容器——container/heap、container/list、container/ring</title><link>https://before80.github.io/prgms/go/std/Chapter-05-container/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-05-container/</guid><description>&lt;h1 id="第5章放数据的容器containerheapcontainerlistcontainerring"&gt;第5章：放数据的容器——container/heap、container/list、container/ring&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;人生苦短，何必用数组硬撑？来点容器，让数据住得舒服点。&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Go语言的&lt;code&gt;container&lt;/code&gt;包是一个&amp;quot;数据结构博物馆&amp;quot;，里面住着三位性格迥异的居民：heap（堆）、list（双向链表）和ring（环形链表）。它们各有绝活，各有脾气，今天我们就来一一拜访。&lt;/p&gt;</description></item><item><title>第 5 章：运算符与表达式</title><link>https://before80.github.io/prgms/C/basic/Chapter-05-Operators-and-Expressions/</link><pubDate>Sun, 29 Mar 2026 22:34:00 +0800</pubDate><guid>https://before80.github.io/prgms/C/basic/Chapter-05-Operators-and-Expressions/</guid><description>&lt;h1 id="第-5-章运算符与表达式"&gt;第 5 章：运算符与表达式&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;程序若无运算，恰如机器人只会站着发呆——有力气却使不出来。&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;欢迎来到 C 语言的&amp;quot;十八般武艺&amp;quot;章节！运算符（Operator）和表达式（Expression）是让程序真正&amp;quot;动起来&amp;quot;的核心。我们在前几章学会了声明变量、输入输出，现在终于要给这台小机器装上&amp;quot;发动机&amp;quot;了。&lt;/p&gt;</description></item><item><title>第5章 运算符与表达式</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-05-Operators-and-Expressions/</link><pubDate>Sun, 29 Mar 2026 21:43:08 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-05-Operators-and-Expressions/</guid><description>&lt;h1 id="第5章-运算符与表达式"&gt;第5章 运算符与表达式&lt;/h1&gt;
&lt;p&gt;欢迎来到C++的&amp;quot;菜市场&amp;quot;！在这一章里，我们将学习如何对数据施展各种&amp;quot;魔法&amp;quot;——加减乘除、位运算、条件判断……学会了这些，你就能像大厨一样，把各种原料（数据）做成美味佳肴（程序）了！&lt;/p&gt;</description></item><item><title>第五章 怎么用</title><link>https://before80.github.io/prgms/Js/tools/bun/Chapter-05-How-to-use/</link><pubDate>Sun, 29 Mar 2026 14:36:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/bun/Chapter-05-How-to-use/</guid><description>&lt;h1 id="第五章-怎么用"&gt;第五章 怎么用&lt;/h1&gt;
&lt;p&gt;欢迎来到 Bun 的&amp;quot;灵魂拷问&amp;quot;环节——前四章我们把 Bun 从头到脚介绍了一遍，现在终于要上手&amp;quot;干活&amp;quot;了。本章是 Bun 的&lt;strong&gt;实战指南&lt;/strong&gt;，覆盖从安装到生产的完整流程，保证你学完就能跑。&lt;/p&gt;</description></item><item><title>第5章 如何使用esbuild</title><link>https://before80.github.io/prgms/Js/tools/build/esbuild/Chapter-05-how-to-use-esbuild/</link><pubDate>Sat, 28 Mar 2026 11:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/build/esbuild/Chapter-05-how-to-use-esbuild/</guid><description>&lt;h2 id="51-环境安装"&gt;5.1 环境安装&lt;/h2&gt;
&lt;h3 id="511-nodejs-环境要求版本支持说明"&gt;5.1.1 Node.js 环境要求（版本支持说明）&lt;/h3&gt;
&lt;p&gt;在安装 esbuild 之前，你需要确保系统里已经安装了 &lt;strong&gt;Node.js&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;Node.js 是一个 JavaScript 运行时，简单理解就是：它让你能在服务器端、桌面端、命令行里运行 JavaScript 代码。esbuild 的 JavaScript 版本需要 Node.js 才能运行（也有不需要 Node.js 的原生二进制版本，后面会讲）。&lt;/p&gt;</description></item><item><title>第5章 怎么使用</title><link>https://before80.github.io/prgms/Js/tools/bundler/rollup/Chapter-05-How-To-Use-It/</link><pubDate>Sat, 28 Mar 2026 11:38:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/bundler/rollup/Chapter-05-How-To-Use-It/</guid><description>&lt;h1 id="第-5-章怎么用"&gt;第 5 章　怎么用&lt;/h1&gt;
&lt;hr&gt;
&lt;h2 id="51-环境准备"&gt;5.1 环境准备&lt;/h2&gt;
&lt;h3 id="511-安装-nodejs推荐-lts-版本"&gt;5.1.1 安装 Node.js（推荐 LTS 版本）&lt;/h3&gt;
&lt;p&gt;Rollup 是一个 Node.js 的 npm 包，所以第一步当然是要安装 Node.js。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Node.js 是什么？&lt;/strong&gt;
Node.js 是一个让 JavaScript 可以在服务器端（也就是你的电脑，而不是浏览器）运行的环境。打个比方：如果 JavaScript 是&amp;quot;英语&amp;quot;，那么 Node.js 就是&amp;quot;同声传译设备&amp;quot;，让你能在中国用英语和英国人交流。安装 Rollup 之前，必须先安装 Node.js。&lt;/p&gt;</description></item><item><title>第5章 Create Next App注意事项</title><link>https://before80.github.io/prgms/Js/tools/scaffold/create-next-app/Chapter-05-notes-and-caveats/</link><pubDate>Fri, 27 Mar 2026 21:12:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/scaffold/create-next-app/Chapter-05-notes-and-caveats/</guid><description>&lt;h1 id="第五章--注意事项"&gt;第五章 · 注意事项&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;学开车不难，难的是知道什么时候该踩刹车。&amp;rdquo;
同样地，用 create-next-app 创建一个 Next.js 项目不难，
难的是知道创建之后要注意什么。
这一章，我们就来聊聊那些「哦，原来如此」的时刻。&lt;/p&gt;</description></item><item><title>第5章 使用 Create React App 需要注意什么</title><link>https://before80.github.io/prgms/Js/tools/scaffold/create-react-app/Chapter-05-CRA-Cautions/</link><pubDate>Fri, 27 Mar 2026 21:04:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/scaffold/create-react-app/Chapter-05-CRA-Cautions/</guid><description>&lt;h1 id="第-5-章使用-create-react-app-需要注意什么"&gt;第 5 章　使用 Create React App 需要注意什么？&lt;/h1&gt;
&lt;h2 id="51-eject-操作不可逆务必三思"&gt;5.1 eject 操作不可逆，务必三思&lt;/h2&gt;
&lt;h3 id="-这是-cra-中最重要的一条注意事项"&gt;⚠️ 这是 CRA 中最重要的一条注意事项&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;npm run eject&lt;/code&gt; 是 Create React App 提供的「退出机制」，一旦执行，&lt;strong&gt;没有回头路&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;让我们用一张图来形象地说明这个过程：&lt;/p&gt;</description></item><item><title>第5章 Create-Vite 注意事项</title><link>https://before80.github.io/prgms/Js/tools/scaffold/create-vite/Chapter-05-Precautions-When-Using-Create-Vite/</link><pubDate>Fri, 27 Mar 2026 21:01:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/scaffold/create-vite/Chapter-05-Precautions-When-Using-Create-Vite/</guid><description>&lt;h1 id="第五章使用-create-vite-的注意事项"&gt;第五章：使用 Create-Vite 的注意事项&lt;/h1&gt;
&lt;h2 id="51-nodejs-版本要求"&gt;5.1 Node.js 版本要求&lt;/h2&gt;
&lt;h3 id="511-create-vite-对-nodejs-版本的最低消费"&gt;5.1.1 Create-Vite 对 Node.js 版本的&amp;quot;最低消费&amp;quot;&lt;/h3&gt;
&lt;p&gt;Create-Vite 不是所有 Node.js 版本都能用，它有一个&lt;strong&gt;最低版本要求&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;截至目前，Create-Vite 5.x 要求 &lt;strong&gt;Node.js &amp;gt;= 18.12.0&lt;/strong&gt;。&lt;/p&gt;</description></item><item><title>第 5 章 Trait</title><link>https://before80.github.io/prgms/Rust/basic/Chapter-05-Trait/</link><pubDate>Fri, 27 Mar 2026 17:24:46 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/basic/Chapter-05-Trait/</guid><description>&lt;h1 id="chapter-05-trait特征"&gt;Chapter 05 Trait（特征）&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;想象一下，你是一家公司的 HR 经理。每天你要面对各种职位描述（Job Description）：会计要会做账、程序员要会写代码、设计师要会画图。但问题是，你不能因为会计会做账就让他去 debug 代码——虽然听起来像是老板会干的事。&lt;/p&gt;</description></item><item><title>第5章 插件系统</title><link>https://before80.github.io/prgms/Js/tools/build/vite/Chapter-05-Plugin-System/</link><pubDate>Fri, 27 Mar 2026 17:13:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/build/vite/Chapter-05-Plugin-System/</guid><description>&lt;h1 id="chapter-05-plugin-system"&gt;Chapter-05-Plugin-System&lt;/h1&gt;
&lt;h1 id="第5章插件系统"&gt;第5章：插件系统&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;如果把 Vite 比作一辆汽车，那插件就是它的&amp;quot;外挂装备&amp;quot;——可以让汽车上天入地、潜水遁地。&lt;/p&gt;
&lt;p&gt;Vite 的插件系统借鉴了 Rollup 的插件设计，但又增加了一些 Vite 独有的钩子（Hooks）。有了插件，Vite 可以支持 Vue JSX、React、SSR、PWA、CSS Modules、CSS-in-JS、Mock 数据、图片压缩&amp;hellip; 几乎你能想到的一切功能。&lt;/p&gt;</description></item><item><title>第5章 CSS属性缩写与嵌套</title><link>https://before80.github.io/prgms/CSS/basic/Chapter-05-CSS-Property-Shorthand-and-Nesting/</link><pubDate>Fri, 27 Mar 2026 16:53:00 +0800</pubDate><guid>https://before80.github.io/prgms/CSS/basic/Chapter-05-CSS-Property-Shorthand-and-Nesting/</guid><description>&lt;h1 id="第五章css-属性缩写与嵌套"&gt;第五章：CSS 属性缩写与嵌套&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;CSS 代码写长了会很繁琐。CSS 的缩写规则和嵌套语法就是来解决这个问题的。学会这些技巧，你的 CSS 代码会变得像诗歌一样优雅。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="51-margin-和-padding-缩写"&gt;5.1 margin 和 padding 缩写&lt;/h2&gt;
&lt;p&gt;margin 和 padding 是最常用的属性之一，缩写规则相同，学会一个就学会了另一个。&lt;/p&gt;</description></item><item><title>第5章 联合类型、交叉类型与可辨识联合</title><link>https://before80.github.io/prgms/Ts/basic/Chapter-05-Union-Types-Intersection-Types-and-Discriminated-Unions/</link><pubDate>Thu, 26 Mar 2026 21:05:00 +0800</pubDate><guid>https://before80.github.io/prgms/Ts/basic/Chapter-05-Union-Types-Intersection-Types-and-Discriminated-Unions/</guid><description>&lt;h1 id="第-5-章-联合类型交叉类型与可辨识联合"&gt;第 5 章 联合类型、交叉类型与可辨识联合&lt;/h1&gt;
&lt;h2 id="51-联合类型union-types"&gt;5.1 联合类型（Union Types）&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;联合类型&lt;/strong&gt;是TypeScript中表示&amp;quot;可以是多种类型之一&amp;quot;的类型。它就像一把钥匙能开多把锁——一个变量可以是几种类型中的任意一种。&lt;/p&gt;</description></item><item><title>第5章 JSX语法</title><link>https://before80.github.io/prgms/Js/frameworks/react/Chapter-05-JSX-React-Syntax/</link><pubDate>Wed, 25 Mar 2026 12:56:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/react/Chapter-05-JSX-React-Syntax/</guid><description>&lt;h1 id="chapter-05---jsxreact-的语法糖"&gt;Chapter-05 - JSX——React 的语法糖&lt;/h1&gt;
&lt;h2 id="51-jsxreact-的语法糖"&gt;5.1 JSX——React 的语法糖&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;终于到了 React 最独特、最让人&amp;quot;又爱又恨&amp;quot;的部分——JSX。如果你之前没接触过 JSX，第一次看到它的时候可能会产生一种&amp;quot;这到底是 HTML 还是 JavaScript&amp;quot;的困惑。没错，这就是 JSX 的魔力所在——它让 HTML 和 JavaScript 共处一室，在同一个文件里眉来眼去。&lt;/p&gt;</description></item><item><title>第5章 生命周期</title><link>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-05-Lifecycle/</link><pubDate>Wed, 25 Mar 2026 12:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-05-Lifecycle/</guid><description>&lt;h1 id="第五章-生命周期"&gt;第五章 生命周期&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;组件从诞生到销毁，会经历一系列&amp;quot;生命周期&amp;quot;——创建、挂载、更新、销毁，每个阶段 Vue 都提供了对应的钩子函数，让你在合适的时机做合适的事情。理解生命周期，是掌握组件化开发的钥匙。本章会详细介绍每个阶段的钩子函数，以及 KeepAlive、错误捕获等进阶内容。&lt;/p&gt;</description></item><item><title>第 5 章 控制流</title><link>https://before80.github.io/prgms/Js/basic/Chapter-05-Control-Flow/</link><pubDate>Tue, 24 Mar 2026 22:08:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/basic/Chapter-05-Control-Flow/</guid><description>&lt;h1 id="第-5-章-控制流"&gt;第 5 章 控制流&lt;/h1&gt;
&lt;p&gt;程序就像一条河流，代码从上往下流。但有时候，我们需要让程序「拐弯」或者「原地打转」——这就是控制流的作用。没有控制流，程序只能从头跑到尾，一成不变。有了控制流，程序才能做出「决策」，才能「循环」起来。&lt;/p&gt;</description></item><item><title>第5章：终端与 Shell 入门</title><link>https://before80.github.io/prgms/linux/cli_basic/Chapter-05-Terminal-and-Shell-Introduction/</link><pubDate>Mon, 23 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/linux/cli_basic/Chapter-05-Terminal-and-Shell-Introduction/</guid><description>&lt;h1 id="第五章终端与-shell-入门"&gt;第五章：终端与 Shell 入门&lt;/h1&gt;
&lt;h2 id="51-什么是终端terminal为什么要用命令行"&gt;5.1 什么是终端（Terminal）？为什么要用命令行？&lt;/h2&gt;
&lt;p&gt;想象一下：一个黑漆漆的窗口，里面闪烁着绿色的光标，就像黑客电影里那些天才们在键盘上疯狂敲击的神秘界面。没错，这就是终端——一个让你假装自己是超级黑客的神奇地方！&lt;/p&gt;</description></item><item><title>第5章 变量</title><link>https://before80.github.io/prgms/go/basic/Chapter-05-Variables/</link><pubDate>Fri, 20 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/basic/Chapter-05-Variables/</guid><description>&lt;h1 id="第5章-变量"&gt;第5章 变量&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;欢迎来到第五章！这一章我们要聊的是 Go 语言的&amp;quot;变量&amp;quot;。变量是什么？变量就是一个有名字的盒子，你可以在里面放东西（值），也可以把东西拿出来用。想象一下你家的冰箱——冰箱就是一个变量，你可以往里面放牛奶（赋值），也可以拿出来喝（读取）。不同的是，Go 的冰箱永远不会被塞满，因为变量可以存储任意大小的数据……好吧，这个比喻好像不太对。总之，让我们开始探索变量的奥秘吧！&lt;/p&gt;</description></item><item><title>第6章 忤合——站队不是玄学，是算完账后的理性选择</title><link>https://before80.github.io/prgms/Philosophy/guiGuZi/6/</link><pubDate>Sat, 11 Apr 2026 21:52:00 +0800</pubDate><guid>https://before80.github.io/prgms/Philosophy/guiGuZi/6/</guid><description>&lt;h1 id="第六章-忤合站队不是玄学是算完账后的理性选择"&gt;第六章 忤合——&amp;ldquo;站队不是玄学，是算完账后的理性选择&amp;rdquo;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本章核心：趋附还是背离，全看局势与筹码。懂得在分歧中找转机，在试错中定方向，进退有度方能纵横捭阖。&lt;/p&gt;</description></item><item><title>第6章 安礼——顺势而为的生存法则：看清局势，做对选择</title><link>https://before80.github.io/prgms/Philosophy/suShu/Chapter-06-OrderAndPeace/</link><pubDate>Thu, 09 Apr 2026 10:58:00 +0800</pubDate><guid>https://before80.github.io/prgms/Philosophy/suShu/Chapter-06-OrderAndPeace/</guid><description>&lt;h1 id="第六章-安礼顺势而为的生存法则看清局势做对选择"&gt;第六章 安礼——&amp;ldquo;顺势而为的生存法则：看清局势，做对选择&amp;rdquo;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本章核心：因果律、周期律、人心律，读懂规律才能管好自己、家和事&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="61-怨在不舍小过患在不预定谋"&gt;6.1 怨在不舍小过，患在不预定谋。&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;原文&lt;/strong&gt;：怨在不舍小过，患在不预定谋。&lt;/p&gt;</description></item><item><title>第6章 VSCode和Python</title><link>https://before80.github.io/prgms/Python/basic/Chapter-06-VSCode-Python/</link><pubDate>Wed, 08 Apr 2026 13:22:00 +0800</pubDate><guid>https://before80.github.io/prgms/Python/basic/Chapter-06-VSCode-Python/</guid><description>&lt;h1 id="第六章vs-codepython-开发者的高配游戏房"&gt;第六章：VS Code——Python 开发者的高配游戏房&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;🎮 &amp;ldquo;VS Code 不只是编辑器，它是 Python 程序员的车载导航 + 游戏手柄 + 空调出风口香薰的豪华套餐。&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;想象一下，你有一间豪华游戏房，里面摆满了各种神器手柄、4K 大屏、人体工学椅——而隔壁的「记事本」同学还在用着黑白电视搓手柄。这一章，我们就把你的&amp;quot;游戏房&amp;quot;——VS Code——彻底装修成 Python 开发者的天堂。&lt;/p&gt;</description></item><item><title>第6章：查看历史与对比 —— Git 时光机与照妖镜</title><link>https://before80.github.io/prgms/Git/Chapter-06-Viewing-History-and-Comparison/</link><pubDate>Fri, 03 Apr 2026 19:36:48 +0800</pubDate><guid>https://before80.github.io/prgms/Git/Chapter-06-Viewing-History-and-Comparison/</guid><description>&lt;h1 id="第6章查看历史与对比--git-时光机与照妖镜"&gt;第6章：查看历史与对比 —— Git 时光机与照妖镜&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;想象一下，你是一位时间旅行者，可以穿越回代码的任何一个历史时刻，看看当时发生了什么。Git 就是你的时光机，而 &lt;code&gt;git log&lt;/code&gt;、&lt;code&gt;git diff&lt;/code&gt;、&lt;code&gt;git blame&lt;/code&gt; 这些命令就是你的照妖镜——让代码的过去无所遁形。&lt;/p&gt;</description></item><item><title>CLI Automation</title><link>https://before80.github.io/prgms/AI/openclaw/basic/start/wizard-cli-automation/</link><pubDate>Thu, 02 Apr 2026 20:15:41 +0800</pubDate><guid>https://before80.github.io/prgms/AI/openclaw/basic/start/wizard-cli-automation/</guid><description>&lt;h1 id="cli-automation"&gt;CLI Automation&lt;/h1&gt;
&lt;p&gt;Use &lt;code&gt;--non-interactive&lt;/code&gt; to automate &lt;code&gt;openclaw onboard&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;​	使用&lt;code&gt;--non-interactive&lt;/code&gt;来自动化执行&lt;code&gt;openclaw onboard&lt;/code&gt;。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;--json&lt;/code&gt; does not imply non-interactive mode. Use &lt;code&gt;--non-interactive&lt;/code&gt; (and &lt;code&gt;--workspace&lt;/code&gt;) for scripts.&lt;/p&gt;
&lt;p&gt;​	&lt;code&gt;--json&lt;/code&gt; 并不意味着非交互模式。在脚本中请使用 &lt;code&gt;--non-interactive&lt;/code&gt;（以及 &lt;code&gt;--workspace&lt;/code&gt;）。&lt;/p&gt;</description></item><item><title>第6章 第一个 Java 程序与代码结构</title><link>https://before80.github.io/prgms/Java/basic/Chapter-06-first-java-program/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-06-first-java-program/</guid><description>&lt;h1 id="第六章-第一个-java-程序与代码结构"&gt;第六章 第一个 Java 程序与代码结构&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Talk is cheap, show me the code.&amp;rdquo; — 这句话在 Java 世界里尤其正确。再多理论也比不上亲手跑通一个程序带来的成就感。准备好了吗？让我们从那句经典的 &lt;code&gt;Hello World&lt;/code&gt; 开始，正式踏入 Java 的大门。&lt;/p&gt;</description></item><item><title>第6章：泛型时代的基础工具——cmp、maps、slices、sort、strconv</title><link>https://before80.github.io/prgms/go/std/Chapter-06-alg-tool/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-06-alg-tool/</guid><description>&lt;h1 id="第6章泛型时代的基础工具cmpmapsslicessortstrconv"&gt;第6章：泛型时代的基础工具——cmp、maps、slices、sort、strconv&lt;/h1&gt;
&lt;p&gt;话说 Go 语言在 1.18 引入泛型之后，终于告别了&amp;quot;泛型缺失&amp;quot;的尴尬年代。到了 Go 1.21，标准库一口气推出了 &lt;code&gt;cmp&lt;/code&gt;、&lt;code&gt;maps&lt;/code&gt;、&lt;code&gt;slices&lt;/code&gt; 三个全新的泛型包，简直是给 Gopher 们送了一份大礼。在那之前，咱们写代码但凡要比较两个值、操作个 map、或者折腾一下切片，都得自己造轮子——重复的代码满天飞。现在好了，泛型一统江湖，这些工具函数终于可以优雅地复用啦！&lt;/p&gt;</description></item><item><title>第 6 章：控制流程——程序的'红绿灯'与'跑步机'</title><link>https://before80.github.io/prgms/C/basic/Chapter-06-Control-Flow/</link><pubDate>Sun, 29 Mar 2026 22:34:00 +0800</pubDate><guid>https://before80.github.io/prgms/C/basic/Chapter-06-Control-Flow/</guid><description>&lt;h1 id="第-6-章控制流程程序的红绿灯与跑步机"&gt;第 6 章：控制流程——程序的&amp;quot;红绿灯&amp;quot;与&amp;quot;跑步机&amp;quot;&lt;/h1&gt;
&lt;p&gt;想象一下，你早上出门上班，脑子里其实一直在做各种决定：&lt;/p&gt;</description></item><item><title>第6章 流程控制</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-06-Flow-Control/</link><pubDate>Sun, 29 Mar 2026 21:43:08 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-06-Flow-Control/</guid><description>&lt;h1 id="第6章-流程控制"&gt;第6章 流程控制&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;📚 流程控制，听起来像是&amp;quot;控制水流&amp;quot;的科学术语，但在编程世界里，它是控制程序执行顺序的神秘力量。没有流程控制，你的程序就像一杯白开水——按顺序流过每一条语句，平淡无奇。有了它，你的程序就能像苏打水一样：跳跃、选择、循环，精彩纷呈！&lt;/p&gt;</description></item><item><title>第六章 需要注意哪些</title><link>https://before80.github.io/prgms/Js/tools/bun/Chapter-06-Caveats-and-Caution/</link><pubDate>Sun, 29 Mar 2026 14:36:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/bun/Chapter-06-Caveats-and-Caution/</guid><description>&lt;h1 id="第六章需要注意哪些"&gt;第六章　需要注意哪些&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;🔔 &lt;strong&gt;阅读警告&lt;/strong&gt;：Bun 虽然很香，但它不是万能药。在把它扔进生产环境之前，请先把这些坑看清楚——不然你会在凌晨两点哭着找 Node.js。
{: .info }&lt;/p&gt;</description></item><item><title>第6章 注意事项与陷阱</title><link>https://before80.github.io/prgms/Js/tools/build/esbuild/Chapter-06-caveats-and-pitfalls/</link><pubDate>Sat, 28 Mar 2026 11:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/build/esbuild/Chapter-06-caveats-and-pitfalls/</guid><description>&lt;h2 id="61-已知局限性"&gt;6.1 已知局限性&lt;/h2&gt;
&lt;p&gt;esbuild 很快，但这不意味着它什么都能干。在决定用 esbuild 之前，你需要了解它的局限性。&lt;/p&gt;
&lt;h3 id="611-无内置-hmr热模块替换依赖上层工具实现"&gt;6.1.1 无内置 HMR（热模块替换），依赖上层工具实现&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;HMR&lt;/strong&gt;（Hot Module Replacement，热模块替换）是前端开发中的&amp;quot;神器&amp;quot;——当你的代码发生变化时，不需要刷新整个页面，就能把变化的部分替换进去，页面的其他状态（比如输入框里的内容、滚动位置、API 请求的状态）都能保持不变。&lt;/p&gt;</description></item><item><title>第6章 注意事项</title><link>https://before80.github.io/prgms/Js/tools/bundler/rollup/Chapter-06-Precautions/</link><pubDate>Sat, 28 Mar 2026 11:38:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/bundler/rollup/Chapter-06-Precautions/</guid><description>&lt;h1 id="第-6-章需要注意哪些"&gt;第 6 章　需要注意哪些&lt;/h1&gt;
&lt;hr&gt;
&lt;h2 id="61-tree-shaking-的前提条件"&gt;6.1 Tree-Shaking 的前提条件&lt;/h2&gt;
&lt;p&gt;Tree-Shaking 是 Rollup 最招牌的功能，但它的效果取决于你如何使用它。理解它的前提条件，可以让你避免踩坑。&lt;/p&gt;
&lt;h3 id="611-必须使用-es-module-语法import--export"&gt;6.1.1 必须使用 ES Module 语法（import / export）&lt;/h3&gt;
&lt;p&gt;Tree-Shaking 只能作用于 ES Module 语法的代码。如果你的代码用的是 CommonJS 语法（&lt;code&gt;require()&lt;/code&gt; / &lt;code&gt;module.exports&lt;/code&gt;），Tree-Shaking 基本上无法工作。&lt;/p&gt;</description></item><item><title>第6章 Create Next App相关配置</title><link>https://before80.github.io/prgms/Js/tools/scaffold/create-next-app/Chapter-06-related-config/</link><pubDate>Fri, 27 Mar 2026 21:12:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/scaffold/create-next-app/Chapter-06-related-config/</guid><description>&lt;h1 id="第六章--相关配置"&gt;第六章 · 相关配置&lt;/h1&gt;
&lt;h2 id="61-创建时自动生成的配置文件"&gt;6.1 创建时自动生成的配置文件&lt;/h2&gt;
&lt;p&gt;当你敲完 &lt;code&gt;npx create-next-app@latest my-app&lt;/code&gt; 并且选完所有选项之后，屏幕上会哗啦啦涌现出一堆文件。这些文件就像是你的新家刚装修好时送的&amp;quot;家具大礼包&amp;quot;——你可能不知道每件家具是干嘛用的，但你知道它们肯定有用。本节我们就来逐一认识这些配置文件，看看它们到底是何方神圣。&lt;/p&gt;</description></item><item><title>第6章 Create React App 相关配置</title><link>https://before80.github.io/prgms/Js/tools/scaffold/create-react-app/Chapter-06-CRA-Configs/</link><pubDate>Fri, 27 Mar 2026 21:04:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/scaffold/create-react-app/Chapter-06-CRA-Configs/</guid><description>&lt;h1 id="第-6-章create-react-app-相关配置"&gt;第 6 章　Create React App 相关配置&lt;/h1&gt;
&lt;h2 id="61-环境变量配置"&gt;6.1 环境变量配置&lt;/h2&gt;
&lt;h3 id="-环境变量让同一套代码适应不同运行环境"&gt;🌿 环境变量：让同一套代码适应不同运行环境&lt;/h3&gt;
&lt;p&gt;环境变量是 CRA 中最常用、最实用的配置机制之一。简单来说，它让你可以在&lt;strong&gt;不修改代码的情况下&lt;/strong&gt;，根据不同环境（开发/生产/测试）加载不同的配置值。&lt;/p&gt;</description></item><item><title>第6章 Create-Vite 相关配置</title><link>https://before80.github.io/prgms/Js/tools/scaffold/create-vite/Chapter-06-Related-Configuration/</link><pubDate>Fri, 27 Mar 2026 21:01:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/scaffold/create-vite/Chapter-06-Related-Configuration/</guid><description>&lt;h1 id="第六章相关配置"&gt;第六章：相关配置&lt;/h1&gt;
&lt;h2 id="61-viteconfigjsts-配置文件"&gt;6.1 vite.config.js/ts 配置文件&lt;/h2&gt;
&lt;h3 id="611-配置文件是什么放在哪"&gt;6.1.1 配置文件是什么？放在哪？&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;vite.config.js&lt;/code&gt;（或 &lt;code&gt;vite.config.ts&lt;/code&gt;）是 &lt;strong&gt;Vite 的&amp;quot;总控室&amp;quot;&lt;/strong&gt;——所有的构建行为、开发服务器设置、插件配置，都集中在这个文件里。&lt;/p&gt;</description></item><item><title>第 6 章 集合</title><link>https://before80.github.io/prgms/Rust/basic/Chapter-06-Collections/</link><pubDate>Fri, 27 Mar 2026 17:24:46 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/basic/Chapter-06-Collections/</guid><description>&lt;h1 id="chapter-06-集合collections"&gt;Chapter 06 集合（Collections）&lt;/h1&gt;
&lt;p&gt;欢迎来到 Rust 世界中最激动人心的章节之一——集合（Collections）！如果说 Rust 的所有权系统是这座语言大厦的钢筋水泥，那么集合就是这座大厦的储物间、衣柜、冰箱和杂货铺。想象一下，你搬进了一栋设计精巧的智能公寓，公寓里的每个家具都能自动适应你的存储需求，需要多少空间就自动伸展多少空间，这就是 Rust 集合带给你的体验。&lt;/p&gt;</description></item><item><title>第6章 CSS 处理</title><link>https://before80.github.io/prgms/Js/tools/build/vite/Chapter-06-CSS-Processing/</link><pubDate>Fri, 27 Mar 2026 17:13:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/build/vite/Chapter-06-CSS-Processing/</guid><description>&lt;h1 id="chapter-06-css-processing"&gt;Chapter-06-CSS-Processing&lt;/h1&gt;
&lt;h1 id="第6章css-处理"&gt;第6章：CSS 处理&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;CSS 是前端开发中最&amp;quot;朴素&amp;quot;又最&amp;quot;复杂&amp;quot;的存在。说它朴素，是因为它语法简单到小学生都能写；说它复杂，是因为当你项目变大、团队协作、浏览器兼容、性能优化这些因素叠加进来时，CSS 就变成了一个深不见底的技术黑洞。&lt;/p&gt;</description></item><item><title>第6章 基础选择器</title><link>https://before80.github.io/prgms/CSS/basic/Chapter-06-Basic-Selectors/</link><pubDate>Fri, 27 Mar 2026 16:53:00 +0800</pubDate><guid>https://before80.github.io/prgms/CSS/basic/Chapter-06-Basic-Selectors/</guid><description>&lt;h1 id="第六章基础选择器"&gt;第六章：基础选择器&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;选择器是 CSS 的&amp;quot;遥控器&amp;quot;，没有它你连电视都开不了。学会了选择器，你就能精准地控制页面上任意一个元素——是让它变红、变蓝，还是让它跳一段舞。本章我们就来认识这些&amp;quot;万能遥控器&amp;quot;。&lt;/p&gt;</description></item><item><title>第6章 类型守卫、类型断言与类型收窄</title><link>https://before80.github.io/prgms/Ts/basic/Chapter-06-Type-Guards-and-Narrowing/</link><pubDate>Thu, 26 Mar 2026 21:05:00 +0800</pubDate><guid>https://before80.github.io/prgms/Ts/basic/Chapter-06-Type-Guards-and-Narrowing/</guid><description>&lt;h1 id="第-6-章-类型守卫类型断言与类型收窄"&gt;第 6 章 类型守卫、类型断言与类型收窄&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;如果说 TypeScript 是一门艺术，那么类型收窄就是这门艺术的&amp;quot;透视技法&amp;quot;——它让你在复杂的类型迷宫中看清前路，而不是一头撞死在 &lt;code&gt;any&lt;/code&gt; 墙上。&lt;/p&gt;</description></item><item><title>第6章 组件——React核心概念</title><link>https://before80.github.io/prgms/Js/frameworks/react/Chapter-06-Components-The-Core-of-React/</link><pubDate>Wed, 25 Mar 2026 12:56:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/react/Chapter-06-Components-The-Core-of-React/</guid><description>&lt;h1 id="chapter-06---组件react-的核心"&gt;Chapter-06 - 组件——React 的核心&lt;/h1&gt;
&lt;h2 id="61-组件化开发的思想"&gt;6.1 组件化开发的思想&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;如果把 React 应用比作一座城市，那组件就是这座城市的每一栋建筑。有的建筑是摩天大楼（页面组件），有的是小卖部（按钮组件），有的是公交站牌（导航组件）。每一栋建筑都有自己的职责，自己的一亩三分地，不会跑去管别人的闲事——这就是组件化开发的核心思想。&lt;/p&gt;</description></item><item><title>第6章 组件基础与 Props/Emit</title><link>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-06-Components/</link><pubDate>Wed, 25 Mar 2026 12:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-06-Components/</guid><description>&lt;h1 id="第六章-组件基础与-propsemit"&gt;第六章 组件基础与 Props/Emit&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;组件是 Vue 的灵魂。没有组件化，Vue 就是一个会双向绑定的模板引擎；有了组件化，Vue 才能构建复杂的应用。本章我们会学习组件的概念、单文件组件的结构、父子组件之间的数据传递（Props 向下传递、Emit 向上通知），以及如何用 v-model 实现双向绑定。这些是 Vue 组件化开发的基础中的基础。&lt;/p&gt;</description></item><item><title>第 6 章 运算符与表达式（补充）</title><link>https://before80.github.io/prgms/Js/basic/Chapter-06-Operators-and-Expressions-Advanced/</link><pubDate>Tue, 24 Mar 2026 22:08:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/basic/Chapter-06-Operators-and-Expressions-Advanced/</guid><description>&lt;h1 id="第-6-章-运算符与表达式补充"&gt;第 6 章 运算符与表达式（补充）&lt;/h1&gt;
&lt;h2 id="61-自增自减详解"&gt;6.1 自增自减详解&lt;/h2&gt;
&lt;p&gt;在第四章我们简单介绍了 &lt;code&gt;++&lt;/code&gt; 和 &lt;code&gt;--&lt;/code&gt;，但这一节我们要把它彻底讲透。这两个运算符虽然只有两个字符，但里面藏着的细节足以让无数面试者翻车。&lt;/p&gt;</description></item><item><title>第6章：文件与目录操作</title><link>https://before80.github.io/prgms/linux/cli_basic/Chapter-06-File-and-Directory-Operations/</link><pubDate>Mon, 23 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/linux/cli_basic/Chapter-06-File-and-Directory-Operations/</guid><description>&lt;h1 id="第六章文件与目录操作"&gt;第六章：文件与目录操作&lt;/h1&gt;
&lt;h2 id="61-ls-查看文件"&gt;6.1 ls 查看文件&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;ls&lt;/code&gt; 是 Linux 中最最最常用的命令，没有之一！它的作用是&lt;strong&gt;列出目录内容&lt;/strong&gt;。就像 Windows 里的&amp;quot;打开文件夹看里面有啥&amp;quot;，只不过你需要敲字儿。&lt;/p&gt;</description></item><item><title>第6章 语句概述</title><link>https://before80.github.io/prgms/go/basic/Chapter-06-Statements-Overview/</link><pubDate>Fri, 20 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/basic/Chapter-06-Statements-Overview/</guid><description>&lt;h1 id="第6章-语句概述"&gt;第6章 语句概述&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;欢迎来到第六章！这一章我们要聊的是 Go 语言的&amp;quot;语句&amp;quot;。语句是什么？语句就是告诉计算机&amp;quot;做什么&amp;quot;的动作指令。如果说变量是名词，那语句就是动词——变量是名词的话，语句就是告诉计算机要做什么。顺序执行、条件判断、循环往复……这些都是语句的功能。准备好了吗？让我们开始吧！&lt;/p&gt;</description></item><item><title>第7章 揣篇——算清底牌再出牌，别拿直觉赌明天</title><link>https://before80.github.io/prgms/Philosophy/guiGuZi/7/</link><pubDate>Sat, 11 Apr 2026 21:52:00 +0800</pubDate><guid>https://before80.github.io/prgms/Philosophy/guiGuZi/7/</guid><description>&lt;h1 id="第七章-揣篇算清底牌再出牌别拿直觉赌明天"&gt;第七章 揣篇——&amp;ldquo;算清底牌再出牌，别拿直觉赌明天&amp;rdquo;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本章核心：谋事必先“量权”（盘资源）、“揣情”（摸人心）。数据+情绪双轨并行，提前半步洞察，才能把不确定性变成确定性。&lt;/p&gt;</description></item><item><title>附录1 趣讲配套学习指南</title><link>https://before80.github.io/prgms/Philosophy/suShu/Appendix-1-Learning-Guide/</link><pubDate>Thu, 09 Apr 2026 10:58:00 +0800</pubDate><guid>https://before80.github.io/prgms/Philosophy/suShu/Appendix-1-Learning-Guide/</guid><description>&lt;h1 id="附录一-趣讲配套学习指南"&gt;附录一 趣讲配套学习指南&lt;/h1&gt;
&lt;p&gt;学习这东西，最怕的不是笨，而是端着。&lt;/p&gt;
&lt;p&gt;端着什么姿势呢？&amp;ldquo;这本书太难了，我得正襟危坐、心无旁骛、三月不知肉味才能读。&amp;ldquo;结果呢？书还没翻三页，人已经睡着了。&lt;/p&gt;</description></item><item><title>附录2 《素书》“不端架子”学习指南：给成年人的清醒剂与防坑手册</title><link>https://before80.github.io/prgms/Philosophy/suShu/Appendix-2-Learning-Guide/</link><pubDate>Thu, 09 Apr 2026 10:58:00 +0800</pubDate><guid>https://before80.github.io/prgms/Philosophy/suShu/Appendix-2-Learning-Guide/</guid><description>&lt;h1 id="素书不端架子学习指南给成年人的清醒剂与防坑手册"&gt;《素书》“不端架子”学习指南：给成年人的清醒剂与防坑手册&lt;/h1&gt;
&lt;p&gt;学《素书》最怕什么？怕你把它供在书架上积灰，发朋友圈配文“最近在读经典”，然后三个月连封面都没翻开过。&lt;/p&gt;
&lt;p&gt;别装了。古人写书是为了&lt;strong&gt;用的&lt;/strong&gt;，不是用来当电子木鱼的。黄石公要是知道两千年后的人读他的书还得先焚香沐浴、正襟危坐，估计能气得从玉枕里坐起来给你一记脑瓜崩。&lt;/p&gt;</description></item><item><title>第7章 PyCharm和Python</title><link>https://before80.github.io/prgms/Python/basic/Chapter-07-PyCharm-Python/</link><pubDate>Wed, 08 Apr 2026 13:22:00 +0800</pubDate><guid>https://before80.github.io/prgms/Python/basic/Chapter-07-PyCharm-Python/</guid><description>&lt;h1 id="chapter-7pycharm---python-开发者的瑞士军刀-"&gt;Chapter 7：PyCharm - Python 开发者的瑞士军刀 🔪&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;题记&lt;/strong&gt;：如果说 VS Code 是Python界的&amp;quot;瑞士军刀&amp;quot;，那 PyCharm 就是那把专门为 Python 定制的、带有放大镜、激光笔、甚至还有自动咖啡机的——超级无敌工程队级别瑞士军刀！功能多到让你怀疑人生，但用好了，效率提升到让你怀疑老板给你发错了工资。&lt;/p&gt;</description></item><item><title>第7章：后悔药系列 —— Git 让你永不后悔</title><link>https://before80.github.io/prgms/Git/Chapter-07-Undoing-Changes/</link><pubDate>Fri, 03 Apr 2026 19:36:48 +0800</pubDate><guid>https://before80.github.io/prgms/Git/Chapter-07-Undoing-Changes/</guid><description>&lt;h1 id="第7章后悔药系列--git-让你永不后悔"&gt;第7章：后悔药系列 —— Git 让你永不后悔&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;人非圣贤，孰能无过？写代码更是如此。好消息是，Git 提供了各种各样的&amp;quot;后悔药&amp;quot;，让你可以撤销几乎任何操作。坏消息是&amp;hellip;药太多，容易吃错。本章就是 Git 后悔药使用说明书，请按医嘱服用。&lt;/p&gt;</description></item><item><title>第7章 变量与数据类型——Java 的积木</title><link>https://before80.github.io/prgms/Java/basic/Chapter-07-variables-and-data-types/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-07-variables-and-data-types/</guid><description>&lt;h1 id="第七章-变量与数据类型java-的积木"&gt;第七章 变量与数据类型——Java 的积木&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;🎯 本章目标：弄懂变量是什么、Java 有哪些数据类型、它们在内存里长什么样，以及如何让数据&amp;quot;变身&amp;quot;。&lt;/p&gt;</description></item><item><title>第 7 章：数学运算——math、math/big、math/bits、math/cmplx</title><link>https://before80.github.io/prgms/go/std/Chapter-07-math/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-07-math/</guid><description>&lt;h1 id="第-7-章数学运算mathmathbigmathbitsmathcmplx"&gt;第 7 章：数学运算——math、math/big、math/bits、math/cmplx&lt;/h1&gt;
&lt;p&gt;数学是宇宙的语言，而 Go 的 math 包就是你和这门语言对话的翻译官。从简单的加减乘除到让人头秃的复数运算，Go 标准库提供了全套工具。本章将带你领略 Go 数学工具的魅力，顺便踩踩那些让人欲仙欲死的精度坑。&lt;/p&gt;</description></item><item><title>第 7 章：函数——C 语言的'百变大咖'</title><link>https://before80.github.io/prgms/C/basic/Chapter-07-Functions/</link><pubDate>Sun, 29 Mar 2026 22:34:00 +0800</pubDate><guid>https://before80.github.io/prgms/C/basic/Chapter-07-Functions/</guid><description>&lt;h1 id="第-7-章函数c-语言的百变大咖"&gt;第 7 章：函数——C 语言的&amp;quot;百变大咖&amp;quot;&lt;/h1&gt;
&lt;p&gt;嗨，朋友们！欢迎来到 C 语言最神奇的部分——函数（Function）！&lt;/p&gt;
&lt;p&gt;想象一下，你走进一家餐厅。服务员问你要什么，你说：&amp;ldquo;来一份宫保鸡丁！&amp;ldquo;然后厨房就开始忙活了——洗菜、切菜、炒菜、装盘，最后一盘香喷喷的宫保鸡丁就端到了你面前。你不需要知道厨房里发生了什么，你只需要&amp;quot;点菜&amp;quot;就行。&lt;/p&gt;</description></item><item><title>第7章 数组与字符串</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-07-Arrays-and-Strings/</link><pubDate>Sun, 29 Mar 2026 21:43:08 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-07-Arrays-and-Strings/</guid><description>&lt;h1 id="第7章-数组与字符串"&gt;第7章 数组与字符串&lt;/h1&gt;
&lt;p&gt;想象一下，你是一名仓库管理员，现在有100个一模一样的盒子要装货。你会怎么管理？如果每个盒子都起个名字——&amp;ldquo;盒子一&amp;rdquo;、&amp;ldquo;盒子二&amp;rdquo;、&amp;ldquo;盒子三&amp;rdquo;&amp;hellip;恭喜你，你已经理解了数组的精髓！只不过在编程世界里，我们叫它们&amp;quot;数组元素&amp;quot;，而你从1开始数，我们要从0开始数（别问为什么，问就是C语言的传统）。&lt;/p&gt;</description></item><item><title>第七章 相关配置</title><link>https://before80.github.io/prgms/Js/tools/bun/Chapter-07-Configuration/</link><pubDate>Sun, 29 Mar 2026 14:36:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/bun/Chapter-07-Configuration/</guid><description>&lt;h1 id="第七章相关配置"&gt;第七章　相关配置&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;🤓 本章聊聊 Bun 的各种&amp;quot;花式配置&amp;quot;——从配置文件到环境变量，从国内镜像加速到 IDE 配合，手把手把你打造成配置大师。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="71-bunfigtoml全局配置文件"&gt;7.1 bunfig.toml（全局配置文件）&lt;/h2&gt;
&lt;p&gt;如果说 Bun 是一个狂飙的老司机，那 &lt;code&gt;bunfig.toml&lt;/code&gt; 就是它的&lt;strong&gt;外挂副驾驶&lt;/strong&gt;——全局配置，想怎么调就怎么调。&lt;/p&gt;</description></item><item><title>第7章 配置参考</title><link>https://before80.github.io/prgms/Js/tools/build/esbuild/Chapter-07-configuration-reference/</link><pubDate>Sat, 28 Mar 2026 11:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/build/esbuild/Chapter-07-configuration-reference/</guid><description>&lt;h2 id="71-入口与出口配置"&gt;7.1 入口与出口配置&lt;/h2&gt;
&lt;h3 id="711-entrypoints入口文件--多个入口"&gt;7.1.1 entryPoints（入口文件 / 多个入口）&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;entryPoints&lt;/code&gt; 是 esbuild 构建的起点，可以是单个文件，也可以是多个文件：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// 单个入口
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;await&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;esbuild&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;build&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;entryPoints&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;:&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;[&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;src/index.js&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;outfile&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;:&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;dist/index.js&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// 多个入口 —— 每个入口会生成对应的输出文件
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;await&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;esbuild&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;build&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;entryPoints&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;:&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;[&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;src/home.js&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;src/about.js&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;src/contact.js&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;outdir&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;:&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;dist&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// 生成：dist/home.js、dist/about.js、dist/contact.js
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="712-stdin从标准输入读取代码适用于特殊构建场景"&gt;7.1.2 stdin（从标准输入读取代码，适用于特殊构建场景）&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;stdin&lt;/code&gt; 配置让你不需要文件，直接从命令行或管道输入代码：&lt;/p&gt;</description></item><item><title>第7章 相关配置</title><link>https://before80.github.io/prgms/Js/tools/bundler/rollup/Chapter-07-Related-Configuration/</link><pubDate>Sat, 28 Mar 2026 11:38:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/bundler/rollup/Chapter-07-Related-Configuration/</guid><description>&lt;h1 id="第-7-章相关配置"&gt;第 7 章　相关配置&lt;/h1&gt;
&lt;hr&gt;
&lt;h2 id="71-输入配置input"&gt;7.1 输入配置（Input）&lt;/h2&gt;
&lt;p&gt;输入配置决定了&amp;quot;从哪里开始打包&amp;quot;，是整个 Rollup 配置的起点。&lt;/p&gt;
&lt;h3 id="711-input入口文件路径字符串--对象多入口--数组"&gt;7.1.1 input：入口文件路径（字符串 / 对象多入口 / 数组）&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;input&lt;/code&gt; 是&lt;strong&gt;必填项&lt;/strong&gt;（什么？你想不写？Rollup 会毫不客气地报错），它告诉 Rollup&amp;quot;从哪里开始找代码&amp;quot;。&lt;/p&gt;</description></item><item><title>第 7 章 错误处理</title><link>https://before80.github.io/prgms/Rust/basic/Chapter-07-Error-Handling/</link><pubDate>Fri, 27 Mar 2026 17:24:46 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/basic/Chapter-07-Error-Handling/</guid><description>&lt;h1 id="chapter-07-错误处理error-handling"&gt;Chapter 07 错误处理（Error-Handling）&lt;/h1&gt;
&lt;p&gt;想象一下，你是一家高级餐厅的服务员。有一天，客人点了一份牛排，你兴冲冲地端着盘子走向餐桌，结果——牛排掉地上了！&lt;/p&gt;</description></item><item><title>第7章 静态资源与构建优化</title><link>https://before80.github.io/prgms/Js/tools/build/vite/Chapter-07-Assets-And-Optimization/</link><pubDate>Fri, 27 Mar 2026 17:13:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/build/vite/Chapter-07-Assets-And-Optimization/</guid><description>&lt;h1 id="chapter-07-assets-and-optimization"&gt;Chapter-07-Assets-And-Optimization&lt;/h1&gt;
&lt;h1 id="第7章静态资源与构建优化"&gt;第7章：静态资源与构建优化&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;为什么我的网站加载那么慢？&amp;ldquo;这是前端性能优化的灵魂拷问。&lt;/p&gt;
&lt;p&gt;造成网页加载慢的原因有很多：图片太大、JavaScript 打包太臃肿、HTTP 请求太多、没有缓存策略、没有压缩&amp;hellip; 这一章，我们就把这些问题一一击破。&lt;/p&gt;</description></item><item><title>第7章 组合选择器与伪类</title><link>https://before80.github.io/prgms/CSS/basic/Chapter-07-Combination-Selectors-and-Pseudo-Classes/</link><pubDate>Fri, 27 Mar 2026 16:53:00 +0800</pubDate><guid>https://before80.github.io/prgms/CSS/basic/Chapter-07-Combination-Selectors-and-Pseudo-Classes/</guid><description>&lt;h1 id="第七章组合选择器与伪类"&gt;第七章：组合选择器与伪类&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;如果说基础选择器是&amp;quot;单兵作战&amp;quot;，那组合选择器就是&amp;quot;联合作战&amp;quot;。学会了组合选择器，你就能选中那些&amp;quot;爸爸的儿子的孙子&amp;quot;——精确到骨头里去。而伪类呢，就是给元素加上各种&amp;quot;状态滤镜&amp;quot;：第一个孩子要表扬、鼠标悬停的要高亮、选中的要打勾&amp;hellip; CSS 伪类就是来干这个的。&lt;/p&gt;</description></item><item><title>第7章 类型运算与工具类型</title><link>https://before80.github.io/prgms/Ts/basic/Chapter-07-Type-Operations-and-Utility-Types/</link><pubDate>Thu, 26 Mar 2026 21:05:00 +0800</pubDate><guid>https://before80.github.io/prgms/Ts/basic/Chapter-07-Type-Operations-and-Utility-Types/</guid><description>&lt;h1 id="第-7-章-类型运算与工具类型"&gt;第 7 章 类型运算与工具类型&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;如果说类型是 TypeScript 世界的&amp;quot;物质&amp;quot;，那么类型运算就是&amp;quot;化学反应的催化剂&amp;quot;——它让你把简单的类型组装成复杂的类型系统，让类型定义既优雅又 DRY。&lt;/p&gt;</description></item><item><title>第7章 Props与组件参数</title><link>https://before80.github.io/prgms/Js/frameworks/react/Chapter-07-Props-Component-Parameters/</link><pubDate>Wed, 25 Mar 2026 12:56:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/react/Chapter-07-Props-Component-Parameters/</guid><description>&lt;h1 id="chapter-07---props组件的参数"&gt;Chapter-07 - Props——组件的&amp;quot;参数&amp;quot;&lt;/h1&gt;
&lt;h2 id="71-props-基础"&gt;7.1 Props 基础&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;如果把 React 组件比作一台饮料机，那 &lt;strong&gt;Props&lt;/strong&gt; 就是投进去的硬币和选择按钮——它们是组件的&amp;quot;输入参数&amp;quot;，决定了组件最终输出什么样的&amp;quot;饮料&amp;quot;。 Props 是 React 组件之间传递数据的主要方式，也是 React 单向数据流的核心载体。&lt;/p&gt;</description></item><item><title>第7章 插槽（Slots）</title><link>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-07-Slots/</link><pubDate>Wed, 25 Mar 2026 12:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-07-Slots/</guid><description>&lt;h1 id="第七章-插槽slots"&gt;第七章 插槽（Slots）&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;如果说 Props 是给组件&amp;quot;喂数据&amp;quot;，那插槽就是给组件&amp;quot;喂 UI&amp;quot;。插槽是 Vue 最独特的特性之一——它允许你在父组件里定义子组件的部分内容，让组件变得极度灵活和可复用。学完这一章，你会对&amp;quot;组件不仅仅是标签，更是可塑的容器&amp;quot;这句话有全新的理解。&lt;/p&gt;</description></item><item><title>第 7 章 数组</title><link>https://before80.github.io/prgms/Js/basic/Chapter-07-Arrays/</link><pubDate>Tue, 24 Mar 2026 22:08:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/basic/Chapter-07-Arrays/</guid><description>&lt;h1 id="第-7-章-数组"&gt;第 7 章 数组&lt;/h1&gt;
&lt;p&gt;如果说变量是一个「盒子」，那数组就是一条「走廊」——可以装下多个值，按顺序排列。数组是 JavaScript 中最重要的数据结构之一，也是你写代码时最常用到的工具。&lt;/p&gt;</description></item><item><title>第7章：文件查看与编辑器</title><link>https://before80.github.io/prgms/linux/cli_basic/Chapter-07-File-Viewing-and-Editors/</link><pubDate>Mon, 23 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/linux/cli_basic/Chapter-07-File-Viewing-and-Editors/</guid><description>&lt;h1 id="第七章文件查看与编辑器"&gt;第七章：文件查看与编辑器&lt;/h1&gt;
&lt;h2 id="71-cat-查看整个文件内容"&gt;7.1 cat 查看整个文件内容&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;cat&lt;/code&gt; = &lt;strong&gt;C&lt;/strong&gt;oncate&lt;strong&gt;t&lt;/strong&gt;ate，拼接/连接文件。不过它最常用的功能是&lt;strong&gt;查看文件内容&lt;/strong&gt;。&lt;/p&gt;
&lt;h3 id="711-cat-文件名显示文件"&gt;7.1.1 cat 文件名：显示文件&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 最简单的用法，直接显示文件全部内容&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cat file.txt
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 输出文件内容到屏幕&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Hello, this is a &lt;span style="color:#e5c07b"&gt;test&lt;/span&gt; file.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Line &lt;span style="color:#d19a66"&gt;2&lt;/span&gt; of the file.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Line &lt;span style="color:#d19a66"&gt;3&lt;/span&gt; of the file.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="712-cat--n显示行号"&gt;7.1.2 cat -n：显示行号&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# -n = number，给所有行加上行号&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cat -n file.txt
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 输出：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 1	Hello, this is a test file.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 2	Line 2 of the file.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 3	Line 3 of the file.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;小技巧：行号对于程序员来说太有用了！找错误行号时特别方便！&lt;/p&gt;</description></item><item><title>第7章 简单语句</title><link>https://before80.github.io/prgms/go/basic/Chapter-07-Simple-Statements/</link><pubDate>Fri, 20 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/basic/Chapter-07-Simple-Statements/</guid><description>&lt;h1 id="第7章-简单语句"&gt;第7章 简单语句&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;欢迎来到第七章！这一章我们要聊的是 Go 语言的&amp;quot;简单语句&amp;quot;。简单语句是那些不需要大括号包围的独立语句，它们是 Go 代码的&amp;quot;基本粒子&amp;quot;。虽然叫&amp;quot;简单&amp;quot;，但功能可不简单哦！&lt;/p&gt;</description></item><item><title>第8章 摩篇——轻轻摩擦出火花，顺势推舟不费力</title><link>https://before80.github.io/prgms/Philosophy/guiGuZi/8/</link><pubDate>Sat, 11 Apr 2026 21:52:00 +0800</pubDate><guid>https://before80.github.io/prgms/Philosophy/guiGuZi/8/</guid><description>&lt;h1 id="第八章-摩篇轻轻摩擦出火花顺势推舟不费力"&gt;第八章 摩篇——&amp;ldquo;轻轻摩擦出火花，顺势推舟不费力&amp;rdquo;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本章核心：“摩”是“揣”的实操版。通过隐形试探、情绪共振、同类相吸，达成“谋之于阴，成之于阳”的无感控场。&lt;/p&gt;</description></item><item><title>黄石公素书(张商英注本) 部分说明版</title><link>https://before80.github.io/prgms/Philosophy/suShu/Appendix-3-shuoming/</link><pubDate>Thu, 09 Apr 2026 10:58:00 +0800</pubDate><guid>https://before80.github.io/prgms/Philosophy/suShu/Appendix-3-shuoming/</guid><description>&lt;h2 id="序"&gt;序&lt;/h2&gt;
&lt;p&gt;​	黄石公《素书》六篇，按《前汉》列传，黄石公圯桥所授子房书，世人多以三略为是，盖传之者误也。晋乱，有盗发子房冢，於玉枕中获此书，凡一千三百三十六言，上有秘戒，不许传於不道、不神、不圣、不贤之人。若非其人，必受其殃；得人不传，亦受其殃。呜呼，其慎重如此。黄石公得子房而传之，子房不得其传而葬之。后五百余年而盗获之，自是《素书》始传於人间。然其传者特黄石公之言耳，而公之意，其可以言尽哉。窃尝评之：天人之道未尝不相为用，古之圣皆尽心焉。尧钦若昊天，舜齐七政，禹叙九畴，传说陈天道，文王重八卦，周公设天地四时之官，又立三公以燮理阴阳，孔子欲无言，老聃建之以常无有。《阴符经》曰：宇宙在乎手，万化生乎身。道至於此，则鬼神变化皆不逃吾之术，而况於刑名度数之间者欤？黄石公，秦之隐君子也。其书简，其意深，虽尧、舜、禹、文、傅说、周公、孔、老亦无以出此矣。然则黄石公知秦之将亡，汉之将兴，故以此书授子房。而子房岂能尽知其书哉？凡子房之所以为子房者，仅能用其一二耳。书曰：阴计外泄者败。子房用之，尝劝高帝王韩信矣。书曰：小怨不赦，大怨必生。子房用之，尝劝高帝侯雍齿矣。书曰：决策於不仁者险。子房用之，尝劝高帝罢封六国矣。书曰：设变致权，所以解结。子房用之，尝致四皓而立惠帝矣。书曰：吉莫吉於知足。子房用之，尝择留自封矣。书曰：绝嗜禁欲，所以除累。子房用之，尝弃人间事，从赤松子游矣。嗟乎，遗粕弃滓，犹足以亡秦、项而帝沛公，况纯而用之、深而造之者乎？自汉以来，章句文词之学炽，而知道之士极少。如诸葛亮、王猛、房乔、裴度等辈，虽号为一时贤相，至於先王大道，曾未足以知，髣髴此书所以不传於不道、不神、不圣、不贤之人也。离有离无之谓道，非有非无之谓神，有而无之之谓圣，无而有之之谓贤。非此四者，虽口诵此书，亦不能身行之矣。张商英天觉序。&lt;/p&gt;</description></item><item><title>第8章 其他编辑器</title><link>https://before80.github.io/prgms/Python/basic/Chapter-08-Other-Editors/</link><pubDate>Wed, 08 Apr 2026 13:22:00 +0800</pubDate><guid>https://before80.github.io/prgms/Python/basic/Chapter-08-Other-Editors/</guid><description>&lt;h1 id="chapter-8-告别-vs-code这些编辑器让你装-x-于无形"&gt;Chapter 8: 告别 VS Code？这些编辑器让你装 X 于无形&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;上一章我们学会了在 VS Code 里写 Python，感觉人生已经到达了巅峰。但江湖之大，岂能只有一柄利器？今天咱们就来聊聊那些&lt;strong&gt;让旁门左道肃然起敬&lt;/strong&gt;的编辑器们——它们有的靠 AI 加持，有的靠极客血统，有的靠科学气质，总之各怀绝技。&lt;/p&gt;</description></item><item><title>第8章：.gitignore —— 眼不见心不烦</title><link>https://before80.github.io/prgms/Git/Chapter-08-Gitignore/</link><pubDate>Fri, 03 Apr 2026 19:36:48 +0800</pubDate><guid>https://before80.github.io/prgms/Git/Chapter-08-Gitignore/</guid><description>&lt;h1 id="第8章gitignore--眼不见心不烦"&gt;第8章：.gitignore —— 眼不见心不烦&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;有些东西，看见了就心烦。比如编译生成的文件、依赖目录、配置文件里的密码&amp;hellip;Git 很聪明，但它不会读心术，不知道哪些文件不该提交。这时候，&lt;code&gt;.gitignore&lt;/code&gt; 文件就是你的&amp;quot;黑名单&amp;quot;——告诉 Git：这些文件，请假装看不见。&lt;/p&gt;</description></item><item><title>第8章 运算符——Java 的计算能力</title><link>https://before80.github.io/prgms/Java/basic/Chapter-08-operators/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-08-operators/</guid><description>&lt;h1 id="第八章-运算符java-的计算能力"&gt;第八章 运算符——Java 的计算能力&lt;/h1&gt;
&lt;p&gt;想象一下，如果你有一台超级智能的机器人，但它只会站在那里一动不动，那该多无聊啊！运算符就是赋予 Java&amp;quot;动手能力&amp;quot;的关键——它们让 Java 能够做数学计算、比较大小、判断真假，甚至直接操控计算机最底层的比特位。&lt;/p&gt;</description></item><item><title>第 8 章：和时间打交道——time 包 ⭐</title><link>https://before80.github.io/prgms/go/std/Chapter-08-time/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-08-time/</guid><description>&lt;h1 id="第-8-章和时间打交道time-包-"&gt;第 8 章：和时间打交道——time 包 ⭐&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;时间是什么？时间是程序员最昂贵的资源，也是最难理解的类型。&amp;rdquo;
—— 某位被时区折磨过的 Go 开发者&lt;/p&gt;</description></item><item><title>第 8 章：数组——程序员的储物神器</title><link>https://before80.github.io/prgms/C/basic/Chapter-08-Arrays/</link><pubDate>Sun, 29 Mar 2026 22:34:00 +0800</pubDate><guid>https://before80.github.io/prgms/C/basic/Chapter-08-Arrays/</guid><description>&lt;h1 id="第-8-章数组程序员的储物神器"&gt;第 8 章：数组——程序员的储物神器&lt;/h1&gt;
&lt;p&gt;各位老铁，上一章我们学习了变量和数据类型，那感觉就像学会了造单个砖块。但是！你见过只盖一层楼的房子吗？除非你是霍比特人，否则你肯定需要楼房。同样的，程序世界也需要一种&amp;quot;数据结构&amp;quot;，能让你把一堆相关的变量打包存放管理。这就是我们今天的主角——&lt;strong&gt;数组（Array）&lt;/strong&gt;！&lt;/p&gt;</description></item><item><title>第8章 函数基础</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-08-Functions-Basics/</link><pubDate>Sun, 29 Mar 2026 21:03:00 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-08-Functions-Basics/</guid><description>&lt;h1 id="第8章-函数基础"&gt;第8章 函数基础&lt;/h1&gt;
&lt;p&gt;想象一下，如果你每天都要亲自去超市买每一颗菜、亲自洗每一颗米、亲自切每一块肉才能做一顿饭——你可能会疯掉。函数（Function）就是编程世界里的&amp;quot;预制菜&amp;quot;：你把一套操作打包好，取个名字，下次想吃的时候直接&amp;quot;加热&amp;quot;就行，不用每次都从头开始折腾。这就是代码复用（Code Reuse）的精髓，也是程序员偷懒（划掉）高效编程的必备技能。&lt;/p&gt;</description></item><item><title>第8章 附录</title><link>https://before80.github.io/prgms/Js/tools/build/esbuild/Chapter-08-appendix/</link><pubDate>Sat, 28 Mar 2026 11:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/build/esbuild/Chapter-08-appendix/</guid><description>&lt;h2 id="81-官方资源链接github--文档--changelog"&gt;8.1 官方资源链接（GitHub / 文档 / changelog）&lt;/h2&gt;
&lt;p&gt;学习任何工具，官方文档永远是最权威的资料。以下是 esbuild 的官方资源：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;资源&lt;/th&gt;
 &lt;th&gt;链接&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;GitHub 仓库&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://github.com/evanw/esbuild"&gt;github.com/evanw/esbuild&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;官方文档&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://esbuild.github.io"&gt;esbuild.github.io&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;官方博客&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://esbuild.github.io/news"&gt;esbuild.github.io/news&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Changelog&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://github.com/evanw/esbuild/releases"&gt;github.com/evanw/esbuild/releases&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;npm 页面&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://www.npmjs.com/package/esbuild"&gt;www.npmjs.com/package/esbuild&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="github-仓库"&gt;GitHub 仓库&lt;/h3&gt;
&lt;p&gt;esbuild 的 GitHub 仓库（github.com/evanw/esbuild）是获取信息的第一站。&lt;/p&gt;</description></item><item><title>第 8 章 函数式编程</title><link>https://before80.github.io/prgms/Rust/basic/Chapter-08-Functional-Programming/</link><pubDate>Fri, 27 Mar 2026 17:24:46 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/basic/Chapter-08-Functional-Programming/</guid><description>&lt;h1 id="chapter-08-函数式编程functional-programming"&gt;Chapter 08 函数式编程（Functional-Programming）&lt;/h1&gt;
&lt;p&gt;想象一下，你走进一家神奇的餐厅。这家餐厅的菜单上不是具体的菜品，而是一系列&amp;quot;烹饪指令&amp;quot;。你告诉服务员：&amp;ldquo;我想要一份先把食材切成丁，然后用油炒一下，最后加盐的菜。&amp;rdquo; 服务员面带微笑地接过这张小纸条，不慌不忙地走向厨房。几分钟后，一道热气腾腾的菜品就端到了你面前。&lt;/p&gt;</description></item><item><title>第8章 Vite + Vue 实战</title><link>https://before80.github.io/prgms/Js/tools/build/vite/Chapter-08-Vite-Vue/</link><pubDate>Fri, 27 Mar 2026 17:13:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/build/vite/Chapter-08-Vite-Vue/</guid><description>&lt;h1 id="chapter-08-vite-vue"&gt;Chapter-08-Vite-Vue&lt;/h1&gt;
&lt;h1 id="第8章vite--vue-实战"&gt;第8章：Vite + Vue 实战&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;如果说 Vue 3 是尤雨溪的得意之作，那 Vite 就是让 Vue 开发者&amp;quot;爽到飞起&amp;quot;的利器。两者的结合，堪称&amp;quot;天作之合&amp;quot;。&lt;/p&gt;</description></item><item><title>第8章 选择器优先级</title><link>https://before80.github.io/prgms/CSS/basic/Chapter-08-Selector-Priority/</link><pubDate>Fri, 27 Mar 2026 16:53:00 +0800</pubDate><guid>https://before80.github.io/prgms/CSS/basic/Chapter-08-Selector-Priority/</guid><description>&lt;h1 id="第八章选择器优先级"&gt;第八章：选择器优先级&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;CSS 的层叠规则就像一场&amp;quot;权力游戏&amp;quot;——当多个选择器同时想要控制同一个元素的同一个属性时，谁说了算？这就是优先级要解决的问题。学会了优先级，你就能精准地控制&amp;quot;谁的话更大声&amp;quot;，而不是被浏览器的默认规则搞得一头雾水。&lt;/p&gt;</description></item><item><title>第8章 函数类型系统</title><link>https://before80.github.io/prgms/Ts/basic/Chapter-08-Function-Type-System/</link><pubDate>Thu, 26 Mar 2026 21:05:00 +0800</pubDate><guid>https://before80.github.io/prgms/Ts/basic/Chapter-08-Function-Type-System/</guid><description>&lt;h1 id="第-8-章-函数类型系统"&gt;第 8 章 函数类型系统&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;函数是 JavaScript/TypeScript 世界的一等公民——函数式编程、单体应用、事件驱动，统统离不开函数。TypeScript 的函数类型系统让你在定义函数时有&amp;quot;火眼金睛&amp;quot;，一眼看穿参数和返回值的类型猫腻。&lt;/p&gt;</description></item><item><title>第8章 State与组件生命周期</title><link>https://before80.github.io/prgms/Js/frameworks/react/Chapter-08-State-and-Component-Lifecycle/</link><pubDate>Wed, 25 Mar 2026 12:56:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/react/Chapter-08-State-and-Component-Lifecycle/</guid><description>&lt;p&gt;﻿# Chapter-08 - State 与组件生命周期&lt;/p&gt;
&lt;h2 id="81-state-基础"&gt;8.1 State 基础&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Props 是从外部传入的数据，那组件内部自己产生的数据存在哪里呢？答案就是 &lt;strong&gt;State&lt;/strong&gt;。如果说 Props 是组件的&amp;quot;身份证&amp;quot;（由父母给的，不能自己改），那 State 就是组件的&amp;quot;钱包&amp;quot;（自己挣的，自己管）。State 是组件内部的可变数据，当 State 变化时，组件会自动重新渲染。&lt;/p&gt;</description></item><item><title>第8章 高级组件特性</title><link>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-08-Advanced-Components/</link><pubDate>Wed, 25 Mar 2026 12:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-08-Advanced-Components/</guid><description>&lt;h1 id="第八章-高级组件特性"&gt;第八章 高级组件特性&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;学会基础组件只是入门，这一章我们来解决&amp;quot;进阶&amp;quot;的问题。动态组件、组件缓存、异步组件、DOM 瞬移、attribute 继承、递归组件、跨级通信……每一个都是 Vue 组件化开发中的&amp;quot;高级技能&amp;quot;。学完这一章，你对 Vue 组件的理解会上一个台阶。&lt;/p&gt;</description></item><item><title>第 8 章 对象</title><link>https://before80.github.io/prgms/Js/basic/Chapter-08-Objects/</link><pubDate>Tue, 24 Mar 2026 22:08:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/basic/Chapter-08-Objects/</guid><description>&lt;h1 id="第-8-章-对象"&gt;第 8 章 对象&lt;/h1&gt;
&lt;p&gt;如果说数组是一条有序的「走廊」，那对象就是一个有标签的「储物柜」——每个格子里放什么，由你决定。对象是 JavaScript 的灵魂，几乎所有东西都是对象。&lt;/p&gt;</description></item><item><title>第8章：文件查找与文本搜索</title><link>https://before80.github.io/prgms/linux/cli_basic/Chapter-08-File-Finding-and-Text-Searching/</link><pubDate>Mon, 23 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/linux/cli_basic/Chapter-08-File-Finding-and-Text-Searching/</guid><description>&lt;h1 id="第八章文件查找与文本搜索"&gt;第八章：文件查找与文本搜索&lt;/h1&gt;
&lt;h2 id="81-find-按文件名查找文件"&gt;8.1 find 按文件名查找文件&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;find&lt;/code&gt; 是 Linux 中最强大的文件查找工具！它可以根据&lt;strong&gt;文件名、大小、时间、权限&lt;/strong&gt;等条件来查找文件。&lt;/p&gt;
&lt;h3 id="811-find---name-filename"&gt;8.1.1 find / -name &amp;ldquo;filename&amp;rdquo;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 从根目录开始查找名为 filename 的文件（需要 sudo 权限）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo find / -name &lt;span style="color:#63c381"&gt;&amp;#34;filename&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 示例：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo find / -name &lt;span style="color:#63c381"&gt;&amp;#34;python&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 输出：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# /usr/bin/python3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# /usr/lib/python3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# ...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;权限提示&lt;/strong&gt;：从根目录 &lt;code&gt;/&lt;/code&gt; 开始搜索通常需要 &lt;code&gt;sudo&lt;/code&gt;，因为普通用户无法访问某些系统目录。如果不想看到满屏的&amp;quot;Permission denied&amp;quot;，要么加 &lt;code&gt;sudo&lt;/code&gt;，要么缩小搜索范围（如 &lt;code&gt;find /home&lt;/code&gt; 或 &lt;code&gt;find /usr&lt;/code&gt;）。&lt;/p&gt;</description></item><item><title>第8章 条件语句</title><link>https://before80.github.io/prgms/go/basic/Chapter-08-Conditional-Statements/</link><pubDate>Fri, 20 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/basic/Chapter-08-Conditional-Statements/</guid><description>&lt;h1 id="第8章-条件语句"&gt;第8章 条件语句&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;欢迎来到第八章！这一章我们要聊的是 Go 语言的&amp;quot;条件语句&amp;quot;。条件语句是什么？条件语句就是让程序做决定的语句——&amp;ldquo;如果今天下雨，我就带伞；否则，我就去跑步。&amp;ldquo;这就是一个典型的条件语句。程序有了条件语句，就像人有了判断力，不再是&amp;quot;一根筋&amp;quot;地执行到底了。&lt;/p&gt;</description></item><item><title>第9章 权篇——见人说人话，不是圆滑是降维</title><link>https://before80.github.io/prgms/Philosophy/guiGuZi/9/</link><pubDate>Sat, 11 Apr 2026 21:52:00 +0800</pubDate><guid>https://before80.github.io/prgms/Philosophy/guiGuZi/9/</guid><description>&lt;h1 id="第九章-权篇见人说人话不是圆滑是降维"&gt;第九章 权篇——&amp;ldquo;见人说人话，不是圆滑是降维&amp;rdquo;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本章核心：话术不是背稿，是“量体裁衣”。看清对象特质、避开情绪雷区、用长板补短板，才能字字珠玑、句句入心。&lt;/p&gt;</description></item><item><title>第9章 代码质量</title><link>https://before80.github.io/prgms/Python/basic/Chapter-09-Code-Quality/</link><pubDate>Wed, 08 Apr 2026 13:22:00 +0800</pubDate><guid>https://before80.github.io/prgms/Python/basic/Chapter-09-Code-Quality/</guid><description>&lt;h1 id="第-9-章-代码质量让代码优雅得像艺术品-"&gt;第 9 章 代码质量：让代码优雅得像艺术品 🖼️&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Any fool can write code that a computer can understand. Good programmers write code that humans can understand.&amp;rdquo;
—— Martin Fowler&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;你知道程序员最怕什么吗？不是 bug，不是加班，是——&lt;strong&gt;看到三年前自己写的代码&lt;/strong&gt;。那种感觉就像是打开冰箱发现里面藏着一块去年的三明治——你完全不记得它是怎么进去的，而且它似乎还活着。&lt;/p&gt;</description></item><item><title>第9章：分支基础 —— Git 的杀手锏</title><link>https://before80.github.io/prgms/Git/Chapter-09-Branching-Basics/</link><pubDate>Fri, 03 Apr 2026 19:36:48 +0800</pubDate><guid>https://before80.github.io/prgms/Git/Chapter-09-Branching-Basics/</guid><description>&lt;h1 id="第9章分支基础--git-的杀手锏"&gt;第9章：分支基础 —— Git 的杀手锏&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;如果 Git 只有一个功能值得炫耀，那一定是分支。其他版本控制系统（如 SVN）的分支又慢又重，而 Git 的分支轻如鸿毛、快如闪电。这一章，我们来揭开 Git 分支的神秘面纱。&lt;/p&gt;</description></item><item><title>第9章 控制流程——程序的交通灯与循环</title><link>https://before80.github.io/prgms/Java/basic/Chapter-09-control-flow/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-09-control-flow/</guid><description>&lt;h1 id="第九章-控制流程程序的交通灯与循环"&gt;第九章 控制流程——程序的交通灯与循环&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;程序和数据结构是算法的血肉，而控制流程是算法的灵魂。没有控制流程，代码只是一堆躺在床上的僵尸。&amp;rdquo; —— 某位不愿意透露姓名的程序员&lt;/p&gt;</description></item><item><title>第9章：随机数——math/rand、crypto/rand</title><link>https://before80.github.io/prgms/go/std/Chapter-09-rand/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-09-rand/</guid><description>&lt;h1 id="第9章随机数mathrandcryptorand"&gt;第9章：随机数——math/rand、crypto/rand&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;在计算机世界里，没有真正的随机数，只有足够复杂的伪随机数。&amp;rdquo; ——一位被骰子欺骗的程序员&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;随机数是现代计算的基石。从掷骰子游戏到密码学密钥，从蒙特卡洛模拟到机器学习，数据都离不开随机数。但你知道吗？计算机里的&amp;quot;随机数&amp;quot;其实都是&amp;quot;算计&amp;quot;出来的！本章带你揭开 Go 语言随机数包的神秘面纱。&lt;/p&gt;</description></item><item><title>第 9 章：指针——C 语言的灵魂</title><link>https://before80.github.io/prgms/C/basic/Chapter-09-Pointers/</link><pubDate>Sun, 29 Mar 2026 22:34:00 +0800</pubDate><guid>https://before80.github.io/prgms/C/basic/Chapter-09-Pointers/</guid><description>&lt;h1 id="第-9-章指针c-语言的灵魂"&gt;第 9 章：指针——C 语言的灵魂&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;如果说 C 语言是一把瑞士军刀，那指针就是军刀上最锋利的那片刀刃。学会了指针，你就能在 C语言的世界里上天入地；学不会指针，那你可能连门都摸不着。指针是 C 语言的精髓，也是让无数初学者魂牵梦萦、夜不能寐的&amp;quot;罪魁祸首&amp;quot;。但别怕！看完这一章，你会拍着大腿说：&amp;ldquo;就这？&amp;rdquo;&lt;/p&gt;</description></item><item><title>第9章 指针与引用</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-09-Pointers-and-References/</link><pubDate>Sun, 29 Mar 2026 21:03:00 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-09-Pointers-and-References/</guid><description>&lt;h1 id="第9章-指针与引用"&gt;第9章 指针与引用&lt;/h1&gt;
&lt;p&gt;想象一下，你正在经营一家超大型的&lt;strong&gt;快递仓库&lt;/strong&gt;。这个仓库里有成千上万个包裹，每个包裹都放在一个特定的&lt;strong&gt;货架位置&lt;/strong&gt;上。指针就像是记录这些位置信息的&lt;strong&gt;门牌号&lt;/strong&gt;——它本身不是包裹，但它能告诉你去哪里找到那个包裹。&lt;/p&gt;</description></item><item><title>第 9 章 生命周期</title><link>https://before80.github.io/prgms/Rust/basic/Chapter-09-Lifetime/</link><pubDate>Fri, 27 Mar 2026 17:24:46 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/basic/Chapter-09-Lifetime/</guid><description>&lt;h1 id="第-9-章-生命周期深化"&gt;第 9 章 生命周期（深化）&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;在 Rust 的世界里，每一个引用都有自己的保质期，过期的引用就像超市里过期的酸奶——编译器会让你尝到什么叫&amp;rsquo;酸爽&amp;rsquo;。&amp;rdquo;&lt;/p&gt;</description></item><item><title>第9章 Vite + React 实战</title><link>https://before80.github.io/prgms/Js/tools/build/vite/Chapter-09-Vite-React/</link><pubDate>Fri, 27 Mar 2026 17:13:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/build/vite/Chapter-09-Vite-React/</guid><description>&lt;h1 id="chapter-09-vite-react"&gt;Chapter-09-Vite-React&lt;/h1&gt;
&lt;h1 id="第9章vite--react-实战"&gt;第9章：Vite + React 实战&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;React 和 Vue 是前端框架界的&amp;quot;两大巨头&amp;quot;。如果说 Vue 3 是尤雨溪的精心之作，那 React 就是 Facebook（Meta）出品的&amp;quot;老牌劲旅&amp;quot;。&lt;/p&gt;</description></item><item><title>第9章 盒模型基础</title><link>https://before80.github.io/prgms/CSS/basic/Chapter-09-Box-Model-Basics/</link><pubDate>Fri, 27 Mar 2026 16:53:00 +0800</pubDate><guid>https://before80.github.io/prgms/CSS/basic/Chapter-09-Box-Model-Basics/</guid><description>&lt;h1 id="第九章盒模型基础"&gt;第九章：盒模型基础&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;盒模型是 CSS 布局的&amp;quot;基因&amp;quot;。每一个 HTML 元素在页面上都是一个盒子，这个盒子由四个部分组成：content（内容）、padding（内边距）、border（边框）和 margin（外边距）。理解了盒模型，你就能精准控制元素的尺寸和位置——CSS 布局的精髓，全在这一章。&lt;/p&gt;</description></item><item><title>第9章 泛型</title><link>https://before80.github.io/prgms/Ts/basic/Chapter-09-Generics/</link><pubDate>Thu, 26 Mar 2026 21:05:00 +0800</pubDate><guid>https://before80.github.io/prgms/Ts/basic/Chapter-09-Generics/</guid><description>&lt;h1 id="第-9-章-泛型"&gt;第 9 章 泛型&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;泛型——Generics，英文直译是&amp;quot;通用类型&amp;quot;。但这个名字起得有点误导，因为它不是&amp;quot;通用万能&amp;quot;，而是&amp;quot;模具通用&amp;quot;。就像一个月饼模具，你可以用它做莲蓉月饼、豆沙月饼、五仁月饼——模具本身没变，但产出的月饼馅料各不相同。泛型就是 TypeScript 世界里的&amp;quot;月饼模具&amp;quot;。&lt;/p&gt;</description></item><item><title>第9章 useEffect与副作用</title><link>https://before80.github.io/prgms/Js/frameworks/react/Chapter-09-useEffect-Side-Effects/</link><pubDate>Wed, 25 Mar 2026 12:56:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/react/Chapter-09-useEffect-Side-Effects/</guid><description>&lt;h1 id="chapter-09---useeffect副作用的正确打开方式"&gt;Chapter-09 - useEffect——副作用的正确打开方式&lt;/h1&gt;
&lt;h2 id="91-useeffect-基础"&gt;9.1 useEffect 基础&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;如果把 React 组件比作一个&amp;quot;加工厂&amp;quot;，那 &lt;strong&gt;useEffect&lt;/strong&gt; 就是这个加工厂的&amp;quot;生产许可证&amp;quot;——它告诉 React：&amp;ldquo;除了正常生产产品（渲染 UI）之外，我还需要做一些别的事情，比如：采购原材料（请求数据）、处理废水废气（清理订阅）、和外面的世界打交道（操作 DOM、播放音乐、记录日志）。&amp;rdquo; useEffect 让函数组件拥有了&amp;quot;和外界互动&amp;quot;的能力。&lt;/p&gt;</description></item><item><title>第9章 setup 与 script setup</title><link>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-09-Setup/</link><pubDate>Wed, 25 Mar 2026 12:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-09-Setup/</guid><description>&lt;h1 id="第九章-setup-与-script-setup"&gt;第九章 setup 与 script setup&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;Composition API 是 Vue 3 的核心编程范式，而 setup 函数和 script setup 则是 Composition API 的主战场。这一章我们会深入理解 setup 的执行时机、this 的行为、返回值的作用，以及 script setup 这个编译器语法糖带来的便利。掌握这一章，你才算真正&amp;quot;会用&amp;quot; Vue 3。&lt;/p&gt;</description></item><item><title>第 9 章 字符串</title><link>https://before80.github.io/prgms/Js/basic/Chapter-09-String/</link><pubDate>Tue, 24 Mar 2026 22:08:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/basic/Chapter-09-String/</guid><description>&lt;h1 id="第-9-章-字符串"&gt;第 9 章 字符串&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;如果说数字是编程世界的原子，那么字符串就是分子——它们组合起来能表达一切，从&amp;quot;Hello, World!&amp;ldquo;到&amp;quot;老板，这个需求做不了&amp;rdquo;。&lt;/p&gt;</description></item><item><title>第9章：管道与重定向</title><link>https://before80.github.io/prgms/linux/cli_basic/Chapter-09-Pipes-and-Redirection/</link><pubDate>Mon, 23 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/linux/cli_basic/Chapter-09-Pipes-and-Redirection/</guid><description>&lt;h1 id="第九章管道与重定向"&gt;第九章：管道与重定向&lt;/h1&gt;
&lt;h2 id="91-什么是管道管道的作用"&gt;9.1 什么是管道（|）？管道的作用&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;管道&lt;/strong&gt;（Pipe）是 Linux 最强大的特性之一！它用 &lt;code&gt;|&lt;/code&gt; 符号连接两个命令，让&lt;strong&gt;前一个命令的输出&lt;/strong&gt;成为&lt;strong&gt;后一个命令的输入&lt;/strong&gt;。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;想象一下：你有一台果汁机，第一台机器把水果榨成汁，第二台机器把果汁过滤。管道就是这个连接两台机器的管子！&lt;/p&gt;</description></item><item><title>第9章 循环语句</title><link>https://before80.github.io/prgms/go/basic/Chapter-09-Loop-Statements/</link><pubDate>Fri, 20 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/basic/Chapter-09-Loop-Statements/</guid><description>&lt;h1 id="第9章-循环语句"&gt;第9章 循环语句&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;欢迎来到第九章！这一章我们要聊的是 Go 语言的&amp;quot;循环语句&amp;quot;。循环是什么？循环就是让程序&amp;quot;重复做一件事&amp;quot;的结构。想象一下，你每天早上起床、刷牙，洗脸、上班……这就是一个循环。程序中的循环也是如此——让计算机反复执行一段代码，直到满足某个条件才停下来。Go 语言只有一种循环关键字：&lt;code&gt;for&lt;/code&gt;，但它的用法可以变化出花来！&lt;/p&gt;</description></item><item><title>第10章 谋篇第十——明牌打不过暗牌，套路要藏在袖子里</title><link>https://before80.github.io/prgms/Philosophy/guiGuZi/10/</link><pubDate>Sat, 11 Apr 2026 21:52:00 +0800</pubDate><guid>https://before80.github.io/prgms/Philosophy/guiGuZi/10/</guid><description>&lt;h1 id="第十章-谋篇明牌打不过暗牌套路要藏在袖子里"&gt;第十章 谋篇——&amp;ldquo;明牌打不过暗牌，套路要藏在袖子里&amp;rdquo;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本章核心：谋事不靠蛮力靠布局。信息对称、多线备选、暗线推进、顺势而为，把“看不见的算盘”打成“拿得稳的胜局”。&lt;/p&gt;</description></item><item><title>第10章 打包发布</title><link>https://before80.github.io/prgms/Python/basic/Chapter-10-Packaging/</link><pubDate>Wed, 08 Apr 2026 13:22:00 +0800</pubDate><guid>https://before80.github.io/prgms/Python/basic/Chapter-10-Packaging/</guid><description>&lt;h1 id="第十章python-代码运行与打包"&gt;第十章：Python 代码运行与打包&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本章我们将化身为&amp;quot;代码快递员&amp;quot;，学会如何把 Python 代码送到用户手上——无论是自己运行、命令行调用，还是打包成.exe发给不懂代码的七大姑八大姨。&lt;/p&gt;</description></item><item><title>第10章：分支合并 —— 殊途同归的艺术</title><link>https://before80.github.io/prgms/Git/Chapter-10-Merging-Branches/</link><pubDate>Fri, 03 Apr 2026 19:36:48 +0800</pubDate><guid>https://before80.github.io/prgms/Git/Chapter-10-Merging-Branches/</guid><description>&lt;h1 id="第10章分支合并--殊途同归的艺术"&gt;第10章：分支合并 —— 殊途同归的艺术&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;分支让代码分道扬镳，合并让它们重新交汇。合并是 Git 中最重要也最复杂的操作之一——做得好，代码完美融合；做不好，冲突让人头大。本章教你成为合并大师。&lt;/p&gt;</description></item><item><title>第10章 方法（函数）——代码的复用与封装</title><link>https://before80.github.io/prgms/Java/basic/Chapter-10-methods/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-10-methods/</guid><description>&lt;h1 id="第十章-方法函数代码的复用与封装"&gt;第十章 方法（函数）——代码的复用与封装&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Don&amp;rsquo;t repeat yourself.&amp;rdquo; —— DRY 原则，程序员的第一诫&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;欢迎来到第十章！在这一章里，我们将一起探索 Java 中最最重要的概念之一——&lt;strong&gt;方法（Method）&lt;/strong&gt;。如果你把 Java 程序比作一家大型工厂，那方法就是工厂里的一条条生产线，每条生产线负责完成特定的任务。没有方法，你的代码就会变成一坨意大利面条——混乱、难以维护、让人崩溃。&lt;/p&gt;</description></item><item><title>第10章：字符是怎么存储的——Unicode 和 Unicode/UTF8</title><link>https://before80.github.io/prgms/go/std/Chapter-10-unicode/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-10-unicode/</guid><description>&lt;h1 id="第10章字符是怎么存储的unicode-和-unicodeutf8"&gt;第10章：字符是怎么存储的——Unicode 和 Unicode/UTF8&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;ldquo;程序员的三大错觉：1. 字符串长度就是字符数；2. 一个字符就是一个字节；3. emoji 不过是彩色的 ASCII。&amp;rdquo;&lt;/em&gt;&lt;/p&gt;</description></item><item><title>第 10 章：字符串处理 —— C 语言的文字魔法</title><link>https://before80.github.io/prgms/C/basic/Chapter-10-String-Handling/</link><pubDate>Sun, 29 Mar 2026 22:34:00 +0800</pubDate><guid>https://before80.github.io/prgms/C/basic/Chapter-10-String-Handling/</guid><description>&lt;h1 id="第-10-章字符串处理--c-语言的文字魔法"&gt;第 10 章：字符串处理 —— C 语言的文字魔法&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本章你会学到什么？&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;字符串的&amp;quot;真面目&amp;quot;——它其实是个披着羊皮的数组&lt;/li&gt;
&lt;li&gt;为什么你的字符串一会儿能改，一会儿不能改&lt;/li&gt;
&lt;li&gt;一堆让你又爱又恨的字符串函数，有的安全，有的危险&lt;/li&gt;
&lt;li&gt;字符串和数字之间的&amp;quot;翻译&amp;quot;技巧&lt;/li&gt;
&lt;li&gt;宽字符和 Unicode：让你的程序说&amp;quot;世界语&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;想象一下，如果你是一个厨师，字符串就是你的菜谱。菜谱上写满了各种&amp;quot;指令&amp;quot;（字符），而你（CPU）需要按照顺序一个一个&amp;quot;执行&amp;quot;它们。但是问题来了——CPU 怎么知道菜谱在哪里结束？总不能让它一直读下去读到别人的菜谱去吧？&lt;/p&gt;</description></item><item><title>第10章 动态内存管理</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-10-Dynamic-Memory/</link><pubDate>Sun, 29 Mar 2026 21:03:00 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-10-Dynamic-Memory/</guid><description>&lt;h1 id="第10章-动态内存管理"&gt;第10章 动态内存管理&lt;/h1&gt;
&lt;h2 id="101-c风格内存管理mallocfree"&gt;10.1 C风格内存管理：malloc/free&lt;/h2&gt;
&lt;p&gt;malloc和free是C语言的内存管理函数，也是C++兼容C遗产的一部分。但在现代C++中，我们应该尽量避免它们——就像你明明有自动挡汽车，却非要开个手动挡去兜风，虽然技术上可行，但纯属给自己找麻烦。&lt;/p&gt;</description></item><item><title>第 10 章 模块系统</title><link>https://before80.github.io/prgms/Rust/basic/Chapter-10-Modules/</link><pubDate>Fri, 27 Mar 2026 17:24:46 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/basic/Chapter-10-Modules/</guid><description>&lt;h1 id="第-10-章-模块系统modules"&gt;第 10 章 模块系统（Modules）&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;想象一下，如果你把所有的衣服都堆在一个大箱子里，找衣服的时候估计得翻遍整个箱子。Rust 的模块系统就是你的衣柜整理神器——把代码分类放好，想用什么就精准拿什么，再也不用翻箱倒柜了！&amp;rdquo;&lt;/p&gt;</description></item><item><title>第10章 Vite + TypeScript</title><link>https://before80.github.io/prgms/Js/tools/build/vite/Chapter-10-Vite-TypeScript/</link><pubDate>Fri, 27 Mar 2026 17:13:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/build/vite/Chapter-10-Vite-TypeScript/</guid><description>&lt;h1 id="chapter-10-vite-typescript"&gt;Chapter-10-Vite-TypeScript&lt;/h1&gt;
&lt;h1 id="第10章vite--typescript"&gt;第10章：Vite + TypeScript&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;TypeScript——JavaScript 的超集，为 JavaScript 添加了静态类型系统。&lt;/p&gt;
&lt;p&gt;很多人一开始觉得 TypeScript 麻烦，每次写代码都要定义类型。但当你写过几个大型项目后，就会发现：TypeScript 的&amp;quot;前期麻烦&amp;quot;能换来&amp;quot;后期的省心&amp;quot;——类型错误在编译时就发现了，而不是等到线上出 BUG。&lt;/p&gt;</description></item><item><title>第10章 盒尺寸</title><link>https://before80.github.io/prgms/CSS/basic/Chapter-10-Box-Sizing/</link><pubDate>Fri, 27 Mar 2026 16:53:00 +0800</pubDate><guid>https://before80.github.io/prgms/CSS/basic/Chapter-10-Box-Sizing/</guid><description>&lt;h1 id="第十章box-sizing"&gt;第十章：box-sizing&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;box-sizing 属性决定了元素的尺寸是如何计算的。没有它，你永远算不准元素的实际宽度——padding 加了、border 加了，元素就像打了激素一样越来越宽。学会它，你就是布局界的&amp;quot;精确制导&amp;quot;！&lt;/p&gt;</description></item><item><title>第10章 类与面向对象</title><link>https://before80.github.io/prgms/Ts/basic/Chapter-10-Classes-and-Object-Oriented-Programming/</link><pubDate>Thu, 26 Mar 2026 21:05:00 +0800</pubDate><guid>https://before80.github.io/prgms/Ts/basic/Chapter-10-Classes-and-Object-Oriented-Programming/</guid><description>&lt;h1 id="第-10-章-类与面向对象"&gt;第 10 章 类与面向对象&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;如果说 TypeScript 是一门语言，那类就是这门语言的&amp;quot;贵族血统&amp;quot;——它把 JavaScript 从&amp;quot;草根函数联盟&amp;quot;一下子拉到了&amp;quot;面向对象殿堂&amp;quot;。但别被唬住了，TypeScript 的类其实就是一个&lt;strong&gt;带类型注解的构造函数语法糖&lt;/strong&gt;，理解了这一点，就没什么好怕的。&lt;/p&gt;</description></item><item><title>第10章 useState深入与自定义Hooks</title><link>https://before80.github.io/prgms/Js/frameworks/react/Chapter-10-useState-Deep-Dive-and-Custom-Hooks/</link><pubDate>Wed, 25 Mar 2026 12:56:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/react/Chapter-10-useState-Deep-Dive-and-Custom-Hooks/</guid><description>&lt;h1 id="chapter-10---usestate-深入与自定义-hook"&gt;Chapter-10 - useState 深入与自定义 Hook&lt;/h1&gt;
&lt;h2 id="101-函数式更新"&gt;10.1 函数式更新&lt;/h2&gt;
&lt;h3 id="1011-什么是函数式更新setstateprevstate--"&gt;10.1.1 什么是函数式更新：&lt;code&gt;setState(prevState =&amp;gt; ...)&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;函数式更新是 &lt;code&gt;setState&lt;/code&gt; 的一种特殊用法——传入一个以&lt;strong&gt;前一个状态&lt;/strong&gt;为参数的函数，返回新的状态。&lt;/p&gt;</description></item><item><title>第10章 响应式 API 进阶</title><link>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-10-Reactivity-Advanced/</link><pubDate>Wed, 25 Mar 2026 12:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-10-Reactivity-Advanced/</guid><description>&lt;h1 id="第十章-响应式-api-进阶"&gt;第十章 响应式 API 进阶&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;ref 和 reactive 只是 Vue 响应式系统的&amp;quot;入门 API&amp;quot;。这一章我们来探索更深层的东西——shallowRef、shallowReactive、markRaw、toRaw、readonly、customRef……以及 watch 的各种高级用法、nextTick 的原理。读完这一章，你对 Vue 响应式系统的理解会从&amp;quot;会用&amp;quot;升级到&amp;quot;理解原理&amp;quot;。&lt;/p&gt;</description></item><item><title>第 10 章 数学与数值</title><link>https://before80.github.io/prgms/Js/basic/Chapter-10-Math-and-Number/</link><pubDate>Tue, 24 Mar 2026 22:08:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/basic/Chapter-10-Math-and-Number/</guid><description>&lt;h1 id="第-10-章-数学与数值"&gt;第 10 章 数学与数值&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;学好数学，走遍天下都不怕！——虽然大多数程序员只需要加减乘除，但 &lt;code&gt;Math&lt;/code&gt; 对象告诉我们：JavaScript 的数学库比你想象的要强大得多。&lt;/p&gt;</description></item><item><title>第10章：压缩与归档</title><link>https://before80.github.io/prgms/linux/cli_basic/Chapter-10-Compression-and-Archiving/</link><pubDate>Mon, 23 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/linux/cli_basic/Chapter-10-Compression-and-Archiving/</guid><description>&lt;h1 id="第十章压缩与归档"&gt;第十章：压缩与归档&lt;/h1&gt;
&lt;h2 id="101-tar-打包命令"&gt;10.1 tar 打包命令&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;tar&lt;/strong&gt; = &lt;strong&gt;T&lt;/strong&gt;ape &lt;strong&gt;AR&lt;/strong&gt;chive，磁带归档。这是 Linux 中最经典的归档工具，诞生于磁带机时代。虽然现在没人用磁带了，但 tar 依然是最常用的打包工具！&lt;/p&gt;
&lt;h3 id="1011-tar--cvf-archivetar-目录打包"&gt;10.1.1 tar -cvf archive.tar 目录：打包&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 语法：tar -cvf 归档文件名 要归档的目录&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# -c = create，创建归档&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# -v = verbose，显示过程&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# -f = file，指定归档文件名&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 示例：把 documents 目录打包成 archive.tar&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tar -cvf archive.tar documents/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 输出：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# documents/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# documents/file1.txt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# documents/file2.txt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# documents/subdir/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# documents/subdir/file3.txt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;小技巧：归档文件名的后缀建议用 &lt;code&gt;.tar&lt;/code&gt;，这是一个约定俗成的命名习惯！&lt;/p&gt;</description></item><item><title>第10章 选择语句</title><link>https://before80.github.io/prgms/go/basic/Chapter-10-Select-Statements/</link><pubDate>Fri, 20 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/basic/Chapter-10-Select-Statements/</guid><description>&lt;h1 id="第10章-选择语句"&gt;第10章 选择语句&lt;/h1&gt;
&lt;h2 id="101-select-语句"&gt;10.1 select 语句&lt;/h2&gt;
&lt;h3 id="1011-select-语法"&gt;10.1.1 select 语法&lt;/h3&gt;
&lt;p&gt;想象这样一个场景：你是一个婚礼司仪，面前站着三个伴郎，每个伴郎手里都攥着给新娘的表白信。但新娘只有一个，而且她有&amp;quot;选择困难症晚期&amp;quot;——她不想一个个问&amp;quot;你有什么要说的吗&amp;quot;，她只想知道：&amp;ldquo;谁先开口，我就嫁给谁。&amp;rdquo;&lt;/p&gt;</description></item><item><title>第11章 决篇——犹豫是机会的毒药，果断是破局的解药</title><link>https://before80.github.io/prgms/Philosophy/guiGuZi/11/</link><pubDate>Sat, 11 Apr 2026 21:52:00 +0800</pubDate><guid>https://before80.github.io/prgms/Philosophy/guiGuZi/11/</guid><description>&lt;h1 id="第十一章-决篇犹豫是机会的毒药果断是破局的解药"&gt;第十一章 决篇——&amp;ldquo;犹豫是机会的毒药，果断是破局的解药&amp;rdquo;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本章核心：决策的本质是消除疑虑、权衡利弊、敢于拍板。看清风险收益比，该出手时别手软，该止损时别回头。&lt;/p&gt;</description></item><item><title>黄石公素书(张商英注本)</title><link>https://before80.github.io/prgms/Philosophy/suShu/Appendix-4-yuanban/</link><pubDate>Thu, 09 Apr 2026 10:58:00 +0800</pubDate><guid>https://before80.github.io/prgms/Philosophy/suShu/Appendix-4-yuanban/</guid><description>&lt;h2 id="序"&gt;序&lt;/h2&gt;
&lt;p&gt;​	黄石公《素书》六篇，按《前汉》列传，黄石公圯桥所授子房书，世人多以三略为是，盖传之者误也。晋乱，有盗发子房冢，於玉枕中获此书，凡一千三百三十六言，上有秘戒，不许传於不道、不神、不圣、不贤之人。若非其人，必受其殃；得人不传，亦受其殃。呜呼，其慎重如此。黄石公得子房而传之，子房不得其传而葬之。后五百余年而盗获之，自是《素书》始传於人间。然其传者特黄石公之言耳，而公之意，其可以言尽哉。窃尝评之：天人之道未尝不相为用，古之圣皆尽心焉。尧钦若昊天，舜齐七政，禹叙九畴，传说陈天道，文王重八卦，周公设天地四时之官，又立三公以燮理阴阳，孔子欲无言，老聃建之以常无有。《阴符经》曰：宇宙在乎手，万化生乎身。道至於此，则鬼神变化皆不逃吾之术，而况於刑名度数之间者欤？黄石公，秦之隐君子也。其书简，其意深，虽尧、舜、禹、文、傅说、周公、孔、老亦无以出此矣。然则黄石公知秦之将亡，汉之将兴，故以此书授子房。而子房岂能尽知其书哉？凡子房之所以为子房者，仅能用其一二耳。书曰：阴计外泄者败。子房用之，尝劝高帝王韩信矣。书曰：小怨不赦，大怨必生。子房用之，尝劝高帝侯雍齿矣。书曰：决策於不仁者险。子房用之，尝劝高帝罢封六国矣。书曰：设变致权，所以解结。子房用之，尝致四皓而立惠帝矣。书曰：吉莫吉於知足。子房用之，尝择留自封矣。书曰：绝嗜禁欲，所以除累。子房用之，尝弃人间事，从赤松子游矣。嗟乎，遗粕弃滓，犹足以亡秦、项而帝沛公，况纯而用之、深而造之者乎？自汉以来，章句文词之学炽，而知道之士极少。如诸葛亮、王猛、房乔、裴度等辈，虽号为一时贤相，至於先王大道，曾未足以知，髣髴此书所以不传於不道、不神、不圣、不贤之人也。离有离无之谓道，非有非无之谓神，有而无之之谓圣，无而有之之谓贤。非此四者，虽口诵此书，亦不能身行之矣。张商英天觉序。&lt;/p&gt;</description></item><item><title>第11章 基础语法</title><link>https://before80.github.io/prgms/Python/basic/Chapter-11-Basic-Syntax/</link><pubDate>Wed, 08 Apr 2026 13:22:00 +0800</pubDate><guid>https://before80.github.io/prgms/Python/basic/Chapter-11-Basic-Syntax/</guid><description>&lt;p&gt;第十一章 Python 基础语法&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;想象一下，如果厨房里每种食材都有自己的性格，那 Python 就是那个最友好、最随和的大厨——它的语法简单到连厨房小白都能看懂。本章我们就来认识这位大厨的基本功，从第一道&amp;quot;Hello, World!&amp;ldquo;开始，一步步走进 Python 的世界。&lt;/p&gt;</description></item><item><title>第11章：远程仓库入门 —— 代码的云端家园</title><link>https://before80.github.io/prgms/Git/Chapter-11-Remote-Repository-Basics/</link><pubDate>Fri, 03 Apr 2026 19:36:48 +0800</pubDate><guid>https://before80.github.io/prgms/Git/Chapter-11-Remote-Repository-Basics/</guid><description>&lt;h1 id="第11章远程仓库入门--代码的云端家园"&gt;第11章：远程仓库入门 —— 代码的云端家园&lt;/h1&gt;
&lt;p&gt;欢迎来到第11章！如果你之前的Git学习像是在自家后花园里种花，那么这一章我们要把你的花搬到广场上去展示了。远程仓库，就是程序员的&amp;quot;云端豪宅&amp;quot;，让你的代码不再孤单地躺在本地硬盘里吃灰。&lt;/p&gt;</description></item><item><title>第11章 数组——数据的容器</title><link>https://before80.github.io/prgms/Java/basic/Chapter-11-arrays/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-11-arrays/</guid><description>&lt;h1 id="第十一章-数组数据的容器"&gt;第十一章 数组——数据的容器&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;🎭 &lt;strong&gt;导演说&lt;/strong&gt;：想象你是一名酒店前台管理员。如果每位客人都要你记住他的名字、房间号、喜好、入住日期&amp;hellip;恭喜你，你的大脑会原地爆炸。数组就是那个让你优雅地管理&amp;quot;一群相关数据&amp;quot;的超级武器！&lt;/p&gt;</description></item><item><title>第11章：字符串操作——strings 包</title><link>https://before80.github.io/prgms/go/std/Chapter-11-strings/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-11-strings/</guid><description>&lt;h1 id="第11章字符串操作strings-包"&gt;第11章：字符串操作——strings 包&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;在 Go 的世界里，字符串是 immutable（不可变）的字节序列，听起来很限制对吧？但正是这种设计，让 strings 包成为了处理文本的瑞士军刀——稳定、可靠、从不闹脾气。&amp;rdquo;&lt;/p&gt;</description></item><item><title>第 11 章：结构体、共用体与枚举</title><link>https://before80.github.io/prgms/C/basic/Chapter-11-Structures-Unions-Enums/</link><pubDate>Sun, 29 Mar 2026 22:34:00 +0800</pubDate><guid>https://before80.github.io/prgms/C/basic/Chapter-11-Structures-Unions-Enums/</guid><description>&lt;h1 id="第-11-章结构体共用体与枚举"&gt;第 11 章：结构体、共用体与枚举&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;数据结构学得好，C 语言就学会了一大半。&amp;rdquo; —— 某位不愿意透露姓名的 C 语言老师&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;欢迎来到 C 语言最&amp;quot;成人&amp;quot;的一章！前面我们学的数组，就像是一个装满相同类型鸡蛋的盒子。但现实世界的数据可不是这么单纯的——你的人口普查表里，有姓名（字符串）、年龄（整数）、身高（浮点数）、血型（枚举）……这些乱七八糟的东西，怎么塞进一个整齐的数组里？&lt;/p&gt;</description></item><item><title>第11章 类与对象基础</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-11-Classes-and-Objects-Basics/</link><pubDate>Sun, 29 Mar 2026 21:03:00 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-11-Classes-and-Objects-Basics/</guid><description>&lt;h1 id="第11章-类与对象基础"&gt;第11章 类与对象基础&lt;/h1&gt;
&lt;h2 id="111-面向对象编程概述"&gt;11.1 面向对象编程概述&lt;/h2&gt;
&lt;p&gt;嘿，未来的C++大师！在正式踏入类的世界之前，咱们先来聊聊面向对象编程（Object-Oriented Programming，简称OOP）这个听起来很高大上的概念。别担心，我会把它解释得连你家的猫都能听懂——如果你的猫恰好会编程的话。&lt;/p&gt;</description></item><item><title>第 11 章 Cargo 与项目管理</title><link>https://before80.github.io/prgms/Rust/basic/Chapter-11-Cargo/</link><pubDate>Fri, 27 Mar 2026 17:24:46 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/basic/Chapter-11-Cargo/</guid><description>&lt;h1 id="第-11-章-cargo-与项目管理"&gt;第 11 章 Cargo 与项目管理&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;如果 Rust 是一门武侠小说，那 Cargo 就是那个帮你打怪升级、买装备、加buff的超级NPC。没有 Cargo，你得自己造剑、自己磨刀、自己找秘籍。有了 Cargo，你只需要喊一声&amp;rsquo;cargo build&amp;rsquo;，装备就到手了！&amp;rdquo;&lt;/p&gt;</description></item><item><title>第11章 开发服务器进阶</title><link>https://before80.github.io/prgms/Js/tools/build/vite/Chapter-11-Development-Server-Advanced/</link><pubDate>Fri, 27 Mar 2026 17:13:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/build/vite/Chapter-11-Development-Server-Advanced/</guid><description>&lt;h1 id="chapter-11-development-server-advanced"&gt;Chapter-11-Development-Server-Advanced&lt;/h1&gt;
&lt;h1 id="第11章开发服务器进阶"&gt;第11章：开发服务器进阶&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;恭喜你已经掌握了 Vite 的基础用法，能跑起来、能热更新、能把项目跑起来不报错——这已经很棒了！但如果你的目标是&amp;quot;专业级&amp;quot;前端开发者，那这一章就是你的必经之路。&lt;/p&gt;</description></item><item><title>第11章 文本与字体属性</title><link>https://before80.github.io/prgms/CSS/basic/Chapter-11-Text-and-Font-Properties/</link><pubDate>Fri, 27 Mar 2026 16:53:00 +0800</pubDate><guid>https://before80.github.io/prgms/CSS/basic/Chapter-11-Text-and-Font-Properties/</guid><description>&lt;h1 id="第十一章文字与字体属性"&gt;第十一章：文字与字体属性&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;文字是网页的灵魂，字体是文字的外衣。学会控制文字和字体，你的网页就不再是&amp;quot;千篇一律的系统默认字体&amp;quot;，而是独具特色的品牌视觉。&lt;/p&gt;</description></item><item><title>第11章 模块系统与声明文件</title><link>https://before80.github.io/prgms/Ts/basic/Chapter-11-Module-System-and-Declaration-Files/</link><pubDate>Thu, 26 Mar 2026 21:05:00 +0800</pubDate><guid>https://before80.github.io/prgms/Ts/basic/Chapter-11-Module-System-and-Declaration-Files/</guid><description>&lt;h1 id="第-11-章-模块系统与声明文件"&gt;第 11 章 模块系统与声明文件&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;如果说 TypeScript 是一座繁华的城市，模块系统就是城市的交通网络——没有它，所有的代码都挤在同一条马路上，乱成一锅粥。模块系统让你把代码拆分成独立的小区，每个小区有自己的出入口（导入/导出），互不干扰，各司其职。&lt;/p&gt;</description></item><item><title>第11章 useContext与跨组件传值</title><link>https://before80.github.io/prgms/Js/frameworks/react/Chapter-11-useContext-and-Cross-Component-Data-Passing/</link><pubDate>Wed, 25 Mar 2026 12:56:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/react/Chapter-11-useContext-and-Cross-Component-Data-Passing/</guid><description>&lt;h1 id="chapter-11---usecontext-与跨层级数据传递"&gt;Chapter-11 - useContext 与跨层级数据传递&lt;/h1&gt;
&lt;h2 id="111-context-基础"&gt;11.1 Context 基础&lt;/h2&gt;
&lt;h3 id="1111-props-层层传递的痛苦props-drilling"&gt;11.1.1 Props 层层传递的痛苦：Props Drilling&lt;/h3&gt;
&lt;p&gt;在第六章我们学过，数据通过 props 从父组件传给子组件。但如果组件嵌套得很深（层级很多），数据就需要一层一层地往下传——这叫 &lt;strong&gt;Props Drilling&lt;/strong&gt;（props 层层向下钻）。&lt;/p&gt;</description></item><item><title>第11章 组合式函数（Composables）</title><link>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-11-Composables/</link><pubDate>Wed, 25 Mar 2026 12:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-11-Composables/</guid><description>&lt;h1 id="第十一章-组合式函数composables"&gt;第十一章 组合式函数（Composables）&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;Composables（组合式函数）是 Vue 3 最重要的代码复用模式。如果说 Props/Emit/Slots 是组件级别的复用，那 Composables 就是&amp;quot;逻辑级别的复用&amp;quot;——把相关的逻辑抽取到独立的函数里，让组件保持简洁和专注。这一章我们会深入学习如何编写 Composables，以及 VueUse 等常用组合式库。&lt;/p&gt;</description></item><item><title>第 11 章 函数基础</title><link>https://before80.github.io/prgms/Js/basic/Chapter-11-Functions/</link><pubDate>Tue, 24 Mar 2026 22:08:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/basic/Chapter-11-Functions/</guid><description>&lt;h1 id="第-11-章-函数基础"&gt;第 11 章 函数基础&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;函数是 JavaScript 的灵魂——没有函数的 JavaScript，就像没有调料的方便面，能吃，但总觉得少了点什么。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="111-函数定义"&gt;11.1 函数定义&lt;/h2&gt;
&lt;h3 id="函数声明function-关键字存在提升"&gt;函数声明：function 关键字，存在提升&lt;/h3&gt;
&lt;p&gt;函数声明是最传统的定义函数的方式，就像写简历一样正式——用 &lt;code&gt;function&lt;/code&gt; 关键字，后面跟函数名（必须有）：&lt;/p&gt;</description></item><item><title>第11章：文件系统基础</title><link>https://before80.github.io/prgms/linux/file_system_basic/Chapter-11-Filesystem-Basics/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/file_system_basic/Chapter-11-Filesystem-Basics/</guid><description>&lt;h1 id="第十一章文件系统基础"&gt;第十一章：文件系统基础&lt;/h1&gt;
&lt;h2 id="111-什么是文件系统文件系统的作用"&gt;11.1 什么是文件系统？文件系统的作用&lt;/h2&gt;
&lt;p&gt;想象一下：你有一个超级大的仓库，里面堆满了各种各样的货物。有家具、有食物、有衣服、还有你高中时偷偷藏起来的情书&amp;hellip;但是！这个仓库&lt;strong&gt;没有任何架子、没有标签、没有任何整理系统&lt;/strong&gt;！&lt;/p&gt;</description></item><item><title>第11章 跳转语句</title><link>https://before80.github.io/prgms/go/basic/Chapter-11-Jump-Statements/</link><pubDate>Fri, 20 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/basic/Chapter-11-Jump-Statements/</guid><description>&lt;h1 id="第11章-跳转语句"&gt;第11章 跳转语句&lt;/h1&gt;
&lt;h2 id="111-goto-语句"&gt;11.1 goto 语句&lt;/h2&gt;
&lt;h3 id="1111-语法规则"&gt;11.1.1 语法规则&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;goto 是什么？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;goto&lt;/code&gt; 是编程语言中最古老、最简单、同时也是最&amp;quot;人人喊打&amp;quot;的一个跳转语句。它的原理粗暴得像个野蛮人——直接告诉电脑：&amp;ldquo;别废话，跳到那个标签那里去执行！&amp;rdquo;&lt;/p&gt;</description></item><item><title>第12章 符言——慌得越快错得越惨，稳得住才能坐得久</title><link>https://before80.github.io/prgms/Philosophy/guiGuZi/12/</link><pubDate>Sat, 11 Apr 2026 21:52:00 +0800</pubDate><guid>https://before80.github.io/prgms/Philosophy/guiGuZi/12/</guid><description>&lt;h1 id="第十二章-符言慌得越快错得越惨稳得住才能坐得久"&gt;第十二章 符言——&amp;ldquo;慌得越快错得越惨，稳得住才能坐得久&amp;rdquo;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本章核心：领导力不是发号施令，是&amp;quot;明察、守信、问策、周详、名实相符&amp;quot;。守住内核、织密信息网、赏罚分明，团队自然为你卖命。&lt;/p&gt;</description></item><item><title>黄石公素书(张商英注本) 注音版</title><link>https://before80.github.io/prgms/Philosophy/suShu/Appendix-5-zhuyin/</link><pubDate>Thu, 09 Apr 2026 10:58:00 +0800</pubDate><guid>https://before80.github.io/prgms/Philosophy/suShu/Appendix-5-zhuyin/</guid><description>&lt;h2 id="序"&gt;序&lt;/h2&gt;
&lt;p&gt;&lt;ruby&gt;&lt;rb&gt;黄&lt;/rb&gt;&lt;rt&gt;huáng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;石&lt;/rb&gt;&lt;rt&gt;shí&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;公&lt;/rb&gt;&lt;rt&gt;gōng&lt;/rt&gt;&lt;/ruby&gt;《&lt;ruby&gt;&lt;rb&gt;素&lt;/rb&gt;&lt;rt&gt;sù&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;书&lt;/rb&gt;&lt;rt&gt;shū&lt;/rt&gt;&lt;/ruby&gt;》&lt;ruby&gt;&lt;rb&gt;六&lt;/rb&gt;&lt;rt&gt;liù&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;篇&lt;/rb&gt;&lt;rt&gt;piān&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;按&lt;/rb&gt;&lt;rt&gt;àn&lt;/rt&gt;&lt;/ruby&gt;《&lt;ruby&gt;&lt;rb&gt;前&lt;/rb&gt;&lt;rt&gt;qián&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;汉&lt;/rb&gt;&lt;rt&gt;hàn&lt;/rt&gt;&lt;/ruby&gt;》&lt;ruby&gt;&lt;rb&gt;列&lt;/rb&gt;&lt;rt&gt;liè&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;传&lt;/rb&gt;&lt;rt&gt;zhuàn&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;黄&lt;/rb&gt;&lt;rt&gt;huáng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;石&lt;/rb&gt;&lt;rt&gt;shí&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;公&lt;/rb&gt;&lt;rt&gt;gōng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;圯&lt;/rb&gt;&lt;rt&gt;yí&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;桥&lt;/rb&gt;&lt;rt&gt;qiáo&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;所&lt;/rb&gt;&lt;rt&gt;suǒ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;授&lt;/rb&gt;&lt;rt&gt;shòu&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;子&lt;/rb&gt;&lt;rt&gt;zǐ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;房&lt;/rb&gt;&lt;rt&gt;fáng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;书&lt;/rb&gt;&lt;rt&gt;shū&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;世&lt;/rb&gt;&lt;rt&gt;shì&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;人&lt;/rb&gt;&lt;rt&gt;rén&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;多&lt;/rb&gt;&lt;rt&gt;duō&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;以&lt;/rb&gt;&lt;rt&gt;yǐ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;三&lt;/rb&gt;&lt;rt&gt;sān&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;略&lt;/rb&gt;&lt;rt&gt;lüè&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;为&lt;/rb&gt;&lt;rt&gt;wéi&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;是&lt;/rb&gt;&lt;rt&gt;shì&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;盖&lt;/rb&gt;&lt;rt&gt;gài&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;传&lt;/rb&gt;&lt;rt&gt;chuán&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;之&lt;/rb&gt;&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;者&lt;/rb&gt;&lt;rt&gt;zhě&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;误&lt;/rb&gt;&lt;rt&gt;wù&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;也&lt;/rb&gt;&lt;rt&gt;yě&lt;/rt&gt;&lt;/ruby&gt;。&lt;ruby&gt;&lt;rb&gt;晋&lt;/rb&gt;&lt;rt&gt;jìn&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;乱&lt;/rb&gt;&lt;rt&gt;luàn&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;有&lt;/rb&gt;&lt;rt&gt;yǒu&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;盗&lt;/rb&gt;&lt;rt&gt;dào&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;发&lt;/rb&gt;&lt;rt&gt;fā&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;子&lt;/rb&gt;&lt;rt&gt;zǐ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;房&lt;/rb&gt;&lt;rt&gt;fáng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;冢&lt;/rb&gt;&lt;rt&gt;zhǒng&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;於&lt;/rb&gt;&lt;rt&gt;yú&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;玉&lt;/rb&gt;&lt;rt&gt;yù&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;枕&lt;/rb&gt;&lt;rt&gt;zhěn&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;中&lt;/rb&gt;&lt;rt&gt;zhōng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;获&lt;/rb&gt;&lt;rt&gt;huò&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;此&lt;/rb&gt;&lt;rt&gt;cǐ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;书&lt;/rb&gt;&lt;rt&gt;shū&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;凡&lt;/rb&gt;&lt;rt&gt;fán&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;一&lt;/rb&gt;&lt;rt&gt;yī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;千&lt;/rb&gt;&lt;rt&gt;qiān&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;三&lt;/rb&gt;&lt;rt&gt;sān&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;百&lt;/rb&gt;&lt;rt&gt;bǎi&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;三&lt;/rb&gt;&lt;rt&gt;sān&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;十&lt;/rb&gt;&lt;rt&gt;shí&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;六&lt;/rb&gt;&lt;rt&gt;liù&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;言&lt;/rb&gt;&lt;rt&gt;yán&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;上&lt;/rb&gt;&lt;rt&gt;shàng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;有&lt;/rb&gt;&lt;rt&gt;yǒu&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;秘&lt;/rb&gt;&lt;rt&gt;mì&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;戒&lt;/rb&gt;&lt;rt&gt;jiè&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;不&lt;/rb&gt;&lt;rt&gt;bù&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;许&lt;/rb&gt;&lt;rt&gt;xǔ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;传&lt;/rb&gt;&lt;rt&gt;chuán&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;於&lt;/rb&gt;&lt;rt&gt;yú&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;不&lt;/rb&gt;&lt;rt&gt;bù&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;道&lt;/rb&gt;&lt;rt&gt;dào&lt;/rt&gt;&lt;/ruby&gt;、&lt;ruby&gt;&lt;rb&gt;不&lt;/rb&gt;&lt;rt&gt;bù&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;神&lt;/rb&gt;&lt;rt&gt;shén&lt;/rt&gt;&lt;/ruby&gt;、&lt;ruby&gt;&lt;rb&gt;不&lt;/rb&gt;&lt;rt&gt;bù&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;圣&lt;/rb&gt;&lt;rt&gt;shèng&lt;/rt&gt;&lt;/ruby&gt;、&lt;ruby&gt;&lt;rb&gt;不&lt;/rb&gt;&lt;rt&gt;bù&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;贤&lt;/rb&gt;&lt;rt&gt;xián&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;之&lt;/rb&gt;&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;人&lt;/rb&gt;&lt;rt&gt;rén&lt;/rt&gt;&lt;/ruby&gt;。&lt;ruby&gt;&lt;rb&gt;若&lt;/rb&gt;&lt;rt&gt;ruò&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;非&lt;/rb&gt;&lt;rt&gt;fēi&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;其&lt;/rb&gt;&lt;rt&gt;qí&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;人&lt;/rb&gt;&lt;rt&gt;rén&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;必&lt;/rb&gt;&lt;rt&gt;bì&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;受&lt;/rb&gt;&lt;rt&gt;shòu&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;其&lt;/rb&gt;&lt;rt&gt;qí&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;殃&lt;/rb&gt;&lt;rt&gt;yāng&lt;/rt&gt;&lt;/ruby&gt;；&lt;ruby&gt;&lt;rb&gt;得&lt;/rb&gt;&lt;rt&gt;dé&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;人&lt;/rb&gt;&lt;rt&gt;rén&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;不&lt;/rb&gt;&lt;rt&gt;bù&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;传&lt;/rb&gt;&lt;rt&gt;chuán&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;亦&lt;/rb&gt;&lt;rt&gt;yì&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;受&lt;/rb&gt;&lt;rt&gt;shòu&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;其&lt;/rb&gt;&lt;rt&gt;qí&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;殃&lt;/rb&gt;&lt;rt&gt;yāng&lt;/rt&gt;&lt;/ruby&gt;。&lt;ruby&gt;&lt;rb&gt;呜&lt;/rb&gt;&lt;rt&gt;wū&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;呼&lt;/rb&gt;&lt;rt&gt;hū&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;其&lt;/rb&gt;&lt;rt&gt;qí&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;慎&lt;/rb&gt;&lt;rt&gt;shèn&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;重&lt;/rb&gt;&lt;rt&gt;zhòng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;如&lt;/rb&gt;&lt;rt&gt;rú&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;此&lt;/rb&gt;&lt;rt&gt;cǐ&lt;/rt&gt;&lt;/ruby&gt;。&lt;ruby&gt;&lt;rb&gt;黄&lt;/rb&gt;&lt;rt&gt;huáng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;石&lt;/rb&gt;&lt;rt&gt;shí&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;公&lt;/rb&gt;&lt;rt&gt;gōng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;得&lt;/rb&gt;&lt;rt&gt;dé&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;子&lt;/rb&gt;&lt;rt&gt;zǐ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;房&lt;/rb&gt;&lt;rt&gt;fáng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;而&lt;/rb&gt;&lt;rt&gt;ér&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;传&lt;/rb&gt;&lt;rt&gt;chuán&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;之&lt;/rb&gt;&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;子&lt;/rb&gt;&lt;rt&gt;zǐ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;房&lt;/rb&gt;&lt;rt&gt;fáng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;不&lt;/rb&gt;&lt;rt&gt;bù&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;得&lt;/rb&gt;&lt;rt&gt;dé&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;其&lt;/rb&gt;&lt;rt&gt;qí&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;传&lt;/rb&gt;&lt;rt&gt;zhuàn&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;而&lt;/rb&gt;&lt;rt&gt;ér&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;葬&lt;/rb&gt;&lt;rt&gt;zàng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;之&lt;/rb&gt;&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt;。&lt;ruby&gt;&lt;rb&gt;后&lt;/rb&gt;&lt;rt&gt;hòu&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;五&lt;/rb&gt;&lt;rt&gt;wǔ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;百&lt;/rb&gt;&lt;rt&gt;bǎi&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;余&lt;/rb&gt;&lt;rt&gt;yú&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;年&lt;/rb&gt;&lt;rt&gt;nián&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;而&lt;/rb&gt;&lt;rt&gt;ér&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;盗&lt;/rb&gt;&lt;rt&gt;dào&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;获&lt;/rb&gt;&lt;rt&gt;huò&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;之&lt;/rb&gt;&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;自&lt;/rb&gt;&lt;rt&gt;zì&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;是&lt;/rb&gt;&lt;rt&gt;shì&lt;/rt&gt;&lt;/ruby&gt;《&lt;ruby&gt;&lt;rb&gt;素&lt;/rb&gt;&lt;rt&gt;sù&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;书&lt;/rb&gt;&lt;rt&gt;shū&lt;/rt&gt;&lt;/ruby&gt;》&lt;ruby&gt;&lt;rb&gt;始&lt;/rb&gt;&lt;rt&gt;shǐ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;传&lt;/rb&gt;&lt;rt&gt;chuán&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;於&lt;/rb&gt;&lt;rt&gt;yú&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;人&lt;/rb&gt;&lt;rt&gt;rén&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;间&lt;/rb&gt;&lt;rt&gt;jiān&lt;/rt&gt;&lt;/ruby&gt;。&lt;ruby&gt;&lt;rb&gt;然&lt;/rb&gt;&lt;rt&gt;rán&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;其&lt;/rb&gt;&lt;rt&gt;qí&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;传&lt;/rb&gt;&lt;rt&gt;chuán&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;者&lt;/rb&gt;&lt;rt&gt;zhě&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;特&lt;/rb&gt;&lt;rt&gt;tè&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;黄&lt;/rb&gt;&lt;rt&gt;huáng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;石&lt;/rb&gt;&lt;rt&gt;shí&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;公&lt;/rb&gt;&lt;rt&gt;gōng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;之&lt;/rb&gt;&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;言&lt;/rb&gt;&lt;rt&gt;yán&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;耳&lt;/rb&gt;&lt;rt&gt;ěr&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;而&lt;/rb&gt;&lt;rt&gt;ér&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;公&lt;/rb&gt;&lt;rt&gt;gōng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;之&lt;/rb&gt;&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;意&lt;/rb&gt;&lt;rt&gt;yì&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;其&lt;/rb&gt;&lt;rt&gt;qí&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;可&lt;/rb&gt;&lt;rt&gt;kě&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;以&lt;/rb&gt;&lt;rt&gt;yǐ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;言&lt;/rb&gt;&lt;rt&gt;yán&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;尽&lt;/rb&gt;&lt;rt&gt;jìn&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;哉&lt;/rb&gt;&lt;rt&gt;zāi&lt;/rt&gt;&lt;/ruby&gt;？&lt;ruby&gt;&lt;rb&gt;窃&lt;/rb&gt;&lt;rt&gt;qiè&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;尝&lt;/rb&gt;&lt;rt&gt;cháng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;评&lt;/rb&gt;&lt;rt&gt;píng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;之&lt;/rb&gt;&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt;：&lt;ruby&gt;&lt;rb&gt;天&lt;/rb&gt;&lt;rt&gt;tiān&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;人&lt;/rb&gt;&lt;rt&gt;rén&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;之&lt;/rb&gt;&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;道&lt;/rb&gt;&lt;rt&gt;dào&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;未&lt;/rb&gt;&lt;rt&gt;wèi&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;尝&lt;/rb&gt;&lt;rt&gt;cháng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;不&lt;/rb&gt;&lt;rt&gt;bù&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;相&lt;/rb&gt;&lt;rt&gt;xiāng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;为&lt;/rb&gt;&lt;rt&gt;wéi&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;用&lt;/rb&gt;&lt;rt&gt;yòng&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;古&lt;/rb&gt;&lt;rt&gt;gǔ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;之&lt;/rb&gt;&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;圣&lt;/rb&gt;&lt;rt&gt;shèng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;皆&lt;/rb&gt;&lt;rt&gt;jiē&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;尽&lt;/rb&gt;&lt;rt&gt;jìn&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;心&lt;/rb&gt;&lt;rt&gt;xīn&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;焉&lt;/rb&gt;&lt;rt&gt;yān&lt;/rt&gt;&lt;/ruby&gt;。&lt;ruby&gt;&lt;rb&gt;尧&lt;/rb&gt;&lt;rt&gt;yáo&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;钦&lt;/rb&gt;&lt;rt&gt;qīn&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;若&lt;/rb&gt;&lt;rt&gt;ruò&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;昊&lt;/rb&gt;&lt;rt&gt;hào&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;天&lt;/rb&gt;&lt;rt&gt;tiān&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;舜&lt;/rb&gt;&lt;rt&gt;shùn&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;齐&lt;/rb&gt;&lt;rt&gt;qí&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;七&lt;/rb&gt;&lt;rt&gt;qī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;政&lt;/rb&gt;&lt;rt&gt;zhèng&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;禹&lt;/rb&gt;&lt;rt&gt;yǔ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;叙&lt;/rb&gt;&lt;rt&gt;xù&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;九&lt;/rb&gt;&lt;rt&gt;jiǔ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;畴&lt;/rb&gt;&lt;rt&gt;chóu&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;传&lt;/rb&gt;&lt;rt&gt;chuán&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;说&lt;/rb&gt;&lt;rt&gt;shuō&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;陈&lt;/rb&gt;&lt;rt&gt;chén&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;天&lt;/rb&gt;&lt;rt&gt;tiān&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;道&lt;/rb&gt;&lt;rt&gt;dào&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;文&lt;/rb&gt;&lt;rt&gt;wén&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;王&lt;/rb&gt;&lt;rt&gt;wáng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;重&lt;/rb&gt;&lt;rt&gt;zhòng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;八&lt;/rb&gt;&lt;rt&gt;bā&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;卦&lt;/rb&gt;&lt;rt&gt;guà&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;周&lt;/rb&gt;&lt;rt&gt;zhōu&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;公&lt;/rb&gt;&lt;rt&gt;gōng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;设&lt;/rb&gt;&lt;rt&gt;shè&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;天&lt;/rb&gt;&lt;rt&gt;tiān&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;地&lt;/rb&gt;&lt;rt&gt;dì&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;四&lt;/rb&gt;&lt;rt&gt;sì&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;时&lt;/rb&gt;&lt;rt&gt;shí&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;之&lt;/rb&gt;&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;官&lt;/rb&gt;&lt;rt&gt;guān&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;又&lt;/rb&gt;&lt;rt&gt;yòu&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;立&lt;/rb&gt;&lt;rt&gt;lì&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;三&lt;/rb&gt;&lt;rt&gt;sān&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;公&lt;/rb&gt;&lt;rt&gt;gōng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;以&lt;/rb&gt;&lt;rt&gt;yǐ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;燮&lt;/rb&gt;&lt;rt&gt;xiè&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;理&lt;/rb&gt;&lt;rt&gt;lǐ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;阴&lt;/rb&gt;&lt;rt&gt;yīn&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;阳&lt;/rb&gt;&lt;rt&gt;yáng&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;孔&lt;/rb&gt;&lt;rt&gt;kǒng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;子&lt;/rb&gt;&lt;rt&gt;zǐ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;欲&lt;/rb&gt;&lt;rt&gt;yù&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;无&lt;/rb&gt;&lt;rt&gt;wú&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;言&lt;/rb&gt;&lt;rt&gt;yán&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;老&lt;/rb&gt;&lt;rt&gt;lǎo&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;聃&lt;/rb&gt;&lt;rt&gt;dān&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;建&lt;/rb&gt;&lt;rt&gt;jiàn&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;之&lt;/rb&gt;&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;以&lt;/rb&gt;&lt;rt&gt;yǐ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;常&lt;/rb&gt;&lt;rt&gt;cháng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;无&lt;/rb&gt;&lt;rt&gt;wú&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;有&lt;/rb&gt;&lt;rt&gt;yǒu&lt;/rt&gt;&lt;/ruby&gt;。《&lt;ruby&gt;&lt;rb&gt;阴&lt;/rb&gt;&lt;rt&gt;yīn&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;符&lt;/rb&gt;&lt;rt&gt;fú&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;经&lt;/rb&gt;&lt;rt&gt;jīng&lt;/rt&gt;&lt;/ruby&gt;》&lt;ruby&gt;&lt;rb&gt;曰&lt;/rb&gt;&lt;rt&gt;yuē&lt;/rt&gt;&lt;/ruby&gt;：&lt;ruby&gt;&lt;rb&gt;宇&lt;/rb&gt;&lt;rt&gt;yǔ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;宙&lt;/rb&gt;&lt;rt&gt;zhòu&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;在&lt;/rb&gt;&lt;rt&gt;zài&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;乎&lt;/rb&gt;&lt;rt&gt;hū&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;手&lt;/rb&gt;&lt;rt&gt;shǒu&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;万&lt;/rb&gt;&lt;rt&gt;wàn&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;化&lt;/rb&gt;&lt;rt&gt;huà&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;生&lt;/rb&gt;&lt;rt&gt;shēng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;乎&lt;/rb&gt;&lt;rt&gt;hū&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;身&lt;/rb&gt;&lt;rt&gt;shēn&lt;/rt&gt;&lt;/ruby&gt;。&lt;ruby&gt;&lt;rb&gt;道&lt;/rb&gt;&lt;rt&gt;dào&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;至&lt;/rb&gt;&lt;rt&gt;zhì&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;於&lt;/rb&gt;&lt;rt&gt;yú&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;此&lt;/rb&gt;&lt;rt&gt;cǐ&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;则&lt;/rb&gt;&lt;rt&gt;zé&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;鬼&lt;/rb&gt;&lt;rt&gt;guǐ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;神&lt;/rb&gt;&lt;rt&gt;shén&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;变&lt;/rb&gt;&lt;rt&gt;biàn&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;化&lt;/rb&gt;&lt;rt&gt;huà&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;皆&lt;/rb&gt;&lt;rt&gt;jiē&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;不&lt;/rb&gt;&lt;rt&gt;bù&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;逃&lt;/rb&gt;&lt;rt&gt;táo&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;吾&lt;/rb&gt;&lt;rt&gt;wú&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;之&lt;/rb&gt;&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;术&lt;/rb&gt;&lt;rt&gt;shù&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;而&lt;/rb&gt;&lt;rt&gt;ér&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;况&lt;/rb&gt;&lt;rt&gt;kuàng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;於&lt;/rb&gt;&lt;rt&gt;yú&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;刑&lt;/rb&gt;&lt;rt&gt;xíng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;名&lt;/rb&gt;&lt;rt&gt;míng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;度&lt;/rb&gt;&lt;rt&gt;dù&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;数&lt;/rb&gt;&lt;rt&gt;shù&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;之&lt;/rb&gt;&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;间&lt;/rb&gt;&lt;rt&gt;jiān&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;者&lt;/rb&gt;&lt;rt&gt;zhě&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;欤&lt;/rb&gt;&lt;rt&gt;yú&lt;/rt&gt;&lt;/ruby&gt;？&lt;ruby&gt;&lt;rb&gt;黄&lt;/rb&gt;&lt;rt&gt;huáng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;石&lt;/rb&gt;&lt;rt&gt;shí&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;公&lt;/rb&gt;&lt;rt&gt;gōng&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;秦&lt;/rb&gt;&lt;rt&gt;qín&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;之&lt;/rb&gt;&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;隐&lt;/rb&gt;&lt;rt&gt;yǐn&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;君&lt;/rb&gt;&lt;rt&gt;jūn&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;子&lt;/rb&gt;&lt;rt&gt;zǐ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;也&lt;/rb&gt;&lt;rt&gt;yě&lt;/rt&gt;&lt;/ruby&gt;。&lt;ruby&gt;&lt;rb&gt;其&lt;/rb&gt;&lt;rt&gt;qí&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;书&lt;/rb&gt;&lt;rt&gt;shū&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;简&lt;/rb&gt;&lt;rt&gt;jiǎn&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;其&lt;/rb&gt;&lt;rt&gt;qí&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;意&lt;/rb&gt;&lt;rt&gt;yì&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;深&lt;/rb&gt;&lt;rt&gt;shēn&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;虽&lt;/rb&gt;&lt;rt&gt;suī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;尧&lt;/rb&gt;&lt;rt&gt;yáo&lt;/rt&gt;&lt;/ruby&gt;、&lt;ruby&gt;&lt;rb&gt;舜&lt;/rb&gt;&lt;rt&gt;shùn&lt;/rt&gt;&lt;/ruby&gt;、&lt;ruby&gt;&lt;rb&gt;禹&lt;/rb&gt;&lt;rt&gt;yǔ&lt;/rt&gt;&lt;/ruby&gt;、&lt;ruby&gt;&lt;rb&gt;文&lt;/rb&gt;&lt;rt&gt;wén&lt;/rt&gt;&lt;/ruby&gt;、&lt;ruby&gt;&lt;rb&gt;傅&lt;/rb&gt;&lt;rt&gt;fù&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;说&lt;/rb&gt;&lt;rt&gt;yuè&lt;/rt&gt;&lt;/ruby&gt;、&lt;ruby&gt;&lt;rb&gt;周&lt;/rb&gt;&lt;rt&gt;zhōu&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;公&lt;/rb&gt;&lt;rt&gt;gōng&lt;/rt&gt;&lt;/ruby&gt;、&lt;ruby&gt;&lt;rb&gt;孔&lt;/rb&gt;&lt;rt&gt;kǒng&lt;/rt&gt;&lt;/ruby&gt;、&lt;ruby&gt;&lt;rb&gt;老&lt;/rb&gt;&lt;rt&gt;lǎo&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;亦&lt;/rb&gt;&lt;rt&gt;yì&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;无&lt;/rb&gt;&lt;rt&gt;wú&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;以&lt;/rb&gt;&lt;rt&gt;yǐ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;出&lt;/rb&gt;&lt;rt&gt;chū&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;此&lt;/rb&gt;&lt;rt&gt;cǐ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;矣&lt;/rb&gt;&lt;rt&gt;yǐ&lt;/rt&gt;&lt;/ruby&gt;。&lt;ruby&gt;&lt;rb&gt;然&lt;/rb&gt;&lt;rt&gt;rán&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;则&lt;/rb&gt;&lt;rt&gt;zé&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;黄&lt;/rb&gt;&lt;rt&gt;huáng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;石&lt;/rb&gt;&lt;rt&gt;shí&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;公&lt;/rb&gt;&lt;rt&gt;gōng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;知&lt;/rb&gt;&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;秦&lt;/rb&gt;&lt;rt&gt;qín&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;之&lt;/rb&gt;&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;将&lt;/rb&gt;&lt;rt&gt;jiāng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;亡&lt;/rb&gt;&lt;rt&gt;wáng&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;汉&lt;/rb&gt;&lt;rt&gt;hàn&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;之&lt;/rb&gt;&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;将&lt;/rb&gt;&lt;rt&gt;jiāng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;兴&lt;/rb&gt;&lt;rt&gt;xīng&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;故&lt;/rb&gt;&lt;rt&gt;gù&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;以&lt;/rb&gt;&lt;rt&gt;yǐ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;此&lt;/rb&gt;&lt;rt&gt;cǐ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;书&lt;/rb&gt;&lt;rt&gt;shū&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;授&lt;/rb&gt;&lt;rt&gt;shòu&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;子&lt;/rb&gt;&lt;rt&gt;zǐ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;房&lt;/rb&gt;&lt;rt&gt;fáng&lt;/rt&gt;&lt;/ruby&gt;。&lt;ruby&gt;&lt;rb&gt;而&lt;/rb&gt;&lt;rt&gt;ér&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;子&lt;/rb&gt;&lt;rt&gt;zǐ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;房&lt;/rb&gt;&lt;rt&gt;fáng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;岂&lt;/rb&gt;&lt;rt&gt;qǐ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;能&lt;/rb&gt;&lt;rt&gt;néng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;尽&lt;/rb&gt;&lt;rt&gt;jìn&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;知&lt;/rb&gt;&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;其&lt;/rb&gt;&lt;rt&gt;qí&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;书&lt;/rb&gt;&lt;rt&gt;shū&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;哉&lt;/rb&gt;&lt;rt&gt;zāi&lt;/rt&gt;&lt;/ruby&gt;？&lt;ruby&gt;&lt;rb&gt;凡&lt;/rb&gt;&lt;rt&gt;fán&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;子&lt;/rb&gt;&lt;rt&gt;zǐ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;房&lt;/rb&gt;&lt;rt&gt;fáng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;之&lt;/rb&gt;&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;所&lt;/rb&gt;&lt;rt&gt;suǒ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;以&lt;/rb&gt;&lt;rt&gt;yǐ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;为&lt;/rb&gt;&lt;rt&gt;wéi&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;子&lt;/rb&gt;&lt;rt&gt;zǐ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;房&lt;/rb&gt;&lt;rt&gt;fáng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;者&lt;/rb&gt;&lt;rt&gt;zhě&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;仅&lt;/rb&gt;&lt;rt&gt;jǐn&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;能&lt;/rb&gt;&lt;rt&gt;néng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;用&lt;/rb&gt;&lt;rt&gt;yòng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;其&lt;/rb&gt;&lt;rt&gt;qí&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;一&lt;/rb&gt;&lt;rt&gt;yī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;二&lt;/rb&gt;&lt;rt&gt;èr&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;耳&lt;/rb&gt;&lt;rt&gt;ěr&lt;/rt&gt;&lt;/ruby&gt;。&lt;ruby&gt;&lt;rb&gt;书&lt;/rb&gt;&lt;rt&gt;shū&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;曰&lt;/rb&gt;&lt;rt&gt;yuē&lt;/rt&gt;&lt;/ruby&gt;：&lt;ruby&gt;&lt;rb&gt;阴&lt;/rb&gt;&lt;rt&gt;yīn&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;计&lt;/rb&gt;&lt;rt&gt;jì&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;外&lt;/rb&gt;&lt;rt&gt;wài&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;泄&lt;/rb&gt;&lt;rt&gt;xiè&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;者&lt;/rb&gt;&lt;rt&gt;zhě&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;败&lt;/rb&gt;&lt;rt&gt;bài&lt;/rt&gt;&lt;/ruby&gt;。&lt;ruby&gt;&lt;rb&gt;子&lt;/rb&gt;&lt;rt&gt;zǐ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;房&lt;/rb&gt;&lt;rt&gt;fáng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;用&lt;/rb&gt;&lt;rt&gt;yòng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;之&lt;/rb&gt;&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;尝&lt;/rb&gt;&lt;rt&gt;cháng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;劝&lt;/rb&gt;&lt;rt&gt;quàn&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;高&lt;/rb&gt;&lt;rt&gt;gāo&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;帝&lt;/rb&gt;&lt;rt&gt;dì&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;王&lt;/rb&gt;&lt;rt&gt;wáng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;韩&lt;/rb&gt;&lt;rt&gt;hán&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;信&lt;/rb&gt;&lt;rt&gt;xìn&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;矣&lt;/rb&gt;&lt;rt&gt;yǐ&lt;/rt&gt;&lt;/ruby&gt;。&lt;ruby&gt;&lt;rb&gt;书&lt;/rb&gt;&lt;rt&gt;shū&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;曰&lt;/rb&gt;&lt;rt&gt;yuē&lt;/rt&gt;&lt;/ruby&gt;：&lt;ruby&gt;&lt;rb&gt;小&lt;/rb&gt;&lt;rt&gt;xiǎo&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;怨&lt;/rb&gt;&lt;rt&gt;yuàn&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;不&lt;/rb&gt;&lt;rt&gt;bù&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;赦&lt;/rb&gt;&lt;rt&gt;shè&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;大&lt;/rb&gt;&lt;rt&gt;dà&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;怨&lt;/rb&gt;&lt;rt&gt;yuàn&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;必&lt;/rb&gt;&lt;rt&gt;bì&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;生&lt;/rb&gt;&lt;rt&gt;shēng&lt;/rt&gt;&lt;/ruby&gt;。&lt;ruby&gt;&lt;rb&gt;子&lt;/rb&gt;&lt;rt&gt;zǐ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;房&lt;/rb&gt;&lt;rt&gt;fáng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;用&lt;/rb&gt;&lt;rt&gt;yòng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;之&lt;/rb&gt;&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;尝&lt;/rb&gt;&lt;rt&gt;cháng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;劝&lt;/rb&gt;&lt;rt&gt;quàn&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;高&lt;/rb&gt;&lt;rt&gt;gāo&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;帝&lt;/rb&gt;&lt;rt&gt;dì&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;侯&lt;/rb&gt;&lt;rt&gt;hóu&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;雍&lt;/rb&gt;&lt;rt&gt;yōng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;齿&lt;/rb&gt;&lt;rt&gt;chǐ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;矣&lt;/rb&gt;&lt;rt&gt;yǐ&lt;/rt&gt;&lt;/ruby&gt;。&lt;ruby&gt;&lt;rb&gt;书&lt;/rb&gt;&lt;rt&gt;shū&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;曰&lt;/rb&gt;&lt;rt&gt;yuē&lt;/rt&gt;&lt;/ruby&gt;：&lt;ruby&gt;&lt;rb&gt;决&lt;/rb&gt;&lt;rt&gt;jué&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;策&lt;/rb&gt;&lt;rt&gt;cè&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;於&lt;/rb&gt;&lt;rt&gt;yú&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;不&lt;/rb&gt;&lt;rt&gt;bù&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;仁&lt;/rb&gt;&lt;rt&gt;rén&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;者&lt;/rb&gt;&lt;rt&gt;zhě&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;险&lt;/rb&gt;&lt;rt&gt;xiǎn&lt;/rt&gt;&lt;/ruby&gt;。&lt;ruby&gt;&lt;rb&gt;子&lt;/rb&gt;&lt;rt&gt;zǐ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;房&lt;/rb&gt;&lt;rt&gt;fáng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;用&lt;/rb&gt;&lt;rt&gt;yòng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;之&lt;/rb&gt;&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;尝&lt;/rb&gt;&lt;rt&gt;cháng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;劝&lt;/rb&gt;&lt;rt&gt;quàn&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;高&lt;/rb&gt;&lt;rt&gt;gāo&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;帝&lt;/rb&gt;&lt;rt&gt;dì&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;罢&lt;/rb&gt;&lt;rt&gt;bà&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;封&lt;/rb&gt;&lt;rt&gt;fēng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;六&lt;/rb&gt;&lt;rt&gt;liù&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;国&lt;/rb&gt;&lt;rt&gt;guó&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;矣&lt;/rb&gt;&lt;rt&gt;yǐ&lt;/rt&gt;&lt;/ruby&gt;。&lt;ruby&gt;&lt;rb&gt;书&lt;/rb&gt;&lt;rt&gt;shū&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;曰&lt;/rb&gt;&lt;rt&gt;yuē&lt;/rt&gt;&lt;/ruby&gt;：&lt;ruby&gt;&lt;rb&gt;设&lt;/rb&gt;&lt;rt&gt;shè&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;变&lt;/rb&gt;&lt;rt&gt;biàn&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;致&lt;/rb&gt;&lt;rt&gt;zhì&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;权&lt;/rb&gt;&lt;rt&gt;quán&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;所&lt;/rb&gt;&lt;rt&gt;suǒ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;以&lt;/rb&gt;&lt;rt&gt;yǐ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;解&lt;/rb&gt;&lt;rt&gt;jiě&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;结&lt;/rb&gt;&lt;rt&gt;jié&lt;/rt&gt;&lt;/ruby&gt;。&lt;ruby&gt;&lt;rb&gt;子&lt;/rb&gt;&lt;rt&gt;zǐ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;房&lt;/rb&gt;&lt;rt&gt;fáng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;用&lt;/rb&gt;&lt;rt&gt;yòng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;之&lt;/rb&gt;&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;尝&lt;/rb&gt;&lt;rt&gt;cháng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;致&lt;/rb&gt;&lt;rt&gt;zhì&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;四&lt;/rb&gt;&lt;rt&gt;sì&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;皓&lt;/rb&gt;&lt;rt&gt;hào&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;而&lt;/rb&gt;&lt;rt&gt;ér&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;立&lt;/rb&gt;&lt;rt&gt;lì&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;惠&lt;/rb&gt;&lt;rt&gt;huì&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;帝&lt;/rb&gt;&lt;rt&gt;dì&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;矣&lt;/rb&gt;&lt;rt&gt;yǐ&lt;/rt&gt;&lt;/ruby&gt;。&lt;ruby&gt;&lt;rb&gt;书&lt;/rb&gt;&lt;rt&gt;shū&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;曰&lt;/rb&gt;&lt;rt&gt;yuē&lt;/rt&gt;&lt;/ruby&gt;：&lt;ruby&gt;&lt;rb&gt;吉&lt;/rb&gt;&lt;rt&gt;jí&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;莫&lt;/rb&gt;&lt;rt&gt;mò&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;吉&lt;/rb&gt;&lt;rt&gt;jí&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;於&lt;/rb&gt;&lt;rt&gt;yú&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;知&lt;/rb&gt;&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;足&lt;/rb&gt;&lt;rt&gt;zú&lt;/rt&gt;&lt;/ruby&gt;。&lt;ruby&gt;&lt;rb&gt;子&lt;/rb&gt;&lt;rt&gt;zǐ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;房&lt;/rb&gt;&lt;rt&gt;fáng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;用&lt;/rb&gt;&lt;rt&gt;yòng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;之&lt;/rb&gt;&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;尝&lt;/rb&gt;&lt;rt&gt;cháng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;择&lt;/rb&gt;&lt;rt&gt;zé&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;留&lt;/rb&gt;&lt;rt&gt;liú&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;自&lt;/rb&gt;&lt;rt&gt;zì&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;封&lt;/rb&gt;&lt;rt&gt;fēng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;矣&lt;/rb&gt;&lt;rt&gt;yǐ&lt;/rt&gt;&lt;/ruby&gt;。&lt;ruby&gt;&lt;rb&gt;书&lt;/rb&gt;&lt;rt&gt;shū&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;曰&lt;/rb&gt;&lt;rt&gt;yuē&lt;/rt&gt;&lt;/ruby&gt;：&lt;ruby&gt;&lt;rb&gt;绝&lt;/rb&gt;&lt;rt&gt;jué&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;嗜&lt;/rb&gt;&lt;rt&gt;shì&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;禁&lt;/rb&gt;&lt;rt&gt;jìn&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;欲&lt;/rb&gt;&lt;rt&gt;yù&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;所&lt;/rb&gt;&lt;rt&gt;suǒ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;以&lt;/rb&gt;&lt;rt&gt;yǐ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;除&lt;/rb&gt;&lt;rt&gt;chú&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;累&lt;/rb&gt;&lt;rt&gt;lèi&lt;/rt&gt;&lt;/ruby&gt;。&lt;ruby&gt;&lt;rb&gt;子&lt;/rb&gt;&lt;rt&gt;zǐ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;房&lt;/rb&gt;&lt;rt&gt;fáng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;用&lt;/rb&gt;&lt;rt&gt;yòng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;之&lt;/rb&gt;&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;尝&lt;/rb&gt;&lt;rt&gt;cháng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;弃&lt;/rb&gt;&lt;rt&gt;qì&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;人&lt;/rb&gt;&lt;rt&gt;rén&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;间&lt;/rb&gt;&lt;rt&gt;jiān&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;事&lt;/rb&gt;&lt;rt&gt;shì&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;从&lt;/rb&gt;&lt;rt&gt;cóng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;赤&lt;/rb&gt;&lt;rt&gt;chì&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;松&lt;/rb&gt;&lt;rt&gt;sōng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;子&lt;/rb&gt;&lt;rt&gt;zǐ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;游&lt;/rb&gt;&lt;rt&gt;yóu&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;矣&lt;/rb&gt;&lt;rt&gt;yǐ&lt;/rt&gt;&lt;/ruby&gt;。&lt;ruby&gt;&lt;rb&gt;嗟&lt;/rb&gt;&lt;rt&gt;jiē&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;乎&lt;/rb&gt;&lt;rt&gt;hū&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;遗&lt;/rb&gt;&lt;rt&gt;yí&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;粕&lt;/rb&gt;&lt;rt&gt;pò&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;弃&lt;/rb&gt;&lt;rt&gt;qì&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;滓&lt;/rb&gt;&lt;rt&gt;zǐ&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;犹&lt;/rb&gt;&lt;rt&gt;yóu&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;足&lt;/rb&gt;&lt;rt&gt;zú&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;以&lt;/rb&gt;&lt;rt&gt;yǐ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;亡&lt;/rb&gt;&lt;rt&gt;wáng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;秦&lt;/rb&gt;&lt;rt&gt;qín&lt;/rt&gt;&lt;/ruby&gt;、&lt;ruby&gt;&lt;rb&gt;项&lt;/rb&gt;&lt;rt&gt;xiàng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;而&lt;/rb&gt;&lt;rt&gt;ér&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;帝&lt;/rb&gt;&lt;rt&gt;dì&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;沛&lt;/rb&gt;&lt;rt&gt;pèi&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;公&lt;/rb&gt;&lt;rt&gt;gōng&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;况&lt;/rb&gt;&lt;rt&gt;kuàng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;纯&lt;/rb&gt;&lt;rt&gt;chún&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;而&lt;/rb&gt;&lt;rt&gt;ér&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;用&lt;/rb&gt;&lt;rt&gt;yòng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;之&lt;/rb&gt;&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt;、&lt;ruby&gt;&lt;rb&gt;深&lt;/rb&gt;&lt;rt&gt;shēn&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;而&lt;/rb&gt;&lt;rt&gt;ér&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;造&lt;/rb&gt;&lt;rt&gt;zào&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;之&lt;/rb&gt;&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;者&lt;/rb&gt;&lt;rt&gt;zhě&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;乎&lt;/rb&gt;&lt;rt&gt;hū&lt;/rt&gt;&lt;/ruby&gt;？&lt;ruby&gt;&lt;rb&gt;自&lt;/rb&gt;&lt;rt&gt;zì&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;汉&lt;/rb&gt;&lt;rt&gt;hàn&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;以&lt;/rb&gt;&lt;rt&gt;yǐ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;来&lt;/rb&gt;&lt;rt&gt;lái&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;章&lt;/rb&gt;&lt;rt&gt;zhāng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;句&lt;/rb&gt;&lt;rt&gt;jù&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;文&lt;/rb&gt;&lt;rt&gt;wén&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;词&lt;/rb&gt;&lt;rt&gt;cí&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;之&lt;/rb&gt;&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;学&lt;/rb&gt;&lt;rt&gt;xué&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;炽&lt;/rb&gt;&lt;rt&gt;chì&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;而&lt;/rb&gt;&lt;rt&gt;ér&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;知&lt;/rb&gt;&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;道&lt;/rb&gt;&lt;rt&gt;dào&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;之&lt;/rb&gt;&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;士&lt;/rb&gt;&lt;rt&gt;shì&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;极&lt;/rb&gt;&lt;rt&gt;jí&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;少&lt;/rb&gt;&lt;rt&gt;shǎo&lt;/rt&gt;&lt;/ruby&gt;。&lt;ruby&gt;&lt;rb&gt;如&lt;/rb&gt;&lt;rt&gt;rú&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;诸&lt;/rb&gt;&lt;rt&gt;zhū&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;葛&lt;/rb&gt;&lt;rt&gt;gě&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;亮&lt;/rb&gt;&lt;rt&gt;liàng&lt;/rt&gt;&lt;/ruby&gt;、&lt;ruby&gt;&lt;rb&gt;王&lt;/rb&gt;&lt;rt&gt;wáng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;猛&lt;/rb&gt;&lt;rt&gt;měng&lt;/rt&gt;&lt;/ruby&gt;、&lt;ruby&gt;&lt;rb&gt;房&lt;/rb&gt;&lt;rt&gt;fáng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;乔&lt;/rb&gt;&lt;rt&gt;qiáo&lt;/rt&gt;&lt;/ruby&gt;、&lt;ruby&gt;&lt;rb&gt;裴&lt;/rb&gt;&lt;rt&gt;péi&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;度&lt;/rb&gt;&lt;rt&gt;dù&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;等&lt;/rb&gt;&lt;rt&gt;děng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;辈&lt;/rb&gt;&lt;rt&gt;bèi&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;虽&lt;/rb&gt;&lt;rt&gt;suī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;号&lt;/rb&gt;&lt;rt&gt;hào&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;为&lt;/rb&gt;&lt;rt&gt;wéi&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;一&lt;/rb&gt;&lt;rt&gt;yī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;时&lt;/rb&gt;&lt;rt&gt;shí&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;贤&lt;/rb&gt;&lt;rt&gt;xián&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;相&lt;/rb&gt;&lt;rt&gt;xiàng&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;至&lt;/rb&gt;&lt;rt&gt;zhì&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;於&lt;/rb&gt;&lt;rt&gt;yú&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;先&lt;/rb&gt;&lt;rt&gt;xiān&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;王&lt;/rb&gt;&lt;rt&gt;wáng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;大&lt;/rb&gt;&lt;rt&gt;dà&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;道&lt;/rb&gt;&lt;rt&gt;dào&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;曾&lt;/rb&gt;&lt;rt&gt;céng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;未&lt;/rb&gt;&lt;rt&gt;wèi&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;足&lt;/rb&gt;&lt;rt&gt;zú&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;以&lt;/rb&gt;&lt;rt&gt;yǐ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;知&lt;/rb&gt;&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;髣&lt;/rb&gt;&lt;rt&gt;fǎng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;髴&lt;/rb&gt;&lt;rt&gt;fú&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;此&lt;/rb&gt;&lt;rt&gt;cǐ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;书&lt;/rb&gt;&lt;rt&gt;shū&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;所&lt;/rb&gt;&lt;rt&gt;suǒ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;以&lt;/rb&gt;&lt;rt&gt;yǐ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;不&lt;/rb&gt;&lt;rt&gt;bù&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;传&lt;/rb&gt;&lt;rt&gt;chuán&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;於&lt;/rb&gt;&lt;rt&gt;yú&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;不&lt;/rb&gt;&lt;rt&gt;bù&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;道&lt;/rb&gt;&lt;rt&gt;dào&lt;/rt&gt;&lt;/ruby&gt;、&lt;ruby&gt;&lt;rb&gt;不&lt;/rb&gt;&lt;rt&gt;bù&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;神&lt;/rb&gt;&lt;rt&gt;shén&lt;/rt&gt;&lt;/ruby&gt;、&lt;ruby&gt;&lt;rb&gt;不&lt;/rb&gt;&lt;rt&gt;bù&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;圣&lt;/rb&gt;&lt;rt&gt;shèng&lt;/rt&gt;&lt;/ruby&gt;、&lt;ruby&gt;&lt;rb&gt;不&lt;/rb&gt;&lt;rt&gt;bù&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;贤&lt;/rb&gt;&lt;rt&gt;xián&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;之&lt;/rb&gt;&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;人&lt;/rb&gt;&lt;rt&gt;rén&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;也&lt;/rb&gt;&lt;rt&gt;yě&lt;/rt&gt;&lt;/ruby&gt;。&lt;ruby&gt;&lt;rb&gt;离&lt;/rb&gt;&lt;rt&gt;lí&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;有&lt;/rb&gt;&lt;rt&gt;yǒu&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;离&lt;/rb&gt;&lt;rt&gt;lí&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;无&lt;/rb&gt;&lt;rt&gt;wú&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;之&lt;/rb&gt;&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;谓&lt;/rb&gt;&lt;rt&gt;wèi&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;道&lt;/rb&gt;&lt;rt&gt;dào&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;非&lt;/rb&gt;&lt;rt&gt;fēi&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;有&lt;/rb&gt;&lt;rt&gt;yǒu&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;非&lt;/rb&gt;&lt;rt&gt;fēi&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;无&lt;/rb&gt;&lt;rt&gt;wú&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;之&lt;/rb&gt;&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;谓&lt;/rb&gt;&lt;rt&gt;wèi&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;神&lt;/rb&gt;&lt;rt&gt;shén&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;有&lt;/rb&gt;&lt;rt&gt;yǒu&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;而&lt;/rb&gt;&lt;rt&gt;ér&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;无&lt;/rb&gt;&lt;rt&gt;wú&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;之&lt;/rb&gt;&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;谓&lt;/rb&gt;&lt;rt&gt;wèi&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;圣&lt;/rb&gt;&lt;rt&gt;shèng&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;无&lt;/rb&gt;&lt;rt&gt;wú&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;而&lt;/rb&gt;&lt;rt&gt;ér&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;有&lt;/rb&gt;&lt;rt&gt;yǒu&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;之&lt;/rb&gt;&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;谓&lt;/rb&gt;&lt;rt&gt;wèi&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;贤&lt;/rb&gt;&lt;rt&gt;xián&lt;/rt&gt;&lt;/ruby&gt;。&lt;ruby&gt;&lt;rb&gt;非&lt;/rb&gt;&lt;rt&gt;fēi&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;此&lt;/rb&gt;&lt;rt&gt;cǐ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;四&lt;/rb&gt;&lt;rt&gt;sì&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;者&lt;/rb&gt;&lt;rt&gt;zhě&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;虽&lt;/rb&gt;&lt;rt&gt;suī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;口&lt;/rb&gt;&lt;rt&gt;kǒu&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;诵&lt;/rb&gt;&lt;rt&gt;sòng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;此&lt;/rb&gt;&lt;rt&gt;cǐ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;书&lt;/rb&gt;&lt;rt&gt;shū&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;&lt;rb&gt;亦&lt;/rb&gt;&lt;rt&gt;yì&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;不&lt;/rb&gt;&lt;rt&gt;bù&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;能&lt;/rb&gt;&lt;rt&gt;néng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;身&lt;/rb&gt;&lt;rt&gt;shēn&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;行&lt;/rb&gt;&lt;rt&gt;xíng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;之&lt;/rb&gt;&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;矣&lt;/rb&gt;&lt;rt&gt;yǐ&lt;/rt&gt;&lt;/ruby&gt;。&lt;ruby&gt;&lt;rb&gt;张&lt;/rb&gt;&lt;rt&gt;zhāng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;商&lt;/rb&gt;&lt;rt&gt;shāng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;英&lt;/rb&gt;&lt;rt&gt;yīng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;天&lt;/rb&gt;&lt;rt&gt;tiān&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;觉&lt;/rb&gt;&lt;rt&gt;jué&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;&lt;rb&gt;序&lt;/rb&gt;&lt;rt&gt;xù&lt;/rt&gt;&lt;/ruby&gt;。&lt;/p&gt;</description></item><item><title>第12章 数据类型</title><link>https://before80.github.io/prgms/Python/basic/Chapter-12-Data-Types/</link><pubDate>Wed, 08 Apr 2026 13:22:00 +0800</pubDate><guid>https://before80.github.io/prgms/Python/basic/Chapter-12-Data-Types/</guid><description>&lt;h1 id="第-12-章数据类型python-的积木们"&gt;第 12 章：数据类型——Python 的积木们&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;🎉 欢迎来到 Python 数据的奇幻世界！在这一章里，我们要认识各种&amp;quot;数据类型&amp;quot;。如果说 Python 是一门艺术，那数据类型就是画家的颜料盘。没有颜料，画家也画不出蒙娜丽莎；没有数据类型，Python 程序员只能对屏幕发呆。所以，系好安全带，我们要发车了！&lt;/p&gt;</description></item><item><title>第12章：GitHub 协作 —— 开源世界的入场券</title><link>https://before80.github.io/prgms/Git/Chapter-12-GitHub-Collaboration/</link><pubDate>Fri, 03 Apr 2026 19:36:48 +0800</pubDate><guid>https://before80.github.io/prgms/Git/Chapter-12-GitHub-Collaboration/</guid><description>&lt;h1 id="第12章github-协作--开源世界的入场券"&gt;第12章：GitHub 协作 —— 开源世界的入场券&lt;/h1&gt;
&lt;p&gt;欢迎来到GitHub的世界！如果说Git是程序员的内功心法，那GitHub就是你的江湖名片。这一章，我们将从&amp;quot;会用GitHub&amp;quot;进阶到&amp;quot;玩转GitHub&amp;quot;，让你真正融入开源社区，成为一名合格的&amp;quot;GitHub居民&amp;quot;。&lt;/p&gt;</description></item><item><title>第12章 面向对象思想——为什么要面向对象？</title><link>https://before80.github.io/prgms/Java/basic/Chapter-12-oop-thought/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-12-oop-thought/</guid><description>&lt;h1 id="第十二章-面向对象思想为什么要面向对象"&gt;第十二章 面向对象思想——为什么要面向对象？&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;你有没有想过，为什么 Java 叫&amp;quot;面向对象&amp;quot;？难道 C 语言是&amp;quot;面向过程&amp;quot;就低人一等？
别急，这一章我们来好好聊聊这场编程界的&amp;quot;门派之争&amp;quot;，
顺便让你彻底搞懂：到底什么是对象？什么是类？为什么面向对象这么香？&lt;/p&gt;</description></item><item><title>第 12 章：字节切片操作——bytes 包</title><link>https://before80.github.io/prgms/go/std/Chapter-12-bytes/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-12-bytes/</guid><description>&lt;h1 id="第-12-章字节切片操作bytes-包"&gt;第 12 章：字节切片操作——bytes 包&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;在 Go 的世界里，字符串是不可变的常量，而字节切片是江湖里最灵活的刀。&amp;rdquo;
——《Go 语言武林外传》&lt;/p&gt;</description></item><item><title>第 12 章：初始化 —— 给变量一个'人生起点'</title><link>https://before80.github.io/prgms/C/basic/Chapter-12-Initialization/</link><pubDate>Sun, 29 Mar 2026 22:34:00 +0800</pubDate><guid>https://before80.github.io/prgms/C/basic/Chapter-12-Initialization/</guid><description>&lt;h1 id="第-12-章初始化--给变量一个人生起点"&gt;第 12 章：初始化 —— 给变量一个&amp;quot;人生起点&amp;quot;&lt;/h1&gt;
&lt;p&gt;嗨，未来的 C 语言大师！欢迎来到第 12 章！&lt;/p&gt;
&lt;p&gt;你有没有想过，当我们声明一个变量的时候，它在内存里到底是什么状态？是一片空白？还是随机炫彩的&amp;quot;垃圾&amp;quot;数据？&lt;/p&gt;</description></item><item><title>第12章 成员函数深入</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-12-Member-Functions-In-Depth/</link><pubDate>Sun, 29 Mar 2026 21:03:00 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-12-Member-Functions-In-Depth/</guid><description>&lt;h1 id="第12章-成员函数深入"&gt;第12章 成员函数深入&lt;/h1&gt;
&lt;p&gt;欢迎来到成员函数的深水区！如果说类是一座房子，那成员函数就是房子的主人——既有自己的小房间（private），也有会客厅（public），偶尔还会搞点秘密派对（友元）。本章我们将深入探索C++成员函数的各种黑科技，让你的代码既有实力又有魅力！&lt;/p&gt;</description></item><item><title>第 12 章 元编程：宏</title><link>https://before80.github.io/prgms/Rust/basic/Chapter-12-Macros/</link><pubDate>Fri, 27 Mar 2026 17:24:46 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/basic/Chapter-12-Macros/</guid><description>&lt;h1 id="第-12-章-元编程宏macros"&gt;第 12 章 元编程：宏（Macros）&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;宏是 Rust 世界里的&amp;rsquo;哆啦A梦口袋&amp;rsquo;——你想吃什么（输入什么），它就能给你掏出来什么。函数做不到的事，宏能做到；函数能做的事，宏也能做。唯一的代价是——你需要花点时间学会跟它相处。&amp;rdquo;&lt;/p&gt;</description></item><item><title>第12章 生产构建优化</title><link>https://before80.github.io/prgms/Js/tools/build/vite/Chapter-12-Production-Build-Optimization/</link><pubDate>Fri, 27 Mar 2026 17:13:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/build/vite/Chapter-12-Production-Build-Optimization/</guid><description>&lt;h1 id="chapter-12-production-build-optimization"&gt;Chapter-12-Production-Build-Optimization&lt;/h1&gt;
&lt;h1 id="第12章生产构建优化"&gt;第12章：生产构建优化&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;开发时飞快，那叫一个爽。但代码最终是要部署上线的，上线之后能不能&amp;quot;飞起来&amp;quot;，就全靠生产构建优化了。&lt;/p&gt;
&lt;p&gt;这一章我们要聊的话题直接决定了你的网站&amp;quot;快不快&amp;quot;：Rollup 怎么配置？代码怎么压缩？Tree Shaking 怎么做？产物怎么分析？兼容怎么处理？CDN 怎么接？&lt;/p&gt;</description></item><item><title>第12章 颜色与背景属性</title><link>https://before80.github.io/prgms/CSS/basic/Chapter-12-Color-and-Background-Properties/</link><pubDate>Fri, 27 Mar 2026 16:53:00 +0800</pubDate><guid>https://before80.github.io/prgms/CSS/basic/Chapter-12-Color-and-Background-Properties/</guid><description>&lt;h1 id="第十二章颜色与背景属性"&gt;第十二章：颜色与背景属性&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;颜色是网页的灵魂，背景是页面的外衣。学会控制颜色和背景，你的网页就能从&amp;quot;黑白电视&amp;quot;升级到&amp;quot;彩色电视&amp;quot;。&lt;/p&gt;</description></item><item><title>第12章 tsconfig.json完整配置指南</title><link>https://before80.github.io/prgms/Ts/basic/Chapter-12-tsconfig-json-complete-configuration-guide/</link><pubDate>Thu, 26 Mar 2026 21:05:00 +0800</pubDate><guid>https://before80.github.io/prgms/Ts/basic/Chapter-12-tsconfig-json-complete-configuration-guide/</guid><description>&lt;h1 id="第-12-章-tsconfigjson-完整配置指南"&gt;第 12 章 tsconfig.json 完整配置指南&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;本章说明&lt;/strong&gt;：tsconfig.json 是 TypeScript 项目的心脏，本章按配置项的功能分组，每组内按使用频率排序，并说明配置之间的依赖关系与常见场景的推荐组合。&lt;/p&gt;</description></item><item><title>第12章 useReducer与复杂状态管理</title><link>https://before80.github.io/prgms/Js/frameworks/react/Chapter-12-useReducer-Complex-State-Management/</link><pubDate>Wed, 25 Mar 2026 12:56:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/react/Chapter-12-useReducer-Complex-State-Management/</guid><description>&lt;h1 id="chapter-12---usereducer复杂状态逻辑管理"&gt;Chapter-12 - useReducer——复杂状态逻辑管理&lt;/h1&gt;
&lt;h2 id="121-usestate-vs-usereducer"&gt;12.1 useState vs useReducer&lt;/h2&gt;
&lt;h3 id="1211-usestate-适用场景简单独立的状态"&gt;12.1.1 useState 适用场景：简单、独立的状态&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;useState&lt;/code&gt; 适合管理&lt;strong&gt;简单的、相互独立的状态&lt;/strong&gt;。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-jsx" data-lang="jsx"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// useState 最适合的场景：单个的、简单的状态
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;const&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;[&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;name&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;setName&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;]&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;useState&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;const&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;[&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;isLoading&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;setIsLoading&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;]&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;useState&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#e5c07b"&gt;false&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;const&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;[&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;count&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;setCount&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;]&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;useState&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#d19a66"&gt;0&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="1212-usereducer-适用场景状态逻辑复杂多个子值相关联"&gt;12.1.2 useReducer 适用场景：状态逻辑复杂、多个子值相关联&lt;/h3&gt;
&lt;p&gt;当状态满足以下条件时，&lt;code&gt;useReducer&lt;/code&gt; 比 &lt;code&gt;useState&lt;/code&gt; 更好：&lt;/p&gt;</description></item><item><title>第12章 Vue Router 4</title><link>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-12-Vue-Router/</link><pubDate>Wed, 25 Mar 2026 12:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-12-Vue-Router/</guid><description>&lt;h1 id="第十二章-vue-router-4"&gt;第十二章 Vue Router 4&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;Vue Router 是 Vue 官方出品的路由管理器，它是构建单页应用（SPA）的核心基础设施。当用户在页面上点击链接或改变 URL 时，Vue Router 负责找出匹配的路由规则，并渲染对应的组件。本章会详细介绍 Vue Router 4 的所有核心功能——从基础的路由配置到高级的导航守卫、懒加载和滚动行为控制。&lt;/p&gt;</description></item><item><title>第 12 章 作用域与闭包</title><link>https://before80.github.io/prgms/Js/basic/Chapter-12-Scope-and-Closure/</link><pubDate>Tue, 24 Mar 2026 22:08:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/basic/Chapter-12-Scope-and-Closure/</guid><description>&lt;h1 id="第-12-章-作用域与闭包"&gt;第 12 章 作用域与闭包&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;作用域和闭包是 JavaScript 最核心的概念之一。理解了它们，你就能理解为什么某些变量&amp;quot;莫名其妙&amp;quot;还存在，为什么某些函数能&amp;quot;记住&amp;quot;创建时的环境。这就像是 JavaScript 给函数施了魔法，让它们有了记忆。&lt;/p&gt;</description></item><item><title>第12章：Linux 目录结构详解</title><link>https://before80.github.io/prgms/linux/file_system_basic/Chapter-12-Linux-Directory-Structure/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/file_system_basic/Chapter-12-Linux-Directory-Structure/</guid><description>&lt;h1 id="第十二章linux-目录结构详解"&gt;第十二章：Linux 目录结构详解&lt;/h1&gt;
&lt;h2 id="121-根目录-整个系统的入口"&gt;12.1 根目录 /：整个系统的入口&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;根目录&lt;/strong&gt;（Root Directory）是 Linux 文件系统的&amp;quot;老大&amp;quot;，所有文件和目录都从它开始。类似于 Windows 的&amp;quot;此电脑&amp;quot;，但 Linux 的根目录更纯粹——&lt;strong&gt;一切皆文件&lt;/strong&gt;！&lt;/p&gt;</description></item><item><title>第12章 数组</title><link>https://before80.github.io/prgms/go/basic/Chapter-12-Arrays/</link><pubDate>Fri, 20 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/basic/Chapter-12-Arrays/</guid><description>&lt;h1 id="第12章-数组"&gt;第12章 数组&lt;/h1&gt;
&lt;h2 id="121-数组类型"&gt;12.1 数组类型&lt;/h2&gt;
&lt;h3 id="1211-数组定义"&gt;12.1.1 数组定义&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;数组是什么？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;数组是 Go 语言中最基础的数据结构——它是一组&lt;strong&gt;相同类型&lt;/strong&gt;的元素，按&lt;strong&gt;顺序&lt;/strong&gt;排列，放在一个&amp;quot;连续的内存空间&amp;quot;里。&lt;/p&gt;</description></item><item><title>第13章 盛神法五龙——内心能量满格，外在气场自带BGM</title><link>https://before80.github.io/prgms/Philosophy/guiGuZi/13/</link><pubDate>Sat, 11 Apr 2026 21:52:00 +0800</pubDate><guid>https://before80.github.io/prgms/Philosophy/guiGuZi/13/</guid><description>&lt;h1 id="第十三章-盛神法五龙内心能量满格外在气场自带bgm"&gt;第十三章 盛神法五龙——&amp;ldquo;内心能量满格，外在气场自带BGM&amp;rdquo;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本章核心：真正的强大不是外在张扬，是内在&amp;quot;五气&amp;quot;充盈。养神先养心，心定则术生，能量管理才是高手的底层操作系统。&lt;/p&gt;</description></item><item><title>黄石公素书(张商英注本) 释义版</title><link>https://before80.github.io/prgms/Philosophy/suShu/Appendix-6-shiyi/</link><pubDate>Thu, 09 Apr 2026 10:58:00 +0800</pubDate><guid>https://before80.github.io/prgms/Philosophy/suShu/Appendix-6-shiyi/</guid><description>&lt;h1 id="素书张商英注本全文释文与生僻字注音"&gt;《素书》（张商英注本）全文释文与生僻字注音&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;说明：以下按原文段落顺序，每段原文后附【释文】与【生僻字注音释义】。张商英原注以（）标出，我另行补充白话释义。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="序"&gt;序&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;原文&lt;/strong&gt;：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;黄石公《素书》六篇，按《前汉》列传，黄石公圯桥所授子房书，世人多以三略为是，盖传之者误也。晋乱，有盗发子房冢，於玉枕中获此书，凡一千三百三十六言，上有秘戒，不许传於不道、不神、不圣、不贤之人。若非其人，必受其殃；得人不传，亦受其殃。呜呼，其慎重如此。黄石公得子房而传之，子房不得其传而葬之。后五百余年而盗获之，自是《素书》始传於人间。然其传者特黄石公之言耳，而公之意，其可以言尽哉。&lt;/p&gt;</description></item><item><title>第13章 函数</title><link>https://before80.github.io/prgms/Python/basic/Chapter-13-Functions/</link><pubDate>Wed, 08 Apr 2026 13:22:00 +0800</pubDate><guid>https://before80.github.io/prgms/Python/basic/Chapter-13-Functions/</guid><description>&lt;h1 id="第-13-章函数python-的万能积木"&gt;第 13 章：函数——Python 的&amp;quot;万能积木&amp;quot;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;如果说编程是一场建造游戏，那函数就是你手里最万能的积木。它可以小到只做一件事，也可以复杂到帮你登上月球。这一章，我们来好好聊聊这个让你从&amp;quot;写代码&amp;quot;升级到&amp;quot;设计代码&amp;quot;的核心概念。&lt;/p&gt;</description></item><item><title>第13章：网络优化 —— 中国用户的必修课 ⭐</title><link>https://before80.github.io/prgms/Git/Chapter-13-Network-Optimization/</link><pubDate>Fri, 03 Apr 2026 19:36:48 +0800</pubDate><guid>https://before80.github.io/prgms/Git/Chapter-13-Network-Optimization/</guid><description>&lt;h1 id="第13章网络优化--中国用户的必修课-"&gt;第13章：网络优化 —— 中国用户的必修课 ⭐&lt;/h1&gt;
&lt;p&gt;如果你在中国使用GitHub，这一章就是为你量身定制的救命稻草！相信你一定经历过这样的绝望时刻：凌晨三点，你终于写完了代码，兴奋地输入 &lt;code&gt;git push&lt;/code&gt;，然后&amp;hellip;进度条卡住了。一分钟、两分钟、五分钟&amp;hellip;最后&amp;quot;Connection timeout&amp;quot;。这一刻，你想砸键盘、想摔鼠标、想对着屏幕怒吼。别慌，这不是你的错，是&amp;quot;国际带宽&amp;quot;的锅！&lt;/p&gt;</description></item><item><title>第13章 类与对象——Java 世界的基本单位</title><link>https://before80.github.io/prgms/Java/basic/Chapter-13-classes-and-objects/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-13-classes-and-objects/</guid><description>&lt;h1 id="第十三章-类与对象java-世界的基本单位"&gt;第十三章 类与对象——Java 世界的基本单位&lt;/h1&gt;
&lt;p&gt;想象一下，如果你要建造一座房子，你需要什么？&lt;/p&gt;
&lt;p&gt;蓝图！没有蓝图，工人们怎么知道墙要多高、门要多大、窗户朝哪开？&lt;/p&gt;
&lt;p&gt;在 Java 的世界里，&lt;strong&gt;类（Class）&lt;/strong&gt; 就是那张蓝图，而&lt;strong&gt;对象（Object）&lt;/strong&gt; 就是根据这张蓝图建出来的真实房子。&lt;/p&gt;</description></item><item><title>第13章：文本扫描与分词——bufio 包</title><link>https://before80.github.io/prgms/go/std/Chapter-13-bufio/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-13-bufio/</guid><description>&lt;h1 id="第13章文本扫描与分词bufio-包"&gt;第13章：文本扫描与分词——bufio 包&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;慢着点儿！别一个字节一个字节地往嘴里塞，bufio 给你准备了一个大碗，一次性吃饱！&amp;rdquo; —— bufio 的设计哲学&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Go 语言的 &lt;code&gt;bufio&lt;/code&gt; 包是 I/O 性能优化的大杀器。当你需要对文件、网络连接、标准输入输出进行读写时，&lt;code&gt;bufio&lt;/code&gt; 用缓冲区（Buffer）把多次小规模 I/O 合并成少量大规模 I/O，让你的程序快得像坐上了火箭。本章我们就来深入探索这个&amp;quot;装缓冲区&amp;quot;的魔法包。&lt;/p&gt;</description></item><item><title>第 13 章：预处理指令——C 语言的'剧本编辑室'</title><link>https://before80.github.io/prgms/C/basic/Chapter-13-Preprocessor/</link><pubDate>Sun, 29 Mar 2026 22:34:00 +0800</pubDate><guid>https://before80.github.io/prgms/C/basic/Chapter-13-Preprocessor/</guid><description>&lt;h1 id="第-13-章预处理指令c-语言的剧本编辑室"&gt;第 13 章：预处理指令——C 语言的&amp;quot;剧本编辑室&amp;quot;&lt;/h1&gt;
&lt;p&gt;欢迎来到第 13 章！如果你觉得前面的指针、数组、函数已经够刺激了，那预处理指令这章绝对会让你大开眼界。&lt;/p&gt;</description></item><item><title>第13章 运算符重载</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-13-Operator-Overloading/</link><pubDate>Sun, 29 Mar 2026 21:03:00 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-13-Operator-Overloading/</guid><description>&lt;h1 id="第13章-运算符重载"&gt;第13章 运算符重载&lt;/h1&gt;
&lt;p&gt;想象一下，如果&lt;code&gt;+&lt;/code&gt;只能做数字加法，生活该多无聊啊！&lt;code&gt;&amp;quot;Hello&amp;quot; + &amp;quot;World&amp;quot;&lt;/code&gt;？不行不行，得调函数！&lt;code&gt;vec1 + vec2&lt;/code&gt;？做梦吧您！幸好C++给了我们&lt;strong&gt;运算符重载&lt;/strong&gt;这把魔法棒，让我们可以重新定义运算符的行为。今天就让我们一起来玩转这把魔法棒，看看如何让&lt;code&gt;+&lt;/code&gt;做加法以外的事情——当然，是做&lt;strong&gt;有意义&lt;/strong&gt;的事情！&lt;/p&gt;</description></item><item><title>第 13 章 并发编程</title><link>https://before80.github.io/prgms/Rust/basic/Chapter-13-Concurrency/</link><pubDate>Fri, 27 Mar 2026 17:24:46 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/basic/Chapter-13-Concurrency/</guid><description>&lt;h1 id="第-13-章-并发编程concurrency"&gt;第 13 章 并发编程（Concurrency）&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;并发，就是同时处理多件事的能力；并行，就是同时做多件事。听起来像绕口令？但如果你想在 Rust 里玩转多线程，这两个概念你必须分清楚——就像你必须分清楚&amp;rsquo;我想吃火锅&amp;rsquo;和&amp;rsquo;我正在吃火锅&amp;rsquo;一样。&amp;rdquo;&lt;/p&gt;</description></item><item><title>第13章 测试与调试</title><link>https://before80.github.io/prgms/Js/tools/build/vite/Chapter-13-Testing-And-Debugging/</link><pubDate>Fri, 27 Mar 2026 17:13:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/build/vite/Chapter-13-Testing-And-Debugging/</guid><description>&lt;h1 id="chapter-13-testing-and-debugging"&gt;Chapter-13-Testing-And-Debugging&lt;/h1&gt;
&lt;h1 id="第13章测试与调试"&gt;第13章：测试与调试&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;测试？那是什么？能吃吗？&amp;rdquo;&lt;/p&gt;
&lt;p&gt;如果你也是这么想的，那这章就是你的&amp;quot;觉醒时刻&amp;quot;。没有测试的代码就像没有安全带的赛车——可能跑得很快，但一出事就是大事。&lt;/p&gt;</description></item><item><title>第13章 边框属性</title><link>https://before80.github.io/prgms/CSS/basic/Chapter-13-Border-Properties/</link><pubDate>Fri, 27 Mar 2026 16:53:00 +0800</pubDate><guid>https://before80.github.io/prgms/CSS/basic/Chapter-13-Border-Properties/</guid><description>&lt;h1 id="第十三章边框属性"&gt;第十三章：边框属性&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;边框是元素的&amp;quot;轮廓线&amp;quot;，它让元素从背景中凸显出来。学会控制边框，你的网页元素就能有清晰的边界和立体感。想象一下，一个按钮没有边框，就像一个人出门没穿裤子——技术上不是不行，但你肯定不想看到那个场面。&lt;/p&gt;</description></item><item><title>第13章 TypeScript 5.x ~ 6.x 新特性详解</title><link>https://before80.github.io/prgms/Ts/basic/Chapter-13-TypeScript-5x-6x-new-features/</link><pubDate>Thu, 26 Mar 2026 21:05:00 +0800</pubDate><guid>https://before80.github.io/prgms/Ts/basic/Chapter-13-TypeScript-5x-6x-new-features/</guid><description>&lt;h1 id="第-13-章-typescript-5x--6x-新特性详解"&gt;第 13 章 TypeScript 5.x ~ 6.x 新特性详解&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;本章说明&lt;/strong&gt;：TypeScript 从 5.0 到 6.x，引入了大量让人眼前一亮的新特性。本章按版本时间线，从实际应用角度讲解每个特性的设计动机、语法和典型使用场景，让你不仅「知道有这回事」，更能「知道什么时候用它」。&lt;/p&gt;</description></item><item><title>第13章 useMemo、useCallback与性能优化</title><link>https://before80.github.io/prgms/Js/frameworks/react/Chapter-13-useMemo-useCallback-and-React.memo-Performance-Optimization/</link><pubDate>Wed, 25 Mar 2026 12:56:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/react/Chapter-13-useMemo-useCallback-and-React.memo-Performance-Optimization/</guid><description>&lt;h1 id="chapter-13---usememousecallback-与-reactmemo性能优化"&gt;Chapter-13 - useMemo、useCallback 与 React.memo——性能优化&lt;/h1&gt;
&lt;h2 id="131-usememo缓存计算结果"&gt;13.1 useMemo：缓存计算结果&lt;/h2&gt;
&lt;h3 id="1311-为什么需要-usememo"&gt;13.1.1 为什么需要 useMemo？&lt;/h3&gt;
&lt;p&gt;假设你有一个组件，每次渲染时都需要对大量数据做过滤、排序、统计——这些计算可能很耗时（想象一下对10万条数据排序）。问题是：&lt;strong&gt;即使数据没变，这些计算在每次渲染时都会重复执行&lt;/strong&gt;。&lt;/p&gt;</description></item><item><title>第13章 Pinia 状态管理</title><link>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-13-Pinia/</link><pubDate>Wed, 25 Mar 2026 12:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-13-Pinia/</guid><description>&lt;h1 id="第十三章-pinia-状态管理"&gt;第十三章 Pinia 状态管理&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;当应用规模变大，组件之间需要共享的数据会越来越多——用户登录信息、全局主题配置、购物车内容、通知列表……这些数据放在组件里会导致层层 props 穿透，放全局变量会失去响应式。Pinia 就是来解决这个问题的。Pinia 是 Vue 官方推荐的新一代状态管理库，它比 Vuex 更简洁、更 TypeScript 友好，是 Vue 3 项目的不二之选。&lt;/p&gt;</description></item><item><title>第 13 章 递归与函数式</title><link>https://before80.github.io/prgms/Js/basic/Chapter-13-Recursion-and-Functional-Programming/</link><pubDate>Tue, 24 Mar 2026 22:08:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/basic/Chapter-13-Recursion-and-Functional-Programming/</guid><description>&lt;h1 id="第-13-章-递归与函数式"&gt;第 13 章 递归与函数式&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;递归是程序员的瑞士军刀，函数式编程是代码的诗歌。当两者结合，就像给程序员装上了翅膀——可以飞得很高，但也要小心别撞上&amp;quot;栈溢出&amp;quot;的天花板。&lt;/p&gt;</description></item><item><title>第13章：磁盘管理入门</title><link>https://before80.github.io/prgms/linux/file_system_basic/Chapter-13-Disk-Management/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/file_system_basic/Chapter-13-Disk-Management/</guid><description>&lt;h1 id="第十三章磁盘管理入门"&gt;第十三章：磁盘管理入门&lt;/h1&gt;
&lt;h2 id="131-磁盘分区概念为什么要分区"&gt;13.1 磁盘分区概念：为什么要分区？&lt;/h2&gt;
&lt;p&gt;想象一下：你买了一个巨大的仓库（硬盘），但是&lt;strong&gt;不分隔间&lt;/strong&gt;就直接往里塞东西&amp;hellip;找东西的时候怎么办？把整个仓库翻个底朝天？&lt;/p&gt;</description></item><item><title>第13章 切片</title><link>https://before80.github.io/prgms/go/basic/Chapter-13-Slices/</link><pubDate>Fri, 20 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/basic/Chapter-13-Slices/</guid><description>&lt;h1 id="第13章-切片"&gt;第13章 切片&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;数组是那块 immutable 的金漆招牌，切片才是 Go 程序员真正的日常。&amp;rdquo; —— 没有人说过这句话，但它是真的。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;如果说数组是 Go 语言世界里的&amp;quot;固定座位&amp;quot;，那切片就是那个可以随时招呼朋友来坐、椅子不够就再搬一把的&lt;strong&gt;动态卡座&lt;/strong&gt;。你可能在其他语言里见过&amp;quot;动态数组&amp;quot;、&amp;ldquo;列表&amp;rdquo;、&amp;ldquo;ArrayList&amp;quot;之类的概念——在 Go 里，这些统统叫&lt;strong&gt;切片（Slice）&lt;/strong&gt;。&lt;/p&gt;</description></item><item><title>第14章 养志法灵龟——目标不是喊出来的，是养出来的</title><link>https://before80.github.io/prgms/Philosophy/guiGuZi/14/</link><pubDate>Sat, 11 Apr 2026 21:52:00 +0800</pubDate><guid>https://before80.github.io/prgms/Philosophy/guiGuZi/14/</guid><description>&lt;h1 id="第十四章-养志法灵龟目标不是喊出来的是养出来的"&gt;第十四章 养志法灵龟——&amp;ldquo;目标不是喊出来的，是养出来的&amp;rdquo;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本章核心：志向不是口号，是心气滋养的结果。欲望管理 + 情绪稳定 + 专注力训练，才能让目标落地生根、开花结果。&lt;/p&gt;</description></item><item><title>第14章 面向对象</title><link>https://before80.github.io/prgms/Python/basic/Chapter-14-OOP/</link><pubDate>Wed, 08 Apr 2026 13:22:00 +0800</pubDate><guid>https://before80.github.io/prgms/Python/basic/Chapter-14-OOP/</guid><description>&lt;h1 id="chapter-14面向对象编程ooppython的造人指南"&gt;Chapter 14：面向对象编程（OOP）——Python的&amp;quot;造人&amp;quot;指南&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;🎭 警告：前方高能！这可能是你见过最不正经的OOP教程，但保证看完能写出会跑的代码。&lt;/p&gt;</description></item><item><title>第14章：分支策略 —— 从混乱到有序</title><link>https://before80.github.io/prgms/Git/Chapter-14-Branching-Strategies/</link><pubDate>Fri, 03 Apr 2026 19:36:48 +0800</pubDate><guid>https://before80.github.io/prgms/Git/Chapter-14-Branching-Strategies/</guid><description>&lt;h1 id="第14章分支策略--从混乱到有序"&gt;第14章：分支策略 —— 从混乱到有序&lt;/h1&gt;
&lt;p&gt;想象一下这个场景：你是一个五人团队的负责人，每个人都在main分支上开发。张三在改登录功能，李四在加支付模块，王五在修Bug，赵六在重构代码。大家每天推送代码，冲突不断，Bug频出，上线时谁也不知道代码能不能跑。终于有一天，main分支崩溃了，你们花了一周时间才恢复。这就是没有分支策略的噩梦！&lt;/p&gt;</description></item><item><title>第14章 继承——血脉的传承</title><link>https://before80.github.io/prgms/Java/basic/Chapter-14-inheritance/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-14-inheritance/</guid><description>&lt;h1 id="第十四章-继承血脉的传承"&gt;第十四章 继承——血脉的传承&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;龙生龙，凤生凤，老鼠的儿子会打洞。&amp;quot;——这句老话完美诠释了继承的精髓。在面向对象编程的世界里，继承让我们可以站在巨人的肩膀上，复用现有代码的同时，还能青出于蓝。&lt;/p&gt;</description></item><item><title>第 14 章：正则表达式——regexp 包</title><link>https://before80.github.io/prgms/go/std/Chapter-14-regexp/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-14-regexp/</guid><description>&lt;h1 id="第-14-章正则表达式regexp-包"&gt;第 14 章：正则表达式——regexp 包&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;正则表达式，这个让程序员又爱又恨的小东西。爱它，是因为它能用几行代码解决你原本要写几百行才能搞定的问题；恨它，是因为那几行代码你可能得调试一整天。Google 开发的 RE2 引擎为 Go 语言提供了稳定、高效的正则实现——没有那些花里胡哨（反向引用、lookahead）的特性，反而让你的正则更安全、更可预测。&lt;/p&gt;</description></item><item><title>第 14 章：动态内存管理 —— 程序的'房产证'之争</title><link>https://before80.github.io/prgms/C/basic/Chapter-14-Dynamic-Memory/</link><pubDate>Sun, 29 Mar 2026 22:34:00 +0800</pubDate><guid>https://before80.github.io/prgms/C/basic/Chapter-14-Dynamic-Memory/</guid><description>&lt;h1 id="第-14-章动态内存管理--程序的房产证之争"&gt;第 14 章：动态内存管理 —— 程序的&amp;quot;房产证&amp;quot;之争&lt;/h1&gt;
&lt;p&gt;想象一下，你租房子住。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;静态内存&lt;/strong&gt; 就像你买了一套公寓，大小固定，格局固定，你想在客厅放张床？门都没有！因为公寓的墙是&amp;quot;浇筑&amp;quot;好的，不能改。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;动态内存&lt;/strong&gt; 就像你包下了一整块空地，今天想建小茅屋，明天想建大别墅，后天拆了建游泳池——随你心情，想怎么折腾就怎么折腾！&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;动态内存管理，是 C 语言中最强大、最危险、也是面试官最爱的技能之一。学会了，你就是&amp;quot;内存大亨&amp;quot;；学废了，分分钟把程序写成&amp;quot;内存凶杀案现场&amp;quot;。准备好了吗？我们出发！&lt;/p&gt;</description></item><item><title>第14章 继承与多态</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-14-Inheritance-and-Polymorphism/</link><pubDate>Sun, 29 Mar 2026 21:03:00 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-14-Inheritance-and-Polymorphism/</guid><description>&lt;h1 id="第14章-继承与多态"&gt;第14章 继承与多态&lt;/h1&gt;
&lt;p&gt;各位看官，如果把C++比作一座金碧辉煌的城堡，那继承和多态就是这座城堡里最让人又爱又恨的两件魔法道具。为啥说&amp;quot;又爱又恨&amp;quot;呢？因为它们太强大了，强大到你可以用它们构建出无比优雅的程序结构；但它们也太复杂了，复杂到有时候你明明觉得自己写对了，程序却像调皮的小精灵一样不听使唤。准备好了吗？让我们戴上程序员的帽子，拿起键盘，开始这场继承与多态的冒险之旅！&lt;/p&gt;</description></item><item><title>第 14 章 异步编程</title><link>https://before80.github.io/prgms/Rust/basic/Chapter-14-Async/</link><pubDate>Fri, 27 Mar 2026 17:24:46 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/basic/Chapter-14-Async/</guid><description>&lt;h1 id="第-14-章-异步编程asyncawait"&gt;第 14 章 异步编程（Async/Await）&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;如果说多线程是&amp;rsquo;分身术&amp;rsquo;，那 async/await 就是&amp;rsquo;影分身术&amp;rsquo;——不需要真正的多个身体，只需要一个身体就能同时处理多个任务。它不占用你的查克拉（系统资源），但能让你像孙悟空一样同时变出好几个自己来干活。&amp;rdquo;&lt;/p&gt;</description></item><item><title>第14章 完整项目实战</title><link>https://before80.github.io/prgms/Js/tools/build/vite/Chapter-14-Project-Practice/</link><pubDate>Fri, 27 Mar 2026 17:13:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/build/vite/Chapter-14-Project-Practice/</guid><description>&lt;h1 id="chapter-14-project-practice"&gt;Chapter-14-Project-Practice&lt;/h1&gt;
&lt;h1 id="第14章完整项目实战"&gt;第14章：完整项目实战&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;纸上得来终觉浅，绝知此事要躬行。&lt;/p&gt;
&lt;p&gt;前面 13 章我们学了 Vite 的各种知识点，但&amp;quot;知道&amp;quot;和&amp;quot;会用&amp;quot;之间还隔着一道鸿沟——实战。这一章，我们要跨过这道鸿沟。&lt;/p&gt;</description></item><item><title>第14章 CSS尺寸与溢出</title><link>https://before80.github.io/prgms/CSS/basic/Chapter-14-Dimensions-and-Overflow/</link><pubDate>Fri, 27 Mar 2026 16:53:00 +0800</pubDate><guid>https://before80.github.io/prgms/CSS/basic/Chapter-14-Dimensions-and-Overflow/</guid><description>&lt;h1 id="第十四章尺寸与溢出属性"&gt;第十四章：尺寸与溢出属性&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;一个元素到底有多&amp;quot;大&amp;quot;？这个问题看似简单，但如果你回答不上来，可能意味着你还没完全理解 CSS 的尺寸系统。CSS 的尺寸属性就像是一个元素的身高体重秤——width 决定横向有多宽，height 决定纵向有多高。但这只是表面现象，因为还有一堆&amp;quot;限制器&amp;quot;（max-width、min-width）以及&amp;quot;溢出处理&amp;quot;（overflow）在背后虎视眈眈。这一章，我们就来好好聊聊元素的尺寸和溢出那些事儿。&lt;/p&gt;</description></item><item><title>第14章 React + TypeScript 实战</title><link>https://before80.github.io/prgms/Ts/basic/Chapter-14-React-TypeScript-practical-guide/</link><pubDate>Thu, 26 Mar 2026 21:05:00 +0800</pubDate><guid>https://before80.github.io/prgms/Ts/basic/Chapter-14-React-TypeScript-practical-guide/</guid><description>&lt;h1 id="第-14-章-react--typescript-实战"&gt;第 14 章 React + TypeScript 实战&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;本章说明&lt;/strong&gt;：React + TypeScript 是现代前端开发的标配组合。本章从环境搭建讲起，覆盖函数组件类型、Hooks 类型、事件处理、常用模式和第三方组件库类型化，让你从零到生产级掌握 React + TypeScript 的最佳实践。&lt;/p&gt;</description></item><item><title>第14章 useLayoutEffect与Suspense基础</title><link>https://before80.github.io/prgms/Js/frameworks/react/Chapter-14-useLayoutEffect-and-Suspense-Basics/</link><pubDate>Wed, 25 Mar 2026 12:56:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/react/Chapter-14-useLayoutEffect-and-Suspense-Basics/</guid><description>&lt;h1 id="chapter-14---uselayouteffect-与-suspense-基础"&gt;Chapter-14 - useLayoutEffect 与 Suspense 基础&lt;/h1&gt;
&lt;h2 id="141-uselayouteffect"&gt;14.1 useLayoutEffect&lt;/h2&gt;
&lt;h3 id="1411-uselayouteffect-与-useeffect-的时机差异"&gt;14.1.1 useLayoutEffect 与 useEffect 的时机差异&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;useLayoutEffect&lt;/code&gt; 和 &lt;code&gt;useEffect&lt;/code&gt; 的签名完全一样，但&lt;strong&gt;执行时机完全不同&lt;/strong&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-jsx" data-lang="jsx"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;useEffect&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(()&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 在渲染内容显示到屏幕之后异步执行
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;log&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;useEffect: 渲染后异步执行&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;},&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;[])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;useLayoutEffect&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(()&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 在渲染后但浏览器绘制之前同步执行
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;log&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;useLayoutEffect: 渲染后同步执行&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;},&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;[])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;执行顺序：&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>第14章 性能优化</title><link>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-14-Performance-Optimization/</link><pubDate>Wed, 25 Mar 2026 12:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-14-Performance-Optimization/</guid><description>&lt;h1 id="第十四章-性能优化"&gt;第十四章 性能优化&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;Vue 3 本身已经很快了，但如果你的应用很大或者用户群体在低网速环境下，性能优化仍然至关重要。本章我们会从加载优化、渲染优化、包体积优化、SEO 优化、Core Web Vitals、错误处理六个维度，系统讲解 Vue 3 的性能优化策略。学会这些，你写出来的应用会比别人快上一大截。&lt;/p&gt;</description></item><item><title>第 14 章 事件循环</title><link>https://before80.github.io/prgms/Js/basic/Chapter-14-Event-Loop/</link><pubDate>Tue, 24 Mar 2026 22:08:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/basic/Chapter-14-Event-Loop/</guid><description>&lt;h1 id="第-14-章-事件循环"&gt;第 14 章 事件循环&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;事件循环是 JavaScript 的&amp;quot;大总管&amp;quot;，负责调度所有任务的执行顺序。理解了它，你就能解释为什么有些代码&amp;quot;明明后定义却先执行&amp;quot;，为什么 Promise 比 setTimeout 更有优先级。准备好了吗？让我们进入 JavaScript 的&amp;quot;调度室&amp;quot;！&lt;/p&gt;</description></item><item><title>第14章：链接文件</title><link>https://before80.github.io/prgms/linux/file_system_basic/Chapter-14-Linking-Files/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/file_system_basic/Chapter-14-Linking-Files/</guid><description>&lt;h1 id="第十四章链接文件"&gt;第十四章：链接文件&lt;/h1&gt;
&lt;h2 id="141-什么是链接链接的作用"&gt;14.1 什么是链接？链接的作用&lt;/h2&gt;
&lt;p&gt;想象一下这样的场景：你的书架上有一本超级重要的书《Linux入门到精通》。你把它放在了&amp;quot;技术书籍&amp;quot;区，但你想在&amp;quot;床头&amp;quot;也能随时看到它。&lt;/p&gt;</description></item><item><title>第14章 map</title><link>https://before80.github.io/prgms/go/basic/Chapter-14-Map/</link><pubDate>Fri, 20 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/basic/Chapter-14-Map/</guid><description>&lt;h1 id="第14章-map"&gt;第14章 map&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;切片是数组的窗户，map 就是哈希表的大脑。&amp;rdquo; —— 仍然是没有人说过的话，但很准确。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;如果说切片是 Go 里的&amp;quot;动态数组&amp;quot;，那 map 就是 Go 里的&lt;strong&gt;哈希表（Hash Table）&lt;strong&gt;实现。切片用整数下标找元素，map 用&lt;/strong&gt;键（key）&lt;strong&gt;找&lt;/strong&gt;值（value）&lt;/strong&gt;——键值对儿。你在其他语言里见过的 HashMap、Dictionary、Object（JS）、HashTable，都跟 Go 里的 map 是同一类东西。&lt;/p&gt;</description></item><item><title>第15章 实意法螣蛇——想法落地不靠喊，靠的是内心定力</title><link>https://before80.github.io/prgms/Philosophy/guiGuZi/15/</link><pubDate>Sat, 11 Apr 2026 21:52:00 +0800</pubDate><guid>https://before80.github.io/prgms/Philosophy/guiGuZi/15/</guid><description>&lt;h1 id="第十五章-实意法螣蛇想法落地不靠喊靠的是内心定力"&gt;第十五章 实意法螣蛇——&amp;ldquo;想法落地不靠喊，靠的是内心定力&amp;rdquo;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本章核心：意念坚定才能谋略成真。心静虑远、神策自生、内外合一，把&amp;quot;我想&amp;quot;变成&amp;quot;我能&amp;quot;。&lt;/p&gt;</description></item><item><title>第15章 进阶语法</title><link>https://before80.github.io/prgms/Python/basic/Chapter-15-Advanced-Syntax/</link><pubDate>Wed, 08 Apr 2026 13:22:00 +0800</pubDate><guid>https://before80.github.io/prgms/Python/basic/Chapter-15-Advanced-Syntax/</guid><description>&lt;h1 id="第十五章python-高级语法"&gt;第十五章：Python 高级语法&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;🎭 欢迎来到 Python 的&amp;quot;成人区&amp;quot;！前面十四章你学会了走路，这一章我们要学跑酷、漂移、甚至飞檐走壁！&lt;/p&gt;
&lt;p&gt;别怕，我会像教小孩用筷子一样耐心地解释每一个知识点。幽默、风趣、深入浅出——这就是我们的风格！&lt;/p&gt;</description></item><item><title>第15章：冲突解决进阶 —— 化干戈为玉帛</title><link>https://before80.github.io/prgms/Git/Chapter-15-Advanced-Conflict-Resolution/</link><pubDate>Fri, 03 Apr 2026 19:36:48 +0800</pubDate><guid>https://before80.github.io/prgms/Git/Chapter-15-Advanced-Conflict-Resolution/</guid><description>&lt;h1 id="第15章冲突解决进阶--化干戈为玉帛"&gt;第15章：冲突解决进阶 —— 化干戈为玉帛&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;想象一下：你辛辛苦苦写了一天的代码，正准备提交，突然 Git 冷冷地告诉你：&amp;ldquo;Merge conflict&amp;rdquo;。那一刻，是不是感觉心脏骤停？别慌，这一章就是来拯救你的！&lt;/p&gt;</description></item><item><title>第15章 多态——同一个方法，不同的表现</title><link>https://before80.github.io/prgms/Java/basic/Chapter-15-polymorphism/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-15-polymorphism/</guid><description>&lt;h1 id="第十五章-多态同一个方法不同的表现"&gt;第十五章 多态——同一个方法，不同的表现&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;🎭 想象一下，你的手机里有一个&amp;quot;拍照&amp;quot;按钮。但这个按钮在不同手机上的表现完全不同——iPhone 拍出 Live Photo，华为可能给你一个月亮模式的夜景，三星可能直接给你一张 GIF。这，就是多态！&lt;/p&gt;</description></item><item><title>第15章：IO 框架——io 和 io/fs 包</title><link>https://before80.github.io/prgms/go/std/Chapter-15-io/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-15-io/</guid><description>&lt;h1 id="第15章io-框架io-和-iofs-包"&gt;第15章：IO 框架——io 和 io/fs 包&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;你有没有想过，读取一个文件、下载一个网页、从键盘获取输入——这些操作在底层其实惊人地相似？Go 的 io 包用几个极简接口，统一了世间所有的输入输出操作。这就是 Go 的哲学：&lt;strong&gt;小接口，大智慧&lt;/strong&gt;。&lt;/p&gt;</description></item><item><title>第 15 章：文件操作 —— 程序的'读心术'与'记忆术'</title><link>https://before80.github.io/prgms/C/basic/Chapter-15-File-Operations/</link><pubDate>Sun, 29 Mar 2026 22:34:00 +0800</pubDate><guid>https://before80.github.io/prgms/C/basic/Chapter-15-File-Operations/</guid><description>&lt;h1 id="第-15-章文件操作--程序的读心术与记忆术"&gt;第 15 章：文件操作 —— 程序的&amp;quot;读心术&amp;quot;与&amp;quot;记忆术&amp;quot;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本章你会学到什么？&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;什么是流（stream）—— 数据流动的&amp;quot;管道&amp;quot;&lt;/li&gt;
&lt;li&gt;标准输入输出的三兄弟：stdin、stdout、stderr&lt;/li&gt;
&lt;li&gt;如何打开和关闭文件——敲门和关门的基本礼仪&lt;/li&gt;
&lt;li&gt;各种文件读取写入姿势——总有一款适合你&lt;/li&gt;
&lt;li&gt;文件指针的魔法——随意穿梭在文件的任何位置&lt;/li&gt;
&lt;li&gt;大文件处理的技巧——突破 2GB 天花板&lt;/li&gt;
&lt;li&gt;C23 的酷炫新特性——位置参数&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;想象一下这个场景：你昨天写了一篇超级重要的日记，记录了你暗恋隔壁班小美的所有心路历程。结果今天一开机，日记没了！程序崩溃、关机、蓝屏——管它什么，反正你的心血结晶就这么人间蒸发了。&lt;/p&gt;</description></item><item><title>第15章 结构体与类对比</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-15-Struct-vs-Class/</link><pubDate>Sun, 29 Mar 2026 21:03:00 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-15-Struct-vs-Class/</guid><description>&lt;h1 id="第15章-结构体与类对比"&gt;第15章 结构体与类对比&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;💡 在C++的世界里，struct和class就像双胞胎——长得几乎一模一样，但总有些细微差别让人纠结。本章我们就来扒一扒这对&amp;quot;表兄弟&amp;quot;的底裤，看看它们到底有什么不同，以及什么时候该用谁。&lt;/p&gt;</description></item><item><title>第 15 章 测试</title><link>https://before80.github.io/prgms/Rust/basic/Chapter-15-Testing/</link><pubDate>Fri, 27 Mar 2026 17:24:46 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/basic/Chapter-15-Testing/</guid><description>&lt;h1 id="chapter-15-测试testing"&gt;Chapter 15 测试（Testing）&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;想象一下，你是一家餐厅的厨师，你做完一道菜直接端给客人——没尝过、没看过、没闻过。这时候客人吃到了半生不熟的牛排，里面还有头发丝，你猜会发生什么？轻则差评，重则上新闻。程序员的代码也是一样，写完不测试就发布到生产环境，那简直是给用户埋雷，自己踩自己埋的那种。测试，就是代码的&amp;quot;质检部门&amp;quot;，是程序员的&amp;quot;试毒小分队&amp;quot;，是你在凌晨三点发现 bug 之前就把它揪出来的得力助手。Rust 深知测试的重要性，所以它把测试框架内置在语言核心中，让你写测试就像点外卖一样简单——好吧，可能没那么简单，但至少比你想象的简单多了！&lt;/p&gt;</description></item><item><title>第15章 Vite 核心原理</title><link>https://before80.github.io/prgms/Js/tools/build/vite/Chapter-15-Vite-Core-Principles/</link><pubDate>Fri, 27 Mar 2026 17:13:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/build/vite/Chapter-15-Vite-Core-Principles/</guid><description>&lt;h1 id="chapter-15-vite-core-principles"&gt;Chapter-15-Vite-Core-Principles&lt;/h1&gt;
&lt;h1 id="第15章vite-核心原理"&gt;第15章：Vite 核心原理&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;你已经会用 Vite 了——创建项目、配置插件、写代码、构建部署，一条龙服务。但你有没有想过：Vite 背后到底是怎么工作的？&lt;/p&gt;
&lt;p&gt;为什么开发时启动这么快？为什么 HMR 能做到毫秒级更新？为什么生产构建用的是 Rollup 而不是 Vite 自己？&lt;/p&gt;</description></item><item><title>第15章 表格属性</title><link>https://before80.github.io/prgms/CSS/basic/Chapter-15-Table-Properties/</link><pubDate>Fri, 27 Mar 2026 16:53:00 +0800</pubDate><guid>https://before80.github.io/prgms/CSS/basic/Chapter-15-Table-Properties/</guid><description>&lt;h1 id="第十五章表格属性"&gt;第十五章：表格属性&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;表格是数据展示的重要形式，但默认的表格样式往往让人&amp;quot;不忍直视&amp;quot;。这一章，我们将学习如何用 CSS 把那些&amp;quot;丑陋&amp;quot;的表格变成&amp;quot;颜值与实力并存&amp;quot;的数据展示利器。从边框合并到单元格对齐，从间距控制到布局优化，我们一起来探索表格的 CSS 美化之道。&lt;/p&gt;</description></item><item><title>第15章 Node.js + TypeScript 实战</title><link>https://before80.github.io/prgms/Ts/basic/Chapter-15-Node.js-and-TypeScript-in-Practice/</link><pubDate>Thu, 26 Mar 2026 21:05:00 +0800</pubDate><guid>https://before80.github.io/prgms/Ts/basic/Chapter-15-Node.js-and-TypeScript-in-Practice/</guid><description>&lt;h1 id="第-15-章-nodejs--typescript-实战"&gt;第 15 章 Node.js + TypeScript 实战&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;写 TypeScript 只会在浏览器里玩？那你只解锁了这门语言 20% 的成就。Node.js + TypeScript 才是真正的完全体——后端 API、数据库操作、文件系统、命令行工具，统统拿下。本章就是你的&amp;quot;全栈 TypeScript 修炼手册&amp;quot;。&lt;/p&gt;</description></item><item><title>第15章 组件设计模式</title><link>https://before80.github.io/prgms/Js/frameworks/react/Chapter-15-Component-Design-Patterns/</link><pubDate>Wed, 25 Mar 2026 12:56:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/react/Chapter-15-Component-Design-Patterns/</guid><description>&lt;h1 id="chapter-15---组件设计模式"&gt;Chapter-15 - 组件设计模式&lt;/h1&gt;
&lt;h2 id="151-高阶组件hoc"&gt;15.1 高阶组件（HOC）&lt;/h2&gt;
&lt;h3 id="1511-hoc-的概念接收组件返回新组件"&gt;15.1.1 HOC 的概念：接收组件，返回新组件&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;高阶组件（Higher-Order Component）&lt;/strong&gt; 是一个函数，接收一个组件作为参数，返回一个&lt;strong&gt;增强后的新组件&lt;/strong&gt;。&lt;/p&gt;</description></item><item><title>第15章 样式方案</title><link>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-15-Styles/</link><pubDate>Wed, 25 Mar 2026 12:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-15-Styles/</guid><description>&lt;h1 id="第十五章-样式方案"&gt;第十五章 样式方案&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;CSS 是 Vue 应用的门面。好看的样式能让用户愉悦，难看的样式能让人崩溃。本章我们会讲解 Vue 项目中的各种样式解决方案——CSS 预处理器（SCSS/Less/Stylus）、UnoCSS 原子化方案、CSS 变量实现主题切换、暗色模式适配。这些工具组合起来，能让你的样式开发效率提升好几倍。&lt;/p&gt;</description></item><item><title>第 15 章 Promise</title><link>https://before80.github.io/prgms/Js/basic/Chapter-15-Promise/</link><pubDate>Tue, 24 Mar 2026 22:08:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/basic/Chapter-15-Promise/</guid><description>&lt;h1 id="第-15-章-promise"&gt;第 15 章 Promise&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;Promise 是 JavaScript 异步编程的里程碑——它解决了回调地狱问题，让异步代码看起来像同步代码。学了这一章，你就能优雅地处理&amp;quot;等会儿再告诉你&amp;quot;的场景了！&lt;/p&gt;</description></item><item><title>第15章：用户管理基础</title><link>https://before80.github.io/prgms/linux/user_auth/Chapter-15-User-Management-Basics/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/user_auth/Chapter-15-User-Management-Basics/</guid><description>&lt;h1 id="第十五章用户管理基础"&gt;第十五章：用户管理基础&lt;/h1&gt;
&lt;p&gt;想象一下，你的Linux系统是一座摩天大楼，里面住着各种各样的&amp;quot;居民&amp;quot;。有只手遮天的物业老板（root），有负责电梯维护的打工人们（系统用户），还有每天上下班的白领们（普通用户）。这一章，我们就来聊聊这些居民的故事——他们是谁，怎么进来的，怎么管他们。&lt;/p&gt;</description></item><item><title>第15章 结构体</title><link>https://before80.github.io/prgms/go/basic/Chapter-15-Structs/</link><pubDate>Fri, 20 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/basic/Chapter-15-Structs/</guid><description>&lt;h1 id="第15章-结构体"&gt;第15章 结构体&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;数组是把同类东西装进一个盒子，结构体是把不同类东西装进一个盒子。&amp;rdquo; —— 这是结构体存在的意义。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;如果说数组是把同一种类型的数据打包成一组，那结构体就是把&lt;strong&gt;不同类型&lt;/strong&gt;的数据打包成一个整体。你可以把结构体想象成一张&lt;strong&gt;表格&lt;/strong&gt;：每一行是一个字段（field），每行有自己的名字和类型。比如一张学生信息表，有姓名（字符串）、年龄（整数）、身高（浮点数）——这些字段类型各不相同，只有结构体能装下它们。&lt;/p&gt;</description></item><item><title>第16章 分威法伏熊——真正的威慑，是让人不敢动你</title><link>https://before80.github.io/prgms/Philosophy/guiGuZi/16/</link><pubDate>Sat, 11 Apr 2026 21:52:00 +0800</pubDate><guid>https://before80.github.io/prgms/Philosophy/guiGuZi/16/</guid><description>&lt;h1 id="第十六章-分威法伏熊真正的威慑是让人不敢动你"&gt;第十六章 分威法伏熊——&amp;ldquo;真正的威慑，是让人不敢动你&amp;rdquo;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本章核心：威势不是吼出来的，是内在能量外溢的结果。静意固志、神归其舍，不战而屈人之兵。&lt;/p&gt;</description></item><item><title>第16章 模块</title><link>https://before80.github.io/prgms/Python/basic/Chapter-16-Modules/</link><pubDate>Wed, 08 Apr 2026 13:22:00 +0800</pubDate><guid>https://before80.github.io/prgms/Python/basic/Chapter-16-Modules/</guid><description>&lt;h1 id="chapter-16-模块python-的百宝箱"&gt;Chapter 16: 模块——Python 的百宝箱&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本章我们将探索 Python 世界里最神奇的东西——模块。想象一下，如果你是一家餐厅的厨师，不是每个菜都从零开始种菜养鸡，而是直接去菜市场买现成的原料。模块，就是 Python 的&amp;quot;菜市场&amp;quot;！&lt;/p&gt;</description></item><item><title>第16章：推送与拉取进阶 —— 与远程仓库的舞蹈</title><link>https://before80.github.io/prgms/Git/Chapter-16-Advanced-Push-Pull/</link><pubDate>Fri, 03 Apr 2026 19:36:48 +0800</pubDate><guid>https://before80.github.io/prgms/Git/Chapter-16-Advanced-Push-Pull/</guid><description>&lt;h1 id="第16章推送与拉取进阶--与远程仓库的舞蹈"&gt;第16章：推送与拉取进阶 —— 与远程仓库的舞蹈&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;想象一下，Git 是一场双人舞，你的本地仓库和远程仓库就是舞伴。&lt;code&gt;push&lt;/code&gt; 和 &lt;code&gt;pull&lt;/code&gt; 就是你的舞步——踩准节奏，舞姿优美；节奏乱了，就可能踩到对方的脚。这一章，让我们学会优雅地与远程仓库共舞！&lt;/p&gt;</description></item><item><title>第16章 抽象类与接口</title><link>https://before80.github.io/prgms/Java/basic/Chapter-16-abstract-classes-and-interfaces/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-16-abstract-classes-and-interfaces/</guid><description>&lt;h1 id="第十六章-抽象类与接口"&gt;第十六章 抽象类与接口&lt;/h1&gt;
&lt;div class="td-alert td-alert--md alert alert-note" role="alert"&gt;&lt;div class="td-alert-heading alert-heading" role="heading"&gt;说明&lt;/div&gt;
 &lt;div class="td-alert-body"&gt;
 &lt;p&gt;本章我们将探索 Java 中两个&amp;quot;高深莫测&amp;quot;的概念——抽象类和接口。别担心，我会用最接地气的方式把它们讲清楚。如果你之前被这两个概念折磨过，那这一章就是你的救星！&lt;/p&gt;</description></item><item><title>第 16 章：文件系统操作——os 包</title><link>https://before80.github.io/prgms/go/std/Chapter-16-os/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-16-os/</guid><description>&lt;h1 id="第-16-章文件系统操作os-包"&gt;第 16 章：文件系统操作——os 包&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;🎭 &amp;ldquo;在 Go 的世界里，os 包就是那个永远在线的『万能中介』——操作系统想搞事情？找它！程序想撩操作系统？也找它！&amp;rdquo;&lt;/p&gt;</description></item><item><title>第 16 章：输入输出详解</title><link>https://before80.github.io/prgms/C/basic/Chapter-16-Input-Output/</link><pubDate>Sun, 29 Mar 2026 22:34:00 +0800</pubDate><guid>https://before80.github.io/prgms/C/basic/Chapter-16-Input-Output/</guid><description>&lt;h1 id="第-16-章输入输出详解"&gt;第 16 章：输入输出详解&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;程序的本质，就是数据进来、转一圈、结果出去。没有输入输出的程序，就像一台永远不启动的发动机——再强大也只能是个摆设。&amp;rdquo;&lt;/p&gt;</description></item><item><title>第16章 函数模板</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-16-Function-Templates/</link><pubDate>Sun, 29 Mar 2026 21:03:00 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-16-Function-Templates/</guid><description>&lt;h1 id="第16章-函数模板"&gt;第16章 函数模板&lt;/h1&gt;
&lt;p&gt;想象一下，你是餐厅里的主厨。现在顾客点了三道菜：宫保鸡丁、红烧肉、鱼香肉丝。虽然都是&amp;quot;炒菜&amp;quot;，但食材不同、调料不同、火候不同。如果你为每道菜都写一份完整的&amp;quot;炒菜指南&amp;quot;，那得多累啊！&lt;/p&gt;</description></item><item><title>第 16 章 Unsafe Rust</title><link>https://before80.github.io/prgms/Rust/basic/Chapter-16-Unsafe-Rust/</link><pubDate>Fri, 27 Mar 2026 17:24:46 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/basic/Chapter-16-Unsafe-Rust/</guid><description>&lt;h1 id="chapter-16-unsafe-rust"&gt;Chapter 16 Unsafe Rust&lt;/h1&gt;
&lt;!-- CONTENT_MARKER --&gt;
&lt;p&gt;想象一下，你走进厨房，看到一把锋利得能切开原子弹级别的不锈钢菜刀。包装上写着大大的红色警示：&amp;ldquo;危险！请勿让儿童、宠物、以及自信过度的程序员接触！&amp;ldquo;这把菜刀能干很多普通菜刀做不到的事——比如一刀把砧板劈成两半，或者在你手指不注意的时候，给你一个终身难忘的教训。&lt;/p&gt;</description></item><item><title>第16章 esbuild 与 Rollup</title><link>https://before80.github.io/prgms/Js/tools/build/vite/Chapter-16-esbuild-And-Rollup/</link><pubDate>Fri, 27 Mar 2026 17:13:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/build/vite/Chapter-16-esbuild-And-Rollup/</guid><description>&lt;h1 id="chapter-16-esbuild-and-rollup"&gt;Chapter-16-esbuild-And-Rollup&lt;/h1&gt;
&lt;h1 id="第16章esbuild-与-rollup"&gt;第16章：esbuild 与 Rollup&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;Vite 的极速体验，背后有两个功臣：&lt;strong&gt;esbuild&lt;/strong&gt; 和 &lt;strong&gt;Rollup&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;esbuild 负责&amp;quot;快&amp;quot;——开发时的依赖预构建、TypeScript 转译、JSX 转译，它都能在毫秒级完成。&lt;/p&gt;</description></item><item><title>第16章 列表与计数器属性</title><link>https://before80.github.io/prgms/CSS/basic/Chapter-16-List-and-Counter-Properties/</link><pubDate>Fri, 27 Mar 2026 16:53:00 +0800</pubDate><guid>https://before80.github.io/prgms/CSS/basic/Chapter-16-List-and-Counter-Properties/</guid><description>&lt;h1 id="第十六章列表与计数器属性"&gt;第十六章：列表与计数器属性&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;列表是我们日常生活中经常遇到的东西——购物清单、待办事项、排行榜&amp;hellip; CSS 提供了丰富的列表样式控制。而 CSS 计数器更是一个&amp;quot;隐藏的神器&amp;quot;，它可以让你不依赖 JavaScript 就能实现自动编号功能。这一章，我们将一起探索列表和计数器的奥妙。&lt;/p&gt;</description></item><item><title>第16章 装饰器</title><link>https://before80.github.io/prgms/Ts/basic/Chapter-16-Decorators/</link><pubDate>Thu, 26 Mar 2026 21:05:00 +0800</pubDate><guid>https://before80.github.io/prgms/Ts/basic/Chapter-16-Decorators/</guid><description>&lt;h1 id="第-16-章-装饰器"&gt;第 16 章 装饰器&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;装饰器——Decorators，这是 TypeScript 里最&amp;quot;魔幻&amp;quot;的特性之一。它让你用一种类似&amp;quot;注解&amp;quot;的语法，给类、方法、属性&amp;quot;贴标签&amp;quot;，从而改变它们的行为。听起来很美好，但装饰器也是 TypeScript 里的&amp;quot;实验性禁区&amp;quot;——语法改了又改，提案换了好几版，到现在终于要修成正果了。&lt;/p&gt;</description></item><item><title>第16章 React样式全指南</title><link>https://before80.github.io/prgms/Js/frameworks/react/Chapter-16-React-Styling-Comprehensive-Guide/</link><pubDate>Wed, 25 Mar 2026 12:56:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/react/Chapter-16-React-Styling-Comprehensive-Guide/</guid><description>&lt;h1 id="chapter-16---react-样式全解"&gt;Chapter-16 - React 样式全解&lt;/h1&gt;
&lt;h2 id="161-内联样式"&gt;16.1 内联样式&lt;/h2&gt;
&lt;h3 id="1611-内联样式的基本写法"&gt;16.1.1 内联样式的基本写法&lt;/h3&gt;
&lt;p&gt;内联样式直接在 JSX 元素的 &lt;code&gt;style&lt;/code&gt; 属性中传入 JavaScript 对象：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;17
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;18
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;19
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;20
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;21
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;22
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;23
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-jsx" data-lang="jsx"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;function&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;InlineStyleDemo&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;()&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;const&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;styles&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;container&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;:&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;padding&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;:&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;20px&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;backgroundColor&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;:&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;#f5f5f5&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;borderRadius&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;:&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;8px&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;title&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;:&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;fontSize&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;:&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;24px&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;fontWeight&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;:&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;bold&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;color&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;:&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;#333&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;return&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#76a9f9"&gt;div&lt;/span&gt; &lt;span style="color:#cebc3a"&gt;style&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;styles&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;container&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;}&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#76a9f9"&gt;h1&lt;/span&gt; &lt;span style="color:#cebc3a"&gt;style&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;styles&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;title&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;}&amp;gt;&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;内联样式演示&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#76a9f9"&gt;h1&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#76a9f9"&gt;p&lt;/span&gt; &lt;span style="color:#cebc3a"&gt;style&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;{{&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;color&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;:&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;#666&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;fontSize&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;:&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;14px&amp;#39;&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;}}&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;这是一段内联样式的文字&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#76a9f9"&gt;p&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#76a9f9"&gt;div&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="1612-动态样式的实现"&gt;16.1.2 动态样式的实现&lt;/h3&gt;
&lt;p&gt;内联样式的优势是可以轻松实现动态样式：&lt;/p&gt;</description></item><item><title>第16章 动画与过渡</title><link>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-16-Animation-Transitions/</link><pubDate>Wed, 25 Mar 2026 12:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-16-Animation-Transitions/</guid><description>&lt;h1 id="第十六章-动画与过渡"&gt;第十六章 动画与过渡&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;静态界面是上个世纪的遗产。在这个人人刷短视频的时代，你的Vue应用如果连个过渡动画都没有，用户点个按钮感觉像是在操控一台1985年的微波炉——没有反馈，不知道发生了什么。本章我们来聊聊Vue中的动画系统，让你的界面动起来、滑起来、弹起来！&lt;/p&gt;</description></item><item><title>第 16 章 async/await 与 Generator</title><link>https://before80.github.io/prgms/Js/basic/Chapter-16-async-await-and-Generator/</link><pubDate>Tue, 24 Mar 2026 22:08:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/basic/Chapter-16-async-await-and-Generator/</guid><description>&lt;h1 id="第-16-章-asyncawait-与-generator"&gt;第 16 章 async/await 与 Generator&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;async/await 是 Promise 的&amp;quot;语法糖&amp;quot;，让异步代码看起来像同步代码。Generator 则是一种可以暂停和恢复的函数。它们都是 ES6+ 引入的强大特性。&lt;/p&gt;</description></item><item><title>第16章：用户组管理</title><link>https://before80.github.io/prgms/linux/user_auth/Chapter-16-User-Group-Management/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/user_auth/Chapter-16-User-Group-Management/</guid><description>&lt;p&gt;﻿# 第十六章：用户组管理&lt;/p&gt;
&lt;p&gt;上一章我们讲了用户管理，用户就像是每个学生。那么问题来了——学生多了，要不要搞个&amp;quot;兴趣小组&amp;quot;？&lt;/p&gt;
&lt;p&gt;没错！Linux里的**组（Group）**就是干这个用的。&lt;/p&gt;</description></item><item><title>第16章 函数类型</title><link>https://before80.github.io/prgms/go/basic/Chapter-16-Function-Types/</link><pubDate>Fri, 20 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/basic/Chapter-16-Function-Types/</guid><description>&lt;h1 id="第16章-函数类型"&gt;第16章 函数类型&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;函数是 Go 的一等公民（first-class citizen）。&amp;rdquo; —— 这是 Go 语言的设计哲学之一。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;在 Go 里，函数不只是用来调用的代码块——&lt;strong&gt;函数本身也是一种类型&lt;/strong&gt;，可以像变量一样赋值、传递、作为参数、作为返回值。听起来有点抽象，但它带来的编程范式革命是巨大的：你可以在 Go 里写高阶函数、装饰器、回调、策略模式——这些在其他语言里需要特殊语法才能做到的事情，在 Go 里只是普通代码。&lt;/p&gt;</description></item><item><title>第17章 散势法鸷鸟——时机一到，迅猛出击不犹豫</title><link>https://before80.github.io/prgms/Philosophy/guiGuZi/17/</link><pubDate>Sat, 11 Apr 2026 21:52:00 +0800</pubDate><guid>https://before80.github.io/prgms/Philosophy/guiGuZi/17/</guid><description>&lt;h1 id="第十七章-散势法鸷鸟时机一到迅猛出击不犹豫"&gt;第十七章 散势法鸷鸟——&amp;ldquo;时机一到，迅猛出击不犹豫&amp;rdquo;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本章核心：势能不是等来的，是借势而发的结果。心虚志溢、伺机而动，像猛禽捕猎一样精准狠辣。&lt;/p&gt;</description></item><item><title>第17章 工程化</title><link>https://before80.github.io/prgms/Python/basic/Chapter-17-Engineering/</link><pubDate>Wed, 08 Apr 2026 13:22:00 +0800</pubDate><guid>https://before80.github.io/prgms/Python/basic/Chapter-17-Engineering/</guid><description>&lt;h1 id="第-17-章-工程化让代码从小打小闹升级为正规军"&gt;第 17 章 工程化：让代码从小打小闹升级为正规军&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;你是否有过这样的经历：写了一个 Python 脚本，运行得好好的，然后换了一台电脑，弹出 &lt;code&gt;ModuleNotFoundError&lt;/code&gt;；或者代码写完了，过了一个月自己都看不懂了；或者改了一个小 bug，结果上线后发现引出了一堆新 bug。这些问题的根源在于——你缺了点工程化思维。&lt;/p&gt;</description></item><item><title>第17章：Pull Request 进阶 —— 成为开源贡献者</title><link>https://before80.github.io/prgms/Git/Chapter-17-Pull-Request-Advanced/</link><pubDate>Fri, 03 Apr 2026 19:36:48 +0800</pubDate><guid>https://before80.github.io/prgms/Git/Chapter-17-Pull-Request-Advanced/</guid><description>&lt;h1 id="第17章pull-request-进阶--成为开源贡献者"&gt;第17章：Pull Request 进阶 —— 成为开源贡献者&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;Pull Request（PR），有人叫它&amp;quot;拉取请求&amp;quot;，有人叫它&amp;quot;合并请求&amp;quot;（MR）。不管叫什么，它都是现代软件开发中最重要的协作工具之一。这一章，让我们从&amp;quot;会发 PR&amp;quot;进化到&amp;quot;精通 PR&amp;quot;！&lt;/p&gt;</description></item><item><title>第17章 内部类、枚举、record、密封类</title><link>https://before80.github.io/prgms/Java/basic/Chapter-17-inner-classes-enum-record-sealed/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-17-inner-classes-enum-record-sealed/</guid><description>&lt;h1 id="第十七章-内部类枚举record密封类"&gt;第十七章 内部类、枚举、record、密封类&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;🎭 本章登場人物：类（Class）、对象（Object）、枚举（Enum）、record（记录）、密封类（Sealed Class）——准备好了吗？我们的派对开始了！&lt;/p&gt;</description></item><item><title>第 17 章：路径处理——path 和 path/filepath</title><link>https://before80.github.io/prgms/go/std/Chapter-17-path/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-17-path/</guid><description>&lt;h1 id="第-17-章路径处理path-和-pathfilepath"&gt;第 17 章：路径处理——path 和 path/filepath&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;在程序员的世界里，路径分隔符是一个永恒的战争。Windows 阵营用 &lt;code&gt;\&lt;/code&gt;（反斜杠），Unix 阵营用 &lt;code&gt;/&lt;/code&gt;（正斜杠）。Go 标准库一不做二不休，直接搞了两个包来分别伺候这两位大爷——&lt;code&gt;path&lt;/code&gt; 包专门处理 URL 路径（永远假设是 &lt;code&gt;/&lt;/code&gt;），&lt;code&gt;path/filepath&lt;/code&gt; 包则处理真实的文件系统路径（乖乖使用操作系统原生分隔符）。这一章，我们就来扒一扒这两个包的十八般武艺。&lt;/p&gt;</description></item><item><title>第 17 章：标准库常用函数汇总</title><link>https://before80.github.io/prgms/C/basic/Chapter-17-Standard-Library/</link><pubDate>Sun, 29 Mar 2026 22:34:00 +0800</pubDate><guid>https://before80.github.io/prgms/C/basic/Chapter-17-Standard-Library/</guid><description>&lt;h1 id="第-17-章标准库常用函数汇总"&gt;第 17 章：标准库常用函数汇总&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;不要重复造轮子&amp;rdquo;——这是程序员的第一金律。C 语言标准库就是那个轮子仓库，里面装满了各种现成的、好用的工具函数。本章我们就来清点这个大仓库，看看里面有哪些宝贝可以让我们事半功倍！&lt;/p&gt;</description></item><item><title>第17章 类模板</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-17-Class-Templates/</link><pubDate>Sun, 29 Mar 2026 21:03:00 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-17-Class-Templates/</guid><description>&lt;h1 id="第17章-类模板"&gt;第17章 类模板&lt;/h1&gt;
&lt;p&gt;想象一下，你是快餐店的点餐员。如果每个顾客来你都要重新设计一套点餐系统——汉堡工程师、薯条工程师、可乐工程师——那这个世界早就乱套了。好在类模板（Class Template）就是程序员的&amp;quot;通用点餐系统&amp;quot;，一份代码，服务所有类型！&lt;/p&gt;</description></item><item><title>第 17 章 内存模型与性能优化</title><link>https://before80.github.io/prgms/Rust/basic/Chapter-17-Memory-Model-And-Performance-Optimization/</link><pubDate>Fri, 27 Mar 2026 17:24:46 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/basic/Chapter-17-Memory-Model-And-Performance-Optimization/</guid><description>&lt;h1 id="chapter-17-内存模型与性能优化"&gt;Chapter 17 内存模型与性能优化&lt;/h1&gt;
&lt;!-- CONTENT_MARKER --&gt;
&lt;blockquote&gt;
&lt;p&gt;💡 把内存想象成一个巨大的地下停车场，地址就是车牌号，类型就是各种奇形怪状的车——有娇小的 Smart，有魁梧的悍马，还有长到离谱的加长礼车。Rust 的内存布局，就是教你如何在有限的空间里把这些车停得整整齐齐，既不浪费车位，又不让它们互相刮蹭。什么对齐、什么填充，都是为了让每一辆车都能稳稳当当地停在自己的格子里！&lt;/p&gt;</description></item><item><title>第17章 编写自定义插件</title><link>https://before80.github.io/prgms/Js/tools/build/vite/Chapter-17-Custom-Plugins/</link><pubDate>Fri, 27 Mar 2026 17:13:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/build/vite/Chapter-17-Custom-Plugins/</guid><description>&lt;h1 id="chapter-17-custom-plugins"&gt;Chapter-17-Custom-Plugins&lt;/h1&gt;
&lt;h1 id="第17章编写自定义插件"&gt;第17章：编写自定义插件&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;你已经用过很多插件了——Vue 插件、React 插件、PWA 插件、自动导入插件&amp;hellip;&lt;/p&gt;
&lt;p&gt;但你有没有想过：&lt;strong&gt;自己写一个 Vite 插件&lt;/strong&gt;？&lt;/p&gt;
&lt;p&gt;其实 Vite 插件并不神秘，它就是一段遵循特定规范的代码。这一章，我们就从零开始，手把手教你写一个自己的 Vite 插件。&lt;/p&gt;</description></item><item><title>第17章 图片与替换元素属性</title><link>https://before80.github.io/prgms/CSS/basic/Chapter-17-Image-and-Replaced-Element-Properties/</link><pubDate>Fri, 27 Mar 2026 16:53:00 +0800</pubDate><guid>https://before80.github.io/prgms/CSS/basic/Chapter-17-Image-and-Replaced-Element-Properties/</guid><description>&lt;h1 id="第十七章图片与替换元素属性"&gt;第十七章：图片与替换元素属性&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;图片是网页中最常见的媒体类型之一。但你有没有遇到过这种情况：图片太大变形了、图片太小显得模糊、或者图片比例不对导致布局混乱？这一章，我们将学习如何用 CSS 来优雅地处理这些问题，让图片展示变得得心应手。&lt;/p&gt;</description></item><item><title>第17章 编译器原理与语言服务</title><link>https://before80.github.io/prgms/Ts/basic/Chapter-17-Compiler-Architecture-and-Language-Services/</link><pubDate>Thu, 26 Mar 2026 21:05:00 +0800</pubDate><guid>https://before80.github.io/prgms/Ts/basic/Chapter-17-Compiler-Architecture-and-Language-Services/</guid><description>&lt;h1 id="第-17-章-编译器原理与语言服务"&gt;第 17 章 编译器原理与语言服务&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;你每天都在用 TypeScript 的编译器——&lt;code&gt;tsc&lt;/code&gt; 命令、VS Code 的红色波浪线、鼠标悬停的类型提示——但你知道这些功能背后是怎么工作的吗？TypeScript 编译器是一个由 Scanner、Parser、Binder、Checker、Emitter 五个阶段组成的精密机器。本章就来拆解这台机器，让你理解它为什么有时候快，有时候慢得要命。&lt;/p&gt;</description></item><item><title>第17章 React Router v7路由管理</title><link>https://before80.github.io/prgms/Js/frameworks/react/Chapter-17-React-Router-v7-Routing-Management/</link><pubDate>Wed, 25 Mar 2026 12:56:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/react/Chapter-17-React-Router-v7-Routing-Management/</guid><description>&lt;h1 id="chapter-17---react-router-v7路由管理"&gt;Chapter-17 - React Router v7——路由管理&lt;/h1&gt;
&lt;h2 id="171-spa-与路由基础"&gt;17.1 SPA 与路由基础&lt;/h2&gt;
&lt;h3 id="1711-传统多页应用-vs-spa"&gt;17.1.1 传统多页应用 vs SPA&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;传统多页应用（MPA）&lt;/strong&gt;：每次路由跳转，浏览器都会向服务器请求一个新的 HTML 页面。整个页面刷新，体验不流畅。&lt;/p&gt;</description></item><item><title>第17章 TypeScript 与 Vue 3</title><link>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-17-TypeScript/</link><pubDate>Wed, 25 Mar 2026 12:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-17-TypeScript/</guid><description>&lt;h1 id="第十七章-typescript-与-vue-3"&gt;第十七章 TypeScript 与 Vue 3&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;JavaScript是动态类型语言，这意味着你可以把字符串赋值给一个数字变量，然后运行到一半才发现问题——然后花三天debug，最后发现是因为少打了个字。TypeScript就是来解决这个&amp;quot;自由&amp;quot;带来的一系列问题。本章我们来看如何在Vue 3项目中优雅地使用TypeScript，让类型错误在编码阶段就被发现，而不是在生产环境中给你&amp;quot;惊喜&amp;quot;。&lt;/p&gt;</description></item><item><title>第 17 章 原型与原型链</title><link>https://before80.github.io/prgms/Js/basic/Chapter-17-Prototype-and-Prototype-Chain/</link><pubDate>Tue, 24 Mar 2026 22:08:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/basic/Chapter-17-Prototype-and-Prototype-Chain/</guid><description>&lt;h1 id="第-17-章-原型与原型链"&gt;第 17 章 原型与原型链&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;原型与原型链是 JavaScript 面向对象的基石。如果你理解了原型链，就能理解&amp;quot;为什么 a 对象有 sayHi 方法&amp;quot;，就能理解 JavaScript 的继承机制。这可能是 JavaScript 中最难理解的概念之一，但也是最强大的！&lt;/p&gt;</description></item><item><title>第17章：sudo 权限管理</title><link>https://before80.github.io/prgms/linux/user_auth/Chapter-17-sudo-Permission-Management/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/user_auth/Chapter-17-sudo-Permission-Management/</guid><description>&lt;h1 id="第十七章sudo-权限管理"&gt;第十七章：sudo 权限管理&lt;/h1&gt;
&lt;p&gt;想象一下这个场景：你是公司大楼的物业经理，但不是老板。你有一把&amp;quot;万能钥匙&amp;quot;，能在紧急情况下打开任何门——但平时你只能用自己家的钥匙。&lt;/p&gt;</description></item><item><title>第17章 函数</title><link>https://before80.github.io/prgms/go/basic/Chapter-17-Functions/</link><pubDate>Fri, 20 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/basic/Chapter-17-Functions/</guid><description>&lt;h1 id="第17章-函数"&gt;第17章 函数&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;函数是 Go 世界的公民，不是二等居民。&amp;rdquo; —— Rob Pike（Go 语言创始人之一）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;函数是 Go 程序的基本构建单元。Go 的函数比其他语言的函数更强大、更灵活——它支持多返回值、命名返回值、闭包、变长参数、延迟执行（defer），还可以作为值传递。这些特性让 Go 在保持简洁的同时拥有了函数式编程的能力。&lt;/p&gt;</description></item><item><title>第18章 转圆法猛兽——思路要像圆一样灵活，执行要像方一样坚定</title><link>https://before80.github.io/prgms/Philosophy/guiGuZi/18/</link><pubDate>Sat, 11 Apr 2026 21:52:00 +0800</pubDate><guid>https://before80.github.io/prgms/Philosophy/guiGuZi/18/</guid><description>&lt;h1 id="第十八章-转圆法猛兽思路要像圆一样灵活执行要像方一样坚定"&gt;第十八章 转圆法猛兽——&amp;ldquo;思路要像圆一样灵活，执行要像方一样坚定&amp;rdquo;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本章核心：谋略不是死板套路，是圆融变通的智慧。无穷之计、因势而转，在变化中找确定性。&lt;/p&gt;</description></item><item><title>第18章 并发编程</title><link>https://before80.github.io/prgms/Python/basic/Chapter-18-Concurrency/</link><pubDate>Wed, 08 Apr 2026 13:22:00 +0800</pubDate><guid>https://before80.github.io/prgms/Python/basic/Chapter-18-Concurrency/</guid><description>&lt;h1 id="第-18-章并发编程让你的程序学会一心多用"&gt;第 18 章：并发编程——让你的程序学会&amp;quot;一心多用&amp;quot;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;想象一下，你是一家餐厅的厨师。以前你只能一次做一道菜——等水烧开的时候只能盯着锅发呆，等客人吃完才能去收拾桌子。这样的生活，想想都觉得窒息。并发编程，就是让你变成一个&amp;quot;分身术&amp;quot;高手——在等待的时候做别的事，多个工作同时推进，效率直接起飞。&lt;/p&gt;</description></item><item><title>第18章：进阶技能 —— 高手的工具箱</title><link>https://before80.github.io/prgms/Git/Chapter-18-Advanced-Skills/</link><pubDate>Fri, 03 Apr 2026 19:36:48 +0800</pubDate><guid>https://before80.github.io/prgms/Git/Chapter-18-Advanced-Skills/</guid><description>&lt;h1 id="第18章进阶技能--高手的工具箱"&gt;第18章：进阶技能 —— 高手的工具箱&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;恭喜你！如果你已经读到这里，说明你已经掌握了 Git 的基础。现在，让我们打开高手的工具箱，学习那些能让你效率翻倍的进阶技能！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="181-git-stash临时保存切换自如"&gt;18.1 &lt;code&gt;git stash&lt;/code&gt;：临时保存，切换自如&lt;/h2&gt;
&lt;p&gt;想象一下这个场景：你正在开发一个新功能，代码写到一半，突然产品经理说：&amp;ldquo;线上有个紧急 bug，需要你马上修复！&amp;rdquo;&lt;/p&gt;</description></item><item><title>第18章 static 和 final 关键字</title><link>https://before80.github.io/prgms/Java/basic/Chapter-18-static-final/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-18-static-final/</guid><description>&lt;h1 id="第十八章-static-和-final-关键字"&gt;第十八章 static 和 final 关键字&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;在 Java 的世界里，有些东西是挂在天上不下来的（static），有些东西是一旦决定就再也不改的（final）。这俩关键字，堪称 Java 世界里的&amp;rsquo;永恒星&amp;rsquo;和&amp;rsquo;定海神针&amp;rsquo;。&amp;rdquo;&lt;/p&gt;</description></item><item><title>第18章：JSON 编码——encoding/json</title><link>https://before80.github.io/prgms/go/std/Chapter-18-json/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-18-json/</guid><description>&lt;h1 id="第18章json-编码encodingjson"&gt;第18章：JSON 编码——encoding/json&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;前置知识&lt;/strong&gt;：本章节涉及 Go 结构体、接口、指针等概念，建议先阅读第 6 章（结构体）和第 11 章（接口）。&lt;/p&gt;
&lt;p&gt;📖 &lt;strong&gt;配套代码&lt;/strong&gt;：https://github.com/jollybling/Go-Standard-Library-Examples —— 欢迎 Star ⭐&lt;/p&gt;</description></item><item><title>第 18 章：位操作与位域 —— 计算机底层的'积木游戏'</title><link>https://before80.github.io/prgms/C/basic/Chapter-18-Bit-Operations/</link><pubDate>Sun, 29 Mar 2026 22:34:00 +0800</pubDate><guid>https://before80.github.io/prgms/C/basic/Chapter-18-Bit-Operations/</guid><description>&lt;h1 id="第-18-章位操作与位域--计算机底层的积木游戏"&gt;第 18 章：位操作与位域 —— 计算机底层的&amp;quot;积木游戏&amp;quot;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本章内容烧脑指数：⭐⭐⭐⭐⭐&lt;br&gt;
阅读建议：准备好咖啡，跟我一起潜入 0 和 1 的奇妙世界！&lt;/p&gt;</description></item><item><title>第18章 模板元编程</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-18-Template-Metaprogramming/</link><pubDate>Sun, 29 Mar 2026 21:03:00 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-18-Template-Metaprogramming/</guid><description>&lt;h1 id="第18章-模板元编程"&gt;第18章 模板元编程&lt;/h1&gt;
&lt;p&gt;欢迎来到C++最魔幻的领域——模板元编程！如果说普通编程是在运行时&amp;quot;指挥&amp;quot;计算机干活，那模板元编程就是在编译期&amp;quot;贿赂&amp;quot;编译器为你卖命。你的代码还没运行，编译器就已经在疯狂计算了。想象一下：你喝着咖啡等编译，编译器却在后台帮你把脏活累活都干完了——这就是模板元编程的魅力所在！&lt;/p&gt;</description></item><item><title>第 18 章 Web 开发</title><link>https://before80.github.io/prgms/Rust/basic/Chapter-18-Web-Development/</link><pubDate>Fri, 27 Mar 2026 17:24:46 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/basic/Chapter-18-Web-Development/</guid><description>&lt;h1 id="chapter-18-web-开发"&gt;Chapter 18 Web 开发&lt;/h1&gt;
&lt;!-- CONTENT_MARKER --&gt;
&lt;blockquote&gt;
&lt;p&gt;把写 Web 应用比作开餐厅，那 Rust 的 Web 开发工具链就是一家从零打造的米其林后厨。Tokio 是你的灶台（异步引擎），Axum 是你的主厨（高层框架），hyper 是你的烤箱（底层 HTTP），tower 是你的传菜流水线（中间件系统），而 sqlx/diesel 则是你的食材管理系统（数据库）。每一层都有它存在的理由，每一层都值得你细细品味。准备好了吗？让我们开始这场 Rust Web 开发的烹饪课！&lt;/p&gt;</description></item><item><title>第18章 Monorepo 与大型项目</title><link>https://before80.github.io/prgms/Js/tools/build/vite/Chapter-18-Monorepo-And-Large-Projects/</link><pubDate>Fri, 27 Mar 2026 17:13:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/build/vite/Chapter-18-Monorepo-And-Large-Projects/</guid><description>&lt;h1 id="chapter-18-monorepo-and-large-projects"&gt;Chapter-18-Monorepo-And-Large-Projects&lt;/h1&gt;
&lt;h1 id="第18章monorepo-与大型项目"&gt;第18章：Monorepo 与大型项目&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;想象一下这个场景：你在维护 5 个前端项目，每个项目都有相似的配置、相似的工具函数、相似的组件。然后某天，你发现一个工具函数有 bug，需要在 5 个项目中都改一遍&amp;hellip;&lt;/p&gt;</description></item><item><title>第18章 多列布局</title><link>https://before80.github.io/prgms/CSS/basic/Chapter-18-Multi-column-Layout/</link><pubDate>Fri, 27 Mar 2026 16:53:00 +0800</pubDate><guid>https://before80.github.io/prgms/CSS/basic/Chapter-18-Multi-column-Layout/</guid><description>&lt;h1 id="第十八章多列布局"&gt;第十八章：多列布局&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;想象一下报纸的排版——密密麻麻的文字被分成好几列，你只需要从上到下阅读完一列，然后跳到下一列。多列布局（Multi-column Layout）就是 CSS 给你提供的&amp;quot;报纸排版&amp;quot;能力，让长篇内容自动分成多列显示，既美观又实用。&lt;/p&gt;</description></item><item><title>第18章 表单处理与数据验证</title><link>https://before80.github.io/prgms/Js/frameworks/react/Chapter-18-Form-Handling-and-Data-Validation/</link><pubDate>Wed, 25 Mar 2026 12:56:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/react/Chapter-18-Form-Handling-and-Data-Validation/</guid><description>&lt;h1 id="chapter-18---表单处理与数据验证"&gt;Chapter-18 - 表单处理与数据验证&lt;/h1&gt;
&lt;h2 id="181-受控组件"&gt;18.1 受控组件&lt;/h2&gt;
&lt;h3 id="1811-受控组件的概念表单数据由-react-控制"&gt;18.1.1 受控组件的概念：表单数据由 React 控制&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;受控组件（Controlled Component）&lt;/strong&gt; 是指表单元素的值完全由 React 的 state 来控制的组件。用户的输入会触发 onChange 事件，更新 state，state 更新导致组件重新渲染，渲染出新的值。&lt;/p&gt;</description></item><item><title>第18章 工程化实践</title><link>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-18-Engineering/</link><pubDate>Wed, 25 Mar 2026 12:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-18-Engineering/</guid><description>&lt;h1 id="第十八章-工程化实践"&gt;第十八章 工程化实践&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;你写的代码能跑是一回事，你的项目能被别人维护是另一回事。本章我们来聊聊Vue项目的工程化——从项目配置、代码规范、Git工作流到构建优化。这些东西不会让你的功能更好，但会让你的项目更健康，让你的队友不会在你离职后诅咒你的名字。&lt;/p&gt;</description></item><item><title>第 18 章 this 指向</title><link>https://before80.github.io/prgms/Js/basic/Chapter-18-this-Binding/</link><pubDate>Tue, 24 Mar 2026 22:08:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/basic/Chapter-18-this-Binding/</guid><description>&lt;h1 id="第-18-章-this-指向"&gt;第 18 章 this 指向&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;JavaScript 里最让人晕头转向的概念——&amp;ldquo;this&amp;quot;到底指向谁？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="181-this-绑定规则"&gt;18.1 this 绑定规则&lt;/h2&gt;
&lt;h3 id="this-是什么"&gt;this 是什么？&lt;/h3&gt;
&lt;p&gt;在 JavaScript 里，&lt;code&gt;this&lt;/code&gt; 是一个像&amp;quot;变形金刚&amp;quot;一样的变量——它在不同场合会指向不同的东西。&lt;/p&gt;</description></item><item><title>第18章：文件权限详解</title><link>https://before80.github.io/prgms/linux/user_auth/Chapter-18-File-Permission-Details/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/user_auth/Chapter-18-File-Permission-Details/</guid><description>&lt;h1 id="第十八章文件权限详解"&gt;第十八章：文件权限详解&lt;/h1&gt;
&lt;p&gt;你有没有遇到过这种情况？&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;打开一个文件，显示&amp;quot;权限不够&amp;quot;&lt;/li&gt;
&lt;li&gt;别人发给你的压缩包，解压出来全是乱码&lt;/li&gt;
&lt;li&gt;网站突然403了，访问不了&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这一切的罪魁祸首都是——&lt;strong&gt;权限&lt;/strong&gt;！&lt;/p&gt;</description></item><item><title>第18章 方法</title><link>https://before80.github.io/prgms/go/basic/Chapter-18-Methods/</link><pubDate>Fri, 20 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/basic/Chapter-18-Methods/</guid><description>&lt;h1 id="第18章-方法"&gt;第18章 方法&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;对象和方法，是Go语言给你的超能力，让你像超级英雄一样给类型赋予超能力！&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;想象一下，如果你是一个&amp;quot;人&amp;quot;类型，你现在可以给&amp;quot;人&amp;quot;类型安装一个&amp;quot;吃饭&amp;quot;的方法，从此每个&amp;quot;人&amp;quot;实例都会&amp;quot;吃饭&amp;quot;了——这就是Go语言的魔力所在！不像某些语言，非要把函数和类型强行塞进一个类里，Go语言告诉你：类型和函数可以是好朋友，方法只是函数的另一面！&lt;/p&gt;</description></item><item><title>第19章 损兑法灵蓍——该舍就舍，该取就取，决策要像占卜一样精准</title><link>https://before80.github.io/prgms/Philosophy/guiGuZi/19/</link><pubDate>Sat, 11 Apr 2026 21:52:00 +0800</pubDate><guid>https://before80.github.io/prgms/Philosophy/guiGuZi/19/</guid><description>&lt;h1 id="第十九章-损兑法灵蓍该舍就舍该取就取决策要像占卜一样精准"&gt;第十九章 损兑法灵蓍——&amp;ldquo;该舍就舍，该取就取，决策要像占卜一样精准&amp;rdquo;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本章核心：决策的本质是取舍。看清机危、顺应自然、果断行动，像灵蓍占卜一样精准决断。&lt;/p&gt;</description></item><item><title>第19章 AI基础</title><link>https://before80.github.io/prgms/Python/basic/Chapter-19-AI-Basics/</link><pubDate>Wed, 08 Apr 2026 13:22:00 +0800</pubDate><guid>https://before80.github.io/prgms/Python/basic/Chapter-19-AI-Basics/</guid><description>&lt;h1 id="第十九章ai-基础知识numpypandasmatplotlib-三剑客"&gt;第十九章：AI 基础知识——NumPy、Pandas、Matplotlib 三剑客&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;🎭 旁白：很久很久以前，有一个神奇的江湖。江湖里有三大高手——&amp;ldquo;数值计算大师&amp;quot;NumPy、&amp;ldquo;数据分析侠&amp;quot;Pandas、&amp;ldquo;可视化仙子&amp;quot;Matplotlib。他们各怀绝技，又配合得天衣无缝。任何想要踏入 AI 江湖的程序员，都必须拜他们为师。这一章，我们就来认识这三位绝世高手！&lt;/p&gt;</description></item><item><title>第19章：团队协作最佳实践 —— 别做那个被嫌弃的人</title><link>https://before80.github.io/prgms/Git/Chapter-19-Team-Collaboration/</link><pubDate>Fri, 03 Apr 2026 19:36:48 +0800</pubDate><guid>https://before80.github.io/prgms/Git/Chapter-19-Team-Collaboration/</guid><description>&lt;h1 id="第19章团队协作最佳实践--别做那个被嫌弃的人"&gt;第19章：团队协作最佳实践 —— 别做那个被嫌弃的人&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;技术决定你能做什么，协作决定你能走多远。这一章，让我们学习如何成为团队中受欢迎的开发者，而不是那个被嫌弃的人。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="191-三大原则沟通规范小步"&gt;19.1 三大原则：沟通、规范、小步&lt;/h2&gt;
&lt;p&gt;Git 协作的三大原则，就像是武林高手的内功心法——掌握了这些，你的协作功力将大增。&lt;/p&gt;</description></item><item><title>第19章 String 字符串——最常用的类型</title><link>https://before80.github.io/prgms/Java/basic/Chapter-19-string/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-19-string/</guid><description>&lt;h1 id="第十九章-string-字符串最常用的类型"&gt;第十九章 String 字符串——最常用的类型&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;在 Java 的世界里，一切皆对象，但 String 是个例外中的例外。它既是对象，又像个原始类型那样常用，甚至让你忘了它其实是个正经的类。&amp;rdquo;&lt;/p&gt;</description></item><item><title>第 19 章：其他数据格式——encoding 包全系列</title><link>https://before80.github.io/prgms/go/std/Chapter-19-encoding/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-19-encoding/</guid><description>&lt;h1 id="第-19-章其他数据格式encoding-包全系列"&gt;第 19 章：其他数据格式——encoding 包全系列&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;💡 本章导读&lt;/p&gt;
&lt;p&gt;数据在内存中花样百出，传输时却只能变成一串字节流。encoding 包就是那个&amp;quot;变形金刚工厂&amp;quot;，把各种数据结构变成字节，或者把字节变回各种数据结构。本章将带你玩转 Go 标准库中所有的序列化与反序列化工具。&lt;/p&gt;</description></item><item><title>第 19 章：构建系统与工程管理</title><link>https://before80.github.io/prgms/C/basic/Chapter-19-Build-Systems/</link><pubDate>Sun, 29 Mar 2026 22:34:00 +0800</pubDate><guid>https://before80.github.io/prgms/C/basic/Chapter-19-Build-Systems/</guid><description>&lt;h1 id="第-19-章构建系统与工程管理"&gt;第 19 章：构建系统与工程管理&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;写代码一时爽，编译部署火葬场。&amp;rdquo; —— 每一个被 Makefile 折磨过的程序员&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;恭喜你来到 C 语言学习的终点站——不对，是&lt;strong&gt;中转站&lt;/strong&gt;！前面 18 章你学会了怎么用 C 写逻辑、写算法、写数据结构，感觉自己已经天下无敌了？很好，现在我们来聊聊当你写完代码之后，&lt;strong&gt;怎么让它变成可执行文件&lt;/strong&gt;，以及&lt;strong&gt;怎么管理一个正经的工程&lt;/strong&gt;。&lt;/p&gt;</description></item><item><title>第19章 STL概述与容器</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-19-STL-Containers/</link><pubDate>Sun, 29 Mar 2026 21:03:00 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-19-STL-Containers/</guid><description>&lt;h1 id="第19章-stl概述与容器"&gt;第19章 STL概述与容器&lt;/h1&gt;
&lt;p&gt;想象一下，如果你每次存储数据都要自己造轮子——写一个动态数组、写一个排序算法、写一个查找函数——那C++代码可能会比《三体》的厚度还夸张。幸好我们有STL！这个被称为&amp;quot;标准模板库&amp;quot;的家伙，就是C++程序员偷懒&amp;hellip;呃，我是说，&lt;strong&gt;高效编程&lt;/strong&gt;的秘密武器。&lt;/p&gt;</description></item><item><title>第 19 章 系统编程</title><link>https://before80.github.io/prgms/Rust/basic/Chapter-19-System-Programming/</link><pubDate>Fri, 27 Mar 2026 17:24:46 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/basic/Chapter-19-System-Programming/</guid><description>&lt;h1 id="chapter-19-系统编程"&gt;Chapter 19 系统编程&lt;/h1&gt;
&lt;p&gt;想象一下，你是一位精通多国语言的外交官，一边要直接跟硬件大使用二进制密语交涉，一边还要安抚应用层的各位贵族老爷们别闹脾气。恭喜你，这就是系统编程！——只不过你的&amp;quot;大使馆&amp;quot;就是内核空间，你的&amp;quot;外语&amp;quot;就是系统调用，而你最好的翻译官，就是 Rust。&lt;/p&gt;</description></item><item><title>第19章 SSR 与 SSG</title><link>https://before80.github.io/prgms/Js/tools/build/vite/Chapter-19-SSR-And-SSG/</link><pubDate>Fri, 27 Mar 2026 17:13:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/build/vite/Chapter-19-SSR-And-SSG/</guid><description>&lt;h1 id="chapter-19-ssr-and-ssg"&gt;Chapter-19-SSR-And-SSG&lt;/h1&gt;
&lt;h1 id="第19章ssr-与-ssg"&gt;第19章：SSR 与 SSG&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;传统的 Vue/React 应用都是&amp;quot;客户端渲染&amp;quot;（CSR）——浏览器下载一个空的 HTML，然后 JavaScript 去请求数据、渲染页面。&lt;/p&gt;
&lt;p&gt;这带来了两个问题：&lt;strong&gt;SEO 不友好&lt;/strong&gt;（搜索引擎看到的是空页面）和&lt;strong&gt;首屏加载慢&lt;/strong&gt;（需要等 JS 下载完才能看到内容）。&lt;/p&gt;</description></item><item><title>第19章 display属性与文档流</title><link>https://before80.github.io/prgms/CSS/basic/Chapter-19-Display-Property-and-Document-Flow/</link><pubDate>Fri, 27 Mar 2026 16:53:00 +0800</pubDate><guid>https://before80.github.io/prgms/CSS/basic/Chapter-19-Display-Property-and-Document-Flow/</guid><description>&lt;h1 id="第十九章display-属性与文档流"&gt;第十九章：display 属性与文档流&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;CSS 布局的核心是&amp;quot;文档流&amp;quot;——浏览器默认排列元素的方式。而 &lt;code&gt;display&lt;/code&gt; 属性则是控制元素如何参与文档流的关键。理解这两个概念，就等于掌握了 CSS 布局的第一把钥匙。想象一下，文档流就像河流，元素就像河里的船只，&lt;code&gt;display&lt;/code&gt; 属性决定了你是一艘货船（块级）还是一艘快艇（行内）。&lt;/p&gt;</description></item><item><title>第19章 HTTP请求与数据获取</title><link>https://before80.github.io/prgms/Js/frameworks/react/Chapter-19-HTTP-Requests-and-Data-Fetching/</link><pubDate>Wed, 25 Mar 2026 12:56:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/react/Chapter-19-HTTP-Requests-and-Data-Fetching/</guid><description>&lt;h1 id="chapter-19---http-请求与数据获取"&gt;Chapter-19 - HTTP 请求与数据获取&lt;/h1&gt;
&lt;h2 id="191-fetch-api"&gt;19.1 fetch API&lt;/h2&gt;
&lt;h3 id="1911-fetch-的基本用法"&gt;19.1.1 fetch 的基本用法&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;fetch&lt;/code&gt; 是浏览器原生的网络请求 API，不需要安装任何库。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// 基本语法
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;fetch&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;url&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;options&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;then&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;response&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 处理响应
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;return&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;response&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;json&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;()&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 解析 JSON
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;then&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;data&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;log&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;data&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#76a9f9"&gt;catch&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;error&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;error&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;请求失败:&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;error&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="1912-get-请求与查询参数拼接"&gt;19.1.2 GET 请求与查询参数拼接&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;17
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;18
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;19
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// 简单的 GET 请求
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;fetch&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;https://api.example.com/users&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;then&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;res&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;res&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;json&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;then&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;data&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;log&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;data&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// 带查询参数
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;const&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;params&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;new&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;URLSearchParams&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;page&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;:&lt;/span&gt; &lt;span style="color:#d19a66"&gt;1&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;limit&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;:&lt;/span&gt; &lt;span style="color:#d19a66"&gt;10&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;category&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;:&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;tech&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;fetch&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;`https://api.example.com/articles?&lt;/span&gt;&lt;span style="color:#98c379"&gt;${&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;params&lt;/span&gt;&lt;span style="color:#98c379"&gt;}&lt;/span&gt;&lt;span style="color:#98c379"&gt;`&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;then&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;res&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;res&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;json&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;then&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;data&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;log&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;data&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// 或者手动拼接
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;fetch&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;https://api.example.com/users?page=1&amp;amp;limit=10&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;then&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;res&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;res&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;json&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="1913-post-请求与请求体json--formdata"&gt;19.1.3 POST 请求与请求体（JSON / FormData）&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;17
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;18
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;19
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;20
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;21
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;22
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;23
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;24
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;25
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;26
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;27
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;28
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;29
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;30
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;31
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;32
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;33
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// POST JSON
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;fetch&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;https://api.example.com/users&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;method&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;:&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;POST&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;headers&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;:&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;Content-Type&amp;#39;&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;:&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;application/json&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;Authorization&amp;#39;&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;:&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;Bearer token123&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;body&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;:&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;JSON&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;stringify&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;name&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;:&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;小明&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;email&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;:&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;xiaoming@example.com&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;age&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;:&lt;/span&gt; &lt;span style="color:#d19a66"&gt;25&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;then&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;res&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;if&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;!&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;res&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;ok&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;throw&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;new&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;Error&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;`HTTP 错误！状态码：&lt;/span&gt;&lt;span style="color:#98c379"&gt;${&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;res&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;status&lt;/span&gt;&lt;span style="color:#98c379"&gt;}&lt;/span&gt;&lt;span style="color:#98c379"&gt;`&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;return&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;res&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;json&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;then&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;data&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;log&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;创建成功:&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;data&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#76a9f9"&gt;catch&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;err&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;error&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;请求失败:&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;err&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// POST FormData（文件上传等）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;const&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;formData&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;new&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;FormData&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;formData&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;append&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;小明&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;formData&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;append&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;avatar&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;fileInput&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;files&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;[&lt;/span&gt;&lt;span style="color:#d19a66"&gt;0&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;fetch&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;https://api.example.com/upload&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;method&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;:&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;POST&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;body&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;:&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;formData&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 注意：FormData 不需要手动设置 Content-Type
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;then&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;res&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;res&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;json&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="1914-fetch-的错误处理responseok-与-try-catch"&gt;19.1.4 fetch 的错误处理：response.ok 与 try-catch&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;17
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;18
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;19
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;20
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;21
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;22
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;23
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;24
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;25
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;26
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;async&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;function&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;fetchUser&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;id&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;try&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;const&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;res&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;await&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;fetch&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;`https://api.example.com/users/&lt;/span&gt;&lt;span style="color:#98c379"&gt;${&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;id&lt;/span&gt;&lt;span style="color:#98c379"&gt;}&lt;/span&gt;&lt;span style="color:#98c379"&gt;`&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 检查 HTTP 状态码
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;if&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;!&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;res&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;ok&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;if&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;res&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;status&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;===&lt;/span&gt; &lt;span style="color:#d19a66"&gt;404&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;throw&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;new&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;Error&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;用户不存在&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;if&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;res&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;status&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;===&lt;/span&gt; &lt;span style="color:#d19a66"&gt;401&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;throw&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;new&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;Error&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;未授权，请重新登录&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;throw&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;new&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;Error&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;`请求失败：&lt;/span&gt;&lt;span style="color:#98c379"&gt;${&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;res&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;status&lt;/span&gt;&lt;span style="color:#98c379"&gt;}&lt;/span&gt;&lt;span style="color:#98c379"&gt; &lt;/span&gt;&lt;span style="color:#98c379"&gt;${&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;res&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;statusText&lt;/span&gt;&lt;span style="color:#98c379"&gt;}&lt;/span&gt;&lt;span style="color:#98c379"&gt;`&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;const&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;data&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;await&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;res&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;json&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;return&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;data&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;catch&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;error&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 捕获网络错误（如断网）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;if&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;error&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;name&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;===&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;TypeError&amp;#39;&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;error&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;message&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;===&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;Failed to fetch&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;throw&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;new&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;Error&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;网络连接失败，请检查网络&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;throw&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;error&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 其他错误重新抛出
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="1915-fetch-的超时处理abortcontroller"&gt;19.1.5 fetch 的超时处理：AbortController&lt;/h3&gt;
&lt;p&gt;fetch 默认没有超时机制，需要用 AbortController 实现：&lt;/p&gt;</description></item><item><title>第19章 网络请求与工具库</title><link>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-19-HTTP/</link><pubDate>Wed, 25 Mar 2026 12:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-19-HTTP/</guid><description>&lt;h1 id="第十九章-网络请求与工具库"&gt;第十九章 网络请求与工具库&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;任何一个不算玩具的Vue应用都需要和网络打交道——获取数据、提交表单、上传文件&amp;hellip;没有网络请求的应用就像一家没有外卖的餐厅，功能再强也让人觉得少了点什么。本章我们聊聊Vue生态中的网络请求方案和一些实用工具库。&lt;/p&gt;</description></item><item><title>第 19 章 class 语法</title><link>https://before80.github.io/prgms/Js/basic/Chapter-19-Class/</link><pubDate>Tue, 24 Mar 2026 22:08:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/basic/Chapter-19-Class/</guid><description>&lt;h1 id="第-19-章-class-语法"&gt;第 19 章 class 语法&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;ES6 引入了 class 语法，让 JavaScript 的面向对象编程更加直观。虽然 class 实际上是基于原型的语法糖，但它让代码更容易理解，也更容易被其他语言的程序员接受。&lt;/p&gt;</description></item><item><title>第19章：特殊权限与 ACL</title><link>https://before80.github.io/prgms/linux/user_auth/Chapter-19-Special-Permissions-and-ACL/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/user_auth/Chapter-19-Special-Permissions-and-ACL/</guid><description>&lt;h1 id="第十九章特殊权限与-acl"&gt;第十九章：特殊权限与 ACL&lt;/h1&gt;
&lt;p&gt;恭喜你！如果你能坚持到这里，说明你对Linux权限已经有相当的了解了。&lt;/p&gt;
&lt;p&gt;但Linux的权限系统还有&amp;quot;隐藏关卡&amp;quot;——&lt;strong&gt;特殊权限&lt;/strong&gt;和&lt;strong&gt;ACL（访问控制列表）&lt;/strong&gt;。&lt;/p&gt;</description></item><item><title>第19章 接口类型</title><link>https://before80.github.io/prgms/go/basic/Chapter-19-InterfaceTypes/</link><pubDate>Fri, 20 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/basic/Chapter-19-InterfaceTypes/</guid><description>&lt;h1 id="第19章-接口类型"&gt;第19章 接口类型&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;接口（Interface），Go语言的&amp;quot;魔法契约&amp;quot;！如果说类型是&amp;quot;房产证&amp;quot;，那接口就是&amp;quot;职业资格证&amp;quot;——你不需要关心这个人姓甚名谁，只需要知道他能做什么。&lt;/p&gt;</description></item><item><title>第20章 持枢——顺应天道，别跟规律对着干</title><link>https://before80.github.io/prgms/Philosophy/guiGuZi/20/</link><pubDate>Sat, 11 Apr 2026 21:52:00 +0800</pubDate><guid>https://before80.github.io/prgms/Philosophy/guiGuZi/20/</guid><description>&lt;h1 id="第二十章-持枢顺应天道别跟规律对着干"&gt;第二十章 持枢——&amp;ldquo;顺应天道，别跟规律对着干&amp;rdquo;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本章核心：春生夏长秋收冬藏，是天道的节奏。人生事业也要顺应周期，逆势而行，虽成必败。&lt;/p&gt;</description></item><item><title>第20章 大语言模型</title><link>https://before80.github.io/prgms/Python/basic/Chapter-20-LLM/</link><pubDate>Wed, 08 Apr 2026 13:22:00 +0800</pubDate><guid>https://before80.github.io/prgms/Python/basic/Chapter-20-LLM/</guid><description>&lt;h1 id="第-20-章-玩转大模型llm-应用的修炼指南"&gt;第 20 章 玩转大模型：LLM 应用的修炼指南&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本章我们将和大模型来个亲密接触，从调 API、搭本地模型、用 LangChain 搭 Agent、到 RAG、Prompt Engineering、PEFT 微调，一条龙服务到底。准备好了吗？让我们一起进入 AI 的奇幻世界！&lt;/p&gt;</description></item><item><title>第20章：Git 钩子与自动化 —— 让 Git 替你干活</title><link>https://before80.github.io/prgms/Git/Chapter-20-Git-Hooks/</link><pubDate>Fri, 03 Apr 2026 19:36:48 +0800</pubDate><guid>https://before80.github.io/prgms/Git/Chapter-20-Git-Hooks/</guid><description>&lt;h1 id="第20章git-钩子与自动化--让-git-替你干活"&gt;第20章：Git 钩子与自动化 —— 让 Git 替你干活&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;重复的工作让人疲惫，自动化的工具让人轻松。Git Hooks 让你在特定时机自动执行脚本，让 Git 成为你的自动化助手！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="201-什么是-git-hooks特定时机的自动执行"&gt;20.1 什么是 Git Hooks？特定时机的自动执行&lt;/h2&gt;
&lt;p&gt;想象一下：每次提交代码前，自动检查代码格式；每次推送前，自动运行测试。这不是梦想，这是 &lt;strong&gt;Git Hooks&lt;/strong&gt;！&lt;/p&gt;</description></item><item><title>第20章 集合框架（上）——List 和 Set</title><link>https://before80.github.io/prgms/Java/basic/Chapter-20-collections-part1/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-20-collections-part1/</guid><description>&lt;h1 id="第二十章-集合框架上list-和-set"&gt;第二十章 集合框架（上）——List 和 Set&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;程序员的三大难题：缓存穿透、分布式锁、还有——ArrayList 和 LinkedList 到底该用哪个。&amp;rdquo;&lt;/p&gt;</description></item><item><title>第 20 章：网络基础——net 包</title><link>https://before80.github.io/prgms/go/std/Chapter-20-net/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-20-net/</guid><description>&lt;h1 id="第-20-章网络基础net-包"&gt;第 20 章：网络基础——net 包&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;🌐 网络，是让程序不再孤独的神奇东西。没有网络，你的程序就是一个孤岛，只能对着自己发呆。Go 的 &lt;code&gt;net&lt;/code&gt; 包，就是那座连接孤岛的桥。&lt;/p&gt;</description></item><item><title>第 20 章：调试技术——与 Bug 的斗智斗勇</title><link>https://before80.github.io/prgms/C/basic/Chapter-20-Debugging/</link><pubDate>Sun, 29 Mar 2026 22:34:00 +0800</pubDate><guid>https://before80.github.io/prgms/C/basic/Chapter-20-Debugging/</guid><description>&lt;h1 id="第-20-章调试技术与-bug-的斗智斗勇"&gt;第 20 章：调试技术——与 Bug 的斗智斗勇&lt;/h1&gt;
&lt;p&gt;![调试流程图](data:image/svg+xml,%3Csvg xmlns=&amp;lsquo;&lt;a href="http://www.w3.org/2000/svg'"&gt;http://www.w3.org/2000/svg'&lt;/a&gt; viewBox=&amp;lsquo;0 0 800 400&amp;rsquo;%3E%3Crect width=&amp;lsquo;800&amp;rsquo; height=&amp;lsquo;400&amp;rsquo; fill=&amp;rsquo;%23f0f4f8&amp;rsquo;/%3E%3Crect x=&amp;lsquo;50&amp;rsquo; y=&amp;lsquo;50&amp;rsquo; width=&amp;lsquo;150&amp;rsquo; height=&amp;lsquo;60&amp;rsquo; rx=&amp;lsquo;10&amp;rsquo; fill=&amp;rsquo;%23e74c3c&amp;rsquo; stroke=&amp;rsquo;%232c3e50&amp;rsquo; stroke-width=&amp;lsquo;2&amp;rsquo;/%3E%3Ctext x=&amp;lsquo;125&amp;rsquo; y=&amp;lsquo;85&amp;rsquo; text-anchor=&amp;lsquo;middle&amp;rsquo; fill=&amp;lsquo;white&amp;rsquo; font-size=&amp;lsquo;14&amp;rsquo; font-family=&amp;lsquo;Arial&amp;rsquo;%3E发现Bug%3C/text%3E%3Crect x=&amp;lsquo;325&amp;rsquo; y=&amp;lsquo;50&amp;rsquo; width=&amp;lsquo;150&amp;rsquo; height=&amp;lsquo;60&amp;rsquo; rx=&amp;lsquo;10&amp;rsquo; fill=&amp;rsquo;%23f39c12&amp;rsquo; stroke=&amp;rsquo;%232c3e50&amp;rsquo; stroke-width=&amp;lsquo;2&amp;rsquo;/%3E%3Ctext x=&amp;lsquo;400&amp;rsquo; y=&amp;lsquo;85&amp;rsquo; text-anchor=&amp;lsquo;middle&amp;rsquo; fill=&amp;lsquo;white&amp;rsquo; font-size=&amp;lsquo;14&amp;rsquo; font-family=&amp;lsquo;Arial&amp;rsquo;%3E定位问题%3C/text%3E%3Crect x=&amp;lsquo;600&amp;rsquo; y=&amp;lsquo;50&amp;rsquo; width=&amp;lsquo;150&amp;rsquo; height=&amp;lsquo;60&amp;rsquo; rx=&amp;lsquo;10&amp;rsquo; fill=&amp;rsquo;%2327ae60&amp;rsquo; stroke=&amp;rsquo;%232c3e50&amp;rsquo; stroke-width=&amp;lsquo;2&amp;rsquo;/%3E%3Ctext x=&amp;lsquo;675&amp;rsquo; y=&amp;lsquo;85&amp;rsquo; text-anchor=&amp;lsquo;middle&amp;rsquo; fill=&amp;lsquo;white&amp;rsquo; font-size=&amp;lsquo;14&amp;rsquo; font-family=&amp;lsquo;Arial&amp;rsquo;%3E修复Bug%3C/text%3E%3Cpath d=&amp;lsquo;M200 80 L325 80&amp;rsquo; stroke=&amp;rsquo;%232c3e50&amp;rsquo; stroke-width=&amp;lsquo;3&amp;rsquo; marker-end=&amp;lsquo;url(%23arrow)&amp;rsquo;/%3E%3Cpath d=&amp;lsquo;M475 80 L600 80&amp;rsquo; stroke=&amp;rsquo;%232c3e50&amp;rsquo; stroke-width=&amp;lsquo;3&amp;rsquo; marker-end=&amp;lsquo;url(%23arrow)&amp;rsquo;/%3E%3Crect x=&amp;lsquo;200&amp;rsquo; y=&amp;lsquo;180&amp;rsquo; width=&amp;lsquo;400&amp;rsquo; height=&amp;lsquo;150&amp;rsquo; rx=&amp;lsquo;15&amp;rsquo; fill=&amp;rsquo;%233498db&amp;rsquo; stroke=&amp;rsquo;%232c3e50&amp;rsquo; stroke-width=&amp;lsquo;2&amp;rsquo; opacity=&amp;lsquo;0.2&amp;rsquo;/%3E%3Ctext x=&amp;lsquo;400&amp;rsquo; y=&amp;lsquo;220&amp;rsquo; text-anchor=&amp;lsquo;middle&amp;rsquo; fill=&amp;rsquo;%232c3e50&amp;rsquo; font-size=&amp;lsquo;16&amp;rsquo; font-family=&amp;lsquo;Arial&amp;rsquo; font-weight=&amp;lsquo;bold&amp;rsquo;%3E调试工具箱%3C/text%3E%3Ctext x=&amp;lsquo;400&amp;rsquo; y=&amp;lsquo;250&amp;rsquo; text-anchor=&amp;lsquo;middle&amp;rsquo; fill=&amp;rsquo;%232c3e50&amp;rsquo; font-size=&amp;lsquo;13&amp;rsquo; font-family=&amp;lsquo;Arial&amp;rsquo;%3EGDB / LLDB / Valgrind / ASan / UBSan / printf%3C/text%3E%3Ctext x=&amp;lsquo;400&amp;rsquo; y=&amp;lsquo;280&amp;rsquo; text-anchor=&amp;lsquo;middle&amp;rsquo; fill=&amp;rsquo;%232c3e50&amp;rsquo; font-size=&amp;lsquo;13&amp;rsquo; font-family=&amp;lsquo;Arial&amp;rsquo;%3E核心转储 / 远程调试 / 日志分析%3C/text%3E%3Cdefs%3E%3Cmarker id=&amp;lsquo;arrow&amp;rsquo; markerWidth=&amp;lsquo;10&amp;rsquo; markerHeight=&amp;lsquo;10&amp;rsquo; refX=&amp;lsquo;9&amp;rsquo; refY=&amp;lsquo;3&amp;rsquo; orient=&amp;lsquo;auto&amp;rsquo;%3E%3Cpath d=&amp;lsquo;M0,0 L0,6 L9,3 z&amp;rsquo; fill=&amp;rsquo;%232c3e50&amp;rsquo;/%3E%3C/marker%3E%3C/defs%3E%3C/svg%3E)&lt;/p&gt;</description></item><item><title>第20章 迭代器与算法</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-20-Iterators-and-Algorithms/</link><pubDate>Sun, 29 Mar 2026 21:03:00 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-20-Iterators-and-Algorithms/</guid><description>&lt;h1 id="第20章-迭代器与算法"&gt;第20章 迭代器与算法&lt;/h1&gt;
&lt;p&gt;想象一下，你有一列火车，每节车厢里装着数据。迭代器就是那个勇敢的列车员，能够在车厢之间穿梭、读取货物、甚至还能往车厢里塞点新东西。而算法呢？就是那个掌控全局的调度中心，告诉你该在哪节车厢找宝藏、该怎么重新排列车厢、或者哪些车厢该淘汰出局。&lt;/p&gt;</description></item><item><title>第 20 章 工具开发与实用工程</title><link>https://before80.github.io/prgms/Rust/basic/Chapter-20-Tool-Development-And-Practical-Engineering/</link><pubDate>Fri, 27 Mar 2026 17:24:46 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/basic/Chapter-20-Tool-Development-And-Practical-Engineering/</guid><description>&lt;h1 id="chapter-20-工具开发与实用工程"&gt;Chapter 20 工具开发与实用工程&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;想象一下：你写了一段 Rust 代码，它拯救了世界（或者至少是拯救了你的下一个周末项目）。但这只是开始——如何让这段代码变成别人愿意安装、使用的工具？如何让它在 GitHub Actions 里跑起来？如何让全世界都知道你的名字（或者至少是 &lt;code&gt;crates.io&lt;/code&gt; 上的下载量）？&lt;/p&gt;</description></item><item><title>第20章 前沿探索与展望</title><link>https://before80.github.io/prgms/Js/tools/build/vite/Chapter-20-Frontier-Exploration/</link><pubDate>Fri, 27 Mar 2026 17:13:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/build/vite/Chapter-20-Frontier-Exploration/</guid><description>&lt;h1 id="chapter-20-frontier-exploration"&gt;Chapter-20-Frontier-Exploration&lt;/h1&gt;
&lt;h1 id="第20章前沿探索与展望"&gt;第20章：前沿探索与展望&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;恭喜你！能走到这里的同学，已经是 Vite 的深度玩家了。&lt;/p&gt;
&lt;p&gt;这一章，我们来放眼未来，看看前端构建工具领域的最新动态：Rspack 这个&amp;quot;性能怪兽&amp;quot;、边缘计算的崛起、AI 辅助开发的革命、以及 Vite 生态的未来趋势。&lt;/p&gt;</description></item><item><title>第20章 格式化上下文</title><link>https://before80.github.io/prgms/CSS/basic/Chapter-20-Formatting-Context/</link><pubDate>Fri, 27 Mar 2026 16:53:00 +0800</pubDate><guid>https://before80.github.io/prgms/CSS/basic/Chapter-20-Formatting-Context/</guid><description>&lt;h1 id="第二十章格式化上下文"&gt;第二十章：格式化上下文&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;格式化上下文（Formatting Context）是 CSS 布局中一个相对高级的概念。理解它，你就能解释很多&amp;quot;奇怪&amp;quot;的布局现象——比如为什么父元素高度塌陷、为什么 margin 会重叠、为什么 overflow:hidden 能清除浮动。这些问题的答案，都藏在格式化上下文中。&lt;/p&gt;</description></item><item><title>第20章 Redux Toolkit完整状态管理</title><link>https://before80.github.io/prgms/Js/frameworks/react/Chapter-20-Redux-Toolkit-Complete-State-Management/</link><pubDate>Wed, 25 Mar 2026 12:56:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/react/Chapter-20-Redux-Toolkit-Complete-State-Management/</guid><description>&lt;h1 id="chapter-20---redux-toolkit最完整的全局状态方案"&gt;Chapter-20 - Redux Toolkit——最完整的全局状态方案&lt;/h1&gt;
&lt;h2 id="201-redux-核心概念"&gt;20.1 Redux 核心概念&lt;/h2&gt;
&lt;h3 id="2011-redux-的三大原则单一数据源state-只读纯函数"&gt;20.1.1 Redux 的三大原则：单一数据源、state 只读、纯函数&lt;/h3&gt;
&lt;p&gt;Redux 是 React 生态中最经典的状态管理库，基于三大原则：&lt;/p&gt;</description></item><item><title>第20章 自定义指令</title><link>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-20-Custom-Directives/</link><pubDate>Wed, 25 Mar 2026 12:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-20-Custom-Directives/</guid><description>&lt;h1 id="第二十章-自定义指令"&gt;第二十章 自定义指令&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;Vue内置了很多有用的指令（v-if、v-for、v-model&amp;hellip;），但总有一些场景需要更直接地操作DOM。自定义指令就是Vue给你的&amp;quot;特权&amp;quot;——让你能够直接操控DOM元素，实现那些内置指令做不到的事情。本章我们来学习如何编写自定义指令，让你的Vue应用拥有&amp;quot;超能力&amp;quot;。&lt;/p&gt;</description></item><item><title>第 20 章 ES6+ 核心语法</title><link>https://before80.github.io/prgms/Js/basic/Chapter-20-ES6-Core-Syntax/</link><pubDate>Tue, 24 Mar 2026 22:08:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/basic/Chapter-20-ES6-Core-Syntax/</guid><description>&lt;h1 id="第-20-章-es6-核心语法"&gt;第 20 章 ES6+ 核心语法&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;JavaScript 从&amp;quot;草履虫&amp;quot;进化成&amp;quot;高级生物&amp;quot;的关键一跃！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="201-块级作用域"&gt;20.1 块级作用域&lt;/h2&gt;
&lt;h3 id="let-与-const-的作用域规则"&gt;let 与 const 的作用域规则&lt;/h3&gt;
&lt;p&gt;话说在很久很久以前，JavaScript 只有两种作用域：全局作用域和函数作用域。那时候程序员们写代码就像在玩&amp;quot;大家来找茬&amp;quot;——到处都是 var，一不小心就变量覆盖，天坑遍野，民不聊生。&lt;/p&gt;</description></item><item><title>第20章：包管理器概述</title><link>https://before80.github.io/prgms/linux/software_manage/Chapter-20-Package-Manager-Overview/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/software_manage/Chapter-20-Package-Manager-Overview/</guid><description>&lt;h1 id="第二十章包管理器概述"&gt;第二十章：包管理器概述&lt;/h1&gt;
&lt;p&gt;想象一下，你去超市买东西，超市里琳琅满目的商品都整整齐齐地摆在货架上。你不需要去找厂家直接拿货，只需要告诉超市你要什么，超市就会帮你搞定一切——包括从哪里进货、怎么保存、保质期多久等等。&lt;/p&gt;</description></item><item><title>第20章 接口实现</title><link>https://before80.github.io/prgms/go/basic/Chapter-20-InterfaceImplementation/</link><pubDate>Fri, 20 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/basic/Chapter-20-InterfaceImplementation/</guid><description>&lt;h1 id="第20章-接口实现"&gt;第20章 接口实现&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;Go语言的接口实现机制是&amp;quot;隐式的&amp;quot;，不需要&lt;code&gt;implements&lt;/code&gt;关键字。只要方法签名对上了，编译器就会认可你&amp;quot;实现了&amp;quot;那个接口。这种设计叫做&lt;strong&gt;鸭子类型（Duck Typing）&lt;/strong&gt;——&amp;ldquo;如果它走起来像鸭子，叫起来像鸭子，那它就是鸭子。&amp;rdquo;&lt;/p&gt;</description></item><item><title>第21章 中经——乱世生存指南：守义、摄心、解仇、缀去</title><link>https://before80.github.io/prgms/Philosophy/guiGuZi/21/</link><pubDate>Sat, 11 Apr 2026 21:52:00 +0800</pubDate><guid>https://before80.github.io/prgms/Philosophy/guiGuZi/21/</guid><description>&lt;h1 id="第二十一章-中经乱世生存指南守义摄心解仇缀去"&gt;第二十一章 中经——&amp;ldquo;乱世生存指南：守义、摄心、解仇、缀去&amp;rdquo;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本章核心：动荡时代如何自处？用&amp;quot;解仇斗郄、缀去却语、摄心守义&amp;quot;等心法，在变局中守住底线、凝聚人心、转危为安。&lt;/p&gt;</description></item><item><title>第21章 跨语言</title><link>https://before80.github.io/prgms/Python/basic/Chapter-21-Cross-Language/</link><pubDate>Wed, 08 Apr 2026 13:22:00 +0800</pubDate><guid>https://before80.github.io/prgms/Python/basic/Chapter-21-Cross-Language/</guid><description>&lt;h1 id="第二十一章python-与其他语言的外交官生涯"&gt;第二十一章：Python 与其他语言的&amp;quot;外交官&amp;quot;生涯&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;🎭 &lt;em&gt;本章导言：Python 虽然强大，但它可不是孤岛。这一章，我们让 Python 走出舒适区，学会和 C、Java、JavaScript、Go、R 等各路英雄豪杰称兄道弟、互帮互助。毕竟，独木不成林，孤码不成活！&lt;/em&gt;&lt;/p&gt;</description></item><item><title>第21章：Git 内部原理 —— 了解黑盒子里有什么</title><link>https://before80.github.io/prgms/Git/Chapter-21-Internal-Principles/</link><pubDate>Fri, 03 Apr 2026 19:36:48 +0800</pubDate><guid>https://before80.github.io/prgms/Git/Chapter-21-Internal-Principles/</guid><description>&lt;h1 id="第21章git-内部原理--了解黑盒子里有什么"&gt;第21章：Git 内部原理 —— 了解黑盒子里有什么&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;知其然，更要知其所以然。了解 Git 的内部原理，让你在使用 Git 时更加得心应手，遇到问题时也能从容应对。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="211-git-目录结构git-的大脑"&gt;21.1 .git 目录结构：Git 的大脑&lt;/h2&gt;
&lt;p&gt;每次执行 &lt;code&gt;git init&lt;/code&gt;，Git 都会创建一个 &lt;code&gt;.git&lt;/code&gt; 目录。这个目录就是 Git 的&amp;quot;大脑&amp;quot;，存储着所有的历史记录和配置。&lt;/p&gt;</description></item><item><title>第21章 集合框架（下）——Map</title><link>https://before80.github.io/prgms/Java/basic/Chapter-21-collections-part2/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-21-collections-part2/</guid><description>&lt;h1 id="第二十一章-集合框架下map"&gt;第二十一章 集合框架（下）——Map&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;上一章我们聊了聊 List 和 Set 两大家族，它们各有特色：List 是个排队买奶茶的队列（有序、可重复），Set 是个不允许撞衫的聚会（无序、去重）。但你有没有发现，这两位都只关心&amp;quot;单个元素&amp;quot;——不管来什么元素，我就一个一个存着。&lt;/p&gt;</description></item><item><title>第 21 章：HTTP 服务端——net/http</title><link>https://before80.github.io/prgms/go/std/Chapter-21-http-server/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-21-http-server/</guid><description>&lt;h1 id="第-21-章http-服务端nethttp"&gt;第 21 章：HTTP 服务端——net/http&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;互联网的每一秒，都有无数个 HTTP 请求在服务器间穿梭。你打开一个网页，是 HTTP；你调用一个 API，是 HTTP；你刷到一个视频，背后还是 HTTP。可以说，HTTP 就是互联网的&amp;quot;普通话&amp;quot;——虽然有时候说着说着就变成了 HTTPS（普通话加密版）。在这一章里，我们来探索 Go 标准库中那个让一切成为可能的包：&lt;code&gt;net/http&lt;/code&gt;。&lt;/p&gt;</description></item><item><title>第 21 章：链接与多文件项目——代码的'拼图大赛'</title><link>https://before80.github.io/prgms/C/basic/Chapter-21-Linking/</link><pubDate>Sun, 29 Mar 2026 22:34:00 +0800</pubDate><guid>https://before80.github.io/prgms/C/basic/Chapter-21-Linking/</guid><description>&lt;h1 id="第-21-章链接与多文件项目代码的拼图大赛"&gt;第 21 章：链接与多文件项目——代码的&amp;quot;拼图大赛&amp;quot;&lt;/h1&gt;
&lt;p&gt;嗨，亲爱的读者！欢迎来到 C 语言进阶的又一关键战场。&lt;/p&gt;
&lt;p&gt;想象一下，你是一个大型乐高城市的设计师。你不会把城市的每一块砖都捏在手里——那太蠢了！你会把不同的模块分开做：办公楼一块、居民楼一块、桥梁一块……然后在最后时刻，把它们咔嚓一声拼在一起，变成一座完整的城市。&lt;/p&gt;</description></item><item><title>第21章 函数对象与标准函数工具</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-21-Function-Objects/</link><pubDate>Sun, 29 Mar 2026 21:03:00 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-21-Function-Objects/</guid><description>&lt;h1 id="第21章-函数对象与标准函数工具"&gt;第21章 函数对象与标准函数工具&lt;/h1&gt;
&lt;p&gt;想象一下，你有一个遥控器，不仅能打开电视，还能记住你上次看的是哪个频道，甚至能根据你的心情推荐节目。这就是函数对象的超能力——它不仅仅是&amp;quot;按一下执行&amp;quot;的普通函数，而是一个有记忆、有个性、能干活的智能函数！&lt;/p&gt;</description></item><item><title>第 21 章 Rust 2024 Edition 新特性</title><link>https://before80.github.io/prgms/Rust/basic/Chapter-21-Rust-2024-Edition/</link><pubDate>Fri, 27 Mar 2026 17:24:46 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/basic/Chapter-21-Rust-2024-Edition/</guid><description>&lt;h1 id="chapter-21-rust-2024-edition-新特性"&gt;Chapter 21 Rust 2024 Edition 新特性&lt;/h1&gt;
&lt;!-- CONTENT_MARKER --&gt;
&lt;h2 id="211-edition-概览"&gt;21.1 Edition 概览&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;想象一下 Rust 编程语言是一个 living organism —— 它会呼吸、成长、偶尔还会掉几根&amp;quot;头发&amp;quot;（语法特性）。而 Edition，就是它的成年礼。每隔几年，Rust 团队就会发布一个 Edition，给这门语言一个新发型、一套新西装，顺便告诉你：&amp;ldquo;嘿，我已经不是五年前那个毛头小子了！&amp;rdquo;&lt;/p&gt;</description></item><item><title>第21章 浮动布局</title><link>https://before80.github.io/prgms/CSS/basic/Chapter-21-Float-Layout/</link><pubDate>Fri, 27 Mar 2026 16:53:00 +0800</pubDate><guid>https://before80.github.io/prgms/CSS/basic/Chapter-21-Float-Layout/</guid><description>&lt;h1 id="第二十一章浮动布局"&gt;第二十一章：浮动布局&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;浮动（Float）是 CSS 中历史悠久的布局方式，虽然现在 Flexbox 和 Grid 已经成为主流，但浮动在某些场景下仍然有用武之地。理解浮动的原理和清除方法，对于阅读老代码和维护旧项目非常重要。想象一下，浮动就像是在报纸排版中让图片&amp;quot;浮&amp;quot;到文字旁边，让文字环绕图片排列。&lt;/p&gt;</description></item><item><title>第21章 Zustand轻量级状态管理</title><link>https://before80.github.io/prgms/Js/frameworks/react/Chapter-21-Zustand-Lightweight-State-Management/</link><pubDate>Wed, 25 Mar 2026 12:56:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/react/Chapter-21-Zustand-Lightweight-State-Management/</guid><description>&lt;h1 id="chapter-21---zustand轻量级状态管理"&gt;Chapter-21 - Zustand——轻量级状态管理&lt;/h1&gt;
&lt;h2 id="211-zustand-基础"&gt;21.1 Zustand 基础&lt;/h2&gt;
&lt;h3 id="2111-安装与-store-创建"&gt;21.1.1 安装与 store 创建&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Zustand&lt;/strong&gt; 是一个超轻量的状态管理库，比 Redux 简洁得多，但功能同样强大。&lt;/p&gt;
&lt;p&gt;什么场景需要它？想象一下：你的应用有&amp;quot;主题切换&amp;quot;功能，用户在设置页改了深色模式，头部组件、侧边栏组件、底部组件&amp;hellip;十几个组件都要响应这个变化。用 Context 要层层嵌套，用 Redux 又太重。&lt;strong&gt;Zustand 就是来解决这种&amp;quot;中等规模&amp;quot;状态共享问题的&lt;/strong&gt;——比 Context 强大（细粒度订阅），比 Redux 简单（不用写模板代码）。&lt;/p&gt;</description></item><item><title>第21章 登录与权限控制</title><link>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-21-Login-Auth/</link><pubDate>Wed, 25 Mar 2026 12:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-21-Login-Auth/</guid><description>&lt;h1 id="第二十一章-登录与权限控制"&gt;第二十一章 登录与权限控制&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;用户登录和权限控制，可能是全栈开发中最让人又爱又恨的部分。爱的是它太重要了，几乎每个应用都需要；恨的是，这里面的门门道道多到能写一本书。JWT、Token、OAuth2、SSO、动态路由、按钮权限……本章用一整章的篇幅，把这些&amp;quot;拦路虎&amp;quot;一个个给你讲明白，让你从此不再谈&amp;quot;权&amp;quot;色变。&lt;/p&gt;</description></item><item><title>第 21 章 ES6+ 数据结构</title><link>https://before80.github.io/prgms/Js/basic/Chapter-21-ES6-Data-Structures/</link><pubDate>Tue, 24 Mar 2026 22:08:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/basic/Chapter-21-ES6-Data-Structures/</guid><description>&lt;h1 id="第-21-章-es6-数据结构"&gt;第 21 章 ES6+ 数据结构&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;JavaScript 终于有了正经的&amp;quot;容器&amp;quot;——Map 和 Set 来了！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="211-map"&gt;21.1 Map&lt;/h2&gt;
&lt;h3 id="创建与基本操作set--get--has--delete--clear--size"&gt;创建与基本操作：set / get / has / delete / clear / size&lt;/h3&gt;
&lt;p&gt;话说在 ES6 之前，JavaScript 的&amp;quot;字典&amp;quot;（键值对数据结构）只有一种选择——&lt;strong&gt;Object&lt;/strong&gt;。但 Object 作为字典有诸多问题：键会被转成字符串、原型链上的属性可能捣乱、遍历不友好&amp;hellip;&lt;/p&gt;</description></item><item><title>第21章：Ubuntu/Debian 包管理（APT）</title><link>https://before80.github.io/prgms/linux/software_manage/Chapter-21-Ubuntu-Debian-Package-Management-APT/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/software_manage/Chapter-21-Ubuntu-Debian-Package-Management-APT/</guid><description>&lt;h1 id="第二十一章ubuntudebian-包管理apt"&gt;第二十一章：Ubuntu/Debian 包管理（APT）&lt;/h1&gt;
&lt;p&gt;这一章我们来聊聊Ubuntu和Debian的包管理器——&lt;strong&gt;APT&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;如果说Linux是一个江湖，那APT就是这个江湖里最流行的&amp;quot;万能工具箱&amp;quot;。不管是装软件、卸载软件、还是升级系统，一条命令全搞定。&lt;/p&gt;</description></item><item><title>第21章 接口值</title><link>https://before80.github.io/prgms/go/basic/Chapter-21-InterfaceValues/</link><pubDate>Fri, 20 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/basic/Chapter-21-InterfaceValues/</guid><description>&lt;h1 id="第21章-接口值"&gt;第21章 接口值&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;接口值是Go语言中最有趣的数据结构之一。把它想象成一个&amp;quot;万能遥控器&amp;quot;——可以指向不同品牌的电视（具体类型），但遥控器本身的操作方式是固定的。&lt;/p&gt;</description></item><item><title>《鬼谷子》全文——拼音版</title><link>https://before80.github.io/prgms/Philosophy/guiGuZi/pinyin/</link><pubDate>Sat, 11 Apr 2026 21:52:00 +0800</pubDate><guid>https://before80.github.io/prgms/Philosophy/guiGuZi/pinyin/</guid><description>&lt;h1 id="上卷权谋十二篇"&gt;上卷·权谋十二篇&lt;/h1&gt;
&lt;h2 id="捭阖第一"&gt;捭阖第一&lt;/h2&gt;
&lt;p&gt;&lt;ruby&gt;粤&lt;rt&gt;yuè&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;若&lt;rt&gt;ruò&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;稽&lt;rt&gt;jī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;古&lt;rt&gt;gǔ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;圣&lt;rt&gt;shèng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;人&lt;rt&gt;rén&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;之&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;在&lt;rt&gt;zài&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;天&lt;rt&gt;tiān&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;地&lt;rt&gt;dì&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;间&lt;rt&gt;jiān&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;也&lt;rt&gt;yě&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;为&lt;rt&gt;wèi&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;众&lt;rt&gt;zhòng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;生&lt;rt&gt;shēng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;之&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;先&lt;rt&gt;xiān&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;观&lt;rt&gt;guān&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;阴&lt;rt&gt;yīn&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;阳&lt;rt&gt;yáng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;之&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;开&lt;rt&gt;kāi&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;阖&lt;rt&gt;hé&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;以&lt;rt&gt;yǐ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;名&lt;rt&gt;míng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;命&lt;rt&gt;mìng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;物&lt;rt&gt;wù&lt;/rt&gt;&lt;/ruby&gt;；&lt;ruby&gt;知&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;存&lt;rt&gt;cún&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;亡&lt;rt&gt;wáng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;之&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;门&lt;rt&gt;mén&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;户&lt;rt&gt;hù&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;筹&lt;rt&gt;chóu&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;策&lt;rt&gt;cè&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;万&lt;rt&gt;wàn&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;类&lt;rt&gt;lèi&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;之&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;终&lt;rt&gt;zhōng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;始&lt;rt&gt;shǐ&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;达&lt;rt&gt;dá&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;人&lt;rt&gt;rén&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;心&lt;rt&gt;xīn&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;之&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;理&lt;rt&gt;lǐ&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;见&lt;rt&gt;jiàn&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;变&lt;rt&gt;biàn&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;化&lt;rt&gt;huà&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;之&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;朕&lt;rt&gt;zhèn&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;焉&lt;rt&gt;yān&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;而&lt;rt&gt;ér&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;守&lt;rt&gt;shǒu&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;司&lt;rt&gt;sī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;其&lt;rt&gt;qí&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;门&lt;rt&gt;mén&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;户&lt;rt&gt;hù&lt;/rt&gt;&lt;/ruby&gt;。&lt;ruby&gt;故&lt;rt&gt;gù&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;圣&lt;rt&gt;shèng&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;人&lt;rt&gt;rén&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;之&lt;rt&gt;zhī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;在&lt;rt&gt;zài&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;天&lt;rt&gt;tiān&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;下&lt;rt&gt;xià&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;也&lt;rt&gt;yě&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;自&lt;rt&gt;zì&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;古&lt;rt&gt;gǔ&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;至&lt;rt&gt;zhì&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;今&lt;rt&gt;jīn&lt;/rt&gt;&lt;/ruby&gt;，&lt;ruby&gt;其&lt;rt&gt;qí&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;道&lt;rt&gt;dào&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;一&lt;rt&gt;yī&lt;/rt&gt;&lt;/ruby&gt; &lt;ruby&gt;也&lt;rt&gt;yě&lt;/rt&gt;&lt;/ruby&gt;。&lt;/p&gt;</description></item><item><title>第22章 Web框架</title><link>https://before80.github.io/prgms/Python/basic/Chapter-22-Web-Frameworks/</link><pubDate>Wed, 08 Apr 2026 13:22:00 +0800</pubDate><guid>https://before80.github.io/prgms/Python/basic/Chapter-22-Web-Frameworks/</guid><description>&lt;h1 id="第二十二章web-框架三巨头--flaskdjangofastapi"&gt;第二十二章：Web 框架三巨头 —— Flask、Django、FastAPI&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;章前趣闻&lt;/strong&gt;：想象一下，你开了一家餐厅。Flask 像是只给你一个厨房和灶台，让你自由发挥；Django 则是一条龙的中央厨房，连食材都帮你切好了；FastAPI 呢？它是个带异步魔法的高科技厨房，能同时做好几十道菜而且速度飞快。Web 框架就是程序员的&amp;quot;厨房&amp;quot;，决定你&amp;quot;做菜&amp;quot;的效率和质量！&lt;/p&gt;</description></item><item><title>第22章：常见场景实战 —— 解决真实世界的问题</title><link>https://before80.github.io/prgms/Git/Chapter-22-Common-Scenarios/</link><pubDate>Fri, 03 Apr 2026 19:36:48 +0800</pubDate><guid>https://before80.github.io/prgms/Git/Chapter-22-Common-Scenarios/</guid><description>&lt;h1 id="第22章常见场景实战--解决真实世界的问题"&gt;第22章：常见场景实战 —— 解决真实世界的问题&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;理论学了一堆，实战才是检验真理的唯一标准。这一章，我们用12个真实场景，带你从&amp;quot;会 Git&amp;quot;进化到&amp;quot;精通 Git&amp;quot;！&lt;/p&gt;</description></item><item><title>第22章 Queue 与 Deque</title><link>https://before80.github.io/prgms/Java/basic/Chapter-22-queue-deque/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-22-queue-deque/</guid><description>&lt;h1 id="第二十二章-queue-与-deque"&gt;第二十二章 Queue 与 Deque&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;人生就像一个队列，先排队的人先办事。后来的人？别急，等前面的人办完再说。&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Queue（队列）和 Deque（双端队列）是 Java 中极其重要的数据结构，它们遵循**先进先出（First In First Out, FIFO）**的原则。想象一下排队买奶茶——先来的人先拿到奶茶，后来的人乖乖排在后面。这个&amp;quot;奶茶店排队&amp;quot;的场景，就是队列最形象的比喻。&lt;/p&gt;</description></item><item><title>第 22 章：HTTP 客户端——net/http（续）</title><link>https://before80.github.io/prgms/go/std/Chapter-22-http-client/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-22-http-client/</guid><description>&lt;h1 id="第-22-章http-客户端nethttp续"&gt;第 22 章：HTTP 客户端——net/http（续）&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;「上一章我们学会了建服务器，这一章我们学会做客户。做一个好的 HTTP 客户端，可比当一个舔狗要复杂多了。」&lt;/p&gt;</description></item><item><title>第 22 章：进程、信号与系统调用</title><link>https://before80.github.io/prgms/C/basic/Chapter-22-Processes-Signals/</link><pubDate>Sun, 29 Mar 2026 22:34:00 +0800</pubDate><guid>https://before80.github.io/prgms/C/basic/Chapter-22-Processes-Signals/</guid><description>&lt;h1 id="第-22-章进程信号与系统调用"&gt;第 22 章：进程、信号与系统调用&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;📌 本章代码实验环境为 Linux (GCC)。Windows 用户建议使用 WSL2，或者把本章当小说看也是极好的——毕竟，程序员的世界里，理论比代码更精彩。&lt;/p&gt;</description></item><item><title>第22章 标准库工具类</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-22-Standard-Library-Utilities/</link><pubDate>Sun, 29 Mar 2026 21:03:00 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-22-Standard-Library-Utilities/</guid><description>&lt;h1 id="第22章-标准库工具类"&gt;第22章 标准库工具类&lt;/h1&gt;
&lt;p&gt;想象一下，你走进一家超市，发现购物车只能装一样东西——要么是苹果，要么是橘子，但不能同时装两种。这也太反人类了吧！C++的标准库工具类就是来拯救你的，它们让你的&amp;quot;购物车&amp;quot;能装下各种奇奇怪怪的东西，而且井井有条。&lt;/p&gt;</description></item><item><title>第 22 章 Rust 编译器与语言设计</title><link>https://before80.github.io/prgms/Rust/basic/Chapter-22-Rust-Compiler-And-Language-Design/</link><pubDate>Fri, 27 Mar 2026 17:24:46 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/basic/Chapter-22-Rust-Compiler-And-Language-Design/</guid><description>&lt;h1 id="chapter-22-rust-编译器与语言设计"&gt;Chapter 22 Rust 编译器与语言设计&lt;/h1&gt;
&lt;!-- CONTENT_MARKER --&gt;
&lt;blockquote&gt;
&lt;p&gt;你有没有想过，当你 &lt;code&gt;cargo build&lt;/code&gt; 的时候，背后究竟发生了什么？Cargo 悠悠地打印出 &amp;ldquo;Compiling&amp;hellip;&amp;quot;，然后 Rust 编译器（rustc）就像一台精密的瑞士手表一样开始工作——词法分析、语法解析、类型检查、 borrowck、代码生成……每一个步骤都像交响乐团的乐手，各司其职，配合得天衣无缝。本章我们就来拆解这台&amp;quot;编译器交响乐团&amp;quot;的乐器组，聊聊 Rust 编译器架构、语言设计决策背后的哲学，以及你如何参与到这个伟大项目中去。&lt;/p&gt;</description></item><item><title>第22章 定位布局</title><link>https://before80.github.io/prgms/CSS/basic/Chapter-22-Positioning-Layout/</link><pubDate>Fri, 27 Mar 2026 16:53:00 +0800</pubDate><guid>https://before80.github.io/prgms/CSS/basic/Chapter-22-Positioning-Layout/</guid><description>&lt;h1 id="第二十二章定位布局"&gt;第二十二章：定位布局&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;定位（Position）是 CSS 中最强大的布局手段之一。通过 &lt;code&gt;position&lt;/code&gt; 属性，你可以把元素放到页面的任何位置，实现层叠效果、固定导航、回到顶部按钮等各种复杂布局。想象一下，&lt;code&gt;position&lt;/code&gt; 就是 CSS 给你的&amp;quot;魔法棒&amp;quot;，可以让你把元素&amp;quot;传送&amp;quot;到任何你想要的地方。&lt;/p&gt;</description></item><item><title>第22章 TypeScript与React</title><link>https://before80.github.io/prgms/Js/frameworks/react/Chapter-22-TypeScript-and-React/</link><pubDate>Wed, 25 Mar 2026 12:56:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/react/Chapter-22-TypeScript-and-React/</guid><description>&lt;h1 id="chapter-22---typescript-与-react"&gt;Chapter-22 - TypeScript 与 React&lt;/h1&gt;
&lt;h2 id="221-为什么用-typescript"&gt;22.1 为什么用 TypeScript？&lt;/h2&gt;
&lt;h3 id="2211-类型安全带来的开发体验提升"&gt;22.1.1 类型安全带来的开发体验提升&lt;/h3&gt;
&lt;p&gt;TypeScript 是 JavaScript 的超集，它在 JavaScript 的基础上添加了&lt;strong&gt;静态类型检查&lt;/strong&gt;。在开发阶段就能发现错误，而不是等到运行时才崩溃。&lt;/p&gt;</description></item><item><title>第22章 表单处理与验证</title><link>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-22-Forms/</link><pubDate>Wed, 25 Mar 2026 12:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-22-Forms/</guid><description>&lt;h1 id="第二十二章-表单处理与验证"&gt;第二十二章 表单处理与验证&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;表单，是前端开发中最&amp;quot;脏活累活&amp;quot;集中的地方。输入框、下拉框、开关、上传文件……一个个看着简单，真要处理好每个状态、每种验证、每个边界情况，能把人写到头秃。本章把表单相关的&amp;quot;十八般武艺&amp;quot;全部传授给你，从基础控件到高级封装，从手动校验到 VeeValidate 大法，保管你以后面对任何表单都能从容应对。&lt;/p&gt;</description></item><item><title>第 22 章 ES6+ 新增语法</title><link>https://before80.github.io/prgms/Js/basic/Chapter-22-ES6-New-Syntax/</link><pubDate>Tue, 24 Mar 2026 22:08:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/basic/Chapter-22-ES6-New-Syntax/</guid><description>&lt;h1 id="第-22-章-es6-新增语法"&gt;第 22 章 ES6+ 新增语法&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;ES2020、ES2021、ES2022、ES2023、ES2024&amp;hellip; JavaScript 越来越甜了！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="221-链式操作"&gt;22.1 链式操作&lt;/h2&gt;
&lt;h3 id="可选链操作符-es2020"&gt;可选链操作符 ?.（ES2020+）&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;可选链操作符&lt;/strong&gt;（Optional Chaining）——&lt;code&gt;?.&lt;/code&gt;，这是 JavaScript 历史上最受好评的语法更新之一！它让深层属性访问变得安全，再也不用写一堆 &lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt; 了。&lt;/p&gt;</description></item><item><title>第22章：apt-fast 多线程加速</title><link>https://before80.github.io/prgms/linux/software_manage/Chapter-22-apt-fast-Multi-threaded-Acceleration/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/software_manage/Chapter-22-apt-fast-Multi-threaded-Acceleration/</guid><description>&lt;h1 id="第二十二章apt-fast-多线程加速"&gt;第二十二章：apt-fast 多线程加速&lt;/h1&gt;
&lt;p&gt;你有没有遇到过这种情况：带宽明明是100Mbps，但apt下载软件只有几百KB/s，慢得像蜗牛爬？&lt;/p&gt;
&lt;p&gt;这通常是&lt;strong&gt;单线程下载&lt;/strong&gt;的问题。apt默认一次只从服务器下载一个文件，就像单车道的高速公路，车一多就堵。&lt;/p&gt;</description></item><item><title>第22章 类型断言</title><link>https://before80.github.io/prgms/go/basic/Chapter-22-TypeAssertions/</link><pubDate>Fri, 20 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/basic/Chapter-22-TypeAssertions/</guid><description>&lt;h1 id="第22章-类型断言"&gt;第22章 类型断言&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;类型断言是Go语言处理接口值的&amp;quot;透视镜&amp;quot;。它允许你&amp;quot;窥视&amp;quot;接口内部，提取出具体的类型和值。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="221-断言语法"&gt;22.1 断言语法&lt;/h2&gt;
&lt;h3 id="2211-直接断言"&gt;22.1.1 直接断言&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;17
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;18
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;19
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;20
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;21
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;22
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;23
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;24
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;25
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;26
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;27
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;28
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;29
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;30
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;31
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;32
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;package&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;main&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;import&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;type&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;Writer&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;interface&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#00b1f7"&gt;Write&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;p&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;[]&lt;/span&gt;&lt;span style="color:#e5c07b"&gt;byte&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;n&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;int&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;err&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;error&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;type&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;File&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;struct&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;name&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;string&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;func&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;f&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;*&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;File&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#00b1f7"&gt;Write&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;p&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;[]&lt;/span&gt;&lt;span style="color:#e5c07b"&gt;byte&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;n&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;int&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;err&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;error&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;fmt&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#00b1f7"&gt;Printf&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;[File] 写入文件 %s: %s\n&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;f&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;name&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;string&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;p&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;))&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// [File] 写入文件 test.txt: Hello&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;return&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;len&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;p&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;),&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;nil&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;type&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;StringWriter&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;struct&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;func&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;s&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;*&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;StringWriter&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#00b1f7"&gt;Write&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;p&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;[]&lt;/span&gt;&lt;span style="color:#e5c07b"&gt;byte&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;n&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;int&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;err&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;error&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;fmt&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#00b1f7"&gt;Printf&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;[StringWriter] 写入: %s\n&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;string&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;p&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;))&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// [StringWriter] 写入: Another message&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;return&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;len&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;p&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;),&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;nil&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;func&lt;/span&gt; &lt;span style="color:#00b1f7"&gt;main&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;()&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;var&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;w&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;Writer&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;=&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;File&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;name&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#34;test.txt&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;f&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;:=&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;w&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.(&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;*&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;File&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;fmt&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#00b1f7"&gt;Printf&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;断言成功，文件名: %s\n&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;f&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;name&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 断言成功，文件名: test.txt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;var&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;w2&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;Writer&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;=&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;StringWriter&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;fmt&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#00b1f7"&gt;Printf&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;w2的类型: %T\n&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;w2&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// w2的类型: *main.StringWriter&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="2212-comma-ok-断言"&gt;22.1.2 comma-ok 断言&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;17
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;18
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;package&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;main&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;import&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;func&lt;/span&gt; &lt;span style="color:#00b1f7"&gt;main&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;()&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;var&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;i&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;interface&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;{}&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;=&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#34;hello world&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;if&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;str&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;ok&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;:=&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;i&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.(&lt;/span&gt;&lt;span style="color:#e5c07b"&gt;string&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;ok&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;fmt&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#00b1f7"&gt;Printf&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;断言成功: %q\n&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;str&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 断言成功: &amp;#34;hello world&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;var&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;i2&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;interface&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;{}&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;=&lt;/span&gt; &lt;span style="color:#d19a66"&gt;42&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;if&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;str&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;ok&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;:=&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;i2&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.(&lt;/span&gt;&lt;span style="color:#e5c07b"&gt;string&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;ok&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;fmt&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#00b1f7"&gt;Printf&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;这行不会打印: %q\n&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;str&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;else&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;fmt&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#00b1f7"&gt;Println&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;断言失败，i2不是string类型，是int&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 断言失败，i2不是string类型，是int&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="2213-多个类型尝试"&gt;22.1.3 多个类型尝试&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;17
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;18
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;19
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;20
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;21
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;22
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;23
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;24
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;25
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;26
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;27
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;28
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;29
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;30
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;31
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;package&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;main&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;import&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;type&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;Any&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;interface&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;func&lt;/span&gt; &lt;span style="color:#00b1f7"&gt;inspect&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;i&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;Any&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;if&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;v&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;ok&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;:=&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;i&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.(&lt;/span&gt;&lt;span style="color:#e5c07b"&gt;string&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;ok&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;fmt&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#00b1f7"&gt;Printf&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;字符串类型: %q\n&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;v&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 字符串类型: &amp;#34;hello&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;return&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;if&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;v&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;ok&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;:=&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;i&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.(&lt;/span&gt;&lt;span style="color:#e5c07b"&gt;int&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;ok&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;fmt&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#00b1f7"&gt;Printf&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;整数类型: %d\n&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;v&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 整数类型: 42&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;return&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;if&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;v&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;ok&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;:=&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;i&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.(&lt;/span&gt;&lt;span style="color:#e5c07b"&gt;float64&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;ok&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;fmt&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#00b1f7"&gt;Printf&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;浮点数类型: %f\n&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;v&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 浮点数类型: 3.140000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;return&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;fmt&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#00b1f7"&gt;Printf&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;未知类型: %T\n&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;i&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;func&lt;/span&gt; &lt;span style="color:#00b1f7"&gt;main&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;()&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#00b1f7"&gt;inspect&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;hello&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#00b1f7"&gt;inspect&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#d19a66"&gt;42&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#00b1f7"&gt;inspect&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#d19a66"&gt;3.14&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#00b1f7"&gt;inspect&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;([]&lt;/span&gt;&lt;span style="color:#e5c07b"&gt;int&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;&lt;span style="color:#d19a66"&gt;1&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#d19a66"&gt;2&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#d19a66"&gt;3&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="222-断言成功的情况"&gt;22.2 断言成功的情况&lt;/h2&gt;
&lt;h3 id="2221-断言为具体类型"&gt;22.2.1 断言为具体类型&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;17
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;18
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;19
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;20
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;21
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;22
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;23
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;24
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;25
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;26
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;27
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;28
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;29
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;30
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;31
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;32
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;33
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;34
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;35
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;36
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;37
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;38
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;39
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;package&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;main&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;import&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;type&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;Shape&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;interface&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#00b1f7"&gt;Area&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;()&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;float64&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;type&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;Circle&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;struct&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;Radius&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;float64&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;func&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;c&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;Circle&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#00b1f7"&gt;Area&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;()&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;float64&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;return&lt;/span&gt; &lt;span style="color:#d19a66"&gt;3.14159&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;*&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;c&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;Radius&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;*&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;c&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;Radius&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;type&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;Rectangle&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;struct&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;Width&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;Height&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;float64&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;func&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;r&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;Rectangle&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#00b1f7"&gt;Area&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;()&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;float64&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;return&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;r&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;Width&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;*&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;r&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;Height&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;func&lt;/span&gt; &lt;span style="color:#00b1f7"&gt;main&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;()&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;var&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;s&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;Shape&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;=&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;Circle&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;Radius&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#d19a66"&gt;5&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;fmt&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#00b1f7"&gt;Printf&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;接口动态类型: %T\n&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;s&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 接口动态类型: main.Circle&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;if&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;c&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;ok&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;:=&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;s&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;Circle&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;ok&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;fmt&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#00b1f7"&gt;Printf&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;成功断言为Circle，半径=%.2f，面积=%.2f\n&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;c&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;Radius&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;c&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#00b1f7"&gt;Area&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;())&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 成功断言为Circle，半径=5.00，面积=78.54&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;if&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;r&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;ok&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;:=&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;s&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;Rectangle&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;ok&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;fmt&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#00b1f7"&gt;Printf&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;Rectangle: %v\n&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;r&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;else&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;fmt&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#00b1f7"&gt;Println&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;s不是Rectangle类型，它是Circle&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// s不是Rectangle类型，它是Circle&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="2222-断言为接口类型"&gt;22.2.2 断言为接口类型&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;17
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;18
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;19
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;20
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;21
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;22
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;23
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;24
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;25
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;26
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;27
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;28
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;29
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;30
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;31
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;32
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;33
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;34
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;35
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;36
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;37
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;38
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;39
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;40
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;41
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;42
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;package&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;main&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;import&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;type&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;Reader&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;interface&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#00b1f7"&gt;Read&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;p&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;[]&lt;/span&gt;&lt;span style="color:#e5c07b"&gt;byte&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;n&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;int&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;err&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;error&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;type&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;Writer&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;interface&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#00b1f7"&gt;Write&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;p&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;[]&lt;/span&gt;&lt;span style="color:#e5c07b"&gt;byte&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;n&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;int&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;err&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;error&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;type&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;ReadWriter&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;interface&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;Reader&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;Writer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;type&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;File&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;struct&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;func&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;f&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;*&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;File&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#00b1f7"&gt;Read&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;p&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;[]&lt;/span&gt;&lt;span style="color:#e5c07b"&gt;byte&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;n&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;int&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;err&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;error&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;fmt&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#00b1f7"&gt;Println&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;[File.Read] 读取&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// [File.Read] 读取&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;return&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;len&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;p&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;),&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;nil&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;func&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;f&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;*&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;File&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#00b1f7"&gt;Write&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;p&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;[]&lt;/span&gt;&lt;span style="color:#e5c07b"&gt;byte&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;n&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;int&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;err&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;error&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;fmt&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#00b1f7"&gt;Println&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;[File.Write] 写入&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// [File.Write] 写入&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;return&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;len&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;p&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;),&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;nil&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;func&lt;/span&gt; &lt;span style="color:#00b1f7"&gt;main&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;()&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;var&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;rw&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;ReadWriter&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;=&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;File&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;if&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;r&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;ok&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;:=&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;rw&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;Reader&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;ok&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;fmt&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#00b1f7"&gt;Printf&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;成功断言为Reader: %T\n&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;r&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 成功断言为Reader: *main.File&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;r&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#00b1f7"&gt;Read&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#e5c07b"&gt;make&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;([]&lt;/span&gt;&lt;span style="color:#e5c07b"&gt;byte&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#d19a66"&gt;10&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;if&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;w&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;ok&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;:=&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;rw&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;Writer&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;ok&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;fmt&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#00b1f7"&gt;Printf&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;成功断言为Writer: %T\n&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;w&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 成功断言为Writer: *main.File&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;w&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#00b1f7"&gt;Write&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#e5c07b"&gt;make&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;([]&lt;/span&gt;&lt;span style="color:#e5c07b"&gt;byte&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#d19a66"&gt;10&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="223-断言失败的情况"&gt;22.3 断言失败的情况&lt;/h2&gt;
&lt;h3 id="2231-comma-ok断言安全处理"&gt;22.3.1 comma-ok断言安全处理&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;17
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;18
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;19
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;20
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;21
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;22
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;23
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;24
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;25
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;26
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;27
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;28
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;29
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;package&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;main&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;import&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;type&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;Any&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;interface&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;func&lt;/span&gt; &lt;span style="color:#00b1f7"&gt;safeAssert&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;i&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;Any&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;fmt&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#00b1f7"&gt;Printf&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;尝试断言 %T: &amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;i&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;if&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;s&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;ok&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;:=&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;i&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.(&lt;/span&gt;&lt;span style="color:#e5c07b"&gt;string&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;ok&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;fmt&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#00b1f7"&gt;Printf&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;是字符串 %q\n&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;s&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;return&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;if&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;n&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;ok&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;:=&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;i&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.(&lt;/span&gt;&lt;span style="color:#e5c07b"&gt;int&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;ok&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;fmt&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#00b1f7"&gt;Printf&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;是整数 %d\n&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;n&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;return&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;fmt&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#00b1f7"&gt;Printf&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;不是字符串也不是整数\n&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;func&lt;/span&gt; &lt;span style="color:#00b1f7"&gt;main&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;()&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;fmt&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#00b1f7"&gt;Println&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;=== comma-ok断言安全处理 ===&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#00b1f7"&gt;safeAssert&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;hello&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 尝试断言 string: 是字符串 &amp;#34;hello&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#00b1f7"&gt;safeAssert&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#d19a66"&gt;42&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 尝试断言 int: 是整数 42&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#00b1f7"&gt;safeAssert&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#d19a66"&gt;3.14&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 尝试断言 float64: 不是字符串也不是整数&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="2232-类型选择处理"&gt;22.3.2 类型选择处理&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;17
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;18
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;19
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;20
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;21
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;22
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;23
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;24
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;25
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;26
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;27
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;28
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;29
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;30
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;31
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;32
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;33
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;34
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;35
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;36
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;37
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;38
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;39
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;40
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;41
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;package&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;main&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;import&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;type&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;Any&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;interface&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;func&lt;/span&gt; &lt;span style="color:#00b1f7"&gt;inspectType&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;i&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;Any&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;fmt&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#00b1f7"&gt;Printf&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;%v (类型: %T) -&amp;gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;i&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;i&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;switch&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;v&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;:=&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;i&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.(&lt;/span&gt;&lt;span style="color:#76a9f9"&gt;type&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;case&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;nil&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;fmt&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#00b1f7"&gt;Println&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;nil值&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;case&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;int&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;fmt&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#00b1f7"&gt;Printf&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;整数: %d (两倍=%d)\n&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;v&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;v&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;*&lt;/span&gt;&lt;span style="color:#d19a66"&gt;2&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;case&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;string&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;fmt&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#00b1f7"&gt;Printf&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;字符串: %q (长度=%d)\n&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;v&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;len&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;v&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;case&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;float64&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;fmt&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#00b1f7"&gt;Printf&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;浮点数: %.2f\n&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;v&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;case&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;bool&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;fmt&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#00b1f7"&gt;Printf&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;布尔值: %t\n&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;v&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;default&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;fmt&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#00b1f7"&gt;Printf&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;其他类型: %T\n&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;v&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;func&lt;/span&gt; &lt;span style="color:#00b1f7"&gt;main&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;()&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;values&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;:=&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;[]&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;Any&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;&lt;span style="color:#e5c07b"&gt;nil&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#d19a66"&gt;42&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#d19a66"&gt;7&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#34;hi&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;true&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#d19a66"&gt;3.14&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;fmt&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#00b1f7"&gt;Println&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;=== type switch ===\n&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;for&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;_&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;v&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;:=&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;range&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;values&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#00b1f7"&gt;inspectType&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;v&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// &amp;lt;nil&amp;gt; (类型: &amp;lt;nil&amp;gt;) -&amp;gt; nil值&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 42 (类型: int) -&amp;gt; 整数: 42 (两倍=84)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 7 (类型: int) -&amp;gt; 整数: 7 (两倍=14)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// hi (类型: string) -&amp;gt; 字符串: &amp;#34;hi&amp;#34; (长度=2)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// true (类型: bool) -&amp;gt; 布尔值: true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 3.14 (类型: float64) -&amp;gt; 浮点数: 3.14&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="224-断言与接口类型转换"&gt;22.4 断言与接口类型转换&lt;/h2&gt;
&lt;h3 id="2241-接口转具体类型"&gt;22.4.1 接口转具体类型&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;17
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;18
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;19
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;20
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;21
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;22
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;23
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;24
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;25
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;26
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;27
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;28
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;29
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;30
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;31
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;32
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;33
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;34
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;35
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;36
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;37
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;38
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;39
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;package&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;main&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;import&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;type&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;Writer&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;interface&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#00b1f7"&gt;Write&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;p&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;[]&lt;/span&gt;&lt;span style="color:#e5c07b"&gt;byte&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;n&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;int&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;err&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;error&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;type&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;File&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;struct&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;name&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;string&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;func&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;f&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;*&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;File&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#00b1f7"&gt;Write&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;p&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;[]&lt;/span&gt;&lt;span style="color:#e5c07b"&gt;byte&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;n&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;int&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;err&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;error&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;fmt&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#00b1f7"&gt;Printf&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;[File.Write] %s: %s\n&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;f&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;name&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;string&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;p&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;))&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// [File.Write] data.txt: test&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;return&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;len&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;p&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;),&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;nil&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;type&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;StringWriter&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;struct&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;func&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;s&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;*&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;StringWriter&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#00b1f7"&gt;Write&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;p&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;[]&lt;/span&gt;&lt;span style="color:#e5c07b"&gt;byte&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;n&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;int&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;err&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;error&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;fmt&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#00b1f7"&gt;Printf&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;[StringWriter.Write] %s\n&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;string&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;p&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;))&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// [StringWriter.Write] test&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;return&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;len&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;p&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;),&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;nil&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;func&lt;/span&gt; &lt;span style="color:#00b1f7"&gt;main&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;()&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;var&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;w&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;Writer&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;=&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;File&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;name&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#34;data.txt&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;if&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;f&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;ok&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;:=&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;w&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.(&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;*&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;File&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;ok&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;fmt&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#00b1f7"&gt;Printf&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;断言为*File成功: %s\n&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;f&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;name&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 断言为*File成功: data.txt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;f&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#00b1f7"&gt;Write&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;([]&lt;/span&gt;&lt;span style="color:#e5c07b"&gt;byte&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;test&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;var&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;w2&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;Writer&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;=&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;StringWriter&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;if&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;f&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;ok&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;:=&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;w2&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.(&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;*&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;File&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;ok&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;fmt&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#00b1f7"&gt;Println&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;这行不会打印&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;else&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;fmt&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#00b1f7"&gt;Println&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;w2不是*File类型，无法断言&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// w2不是*File类型，无法断言&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="本章小结"&gt;本章小结&lt;/h2&gt;
&lt;p&gt;本章我们学习了Go的&lt;strong&gt;类型断言&lt;/strong&gt;：&lt;/p&gt;</description></item><item><title>《鬼谷子》全文——注释版</title><link>https://before80.github.io/prgms/Philosophy/guiGuZi/shiyi/</link><pubDate>Sat, 11 Apr 2026 21:52:00 +0800</pubDate><guid>https://before80.github.io/prgms/Philosophy/guiGuZi/shiyi/</guid><description>&lt;h2 id="上卷权谋十二篇"&gt;上卷·权谋十二篇&lt;/h2&gt;
&lt;h3 id="捭阖第一"&gt;捭阖第一&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;原文&lt;/strong&gt;：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;粤若稽古，圣人之在天地间也，为众生之先，观阴阳之开阖以名命物；知存亡之门户，筹策万类之终始，达人心之理，见变化之朕焉，而守司其门户。故圣人之在天下也，自古至今，其道一也。&lt;/p&gt;</description></item><item><title>第23章 异步框架</title><link>https://before80.github.io/prgms/Python/basic/Chapter-23-Async-Frameworks/</link><pubDate>Wed, 08 Apr 2026 13:22:00 +0800</pubDate><guid>https://before80.github.io/prgms/Python/basic/Chapter-23-Async-Frameworks/</guid><description>&lt;h1 id="第-23-章异步框架让-python-跑得像骑摩托"&gt;第 23 章：异步框架——让 Python 跑得像骑摩托&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;想象你是一家外卖店的老板。以前你雇了一个服务员，这个服务员很勤快但是有个毛病——每次去厨房催菜，必须站在厨房门口等厨师做完，才回来告诉你&amp;quot;菜好了&amp;quot;。你一看，这服务员大部分时间都在站着发呆啊！&lt;/p&gt;</description></item><item><title>第23章：Git 故障排查 —— 当事情搞砸时</title><link>https://before80.github.io/prgms/Git/Chapter-23-Troubleshooting/</link><pubDate>Fri, 03 Apr 2026 19:36:48 +0800</pubDate><guid>https://before80.github.io/prgms/Git/Chapter-23-Troubleshooting/</guid><description>&lt;h1 id="第23章git-故障排查--当事情搞砸时"&gt;第23章：Git 故障排查 —— 当事情搞砸时&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;Git 用久了，总会遇到各种奇怪的问题。这一章，我们准备了一个&amp;quot;急救包&amp;quot;，帮你解决最常见的 Git 故障。记住：冷静，Git 总有办法！&lt;/p&gt;</description></item><item><title>第23章 泛型——类型的保险箱</title><link>https://before80.github.io/prgms/Java/basic/Chapter-23-generics/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-23-generics/</guid><description>&lt;h1 id="第二十三章-泛型类型的保险箱"&gt;第二十三章 泛型——类型的保险箱&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;给你一个盒子，你不知道里面装的是什么——这叫&lt;code&gt;Object&lt;/code&gt;。
给你一个贴了标签的盒子，你一眼就知道里面装的是什么——这叫泛型。&amp;rdquo;&lt;/p&gt;</description></item><item><title>第23章：URL、HTML 与 RPC</title><link>https://before80.github.io/prgms/go/std/Chapter-23-url-html-rpc/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-23-url-html-rpc/</guid><description>&lt;h1 id="第23章urlhtml-与-rpc"&gt;第23章：URL、HTML 与 RPC&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;互联网的三大基石：URL 让人找到东西，HTML 让人看懂东西，RPC 让人调用东西。三者合一，天下我有。&amp;rdquo;
—— 某位不愿透露姓名的 Go 语言爱好者&lt;/p&gt;</description></item><item><title>第 23 章：进程间通信（IPC）</title><link>https://before80.github.io/prgms/C/basic/Chapter-23-IPC/</link><pubDate>Sun, 29 Mar 2026 22:34:00 +0800</pubDate><guid>https://before80.github.io/prgms/C/basic/Chapter-23-IPC/</guid><description>&lt;h1 id="第-23-章进程间通信ipc"&gt;第 23 章：进程间通信（IPC）&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;独木不成林，单进程不成事。&amp;rdquo; — 当你的程序想要和隔壁进程唠唠嗑、传传纸条、甚至共享一块&amp;quot;秘密基地&amp;quot;时，就需要进程间通信了。&lt;/p&gt;</description></item><item><title>第23章 C++11核心特性</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-23-CPP11-Core-Features/</link><pubDate>Sun, 29 Mar 2026 21:03:00 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-23-CPP11-Core-Features/</guid><description>&lt;h1 id="第23章-c11核心特性"&gt;第23章 C++11核心特性&lt;/h1&gt;
&lt;p&gt;如果说C++98是那个一手拿着咖啡、一边艰难地手写迭代器的古典派，那么C++11就是那位终于学会了偷懒、开始用微波炉热披萨、偶尔还跟你吐槽工作太累的现代人。它带来了&lt;strong&gt;右值引用&lt;/strong&gt;让你搬家更轻松（顺便翻你冰箱），&lt;strong&gt;智能指针&lt;/strong&gt;让你不再担心内存泄漏（毕竟有它替你铲屎），&lt;strong&gt;Lambda表达式&lt;/strong&gt;让你写代码像写情书一样简洁（虽然更像写辞职信）。总之，C++11是C++家族史上最大的一次版本升级，堪称&amp;quot;文艺复兴&amp;quot;！毫不夸张地说，不懂C++11，你都不好意思跟人说你会C++。&lt;/p&gt;</description></item><item><title>第 23 章 生态系统与生态图谱</title><link>https://before80.github.io/prgms/Rust/basic/Chapter-23-Ecosystem-And-Landscape/</link><pubDate>Fri, 27 Mar 2026 17:24:46 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/basic/Chapter-23-Ecosystem-And-Landscape/</guid><description>&lt;h1 id="chapter-23-生态系统与生态图谱"&gt;Chapter 23 生态系统与生态图谱&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Rust 是一门让程序员既爱又恨的语言。爱它，是因为它让你写出飞快的代码；恨它，是因为 borrow checker 像一只永不睡觉的看门狗，时不时跳出来吼你一嗓子：&amp;lsquo;嘿！你又想偷偷摸摸搞个空指针！&amp;rsquo;&amp;rdquo; ——某位在 Stack Overflow 上连续三年获得&amp;quot;最受喜爱语言&amp;quot;称号的编程语言如是说。&lt;/p&gt;</description></item><item><title>第23章 弹性盒子布局</title><link>https://before80.github.io/prgms/CSS/basic/Chapter-23-Flexbox-Layout/</link><pubDate>Fri, 27 Mar 2026 16:53:00 +0800</pubDate><guid>https://before80.github.io/prgms/CSS/basic/Chapter-23-Flexbox-Layout/</guid><description>&lt;h1 id="第二十三章flexbox-布局"&gt;第二十三章：Flexbox 布局&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;Flexbox（弹性盒布局）是 CSS3 引入的强大布局系统，它可以让你轻松实现各种对齐、分布、响应式布局。Flexbox 就像是一个&amp;quot;万能的盒子&amp;quot;，里面的物品可以自动调整位置和大小。学会 Flexbox，你就拥有了现代 CSS 布局的瑞士军刀！&lt;/p&gt;</description></item><item><title>第23章 Vite深入配置</title><link>https://before80.github.io/prgms/Js/frameworks/react/Chapter-23-Vite-Advanced-Configuration/</link><pubDate>Wed, 25 Mar 2026 12:56:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/react/Chapter-23-Vite-Advanced-Configuration/</guid><description>&lt;h1 id="chapter-23---vite-深入配置"&gt;Chapter-23 - Vite 深入配置&lt;/h1&gt;
&lt;h2 id="231-vite-原理"&gt;23.1 Vite 原理&lt;/h2&gt;
&lt;h3 id="2311-开发环境基于-esm-的按需编译"&gt;23.1.1 开发环境：基于 ESM 的按需编译&lt;/h3&gt;
&lt;p&gt;Vite 的开发环境利用浏览器的原生 ES Module 支持，&lt;strong&gt;不需要打包&lt;/strong&gt;。源文件按需编译，服务启动速度极快。&lt;/p&gt;
&lt;pre class="mermaid"&gt;flowchart LR
 A[&amp;#34;浏览器请求\nimport App from &amp;#39;./App.jsx&amp;#39;&amp;#34;] --&amp;gt; B[&amp;#34;Vite 拦截请求&amp;#34;]
 B --&amp;gt; C[&amp;#34;查找源文件&amp;#34;]
 C --&amp;gt; D[&amp;#34;编译\n（仅此文件）&amp;#34;]
 D --&amp;gt; E[&amp;#34;返回编译后的 JS\n（含 HMR 客户端代码）&amp;#34;]&lt;/pre&gt;
&lt;h3 id="2312-生产环境rollup-打包"&gt;23.1.2 生产环境：Rollup 打包&lt;/h3&gt;
&lt;p&gt;Vite 在生产环境使用 &lt;strong&gt;Rollup&lt;/strong&gt; 进行打包，生成优化的静态资源。&lt;/p&gt;</description></item><item><title>第23章 测试：让代码自己证明自己</title><link>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-23-Testing/</link><pubDate>Wed, 25 Mar 2026 12:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-23-Testing/</guid><description>&lt;h1 id="第二十三章-测试让代码自己证明自己"&gt;第二十三章 测试：让代码自己证明自己&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;写代码不写测试，就像开车不系安全带——大多数时候没事，但一出事就是大事。测试是前端工程化中绕不开的话题。单元测试、集成测试、E2E 测试……这些词你可能听过无数次，但每次想动手写的时候，又不知道从哪儿开始。本章用 Vue 3 + Vitest + Vue Test Utils + Playwright 给你搭建一套完整的测试体系，保证你看完之后能从&amp;quot;完全不会写测试&amp;quot;直接进化到&amp;quot;测试写到手软&amp;quot;。&lt;/p&gt;</description></item><item><title>第 23 章 模块化</title><link>https://before80.github.io/prgms/Js/basic/Chapter-23-Modular/</link><pubDate>Tue, 24 Mar 2026 22:08:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/basic/Chapter-23-Modular/</guid><description>&lt;h1 id="第-23-章-模块化"&gt;第 23 章 模块化&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;JavaScript 从&amp;quot;草履虫&amp;quot;进化到&amp;quot;蚂蚁群&amp;quot;的关键——模块系统！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="231-模块化基础"&gt;23.1 模块化基础&lt;/h2&gt;
&lt;h3 id="模块化的意义避免全局污染--明确依赖--代码复用"&gt;模块化的意义：避免全局污染 / 明确依赖 / 代码复用&lt;/h3&gt;
&lt;p&gt;在 JavaScript 的蛮荒时代，所有代码都往全局作用域里塞。想象一下：&lt;/p&gt;</description></item><item><title>第23章：RedHat/CentOS 包管理（YUM/DNF）</title><link>https://before80.github.io/prgms/linux/software_manage/Chapter-23-RedHat-CentOS-Package-Management-YUM-DNF/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/software_manage/Chapter-23-RedHat-CentOS-Package-Management-YUM-DNF/</guid><description>&lt;h1 id="第二十三章redhatcentos-包管理yumdnf"&gt;第二十三章：RedHat/CentOS 包管理（YUM/DNF）&lt;/h1&gt;
&lt;p&gt;如果说Ubuntu是Linux界的&amp;quot;大众&amp;quot;，那RedHat/CentOS就是Linux界的&amp;quot;丰田&amp;quot;——稳定、可靠、企业级！&lt;/p&gt;</description></item><item><title>第23章 类型选择</title><link>https://before80.github.io/prgms/go/basic/Chapter-23-TypeSwitch/</link><pubDate>Fri, 20 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/basic/Chapter-23-TypeSwitch/</guid><description>&lt;h1 id="第23章-类型选择"&gt;第23章 类型选择&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;类型选择（type switch）是Go语言处理多种接口类型的&amp;quot;超级开关&amp;quot;。如果说普通switch是根据值来选择分支，那type switch就是根据&lt;strong&gt;类型&lt;/strong&gt;来选择分支。&lt;/p&gt;</description></item><item><title>第24章 数据爬取</title><link>https://before80.github.io/prgms/Python/basic/Chapter-24-Data-Scraping/</link><pubDate>Wed, 08 Apr 2026 13:22:00 +0800</pubDate><guid>https://before80.github.io/prgms/Python/basic/Chapter-24-Data-Scraping/</guid><description>&lt;h1 id="第二十四章数据爬取让程序替你逛街"&gt;第二十四章：数据爬取——让程序替你&amp;quot;逛街&amp;quot;&lt;/h1&gt;
&lt;p&gt;想象一下：你想获取某个网站上成千上万的商品信息、价格变化、新闻更新……用手一行行复制粘贴？先不说你的手指会不会&amp;quot;罢工&amp;quot;，光是时间成本就让人想躺平。数据爬取，就是让程序替你完成这种&amp;quot;重复劳动&amp;quot;，速度可以是人类的千百倍，而且程序不会抱怨、不会请假、不会偷偷刷短视频摸鱼。&lt;/p&gt;</description></item><item><title>第24章：Git 与其他工具集成 —— 打造高效工作流</title><link>https://before80.github.io/prgms/Git/Chapter-24-Tool-Integration/</link><pubDate>Fri, 03 Apr 2026 19:36:48 +0800</pubDate><guid>https://before80.github.io/prgms/Git/Chapter-24-Tool-Integration/</guid><description>&lt;h1 id="第24章git-与其他工具集成--打造高效工作流"&gt;第24章：Git 与其他工具集成 —— 打造高效工作流&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;Git 不是孤岛，它需要和其他工具配合才能发挥最大威力。这一章，我们看看 Git 如何与各种工具集成，打造高效的工作流。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="241-git--vs-code图形化操作真香"&gt;24.1 Git + VS Code：图形化操作真香&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;场景&lt;/strong&gt;：不喜欢命令行，想用图形界面操作 Git。&lt;/p&gt;</description></item><item><title>第24章 Lambda 表达式与函数式编程</title><link>https://before80.github.io/prgms/Java/basic/Chapter-24-lambda/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-24-lambda/</guid><description>&lt;h1 id="第二十四章-lambda-表达式与函数式编程"&gt;第二十四章 Lambda 表达式与函数式编程&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;🎭 准备好了吗？Java 8 引入的那个&amp;quot;箭头勇士&amp;quot;——Lambda 表达式，终于要登场了！&lt;/p&gt;
&lt;p&gt;它让 Java 代码从&amp;quot;严肃的企业级公文&amp;quot;秒变&amp;quot;流畅的函数式诗歌&amp;quot;。别眨眼，这一章可能会颠覆你对 Java 的认知。&lt;/p&gt;</description></item><item><title>第 24 章：上下文管理——context 包</title><link>https://before80.github.io/prgms/go/std/Chapter-24-context/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-24-context/</guid><description>&lt;h1 id="第-24-章上下文管理context-包"&gt;第 24 章：上下文管理——context 包&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;想象一个场景：你点了一份外卖，骑手正在路上，但突然你不想要了——这时候你需要一种机制，能够让骑手停止配送。在 Go 的世界里，&lt;code&gt;context&lt;/code&gt; 包就是那个「外卖取消按钮」，让你能够在合适的时机优雅地停止正在进行的操作。&lt;/p&gt;</description></item><item><title>第 24 章：线程与并发编程</title><link>https://before80.github.io/prgms/C/basic/Chapter-24-Threads/</link><pubDate>Sun, 29 Mar 2026 22:34:00 +0800</pubDate><guid>https://before80.github.io/prgms/C/basic/Chapter-24-Threads/</guid><description>&lt;h1 id="第-24-章线程与并发编程"&gt;第 24 章：线程与并发编程&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;人生最痛苦的事是什么？是你在洗碗，女朋友在催你陪她聊天，老板在催你交报告，而你只能一件事一件事来。欢迎来到并发编程的世界——在这里，你可以同时&amp;quot;分身乏术&amp;quot;变成&amp;quot;分身有术&amp;rdquo;！&amp;quot;&lt;/p&gt;</description></item><item><title>第24章 C++14特性</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-24-CPP14-Features/</link><pubDate>Sun, 29 Mar 2026 21:03:00 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-24-CPP14-Features/</guid><description>&lt;h1 id="第24章-c14特性"&gt;第24章 C++14特性&lt;/h1&gt;
&lt;p&gt;如果说C++11是C++的文艺复兴，那C++14就是这场运动的&amp;quot;配套设施完善年&amp;quot;。功能还是那些功能，但用起来更顺手了，就像是你家楼下终于开了家便利店——你不需要再跑五公里买泡面了。本章我们就来聊聊C++14那些让人会心一笑的小改进。&lt;/p&gt;</description></item><item><title>第 24 章 实践项目路线图</title><link>https://before80.github.io/prgms/Rust/basic/Chapter-24-Practice-Project-Roadmap/</link><pubDate>Fri, 27 Mar 2026 17:24:46 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/basic/Chapter-24-Practice-Project-Roadmap/</guid><description>&lt;h1 id="chapter-24-实践项目路线图"&gt;Chapter 24 实践项目路线图&lt;/h1&gt;
&lt;!-- CONTENT_MARKER --&gt;
&lt;blockquote&gt;
&lt;p&gt;📍 你还在看教程？没关系，这章就是让你&amp;quot;动手做点东西&amp;quot;的拐杖。别担心摔跤，我们有护具。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;想象一下：你学完了前面几章，脑子里装了一堆概念——变量、所有权、函数、枚举、模式匹配……但打开编辑器的时候，手指在键盘上悬停了三秒，然后陷入哲学思考：&amp;ldquo;我……能写点啥？&amp;rdquo;&lt;/p&gt;</description></item><item><title>第24章 网格布局</title><link>https://before80.github.io/prgms/CSS/basic/Chapter-24-Grid-Layout/</link><pubDate>Fri, 27 Mar 2026 16:53:00 +0800</pubDate><guid>https://before80.github.io/prgms/CSS/basic/Chapter-24-Grid-Layout/</guid><description>&lt;h1 id="第二十四章grid-布局"&gt;第二十四章：Grid 布局&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;想象一下，如果你要布置一个房间，你会怎么做？买好家具之后，是不是要决定沙发放哪儿、电视放哪儿、茶几放哪儿？Grid 布局就是 CSS 给你的&amp;quot;房间布置图&amp;quot;——你可以精确地决定每一个元素该放在哪一行、哪一列。就像城市规划师一样，你现在是 CSS 布局的城市规划师！Flexbox 是单行道，只能往一个方向走；Grid 则是十字路口，行和列同时控制，这就是二维布局的威力！&lt;/p&gt;</description></item><item><title>第24章 测试——React应用质量保障</title><link>https://before80.github.io/prgms/Js/frameworks/react/Chapter-24-Testing-Quality-Assurance-for-React-Apps/</link><pubDate>Wed, 25 Mar 2026 12:56:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/react/Chapter-24-Testing-Quality-Assurance-for-React-Apps/</guid><description>&lt;h1 id="chapter-24---测试react-应用的质量保障"&gt;Chapter-24 - 测试——React 应用的质量保障&lt;/h1&gt;
&lt;h2 id="241-测试概念"&gt;24.1 测试概念&lt;/h2&gt;
&lt;h3 id="2411-单元测试最小可测试单元"&gt;24.1.1 单元测试：最小可测试单元&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;单元测试（Unit Test）&lt;/strong&gt; 针对代码的最小单元进行测试，通常是一个函数或一个组件。&lt;/p&gt;</description></item><item><title>第24章 实战：后台管理系统项目</title><link>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-24-Admin-Project/</link><pubDate>Wed, 25 Mar 2026 12:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-24-Admin-Project/</guid><description>&lt;h1 id="第二十四章-实战后台管理系统项目"&gt;第二十四章 实战：后台管理系统项目&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;前二十三章我们学了大量知识点，本章终于要&amp;quot;真刀真枪&amp;quot;地做一个完整的项目了。后台管理系统是 Vue 3 最典型的应用场景——登录认证、侧边菜单、表格列表、表单增删改查、分页、搜索、权限控制……这些&amp;quot;标准动作&amp;quot;本章全部覆盖。学完这一章，你将拥有一个可以写进简历的完整后台管理项目。&lt;/p&gt;</description></item><item><title>第 24 章 浏览器工作原理</title><link>https://before80.github.io/prgms/Js/basic/Chapter-24-Browser-Principles/</link><pubDate>Tue, 24 Mar 2026 22:08:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/basic/Chapter-24-Browser-Principles/</guid><description>&lt;h1 id="第-24-章-浏览器工作原理"&gt;第 24 章 浏览器工作原理&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;打开网页时，浏览器里发生了什么？比你想象的复杂多了！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="241-浏览器组成"&gt;24.1 浏览器组成&lt;/h2&gt;
&lt;h3 id="用户界面--浏览器引擎--渲染引擎--js-引擎"&gt;用户界面 / 浏览器引擎 / 渲染引擎 / JS 引擎&lt;/h3&gt;
&lt;p&gt;你以为浏览器只是一个&amp;quot;显示网页&amp;quot;的软件？too young too simple！&lt;/p&gt;</description></item><item><title>第24章：其他包管理方式</title><link>https://before80.github.io/prgms/linux/software_manage/Chapter-24-Other-Package-Management-Methods/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/software_manage/Chapter-24-Other-Package-Management-Methods/</guid><description>&lt;h1 id="第二十四章其他包管理方式"&gt;第二十四章：其他包管理方式&lt;/h1&gt;
&lt;p&gt;除了传统的APT、YUM/DNF之外，Linux世界还有很多其他的软件管理方式。&lt;/p&gt;
&lt;p&gt;有的像&amp;quot;外卖APP&amp;quot;一样帮你自动下载安装（Snap、Flatpak），有的像&amp;quot;自己做菜&amp;quot;需要从头编译源码（编译安装）。&lt;/p&gt;</description></item><item><title>第24章 指针</title><link>https://before80.github.io/prgms/go/basic/Chapter-24-Pointers/</link><pubDate>Fri, 20 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/basic/Chapter-24-Pointers/</guid><description>&lt;h1 id="第24章-指针"&gt;第24章 指针&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;指针是Go语言的&amp;quot;遥控器&amp;quot;。它不直接持有数据，而是指向数据的&amp;quot;地址&amp;quot;。想象你有一把钥匙（指针），可以打开任意一扇门（内存地址），看到里面的东西（值）。&lt;/p&gt;</description></item><item><title>第25章 AI框架</title><link>https://before80.github.io/prgms/Python/basic/Chapter-25-AI-Frameworks/</link><pubDate>Wed, 08 Apr 2026 13:22:00 +0800</pubDate><guid>https://before80.github.io/prgms/Python/basic/Chapter-25-AI-Frameworks/</guid><description>&lt;h1 id="第-25-章-ai-框架让你的-python-变身为-ai-超人"&gt;第 25 章 AI 框架：让你的 Python 变身为 AI 超人&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;💬 旁白：想象一下，你刚刚学会了 Python 基础，能写点循环、函数、类，感觉自己像个程序员了。结果打开 AI 时代的新闻一看——什么 LangChain、LangGraph、LlamaIndex、Hugging Face……脑袋直接宕机。别怕，这一章就是给你准备的&amp;quot;AI 框架速成班&amp;quot;，保证你学完可以跟别人吹牛说自己&amp;quot;精通 AI 应用开发&amp;quot;了。&lt;/p&gt;</description></item><item><title>第25章：Git 最佳实践总结 —— 成为 Git 大师</title><link>https://before80.github.io/prgms/Git/Chapter-25-Best-Practices-Summary/</link><pubDate>Fri, 03 Apr 2026 19:36:48 +0800</pubDate><guid>https://before80.github.io/prgms/Git/Chapter-25-Best-Practices-Summary/</guid><description>&lt;h1 id="第25章git-最佳实践总结--成为-git-大师"&gt;第25章：Git 最佳实践总结 —— 成为 Git 大师&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;恭喜你！如果你读到了这里，你已经掌握了 Git 的绝大部分知识。这一章，我们总结最佳实践，助你成为真正的 Git 大师。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="251-个人开发最佳实践"&gt;25.1 个人开发最佳实践&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;场景&lt;/strong&gt;：一个人开发项目，如何高效使用 Git？&lt;/p&gt;</description></item><item><title>第25章 Stream API——处理数据的新方式</title><link>https://before80.github.io/prgms/Java/basic/Chapter-25-stream-api/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-25-stream-api/</guid><description>&lt;h1 id="第二十五章-stream-api处理数据的新方式"&gt;第二十五章 Stream API——处理数据的新方式&lt;/h1&gt;
&lt;p&gt;想象一下，你有一仓库的快递（数据），传统做法是你得亲自一个个拆开、检查、分类、搬运。累不累？累死了！&lt;/p&gt;
&lt;p&gt;Stream API 就是你的全自动智能分拣流水线——你只需要告诉它&amp;quot;我要什么&amp;quot;，它帮你搞定一切。&lt;/p&gt;</description></item><item><title>第 25 章：Goroutine 与 Channel ⭐</title><link>https://before80.github.io/prgms/go/std/Chapter-25-goroutine-channel/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-25-goroutine-channel/</guid><description>&lt;h1 id="第-25-章goroutine-与-channel-"&gt;第 25 章：Goroutine 与 Channel ⭐&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;想象一下，你是一个餐厅老板，以前只能雇一个服务员（线程），一次只能端一盘菜。但现在你可以雇无数个&amp;quot;小精灵&amp;quot;（goroutine），它们会魔法（channel）互相传递菜品，并发上菜，效率飞起！&lt;/p&gt;</description></item><item><title>第 25 章：网络编程——让计算机聊聊天</title><link>https://before80.github.io/prgms/C/basic/Chapter-25-Network-Programming/</link><pubDate>Sun, 29 Mar 2026 22:34:00 +0800</pubDate><guid>https://before80.github.io/prgms/C/basic/Chapter-25-Network-Programming/</guid><description>&lt;h1 id="第-25-章网络编程让计算机聊聊天"&gt;第 25 章：网络编程——让计算机聊聊天&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本章你会：理解 Socket 是什么，学会用 C 语言写 TCP/UDP 程序，搞定字节序、地址转换、I/O 多路复用，还能顺手处理 Windows 的 Winsock。读完之后，你就能让两台电脑隔空对话了！&lt;/p&gt;</description></item><item><title>第25章 C++17特性</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-25-CPP17-Features/</link><pubDate>Sun, 29 Mar 2026 21:03:00 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-25-CPP17-Features/</guid><description>&lt;h1 id="第25章-c17特性"&gt;第25章 C++17特性&lt;/h1&gt;
&lt;p&gt;话说2017年，C++标准委员会在佛罗里达召开会议，期间有人提议：&amp;ldquo;要不我们给C++加点料？&amp;ldquo;于是C++17横空出世，带着一堆让人眼花缭乱的新特性，从此改变了C++程序员的编码生活。&lt;/p&gt;</description></item><item><title>第25章 响应式设计</title><link>https://before80.github.io/prgms/CSS/basic/Chapter-25-Responsive-Design/</link><pubDate>Fri, 27 Mar 2026 16:53:00 +0800</pubDate><guid>https://before80.github.io/prgms/CSS/basic/Chapter-25-Responsive-Design/</guid><description>&lt;h1 id="第二十五章响应式设计"&gt;第二十五章：响应式设计&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;想象一下，你开了一家餐厅，但只提供一种尺寸的椅子——要么太小坐着挤得慌，要么太大坐上去像掉进了洞里。用户得多不爽？更不爽的是，你还得给每个用户单独建一个餐厅！响应式设计就是让你的&amp;quot;椅子&amp;quot;能适应不同&amp;quot;身材&amp;quot;的&amp;quot;用户&amp;quot;——不同的屏幕尺寸。一套代码，多种体验，妈妈再也不用担心我为手机、平板、桌面各写一套 CSS 了！&lt;/p&gt;</description></item><item><title>第25章 React性能优化全解</title><link>https://before80.github.io/prgms/Js/frameworks/react/Chapter-25-React-Performance-Optimization-Comprehensive/</link><pubDate>Wed, 25 Mar 2026 12:56:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/react/Chapter-25-React-Performance-Optimization-Comprehensive/</guid><description>&lt;h1 id="chapter-25---react-性能优化全解"&gt;Chapter-25 - React 性能优化全解&lt;/h1&gt;
&lt;h2 id="251-react-devtools-profiler"&gt;25.1 React DevTools Profiler&lt;/h2&gt;
&lt;h3 id="2511-安装-profiler-插件"&gt;25.1.1 安装 Profiler 插件&lt;/h3&gt;
&lt;p&gt;在 Chrome 扩展商店搜索&amp;quot;React Developer Tools&amp;quot;，安装后打开 DevTools（F12），切换到 &amp;ldquo;Profiler&amp;rdquo; 标签。&lt;/p&gt;</description></item><item><title>第25章 实战：移动端 H5 项目与 PWA</title><link>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-25-Mobile-H5/</link><pubDate>Wed, 25 Mar 2026 12:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-25-Mobile-H5/</guid><description>&lt;h1 id="第二十五章-实战移动端-h5-项目与-pwa"&gt;第二十五章 实战：移动端 H5 项目与 PWA&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;PC 端的 Vue 项目你可能已经玩得很溜了，但移动端完全是另一个世界——屏幕小、触控操作、网络不稳定、性能有限、还需要考虑在各种奇怪尺寸的设备上正常显示。本章教你如何用 Vue 3 开发真正能在手机上跑起来的 H5 应用，包括移动端适配方案、手势操作、移动端性能优化，以及让 H5 应用拥有接近原生体验的 PWA 技术。学完这章，你的 Vue 技能树又解锁了一个新分支。&lt;/p&gt;</description></item><item><title>第 25 章 BOM</title><link>https://before80.github.io/prgms/Js/basic/Chapter-25-BOM/</link><pubDate>Tue, 24 Mar 2026 22:08:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/basic/Chapter-25-BOM/</guid><description>&lt;h1 id="第-25-章-bom"&gt;第 25 章 BOM&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;BOM——Browser Object Model，浏览器给 JavaScript 开的一扇窗！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="251-window-对象"&gt;25.1 window 对象&lt;/h2&gt;
&lt;h3 id="全局作用域"&gt;全局作用域&lt;/h3&gt;
&lt;p&gt;在浏览器环境中，&lt;code&gt;window&lt;/code&gt; 对象是 JavaScript 的&amp;quot;全局老大&amp;quot;。所有全局变量和函数都是 &lt;code&gt;window&lt;/code&gt; 的属性和方法。&lt;/p&gt;</description></item><item><title>第25章：进程基础</title><link>https://before80.github.io/prgms/linux/process_service/Chapter-25-Process-Basics/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/process_service/Chapter-25-Process-Basics/</guid><description>&lt;h1 id="第二十五章进程基础"&gt;第二十五章：进程基础&lt;/h1&gt;
&lt;p&gt;想象一下，你打开一个应用程序——比如微信。程序开始运行，界面出现，你可以聊天、刷朋友圈。这个&amp;quot;运行中的微信&amp;quot;就是一个&lt;strong&gt;进程&lt;/strong&gt;。&lt;/p&gt;</description></item><item><title>第25章 内存管理</title><link>https://before80.github.io/prgms/go/basic/Chapter-25-MemoryManagement/</link><pubDate>Fri, 20 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/basic/Chapter-25-MemoryManagement/</guid><description>&lt;h1 id="第25章-内存管理"&gt;第25章 内存管理&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;Go语言以自动内存管理著称——你只管申请内存，不用操心释放，垃圾回收器（GC）会帮你搞定一切。就像有个贴心的管家，你吃完饭不用洗碗，管家会帮你处理。&lt;/p&gt;</description></item><item><title>第26章 其他框架</title><link>https://before80.github.io/prgms/Python/basic/Chapter-26-Other-Frameworks/</link><pubDate>Wed, 08 Apr 2026 13:22:00 +0800</pubDate><guid>https://before80.github.io/prgms/Python/basic/Chapter-26-Other-Frameworks/</guid><description>&lt;h1 id="第二十六章python-的-十八般武艺框架大乱斗"&gt;第二十六章：Python 的 &amp;ldquo;十八般武艺&amp;rdquo;——框架大乱斗&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;📢 警告：前方高能！本章内容可能让你对 Python 的认知从&amp;quot;胶水语言&amp;quot;升级为&amp;quot;变形金刚&amp;quot;。阅读请系好安全带，系不上的请抓住你旁边的程序员。&lt;/p&gt;</description></item><item><title>第26章 Optional 类——null 的优雅处理</title><link>https://before80.github.io/prgms/Java/basic/Chapter-26-optional/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-26-optional/</guid><description>&lt;h1 id="第二十六章-optional-类null-的优雅处理"&gt;第二十六章 Optional 类——null 的优雅处理&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;我称之为我的十亿美元错误。&amp;rdquo; —— 托尼·霍尔（Tony Hoare），谈及 null 的发明&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;想象一下：你信心满满地写了一段代码，编译通过，逻辑清晰，测试全绿。然后上线——砰！&lt;code&gt;NullPointerException&lt;/code&gt;，你的程序在凌晨三点华丽丽地崩溃了。这就是传说中的&amp;quot;十亿美元错误&amp;quot;——null 指针问题。而 Java 8 带来的 &lt;code&gt;Optional&lt;/code&gt; 类，就是来处理这个历史遗留问题的。准备好了吗？让我们一起探索 Optional 的世界！ 🎉&lt;/p&gt;</description></item><item><title>第26章：同步原语——sync 包</title><link>https://before80.github.io/prgms/go/std/Chapter-26-sync/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-26-sync/</guid><description>&lt;h1 id="第26章同步原语sync-包"&gt;第26章：同步原语——sync 包&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;如果说 goroutine 是 Go 的高并发精髓，那 sync 包就是让这股&amp;quot;并发之力&amp;quot;不至于变成&amp;quot;并发灾难&amp;quot;的定海神针。本章我们来聊聊那些让多个 goroutine 和平共处、共同完成大业的同步原语。&lt;/p&gt;</description></item><item><title>第 26 章：Linux 内核与开源项目阅读方法</title><link>https://before80.github.io/prgms/C/basic/Chapter-26-Reading-Large-Code/</link><pubDate>Sun, 29 Mar 2026 22:34:00 +0800</pubDate><guid>https://before80.github.io/prgms/C/basic/Chapter-26-Reading-Large-Code/</guid><description>&lt;h1 id="第-26-章linux-内核与开源项目阅读方法"&gt;第 26 章：Linux 内核与开源项目阅读方法&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;恭喜你！能走到这一章，说明你已经不是一个只会写 &lt;code&gt;Hello World&lt;/code&gt; 的小白了。你甚至已经能够用 C 语言写一些小项目，解决实际问题。但现在你可能面临一个终极挑战——阅读大型 C 代码。想象一下，当你打开一个几十万行代码的项目，满屏都是陌生的函数和结构体，那种感觉就像走进了一座没有地图的迷宫。没关系！本章就是你的&amp;quot;大型代码阅读指南&amp;quot;，专门为你解锁 Linux 内核、Git、Redis、SQLite、NGINX 这些顶级开源项目的阅读姿势。&lt;/p&gt;</description></item><item><title>第26章 C++20特性</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-26-CPP20-Features/</link><pubDate>Sun, 29 Mar 2026 21:03:00 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-26-CPP20-Features/</guid><description>&lt;h1 id="第26章-c20特性"&gt;第26章 C++20特性&lt;/h1&gt;
&lt;p&gt;如果说C++11是C++的文艺复兴，C++17是它的改革开放，那么C++20就是它的工业革命！这一代标准引入了概念（Concepts）、协程（Coroutines）、模块（Modules）等革命性特性，让C++从&amp;quot;拿着锤子找钉子&amp;quot;的莽撞大汉，变成了一个会思考、善表达的优雅绅士。&lt;/p&gt;</description></item><item><title>第26章 滚动属性</title><link>https://before80.github.io/prgms/CSS/basic/Chapter-26-Scrolling-Properties/</link><pubDate>Fri, 27 Mar 2026 16:53:00 +0800</pubDate><guid>https://before80.github.io/prgms/CSS/basic/Chapter-26-Scrolling-Properties/</guid><description>&lt;h1 id="第二十六章滚动相关属性"&gt;第二十六章：滚动相关属性&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;想象一下，你在网上阅读一篇长文章，滚动鼠标滚轮时，页面像蜗牛一样卡顿，你会不会直接关掉网页？滚动体验直接影响用户的浏览感受。这一章我们就来学习如何让页面滚动丝滑如德芙巧克力！&lt;/p&gt;</description></item><item><title>第26章 项目一——Todo App增强版</title><link>https://before80.github.io/prgms/Js/frameworks/react/Chapter-26-Project-One-Todo-App-Enhanced/</link><pubDate>Wed, 25 Mar 2026 12:56:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/react/Chapter-26-Project-One-Todo-App-Enhanced/</guid><description>&lt;h1 id="chapter-26---项目一todo-app-增强版"&gt;Chapter-26 - 项目一——Todo App 增强版&lt;/h1&gt;
&lt;h2 id="261-项目需求分析与结构设计"&gt;26.1 项目需求分析与结构设计&lt;/h2&gt;
&lt;h3 id="2611-功能列表增删改查筛选分类持久化"&gt;26.1.1 功能列表：增删改查、筛选、分类、持久化&lt;/h3&gt;
&lt;p&gt;一个完整的 Todo App 增强版不只是&amp;quot;能记事情&amp;quot;这么简单——它要像一个小型的效率工具，让用户感受到&amp;quot;我在掌控我的任务&amp;quot;。&lt;/p&gt;</description></item><item><title>第26章 内容平台实战</title><link>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-26-Content-Platform/</link><pubDate>Wed, 25 Mar 2026 12:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-26-Content-Platform/</guid><description>&lt;h1 id="第二十六章-内容平台实战"&gt;第二十六章 内容平台实战&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;你已经学会了 Vue 3 的各种招式，但&amp;quot;学&amp;quot;和&amp;quot;用&amp;quot;之间还隔着一道坎——真实项目的复杂度。本章我们从零开始，手把手带你构建一个完整的内容发布平台。从需求分析、架构设计，到文章管理、评论点赞，再到 SSR 改造，全部安排。读完本章，你将拥有一个可以真正拿出手的作品。&lt;/p&gt;</description></item><item><title>第 26 章 DOM 基础</title><link>https://before80.github.io/prgms/Js/basic/Chapter-26-DOM-Basics/</link><pubDate>Tue, 24 Mar 2026 22:08:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/basic/Chapter-26-DOM-Basics/</guid><description>&lt;h1 id="第-26-章-dom-基础"&gt;第 26 章 DOM 基础&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;DOM——Document Object Model，JavaScript 操作网页的桥梁！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="261-dom-概述"&gt;26.1 DOM 概述&lt;/h2&gt;
&lt;h3 id="domdocument-object-model文档对象模型"&gt;DOM（Document Object Model）：文档对象模型&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;DOM&lt;/strong&gt; 是一种让程序访问和操作 HTML/XML 文档的接口。简单来说，DOM 就是浏览器把 HTML 文档解析成一棵树，JavaScript 可以通过这棵树来&amp;quot;操控&amp;quot;网页。&lt;/p&gt;</description></item><item><title>第26章：进程控制</title><link>https://before80.github.io/prgms/linux/process_service/Chapter-26-Process-Control/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/process_service/Chapter-26-Process-Control/</guid><description>&lt;h1 id="第二十六章进程控制"&gt;第二十六章：进程控制&lt;/h1&gt;
&lt;p&gt;上一章我们学了怎么看进程，这一章我们学怎么&lt;strong&gt;管&lt;/strong&gt;进程。&lt;/p&gt;
&lt;p&gt;想象一下：你开了很多程序，电脑变慢了；或者某个程序卡死了，窗口关不掉。这时候你就需要&amp;quot;进程控制&amp;quot;——杀死它、暂停它、或者把它扔到后台去。&lt;/p&gt;</description></item><item><title>第26章 协程 Goroutine</title><link>https://before80.github.io/prgms/go/basic/Chapter-26-Goroutines/</link><pubDate>Fri, 20 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/basic/Chapter-26-Goroutines/</guid><description>&lt;h1 id="第26章-协程-goroutine"&gt;第26章 协程 Goroutine&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;如果说线程是&amp;quot;单线程社恐&amp;quot;，一次只能专心做一件事；那Goroutine就是&amp;quot;社交达人&amp;quot;，可以同时和很多人聊天！&lt;/p&gt;</description></item><item><title>第27章 开发工具</title><link>https://before80.github.io/prgms/Python/basic/Chapter-27-Dev-Tools/</link><pubDate>Wed, 08 Apr 2026 13:22:00 +0800</pubDate><guid>https://before80.github.io/prgms/Python/basic/Chapter-27-Dev-Tools/</guid><description>&lt;h1 id="第二十七章开发工具链让代码飞起来的秘密武器"&gt;第二十七章：开发工具链——让代码飞起来的秘密武器&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;🎭 温馨提示：阅读本章前，请确保你已经能写出&amp;quot;Hello World&amp;quot;，否则你可能会被工具们的骚操作震惊到说不出话。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;想象一下，你是一个刚拿到驾照的新手司机，开着一辆连收音机都没有的老爷车，而隔壁老王开的是特斯拉——自动辅助驾驶、语音控制、座椅加热一应俱全。开发工具链就是 Python 世界里的&amp;quot;特斯拉套装&amp;quot;。没有它们，你也能开车（写代码），但有它们，你能开得更快、更稳、更舒服，甚至能边开车边喝咖啡。&lt;/p&gt;</description></item><item><title>第27章 异常处理——错误的优雅管理</title><link>https://before80.github.io/prgms/Java/basic/Chapter-27-exception-handling/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-27-exception-handling/</guid><description>&lt;h1 id="第二十七章-异常处理错误的优雅管理"&gt;第二十七章 异常处理——错误的优雅管理&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;代码写得好不好，就看异常处理巧不巧。没有异常处理的程序，就像没系安全带就飙车——迟早要出事儿。&amp;rdquo;&lt;/p&gt;</description></item><item><title>第27章：原子操作——sync/atomic</title><link>https://before80.github.io/prgms/go/std/Chapter-27-atomic/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-27-atomic/</guid><description>&lt;h1 id="第27章原子操作syncatomic"&gt;第27章：原子操作——sync/atomic&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;在多线程的江湖里，锁是大门，原子操作就是魔法。学会了原子操作，你就是那个不用钥匙就能穿墙而过的巫师。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="271-syncatomic-解决什么问题"&gt;27.1 sync/atomic 解决什么问题&lt;/h2&gt;
&lt;h3 id="锁的粒度太粗计数器标志位等简单操作用原子操作比锁更快"&gt;锁的粒度太粗，计数器、标志位等简单操作用原子操作比锁更快&lt;/h3&gt;
&lt;p&gt;想象你去便利店买薯片，结果门口站了个保安，保安说：&amp;ldquo;整个便利店我都要管，你进去买个薯片得先问我要钥匙。&amp;ldquo;这，就是互斥锁。&lt;/p&gt;</description></item><item><title>第 27 章：C 语言高级主题</title><link>https://before80.github.io/prgms/C/basic/Chapter-27-Advanced-Topics/</link><pubDate>Sun, 29 Mar 2026 22:34:00 +0800</pubDate><guid>https://before80.github.io/prgms/C/basic/Chapter-27-Advanced-Topics/</guid><description>&lt;h1 id="第-27-章c-语言高级主题"&gt;第 27 章：C 语言高级主题&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;🎉 恭喜你来到 C 语言的高阶世界！如果你是一路从第 1 章打怪升级到这里的老玩家，那今天我们要聊的内容，绝对是&amp;quot;隐藏关卡&amp;quot;级别的 —— 普通人听都没听过，用得好的人都是 C 语言界的老司机。&lt;/p&gt;</description></item><item><title>第27章 C++23语言特性（最新正式标准）</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-27-CPP23-Language-Features/</link><pubDate>Sun, 29 Mar 2026 21:03:00 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-27-CPP23-Language-Features/</guid><description>&lt;h1 id="第27章-c23语言特性最新正式标准"&gt;第27章 C++23语言特性（最新正式标准）&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;📅 C++23标准于2024年正式发布，带来了大量让程序员&amp;quot;哇塞&amp;quot;的新特性。如果说C++17是&amp;quot;还凑合&amp;quot;，C++20是&amp;quot;有点东西&amp;quot;，那C++23绝对是&amp;quot;这也太香了吧&amp;quot;！准备好了吗？让我们一起踏上这场C++的版本升级之旅！&lt;/p&gt;</description></item><item><title>第27章 逻辑属性</title><link>https://before80.github.io/prgms/CSS/basic/Chapter-27-Logical-Properties/</link><pubDate>Fri, 27 Mar 2026 16:53:00 +0800</pubDate><guid>https://before80.github.io/prgms/CSS/basic/Chapter-27-Logical-Properties/</guid><description>&lt;h1 id="第二十七章逻辑属性与书写模式"&gt;第二十七章：逻辑属性与书写模式&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;想象一下，你写了一个网页，上面的文字是从左往右读的。但突然有一天，你要把网页翻译成阿拉伯文或者希伯来文——这些文字是从右往左读的！你怎么办？从头重写所有 CSS 吗？逻辑属性就是来解决这个问题的！它让你的 CSS 不受书写方向影响，全球化网站必备技能！学会这章，你就是&amp;quot;跨境电商&amp;quot;级别的 CSS 大师！&lt;/p&gt;</description></item><item><title>第27章 项目二——社交类应用</title><link>https://before80.github.io/prgms/Js/frameworks/react/Chapter-27-Project-Two-Social-App/</link><pubDate>Wed, 25 Mar 2026 12:56:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/react/Chapter-27-Project-Two-Social-App/</guid><description>&lt;h1 id="chapter-27---项目二社交类应用"&gt;Chapter-27 - 项目二——社交类应用&lt;/h1&gt;
&lt;h2 id="271-项目架构设计"&gt;27.1 项目架构设计&lt;/h2&gt;
&lt;h3 id="2711-页面划分feed--详情--个人页--消息"&gt;27.1.1 页面划分：Feed / 详情 / 个人页 / 消息&lt;/h3&gt;
&lt;p&gt;社交应用的核心页面设计，某种程度上决定了整个应用的用户体验基线。&lt;/p&gt;</description></item><item><title>第27章 深入响应式原理</title><link>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-27-Reactivity-Principle/</link><pubDate>Wed, 25 Mar 2026 12:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-27-Reactivity-Principle/</guid><description>&lt;h1 id="第二十七章-深入响应式原理"&gt;第二十七章 深入响应式原理&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;面试官：&amp;ldquo;能聊聊 Vue 3 的响应式原理吗？&amp;rdquo;&lt;/p&gt;
&lt;p&gt;你：&amp;ldquo;当然是用 Proxy 实现的！&amp;rdquo;&lt;/p&gt;
&lt;p&gt;面试官：&amp;ldquo;那具体是怎么实现的？&amp;rdquo;&lt;/p&gt;</description></item><item><title>第 27 章 DOM 操作</title><link>https://before80.github.io/prgms/Js/basic/Chapter-27-DOM-Operations/</link><pubDate>Tue, 24 Mar 2026 22:08:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/basic/Chapter-27-DOM-Operations/</guid><description>&lt;h1 id="第-27-章-dom-操作"&gt;第 27 章 DOM 操作&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;JavaScript 操控网页的核心技能——增删改查！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="271-创建节点"&gt;27.1 创建节点&lt;/h2&gt;
&lt;h3 id="createelement创建元素"&gt;createElement：创建元素&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// 创建元素节点
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;const&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;div&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;document&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;createElement&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;div&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;div&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;className&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;container&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;div&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;id&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;my-div&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;div&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;textContent&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;这是一个 div&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;log&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;创建的 div:&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;div&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;outerHTML&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// &amp;lt;div id=&amp;#34;my-div&amp;#34; class=&amp;#34;container&amp;#34;&amp;gt;这是一个 div&amp;lt;/div&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// 创建带属性的元素
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;const&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;link&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;document&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;createElement&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;a&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;link&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;href&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;https://example.com&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;link&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;target&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;_blank&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;link&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;className&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;link&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;link&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;textContent&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;访问 Example&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;log&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;创建的链接:&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;link&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;outerHTML&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// &amp;lt;a href=&amp;#34;https://example.com&amp;#34; target=&amp;#34;_blank&amp;#34; class=&amp;#34;link&amp;#34;&amp;gt;访问 Example&amp;lt;/a&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// 创建嵌套结构
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;const&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;article&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;document&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;createElement&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;article&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;article&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;className&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;blog-post&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;const&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;title&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;document&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;createElement&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;h2&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;title&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;textContent&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;我的博客文章&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;const&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;content&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;document&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;createElement&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;p&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;content&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;textContent&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;这是一段示例内容。&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;article&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;appendChild&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;title&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;article&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;appendChild&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;content&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;log&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;完整结构:&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;article&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;outerHTML&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;hr&gt;
&lt;h3 id="createtextnode创建文本节点"&gt;createTextNode：创建文本节点&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// 创建纯文本节点（不会被解析为 HTML）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;const&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;text&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;document&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;createTextNode&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;&amp;lt;strong&amp;gt;粗体&amp;lt;/strong&amp;gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;log&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;文本节点:&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;text&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;textContent&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// &amp;lt;strong&amp;gt;粗体&amp;lt;/strong&amp;gt;（HTML 被转义了）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// 与 innerHTML 的区别
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;const&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;div1&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;document&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;createElement&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;div&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;div1&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;appendChild&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#e5c07b"&gt;document&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;createTextNode&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;&amp;lt;strong&amp;gt;粗体&amp;lt;/strong&amp;gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;log&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;createTextNode:&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;div1&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;innerHTML&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// &amp;amp;lt;strong&amp;amp;gt;粗体&amp;amp;lt;/strong&amp;amp;gt;（HTML 被转义了）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;const&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;div2&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;document&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;createElement&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;div&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;div2&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;innerHTML&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;&amp;lt;strong&amp;gt;粗体&amp;lt;/strong&amp;gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;log&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;innerHTML:&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;div2&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;innerHTML&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// &amp;lt;strong&amp;gt;粗体&amp;lt;/strong&amp;gt;（HTML 被解析了）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;hr&gt;
&lt;h3 id="createdocumentfragment文档片段减少回流"&gt;createDocumentFragment：文档片段（减少回流）&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;DocumentFragment&lt;/strong&gt; 是一个轻量级的文档容器，添加到这个容器中的元素不会直接添加到 DOM，直到你把它添加到 DOM 中。这样可以减少回流次数。&lt;/p&gt;</description></item><item><title>第27章：服务管理（Systemd）</title><link>https://before80.github.io/prgms/linux/process_service/Chapter-27-Service-Management-Systemd/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/process_service/Chapter-27-Service-Management-Systemd/</guid><description>&lt;h1 id="第二十七章服务管理systemd"&gt;第二十七章：服务管理（Systemd）&lt;/h1&gt;
&lt;p&gt;你有没有想过这个问题：电脑开机的时候，那些nginx、sshd、mysql是怎么自动启动的？它们不是我们手动启动的，但系统一启动它们就在后台跑着了。&lt;/p&gt;</description></item><item><title>第27章 通道 Channel</title><link>https://before80.github.io/prgms/go/basic/Chapter-27-Channels/</link><pubDate>Fri, 20 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/basic/Chapter-27-Channels/</guid><description>&lt;h1 id="第27章-通道-channel"&gt;第27章 通道 Channel&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;通道是Go语言最有特色的发明！如果把Goroutine比作&amp;quot;分身术&amp;quot;，那Channel就是&amp;quot;电话线&amp;quot;——让分身之间可以互相通信、数据共享。&lt;/p&gt;</description></item><item><title>第28章 包构建</title><link>https://before80.github.io/prgms/Python/basic/Chapter-28-Package-Build/</link><pubDate>Wed, 08 Apr 2026 13:22:00 +0800</pubDate><guid>https://before80.github.io/prgms/Python/basic/Chapter-28-Package-Build/</guid><description>&lt;h1 id="第二十八章python-包管理兵器谱从-pip-到-build一条龙服务"&gt;第二十八章：Python 包管理兵器谱——从 pip 到 build，一条龙服务&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;前置知识&lt;/strong&gt;：本章聊的是 Python 包的安装、管理、打包、发布，涉及 pip、uv、Poetry、PDM、build、twine 等工具。建议先读完前面的&amp;quot;虚拟环境&amp;quot;章节，对 &lt;code&gt;venv&lt;/code&gt; 有了基本概念再来。准备好了？那咱们开始！&lt;/p&gt;</description></item><item><title>第28章 I/O 与 NIO——与外部世界对话</title><link>https://before80.github.io/prgms/Java/basic/Chapter-28-io-and-nio/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-28-io-and-nio/</guid><description>&lt;h1 id="第二十八章-io-与-nio与外部世界对话"&gt;第二十八章 I/O 与 NIO——与外部世界对话&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;程序如人，最怕&amp;quot;社恐&amp;quot;。一个不会和外界交流的程序，就像一个把自己锁在房间里的人——再有才华，也只能自娱自乐。Java 的 I/O（输入/输出）系统，就是程序与外部世界对话的窗口。而 NIO，则是 Java 1.4 带来的&amp;quot;社交牛逼症&amp;quot;升级版，让程序可以优雅地&amp;quot;聊天&amp;quot;，而不是傻傻地排队等待。&lt;/p&gt;</description></item><item><title>第 28 章：单元测试——testing 包</title><link>https://before80.github.io/prgms/go/std/Chapter-28-testing/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-28-testing/</guid><description>&lt;h1 id="第-28-章单元测试testing-包"&gt;第 28 章：单元测试——testing 包&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;代码写得好不好，先让测试跑一跑。&amp;rdquo;
—— 某位被 bug 折磨疯了的程序员&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;话说当年 Go 语言设计者 Rob Pike 坐下来思考：&amp;ldquo;我们要不要也像 Java 那样搞个 JUnit？那岂不是显得我们很没个性？&amp;rdquo;&lt;/p&gt;</description></item><item><title>第 28 章：调试、测试与代码质量</title><link>https://before80.github.io/prgms/C/basic/Chapter-28-Debugging-Testing/</link><pubDate>Sun, 29 Mar 2026 22:34:00 +0800</pubDate><guid>https://before80.github.io/prgms/C/basic/Chapter-28-Debugging-Testing/</guid><description>&lt;h1 id="第-28-章调试测试与代码质量"&gt;第 28 章：调试、测试与代码质量&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;代码写出来的那一刻，它就已经错了。问题是——错在哪里？&amp;rdquo;
—— 某位被 bug 折磨了二十年的 C 语言老兵&lt;/p&gt;</description></item><item><title>第28章 C++23库特性（最新正式标准）</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-28-CPP23-Library-Features/</link><pubDate>Sun, 29 Mar 2026 21:03:00 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-28-CPP23-Library-Features/</guid><description>&lt;h1 id="第28章-c23库特性最新正式标准"&gt;第28章 C++23库特性（最新正式标准）&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;📢 咳咳！各位C++爱好者们注意了！C++23已经正式发布，这意味着标准库又双叒叕给我们送温暖了！本章我们将一起探索C++23标准库中最酷炫、最实用、最好玩的新特性。准备好了吗？让我们开启这场库特性的冒险之旅！&lt;/p&gt;</description></item><item><title>第28章 CSS渐变</title><link>https://before80.github.io/prgms/CSS/basic/Chapter-28-CSS-Gradients/</link><pubDate>Fri, 27 Mar 2026 16:53:00 +0800</pubDate><guid>https://before80.github.io/prgms/CSS/basic/Chapter-28-CSS-Gradients/</guid><description>&lt;h1 id="第二十八章css-渐变"&gt;第二十八章：CSS 渐变&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;想象一下，你有一支画笔，但这支画笔可以自动从一种颜色渐变到另一种颜色——渐变就是 CSS 给你的&amp;quot;魔法画笔&amp;quot;。渐变可以替代图片，减小文件体积；渐变可以创造纯色无法实现的视觉效果。学会渐变，你的网页设计水平直接提升一个档次！从此告别&amp;quot;甲方说这个蓝不够蓝&amp;quot;的噩梦！&lt;/p&gt;</description></item><item><title>第28章 项目三——电商后台管理系统</title><link>https://before80.github.io/prgms/Js/frameworks/react/Chapter-28-Project-Three-Ecommerce-Admin-System/</link><pubDate>Wed, 25 Mar 2026 12:56:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/react/Chapter-28-Project-Three-Ecommerce-Admin-System/</guid><description>&lt;h1 id="chapter-28---项目三电商后台管理系统"&gt;Chapter-28 - 项目三——电商后台管理系统&lt;/h1&gt;
&lt;h2 id="281-组件库选型"&gt;28.1 组件库选型&lt;/h2&gt;
&lt;h3 id="2811-ant-design-入门开箱即用的企业级组件"&gt;28.1.1 Ant Design 入门：开箱即用的企业级组件&lt;/h3&gt;
&lt;p&gt;Ant Design（简称 AntD）是蚂蚁金服开源的企业级 React 组件库，提供丰富的企业级组件。&lt;/p&gt;</description></item><item><title>第28章 虚拟 DOM 原理</title><link>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-28-Virtual-DOM/</link><pubDate>Wed, 25 Mar 2026 12:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-28-Virtual-DOM/</guid><description>&lt;h1 id="第二十八章-虚拟-dom-原理"&gt;第二十八章 虚拟 DOM 原理&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;虚拟 DOM（vDOM）是 Vue 和 React 等现代前端框架的核心概念之一。它是一种用 JavaScript 对象描述真实 DOM 的技术，可以让框架在内存中高效地计算和更新 DOM。有人说虚拟 DOM 慢，真的是这样吗？本章我们就来揭开它的神秘面纱。&lt;/p&gt;</description></item><item><title>第 28 章 事件基础</title><link>https://before80.github.io/prgms/Js/basic/Chapter-28-Event-Basics/</link><pubDate>Tue, 24 Mar 2026 22:08:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/basic/Chapter-28-Event-Basics/</guid><description>&lt;h1 id="第-28-章-事件基础"&gt;第 28 章 事件基础&lt;/h1&gt;
&lt;p&gt;想象一下，你在网上商城买了一件衣服，点击了&amp;quot;立即购买&amp;quot;按钮，然后&amp;hellip;什么都没发生。你以为坏了，但其实是 JavaScript 在&amp;quot;等待指令&amp;quot;。事件就是 JavaScript 和用户之间的&amp;quot;对讲机&amp;quot;——用户做点什么（比如点击、输入、移动鼠标），JavaScript 就收到&amp;quot;信号&amp;quot;然后做出响应。&lt;/p&gt;</description></item><item><title>第28章：定时任务</title><link>https://before80.github.io/prgms/linux/process_service/Chapter-28-Scheduled-Tasks/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/process_service/Chapter-28-Scheduled-Tasks/</guid><description>&lt;h1 id="第二十八章定时任务"&gt;第二十八章：定时任务&lt;/h1&gt;
&lt;p&gt;你有没有过这种需求：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;每天凌晨3点自动备份数据库&lt;/li&gt;
&lt;li&gt;每周一早上9点发送周报&lt;/li&gt;
&lt;li&gt;每个月1号清理一次过期文件&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些&lt;strong&gt;定时自动执行的任务&lt;/strong&gt;，在Linux里叫&lt;strong&gt;定时任务（Cron Job）&lt;/strong&gt;。&lt;/p&gt;</description></item><item><title>第28章 同步原语</title><link>https://before80.github.io/prgms/go/basic/Chapter-28-SyncPrimitives/</link><pubDate>Fri, 20 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/basic/Chapter-28-SyncPrimitives/</guid><description>&lt;h1 id="第28章-同步原语"&gt;第28章 同步原语&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;Go的sync包提供了各种同步原语，就像并发编程的&amp;quot;工具箱&amp;quot;。有了这些工具，多个协程才能安全地协作。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="281-互斥锁-mutex"&gt;28.1 互斥锁 Mutex&lt;/h2&gt;
&lt;h3 id="2811-为什么需要互斥锁"&gt;28.1.1 为什么需要互斥锁&lt;/h3&gt;
&lt;p&gt;当多个协程同时访问共享变量时，会发生&amp;quot;数据竞争&amp;quot;：&lt;/p&gt;</description></item><item><title>第29章 算法</title><link>https://before80.github.io/prgms/Python/basic/Chapter-29-Algorithm/</link><pubDate>Wed, 08 Apr 2026 13:22:00 +0800</pubDate><guid>https://before80.github.io/prgms/Python/basic/Chapter-29-Algorithm/</guid><description>&lt;h1 id="第二十九章算法程序员的武松打虎指南"&gt;第二十九章：算法——程序员的&amp;quot;武松打虎&amp;quot;指南&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;🐯 警告：本章内容可能让你对算法产生无法治愈的兴趣，从此沉迷于刷题无法自拔，老婆孩子热炕头？不存在的，只有LeetCode。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;欢迎来到算法的世界！如果你觉得编程是&amp;quot;写代码&amp;quot;，那算法就是&amp;quot;写好代码&amp;quot;背后的灵魂。打个比方，写代码像是做饭，算法就是菜谱——同样的食材，有人做出米其林，有人做出黑暗料理，全看菜谱（算法）够不够硬核。&lt;/p&gt;</description></item><item><title>第29章 日期与时间——新旧 API</title><link>https://before80.github.io/prgms/Java/basic/Chapter-29-date-and-time/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-29-date-and-time/</guid><description>&lt;h1 id="第二十九章-日期与时间新旧-api"&gt;第二十九章 日期与时间——新旧 API&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;和时间赛跑？先看看 Java 给你留了什么坑。&amp;rdquo; —— 某位被 &lt;code&gt;Date&lt;/code&gt; 折腾过的程序员&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;时间，是计算机科学中最棘手的问题之一。连鼎鼎大名的《人月神话》作者 Brooks 都说过：&lt;strong&gt;&amp;ldquo;日期处理有两个棘手的问题：缓存失效和时间 zones。&amp;rdquo;&lt;/strong&gt;（好吧后半句是我加的，但意思到了。）Java 在日期时间处理上走过一段相当曲折的路——从最早被广泛吐槽的 &lt;code&gt;java.util.Date&lt;/code&gt;，到后来缝合了 &lt;code&gt;Calendar&lt;/code&gt; 的左右为难，再到 Java 8 一雪前耻推出的 &lt;code&gt;java.time&lt;/code&gt; 包，这一路堪称 Java 的&amp;quot;浪子回头&amp;quot;经典案例。&lt;/p&gt;</description></item><item><title>第 29 章：反射——reflect 包</title><link>https://before80.github.io/prgms/go/std/Chapter-29-reflect/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-29-reflect/</guid><description>&lt;h1 id="第-29-章反射reflect-包"&gt;第 29 章：反射——reflect 包&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;当你凝视深渊时，深渊也在凝视你。当你凝视 reflect 包时，Go 编译器笑了——因为你放弃了一眼就能看懂的代码。&amp;rdquo; ——一位不愿透露姓名的 Gopher&lt;/p&gt;</description></item><item><title>第 29 章 各 C 标准详解</title><link>https://before80.github.io/prgms/C/basic/Chapter-29-Standards-Details/</link><pubDate>Sun, 29 Mar 2026 22:34:00 +0800</pubDate><guid>https://before80.github.io/prgms/C/basic/Chapter-29-Standards-Details/</guid><description>&lt;h1 id="第-29-章-各-c-标准详解"&gt;第 29 章 各 C 标准详解&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;C 语言是一门古老的语言，但它并不服老。从 1972 年诞生至今，它一直在进化，始终站在系统编程的第一线。&amp;rdquo; 本章我们就来扒一扒 C 标准的进化史——那些让人又爱又恨的特性，那些&amp;quot;我当年居然这么写代码&amp;quot;的黑历史，以及那些让你代码瞬间高大上的新语法。&lt;/p&gt;</description></item><item><title>第29章 C++26前瞻</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-29-CPP26-Outlook/</link><pubDate>Sun, 29 Mar 2026 21:03:00 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-29-CPP26-Outlook/</guid><description>&lt;h1 id="第29章-c26前瞻"&gt;第29章 C++26前瞻&lt;/h1&gt;
&lt;p&gt;想象一下，你是一个中世纪的铁匠，正在打造一把绝世神兵。C++标准委员会的家伙们就是这个铁匠铺里的老伙计们，他们夜以继日地敲敲打打，试图在2026年之前为我们奉上一把足以改变编程世界的&amp;quot;倚天剑&amp;quot;。欢迎来到C++26前瞻——这里有你期待已久的功能，也有让你惊呼&amp;quot;这也太秀了吧&amp;quot;的奇思妙想！&lt;/p&gt;</description></item><item><title>第29章 CSS变换</title><link>https://before80.github.io/prgms/CSS/basic/Chapter-29-CSS-Transform/</link><pubDate>Fri, 27 Mar 2026 16:53:00 +0800</pubDate><guid>https://before80.github.io/prgms/CSS/basic/Chapter-29-CSS-Transform/</guid><description>&lt;h1 id="第二十九章css-变换-transform"&gt;第二十九章：CSS 变换 transform&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;想象一下，你是一个魔法师，可以让元素变大、缩小、旋转、倾斜——transform 就是 CSS 给你的魔法棒！学会了 transform，你的网页就能做出各种炫酷效果，让用户目不转睛！&lt;/p&gt;</description></item><item><title>第29章 React运行机制</title><link>https://before80.github.io/prgms/Js/frameworks/react/Chapter-29-React-Internal-Mechanism/</link><pubDate>Wed, 25 Mar 2026 12:56:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/react/Chapter-29-React-Internal-Mechanism/</guid><description>&lt;h1 id="chapter-29---react-运行机制"&gt;Chapter-29 - React 运行机制&lt;/h1&gt;
&lt;h2 id="291-virtual-dom-原理"&gt;29.1 Virtual DOM 原理&lt;/h2&gt;
&lt;h3 id="2911-dom-的性能问题"&gt;29.1.1 DOM 的性能问题&lt;/h3&gt;
&lt;p&gt;直接操作真实 DOM 是昂贵的——每次 DOM 修改都会触发浏览器的重排（Reflow）和重绘（Repaint）。&lt;/p&gt;
&lt;h3 id="2912-虚拟-dom-的数据结构"&gt;29.1.2 虚拟 DOM 的数据结构&lt;/h3&gt;
&lt;p&gt;虚拟 DOM 是一个 JavaScript 对象树，描述真实 DOM 的结构。&lt;/p&gt;</description></item><item><title>第29章 Vue 3 生态系统</title><link>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-29-Ecosystem/</link><pubDate>Wed, 25 Mar 2026 12:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-29-Ecosystem/</guid><description>&lt;h1 id="第二十九章-vue-3-生态系统"&gt;第二十九章 Vue 3 生态系统&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;Vue 3 不仅仅是一个前端框架，它背后还有一个庞大的生态系统。从全栈框架 Nuxt 3 到桌面应用 Electron+Vue，从跨平台开发 uni-app/Taro 到前沿的 Vapor Mode，Vue 的生态越来越丰富。本章我们就来全面了解这些工具，让你在实际项目中选择合适的技术栈。&lt;/p&gt;</description></item><item><title>第 29 章 事件类型</title><link>https://before80.github.io/prgms/Js/basic/Chapter-29-Event-Types/</link><pubDate>Tue, 24 Mar 2026 22:08:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/basic/Chapter-29-Event-Types/</guid><description>&lt;h1 id="第-29-章-事件类型"&gt;第 29 章 事件类型&lt;/h1&gt;
&lt;p&gt;如果说事件是 JavaScript 和用户之间的&amp;quot;对讲机&amp;quot;，那事件类型就是不同的&amp;quot;频道&amp;quot;——有的是&amp;quot;点击频道&amp;quot;，有的是&amp;quot;键盘频道&amp;quot;，有的是&amp;quot;表单频道&amp;quot;。不同的事件类型，让你响应不同的用户行为。&lt;/p&gt;</description></item><item><title>第29章：网络基础概念</title><link>https://before80.github.io/prgms/linux/net_basic/Chapter-29-Network-Fundamentals/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/net_basic/Chapter-29-Network-Fundamentals/</guid><description>&lt;h1 id="第二十九章网络基础概念"&gt;第二十九章：网络基础概念&lt;/h1&gt;
&lt;p&gt;想象一下，如果没有网络，你的电脑就是一座孤岛——玩不了游戏（单机版扫雷？那是惩罚）、刷不了网页、连不上服务器，简直比停电还难受。网络，就是让全世界电脑&amp;quot;组队开黑&amp;quot;的底层基础设施。&lt;/p&gt;</description></item><item><title>第29章 错误机制</title><link>https://before80.github.io/prgms/go/basic/Chapter-29-ErrorHandling/</link><pubDate>Fri, 20 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/basic/Chapter-29-ErrorHandling/</guid><description>&lt;h1 id="第29章-错误机制"&gt;第29章 错误机制&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;Go的错误处理独树一帜！错误就是普通的返回值，没有异常机制。这不是缺陷，而是Go的设计哲学——&lt;strong&gt;错误是值，应该被显式处理&lt;/strong&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;想象你点外卖：&lt;/p&gt;</description></item><item><title>第30章 SQL基础</title><link>https://before80.github.io/prgms/Python/basic/Chapter-30-SQL-Basics/</link><pubDate>Wed, 08 Apr 2026 13:22:00 +0800</pubDate><guid>https://before80.github.io/prgms/Python/basic/Chapter-30-SQL-Basics/</guid><description>&lt;h1 id="第三十章sql-基础--数据库界的普通话"&gt;第三十章：SQL 基础 —— 数据库界的&amp;quot;普通话&amp;quot;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;想象一下，如果你去世界各国旅游，每到一个国家就得学一门新语言，那是多么崩溃的一件事。好在数据库界有一位&amp;quot;语言天才&amp;quot;——SQL，它就是数据库世界里的普通话，让你能和 MySQL、PostgreSQL、SQLite 这些&amp;quot;来自不同国家的人&amp;quot;愉快聊天。&lt;/p&gt;</description></item><item><title>第30章 并发编程——同时做多件事</title><link>https://before80.github.io/prgms/Java/basic/Chapter-30-concurrency/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-30-concurrency/</guid><description>&lt;h1 id="第三十章-并发编程同时做多件事"&gt;第三十章 并发编程——同时做多件事&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;并发编程，是 Java 世界里最让人又爱又恨的东西。爱它，因为它能让程序&amp;quot;一心多用&amp;quot;，效率飞起；恨它，因为它一旦出问题，那调试起来简直比破案还刺激——线程 A 等着线程 B，线程 B 等着线程 C，而线程 C 居然在等着一个已经被删掉的锁。本章，让我们一起走进这个&amp;quot;多线程宇宙&amp;quot;，看看如何优雅地让程序同时做多件事，而不是一起&amp;quot;死给你看&amp;quot;。&lt;/p&gt;</description></item><item><title>第30章：图像处理——image 包</title><link>https://before80.github.io/prgms/go/std/Chapter-30-image/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-30-image/</guid><description>&lt;h1 id="第30章图像处理image-包"&gt;第30章：图像处理——image 包&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;🎨 &amp;ldquo;一图胜千言&amp;rdquo;，在程序员的世界里，一张验证码图片能挡住99%的机器人爬虫，一张缩略图能让网页加载快到飞起，一个海报合成功能能让运营小姑娘少加三天班。这一切的神奇魔法，都藏在 Go 的 &lt;code&gt;image&lt;/code&gt; 包里。&lt;/p&gt;</description></item><item><title>第30章 异常处理 程序界的 '紧急刹车' 与 '逃生舱'</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-30-Exception-Handling/</link><pubDate>Sun, 29 Mar 2026 21:03:00 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-30-Exception-Handling/</guid><description>&lt;h1 id="第30章-异常处理程序界的紧急刹车与逃生舱"&gt;第30章 异常处理：程序界的&amp;quot;紧急刹车&amp;quot;与&amp;quot;逃生舱&amp;quot;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Life is full of exceptions, and so is C++.&amp;rdquo; —— 某位被除零错误逼疯的程序员&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;想象一下：你正在厨房做蛋糕，结果发现面粉用完了。这时候你会怎么做？&lt;/p&gt;</description></item><item><title>第30章 CSS动画</title><link>https://before80.github.io/prgms/CSS/basic/Chapter-30-CSS-Animation/</link><pubDate>Fri, 27 Mar 2026 16:53:00 +0800</pubDate><guid>https://before80.github.io/prgms/CSS/basic/Chapter-30-CSS-Animation/</guid><description>&lt;h1 id="第三十章css-动画"&gt;第三十章：CSS 动画&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;CSS动画让你的网页从&amp;quot;静态图片&amp;quot;变成&amp;quot;动态电影&amp;quot;！transition和animation是CSS给你的&amp;quot;电影导演椅&amp;quot;，让元素按照你的剧本演出！&lt;/p&gt;</description></item><item><title>第30章 React 19新特性</title><link>https://before80.github.io/prgms/Js/frameworks/react/Chapter-30-React-19-New-Features/</link><pubDate>Wed, 25 Mar 2026 12:56:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/react/Chapter-30-React-19-New-Features/</guid><description>&lt;h1 id="chapter-30---react-19-新特性"&gt;Chapter-30 - React 19 新特性&lt;/h1&gt;
&lt;h2 id="301-use-hookreact-19-最重大的-api"&gt;30.1 use() Hook：React 19 最重大的 API&lt;/h2&gt;
&lt;h3 id="3011-use-的基本用法"&gt;30.1.1 use() 的基本用法&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;use()&lt;/code&gt; 是 React 19 引入的最重要新 API，它允许在组件内部读取 Promise 和 Context。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-jsx" data-lang="jsx"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;import&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;use&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;from&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;react&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// use() 读取 Promise
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;function&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;UserProfile&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;({&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;userPromise&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;})&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;const&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;user&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;use&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;userPromise&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;return&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#76a9f9"&gt;h1&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;&amp;gt;{&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;user&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;name&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;}&amp;lt;/&lt;/span&gt;&lt;span style="color:#76a9f9"&gt;h1&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="3012-use-在-render-中读取-promise--context"&gt;30.1.2 use() 在 render 中读取 Promise / Context&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;use()&lt;/code&gt; 可以在渲染阶段读取 Promise，并在 Promise resolve 后自动重新渲染。&lt;/p&gt;</description></item><item><title>第30章 Vue 3 应用部署</title><link>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-30-Deployment/</link><pubDate>Wed, 25 Mar 2026 12:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-30-Deployment/</guid><description>&lt;h1 id="第三十章-vue-3-应用部署"&gt;第三十章 Vue 3 应用部署&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;代码写完了，接下来最重要的事情就是部署。本章我们将从构建分析开始，讲解如何优化打包体积、配置 Nginx、实现 Docker 容器化、集成监控告警，以及搭建完整的 CI/CD 流程。学完本章，你的应用就能从&amp;quot;本地玩具&amp;quot;变成&amp;quot;生产级服务&amp;quot;。&lt;/p&gt;</description></item><item><title>第 30 章 网络请求</title><link>https://before80.github.io/prgms/Js/basic/Chapter-30-Network-Requests/</link><pubDate>Tue, 24 Mar 2026 22:08:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/basic/Chapter-30-Network-Requests/</guid><description>&lt;h1 id="第-30-章-网络请求"&gt;第 30 章 网络请求&lt;/h1&gt;
&lt;p&gt;JavaScript 本身只能运行在浏览器里，它需要和服务器&amp;quot;对话&amp;quot;才能获取数据、更新内容。网络请求就是 JavaScript 和服务器之间的&amp;quot;信使&amp;quot;。&lt;/p&gt;</description></item><item><title>第30章：网络配置</title><link>https://before80.github.io/prgms/linux/net_basic/Chapter-30-Network-Configuration/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/net_basic/Chapter-30-Network-Configuration/</guid><description>&lt;h1 id="第三十章网络配置"&gt;第三十章：网络配置&lt;/h1&gt;
&lt;p&gt;上一章我们学了网络理论知识，知道了IP地址、子网掩码、网关都是什么。这一章，我们要把理论变成实践——在Linux系统上配置网络。&lt;/p&gt;
&lt;p&gt;类比一下：上一章是学交通规则，这一章是学怎么开车。理论上你能背下所有路标，但坐进驾驶座你得知道油门在哪、刹车在哪。&lt;/p&gt;</description></item><item><title>第30章 异常机制</title><link>https://before80.github.io/prgms/go/basic/Chapter-30-PanicAndRecover/</link><pubDate>Fri, 20 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/basic/Chapter-30-PanicAndRecover/</guid><description>&lt;h1 id="第30章-异常机制"&gt;第30章 异常机制&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;panic和recover是Go的&amp;quot;核武器&amp;quot;——不是用来处理普通错误的。它们是最后的手段，用于真正不可恢复的情况。&lt;/p&gt;</description></item><item><title>第31章 NoSQL</title><link>https://before80.github.io/prgms/Python/basic/Chapter-31-NoSQL/</link><pubDate>Wed, 08 Apr 2026 13:22:00 +0800</pubDate><guid>https://before80.github.io/prgms/Python/basic/Chapter-31-NoSQL/</guid><description>&lt;h1 id="第三十一章-nosql数据存储的神仙打架"&gt;第三十一章 NoSQL：数据存储的&amp;quot;神仙打架&amp;quot;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;世界上只有两种数据库：一种是还在用的，一种是已经翻车的。&amp;rdquo;
—— 数据库江湖传说&lt;/p&gt;</description></item><item><title>第31章 JVM 虚拟机——Java 的运行秘境</title><link>https://before80.github.io/prgms/Java/basic/Chapter-31-jvm/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-31-jvm/</guid><description>&lt;h1 id="第三十一章-jvm-虚拟机java-的运行秘境"&gt;第三十一章 JVM 虚拟机——Java 的运行秘境&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;你写的 Java 代码，是怎么跑起来的？编译器把它编译成 &lt;code&gt;.class&lt;/code&gt; 文件之后，谁来真正执行？答案就是 JVM——Java 虚拟机。它就像是 Java 程序的神秘后台，一个藏在屏幕背后的超级引擎，默默地为你处理一切。本章我们就来揭开它的神秘面纱，看看这个&amp;quot;虚拟&amp;quot;的机器到底长什么样，又是如何运转的。&lt;/p&gt;</description></item><item><title>第31章：文本索引——index/suffixarray 包</title><link>https://before80.github.io/prgms/go/std/Chapter-31-suffixarray/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-31-suffixarray/</guid><description>&lt;h1 id="第31章文本索引indexsuffixarray-包"&gt;第31章：文本索引——index/suffixarray 包&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;在海量文本中寻找一个字符串，就像在大海捞针。但有了后缀数组，你就有了金属探测器。&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="311-indexsuffixarray包解决什么问题在大量文本中快速查找子串suffix-array-后缀数组"&gt;31.1 index/suffixarray包解决什么问题：在大量文本中快速查找子串——Suffix Array 后缀数组&lt;/h2&gt;
&lt;p&gt;想象一下，你有一本《战争与和平》（俄文原版，约230万字符），然后你问自己：&amp;quot;&amp;lsquo;安娜&amp;rsquo;这个姑娘出现了多少次？都在哪些位置？&amp;quot;&lt;/p&gt;</description></item><item><title>第31章 文件与IO操作</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-31-File-IO/</link><pubDate>Sun, 29 Mar 2026 21:03:00 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-31-File-IO/</guid><description>&lt;h1 id="第31章-文件与io操作"&gt;第31章 文件与IO操作&lt;/h1&gt;
&lt;p&gt;想象一下，如果C++是一门做菜的手艺，那么IO（输入/输出）就是厨房里的水龙头和碗碟柜——没有它们，你既没法&amp;quot;进货&amp;quot;（输入），也没法&amp;quot;上菜&amp;quot;（输出）。这一章我们就来聊聊C++里那些让人又爱又恨的流（Stream）操作。&lt;/p&gt;</description></item><item><title>第31章 滤镜与混合模式</title><link>https://before80.github.io/prgms/CSS/basic/Chapter-31-Filter-and-Blend-Modes/</link><pubDate>Fri, 27 Mar 2026 16:53:00 +0800</pubDate><guid>https://before80.github.io/prgms/CSS/basic/Chapter-31-Filter-and-Blend-Modes/</guid><description>&lt;h1 id="第三十一章滤镜与混合模式"&gt;第三十一章：滤镜与混合模式&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;滤镜就像是给你的网页加了一层&amp;quot;美颜滤镜&amp;quot;——可以让图片变模糊、变亮、变暗、加阴影。混合模式则是让两层元素叠加时产生各种神奇的化学反应。学会这些，你的网页设计水平直接提升一个档次！从此不用开 PS，直接用 CSS &amp;ldquo;美颜&amp;rdquo;！&lt;/p&gt;</description></item><item><title>第31章 React并发模式</title><link>https://before80.github.io/prgms/Js/frameworks/react/Chapter-31-React-Concurrency-Mode/</link><pubDate>Wed, 25 Mar 2026 12:56:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/react/Chapter-31-React-Concurrency-Mode/</guid><description>&lt;h1 id="chapter-31---react-并发模式"&gt;Chapter-31 - React 并发模式&lt;/h1&gt;
&lt;h2 id="311-并发渲染原理"&gt;31.1 并发渲染原理&lt;/h2&gt;
&lt;h3 id="3111-并发渲染的内部机制"&gt;31.1.1 并发渲染的内部机制&lt;/h3&gt;
&lt;p&gt;React 18 引入了&lt;strong&gt;并发渲染（Concurrent Rendering）&lt;/strong&gt;，它让 React 能够同时准备多个版本的 UI，根据优先级选择先渲染哪个。&lt;/p&gt;</description></item><item><title>第31章 Vue 3 源码解读</title><link>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-31-Source-Code/</link><pubDate>Wed, 25 Mar 2026 12:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/vue3/Chapter-31-Source-Code/</guid><description>&lt;h1 id="第三十一章-vue-3-源码解读"&gt;第三十一章 Vue 3 源码解读&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;恭喜你走到这里！本章是本教程的最后一章，我们将深入 Vue 3 的源码，从整体架构到核心实现，全面理解 Vue 3 的设计哲学。学习源码不是为了重复造轮子，而是为了更好地理解框架的工作原理，在遇到问题时能够快速定位原因。&lt;/p&gt;</description></item><item><title>第 31 章 客户端存储</title><link>https://before80.github.io/prgms/Js/basic/Chapter-31-Client-Storage/</link><pubDate>Tue, 24 Mar 2026 22:08:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/basic/Chapter-31-Client-Storage/</guid><description>&lt;h1 id="第-31-章-客户端存储"&gt;第 31 章 客户端存储&lt;/h1&gt;
&lt;p&gt;网页关闭后，数据还在吗？JavaScript 有几种方式可以把数据存在浏览器里，这就是&amp;quot;客户端存储&amp;quot;。&lt;/p&gt;
&lt;h2 id="311-cookie"&gt;31.1 Cookie&lt;/h2&gt;
&lt;h3 id="特点约-4kb--自动发送--同源策略"&gt;特点：约 4KB / 自动发送 / 同源策略&lt;/h3&gt;
&lt;p&gt;Cookie 是最早期的客户端存储方案，有点像&amp;quot;便利店的小票&amp;quot;——每次你去（请求服务器），店员都会看看你手里的小票（Cookie），记住你之前买过什么。&lt;/p&gt;</description></item><item><title>第31章：网络诊断工具</title><link>https://before80.github.io/prgms/linux/net_basic/Chapter-31-Network-Diagnostic-Tools/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/net_basic/Chapter-31-Network-Diagnostic-Tools/</guid><description>&lt;h1 id="第三十一章网络诊断工具"&gt;第三十一章：网络诊断工具&lt;/h1&gt;
&lt;p&gt;想象一下：你的网站打不开了、SSH连不上了、网页加载转圈了……这时候怎么办？&lt;/p&gt;
&lt;p&gt;答案是：网络诊断工具。&lt;/p&gt;
&lt;p&gt;网络诊断就像医生的听诊器——先确定&amp;quot;病在哪&amp;quot;，再决定&amp;quot;怎么治&amp;quot;。ping看通不通，traceroute看路径，nslookup/dig看DNS，netstat/ss看端口，tcpdump抓包分析……每一把扳手都有它的用武之地。&lt;/p&gt;</description></item><item><title>第31章 包 Package</title><link>https://before80.github.io/prgms/go/basic/Chapter-31-Packages/</link><pubDate>Fri, 20 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/basic/Chapter-31-Packages/</guid><description>&lt;h1 id="第31章-包-package"&gt;第31章 包 Package&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;包（Package），Go语言代码的&amp;quot;集装箱&amp;quot;。它把相关的代码组织在一起，方便复用和管理。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="311-包的基本概念"&gt;31.1 包的基本概念&lt;/h2&gt;
&lt;h3 id="3111-为什么需要包"&gt;31.1.1 为什么需要包&lt;/h3&gt;
&lt;p&gt;想象一个大型项目：&lt;/p&gt;</description></item><item><title>第32章 网络编程</title><link>https://before80.github.io/prgms/Python/basic/Chapter-32-Network/</link><pubDate>Wed, 08 Apr 2026 13:22:00 +0800</pubDate><guid>https://before80.github.io/prgms/Python/basic/Chapter-32-Network/</guid><description>&lt;h1 id="第32章-网络编程让你的程序学会上网冲浪"&gt;第32章 网络编程：让你的程序学会&amp;quot;上网冲浪&amp;quot;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;🧑‍💻 警告：本章内容可能会让你对&amp;quot;打开网页&amp;quot;这件事产生全新的敬畏——因为你会发现，每一次点击背后，都有一大堆协议在疯狂加班。&lt;/p&gt;</description></item><item><title>第32章 反射——运行时认识自己</title><link>https://before80.github.io/prgms/Java/basic/Chapter-32-reflection/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-32-reflection/</guid><description>&lt;h1 id="第三十二章-反射运行时认识自己"&gt;第三十二章 反射——运行时认识自己&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;引子&lt;/strong&gt;：你编译完代码，打了个 jar 包扔到服务器上，突然产品经理跑来说：&amp;ldquo;那个类里有个 private 方法，你能帮我改一下返回值吗？&amp;quot;——什么？代码都编译完了，难道要重新编译、重新打包、重新发布？Java 告诉你：不用那么麻烦，我有反射。&lt;/p&gt;</description></item><item><title>第32章：迭代器——iter 包（Go 1.23+）</title><link>https://before80.github.io/prgms/go/std/Chapter-32-iter/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-32-iter/</guid><description>&lt;h1 id="第32章迭代器iter-包go-123"&gt;第32章：迭代器——iter 包（Go 1.23+）&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;曾经，Go 语言的 for 循环是出了名的简洁直白。但随着函数式编程的浪潮席卷全球，Go 也在 1.23 版本里偷偷学了几招——iter 包就这么登场了。它不是来取代 for 循环的，它是来给 for 循环装上涡轮增压的。&amp;rdquo;&lt;/p&gt;</description></item><item><title>第32章 多线程与并发</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-32-Multithreading/</link><pubDate>Sun, 29 Mar 2026 21:03:00 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-32-Multithreading/</guid><description>&lt;h1 id="第32章-多线程与并发"&gt;第32章 多线程与并发&lt;/h1&gt;
&lt;p&gt;想象一下，你是一个超级英雄，拥有&amp;quot;分身术&amp;quot;的超能力。你可以同时左手吃汉堡、右手打游戏、脚还在弹钢琴。这听起来像是白日梦？但在程序员的世界里，这就是&lt;strong&gt;并发编程&lt;/strong&gt;（Concurrency）的日常操作！&lt;/p&gt;</description></item><item><title>第32章 clip-path裁剪</title><link>https://before80.github.io/prgms/CSS/basic/Chapter-32-clip-path/</link><pubDate>Fri, 27 Mar 2026 16:53:00 +0800</pubDate><guid>https://before80.github.io/prgms/CSS/basic/Chapter-32-clip-path/</guid><description>&lt;h1 id="第三十二章clip-path-裁剪"&gt;第三十二章：clip-path 裁剪&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;clip-path就是CSS给你的&amp;quot;裁纸刀&amp;quot;，可以裁剪出任意形状！菱形、圆形、六边形&amp;hellip;只有你想不到，没有它裁不到！&lt;/p&gt;</description></item><item><title>第32章 Next.js全栈开发</title><link>https://before80.github.io/prgms/Js/frameworks/react/Chapter-32-Next.js-Fullstack-Development/</link><pubDate>Wed, 25 Mar 2026 12:56:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/react/Chapter-32-Next.js-Fullstack-Development/</guid><description>&lt;h1 id="chapter-32---nextjs-全栈开发"&gt;Chapter-32 - Next.js 全栈开发&lt;/h1&gt;
&lt;h2 id="321-nextjs-概述"&gt;32.1 Next.js 概述&lt;/h2&gt;
&lt;h3 id="3211-nextjs-app-router-vs-pages-router"&gt;32.1.1 Next.js App Router vs Pages Router&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;对比项&lt;/th&gt;
 &lt;th&gt;Pages Router&lt;/th&gt;
 &lt;th&gt;App Router&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;路由&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;基于文件系统&lt;/td&gt;
 &lt;td&gt;基于文件系统&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;组件&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;客户端组件&lt;/td&gt;
 &lt;td&gt;服务端组件优先&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;数据获取&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;getServerSideProps&lt;/td&gt;
 &lt;td&gt;async Server Components&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;推荐场景&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;现有项目&lt;/td&gt;
 &lt;td&gt;新项目&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="3212-app-router-的新特性"&gt;32.1.2 App Router 的新特性&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;服务端组件默认&lt;/strong&gt;：组件默认是服务端的&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;React 19 支持&lt;/strong&gt;：App Router 是 React 19 特性的完整支持&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;嵌套布局&lt;/strong&gt;：layout.tsx 实现嵌套布局&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="3213-迁移策略"&gt;32.1.3 迁移策略&lt;/h3&gt;
&lt;p&gt;从 Pages Router 迁移到 App Router：&lt;/p&gt;</description></item><item><title>第 32 章 Proxy 与 Reflect</title><link>https://before80.github.io/prgms/Js/basic/Chapter-32-Proxy-and-Reflect/</link><pubDate>Tue, 24 Mar 2026 22:08:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/basic/Chapter-32-Proxy-and-Reflect/</guid><description>&lt;h1 id="第-32-章-proxy-与-reflect"&gt;第 32 章 Proxy 与 Reflect&lt;/h1&gt;
&lt;p&gt;Proxy 和 Reflect 是 ES6 引入的两个高级特性。Proxy 就像一个&amp;quot;拦截器&amp;quot;，可以拦截对对象的各种操作；Reflect 是 Object 的&amp;quot;替代者&amp;quot;，提供了更合理的操作对象的方法。&lt;/p&gt;</description></item><item><title>第32章：SSH 远程管理</title><link>https://before80.github.io/prgms/linux/net_basic/Chapter-32-SSH-Remote-Management/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/net_basic/Chapter-32-SSH-Remote-Management/</guid><description>&lt;h1 id="第三十二章ssh-远程管理"&gt;第三十二章：SSH 远程管理&lt;/h1&gt;
&lt;p&gt;SSH（Secure Shell）是Linux管理员的&amp;quot;生命线&amp;quot;——没有它，你管不了服务器、传不了文件、登录不了远程主机。&lt;/p&gt;</description></item><item><title>第32章 模块 Module</title><link>https://before80.github.io/prgms/go/basic/Chapter-32-Modules/</link><pubDate>Fri, 20 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/basic/Chapter-32-Modules/</guid><description>&lt;h1 id="第32章模块-module"&gt;第32章：模块 Module&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;如果把Go语言的世界比作一个大型购物中心，那么模块（Module）就是每个店铺的营业执照。没有它，你的代码就像是无证经营的小摊贩，随时可能被城管（编译器）没收。&amp;rdquo;&lt;/p&gt;</description></item><item><title>第33章 安全</title><link>https://before80.github.io/prgms/Python/basic/Chapter-33-Security/</link><pubDate>Wed, 08 Apr 2026 13:22:00 +0800</pubDate><guid>https://before80.github.io/prgms/Python/basic/Chapter-33-Security/</guid><description>&lt;h1 id="第三十三章安全守护代码的数字保镖"&gt;第三十三章：安全——守护代码的数字保镖&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;🎭 &lt;strong&gt;章前语&lt;/strong&gt;：你以为你的代码很安全？让我给你讲一个关于&amp;quot;admin/admin&amp;quot;的恐怖故事……&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;想象一下，你辛辛苦苦写了一个网站，用户数据、密码、银行卡信息应有尽有。然后某天，你发现数据库里躺着一行神秘的 SQL：&lt;code&gt;DELETE FROM users WHERE id=1&lt;/code&gt;。恭喜你，你的网站被黑了，而黑客用的密码可能是&amp;quot;123456&amp;quot;。&lt;/p&gt;</description></item><item><title>第33章 注解——代码的元数据</title><link>https://before80.github.io/prgms/Java/basic/Chapter-33-annotations/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-33-annotations/</guid><description>&lt;h1 id="第三十三章-注解代码的元数据"&gt;第三十三章 注解——代码的元数据&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;📌 &lt;strong&gt;先打个预防针&lt;/strong&gt;：注解（Annotation）是 Java 里最容易被人&amp;quot;眼熟&amp;quot;但又最容易被用歪的东西。很多人以为它只是 &lt;code&gt;@Override&lt;/code&gt; 前面那个 &lt;code&gt;@&lt;/code&gt;，其实它的本事大着呢——框架用它来生成代码、IDE 用它来做检查、编译器用它来提示警告……可以说，注解就是 Java 世界里的&amp;quot;便签贴&amp;quot;，贴在代码上，告诉别人&amp;quot;这段代码是干啥吃的&amp;quot;。&lt;/p&gt;</description></item><item><title>第33章：压缩——compress 系列</title><link>https://before80.github.io/prgms/go/std/Chapter-33-compress/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-33-compress/</guid><description>&lt;h1 id="第33章压缩compress-系列"&gt;第33章：压缩——compress 系列&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;数据的肥胖症，是数字时代的通病。而 Go 语言的 compress 包，就是你的私人健身教练。&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;在这个数据爆炸的时代，你的硬盘像是一个永远吃不饱的胖子，网络带宽则像是一条永远不够粗的水管。compress 包就是来解决这个问题的——让你的数据&amp;quot;减肥&amp;quot;，让传输&amp;quot;提速&amp;quot;。&lt;/p&gt;</description></item><item><title>第33章 预处理与宏</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-33-Preprocessor/</link><pubDate>Sun, 29 Mar 2026 21:03:00 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-33-Preprocessor/</guid><description>&lt;h1 id="第33章-预处理与宏"&gt;第33章 预处理与宏&lt;/h1&gt;
&lt;p&gt;想象一下，在代码正式编译之前，有一个神秘的幕后工作者在默默工作。它会在你的代码被送进编译器之前，偷偷地把一些东西改掉、把另一些东西加进来、甚至把某些代码块直接删掉。这位&amp;quot;代码界的大厨&amp;quot;就是我们今天的主角——&lt;strong&gt;预处理器&lt;/strong&gt;。&lt;/p&gt;</description></item><item><title>第33章 层叠与继承</title><link>https://before80.github.io/prgms/CSS/basic/Chapter-33-Cascade-and-Inheritance/</link><pubDate>Fri, 27 Mar 2026 16:53:00 +0800</pubDate><guid>https://before80.github.io/prgms/CSS/basic/Chapter-33-Cascade-and-Inheritance/</guid><description>&lt;h1 id="第三十三章层叠与继承"&gt;第三十三章：层叠与继承&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;当多个CSS规则冲突时，谁说了算？层叠规则就是CSS的&amp;quot;宫廷内斗&amp;quot;大戏！学会层叠，你就是那个笑到最后的宫斗冠军——妈妈再也不用担心你被 &lt;code&gt;!important&lt;/code&gt; 这个bug级队友坑了！CSS：我全都要.jpg&lt;/p&gt;</description></item><item><title>第33章 React生态系统与优秀库</title><link>https://before80.github.io/prgms/Js/frameworks/react/Chapter-33-React-Ecosystem-Best-Libraries/</link><pubDate>Wed, 25 Mar 2026 12:56:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/react/Chapter-33-React-Ecosystem-Best-Libraries/</guid><description>&lt;h1 id="chapter-33---react-生态精选库"&gt;Chapter-33 - React 生态精选库&lt;/h1&gt;
&lt;h2 id="331-动画framer-motion"&gt;33.1 动画：Framer Motion&lt;/h2&gt;
&lt;h3 id="3311-motion-组件的基本用法"&gt;33.1.1 motion 组件的基本用法&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;为什么需要动画库？&lt;/strong&gt; 想象没有动画库的时候，你想让一个 div 淡入+移动+缩放，要写一堆 &lt;code&gt;setInterval&lt;/code&gt; + &lt;code&gt;CSS transition&lt;/code&gt;，还要手动管理动画状态。代码又臭又长，动画间的协调更是噩梦。&lt;/p&gt;</description></item><item><title>第 33 章 Symbol</title><link>https://before80.github.io/prgms/Js/basic/Chapter-33-Symbol/</link><pubDate>Tue, 24 Mar 2026 22:08:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/basic/Chapter-33-Symbol/</guid><description>&lt;h1 id="第-33-章-symbol"&gt;第 33 章 Symbol&lt;/h1&gt;
&lt;p&gt;Symbol 是 ES6 引入的一种新数据类型，代表一个&amp;quot;独一无二&amp;quot;的值。就像每个人都有自己的身份证号一样，每个 Symbol 都是唯一的。&lt;/p&gt;
&lt;h2 id="331-symbol-基础"&gt;33.1 Symbol 基础&lt;/h2&gt;
&lt;h3 id="symbol创建独一无二的值"&gt;Symbol()：创建独一无二的值&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// 创建 Symbol
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;const&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;s1&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;Symbol&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;const&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;s2&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;Symbol&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;log&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;s1&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;===&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;s2&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 打印结果: false（每次 Symbol() 都是独一无二的）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// Symbol 可以有描述
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;const&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;s3&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;Symbol&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;mySymbol&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;const&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;s4&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;Symbol&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;mySymbol&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;log&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;s3&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;===&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;s4&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 打印结果: false（描述相同，但值不同）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;log&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;s3&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;description&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 打印结果: mySymbol
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="symbolfor--symbolkeyfor全局注册表"&gt;Symbol.for / Symbol.keyFor：全局注册表&lt;/h3&gt;
&lt;p&gt;Symbol.for 创建在全局注册表中的 Symbol，同一个 key 会返回同一个 Symbol。&lt;/p&gt;</description></item><item><title>第33章：DNS 服务器</title><link>https://before80.github.io/prgms/linux/net_basic/Chapter-33-DNS-Server/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/net_basic/Chapter-33-DNS-Server/</guid><description>&lt;h1 id="第三十三章dns-服务器"&gt;第三十三章：DNS 服务器&lt;/h1&gt;
&lt;p&gt;DNS（Domain Name System）是互联网的&amp;quot;中枢神经系统&amp;quot;——没有DNS，你就得记住&lt;code&gt;220.181.38.149&lt;/code&gt;而不是&lt;code&gt;www.baidu.com&lt;/code&gt;，记IP比记门牌号还痛苦。&lt;/p&gt;</description></item><item><title>第33章 泛型 Generics</title><link>https://before80.github.io/prgms/go/basic/Chapter-33-Generics/</link><pubDate>Fri, 20 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/basic/Chapter-33-Generics/</guid><description>&lt;h1 id="第33章泛型-generics"&gt;第33章：泛型 Generics&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;泛型，这个名字听起来像是某种神秘的力量，但实际上它是Go语言在1.18版本引入的最重要的特性。有了泛型，你终于可以写一份代码，服务于多种数据类型——就像一个万能厨师，用同一套厨艺做出各种口味的菜！&amp;rdquo;&lt;/p&gt;</description></item><item><title>第34章 Java 8~17 新特性全景</title><link>https://before80.github.io/prgms/Java/basic/Chapter-34-java-8-to-17/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-34-java-8-to-17/</guid><description>&lt;h1 id="第三十四章-java-817-新特性全景"&gt;第三十四章 Java 8~17 新特性全景&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Talk is cheap. Show me the code.&amp;rdquo; —— Linus Torvalds&lt;/p&gt;
&lt;p&gt;这句话放到 Java 身上简直太合适了。从 Java 8 开始，Oracle 对 Java 的演进速度就像开了挂一样，每半年发布一个大版本，每版本都带着让人眼前一亮的新特性。本章我们就来一次 Java 新特性的&amp;quot;全景扫描&amp;quot;，从 Java 8 的革命性突破，一路看到 Java 17 的成熟稳重。&lt;/p&gt;</description></item><item><title>第 34 章：归档——archive 系列</title><link>https://before80.github.io/prgms/go/std/Chapter-34-archive/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-34-archive/</guid><description>&lt;h1 id="第-34-章归档archive-系列"&gt;第 34 章：归档——archive 系列&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;🎒 想象一下，你要搬家，但把所有家具都拆成零件打包进一个大箱子——这大概就是归档（archive）的意义。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="341-archive-包解决什么问题多个文件需要打包成一个文件传输或存储"&gt;34.1 archive 包解决什么问题：多个文件需要打包成一个文件传输或存储&lt;/h2&gt;
&lt;h3 id="-概念解释"&gt;📖 概念解释&lt;/h3&gt;
&lt;p&gt;在日常开发中，我们经常遇到这样的场景：&lt;/p&gt;</description></item><item><title>第34章 枚举与联合体</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-34-Enumerations-and-Unions/</link><pubDate>Sun, 29 Mar 2026 21:03:00 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-34-Enumerations-and-Unions/</guid><description>&lt;h1 id="第34章-枚举与联合体"&gt;第34章 枚举与联合体&lt;/h1&gt;
&lt;p&gt;想象一下，如果你是一位服装设计师，但你的衣柜里只能放一种衣服——今天想穿T恤？对不起，昨天那件西装还在占着位置，你得先把它扔掉。这是不是很荒谬？但是在C++的远古时代（咳咳，我是说C时代），程序员们就经常遇到这种尴尬的情况：一个变量只能存一种类型的值，哪怕你明明知道它有时候是数字，有时候是文字，有时候是其他什么东西。&lt;/p&gt;</description></item><item><title>第34章 渲染性能</title><link>https://before80.github.io/prgms/CSS/basic/Chapter-34-Rendering-Performance/</link><pubDate>Fri, 27 Mar 2026 16:53:00 +0800</pubDate><guid>https://before80.github.io/prgms/CSS/basic/Chapter-34-Rendering-Performance/</guid><description>&lt;h1 id="第三十四章渲染性能"&gt;第三十四章：渲染性能&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;性能就是体验！卡顿的网页让人想砸键盘，这一章我们学习让CSS跑得更快的技巧。记住：卡顿是用户离开的最佳理由，别让你的网页成为&amp;quot;浏览器坟墓&amp;quot;！&lt;/p&gt;</description></item><item><title>第34章 React与AI</title><link>https://before80.github.io/prgms/Js/frameworks/react/Chapter-34-React-and-AI/</link><pubDate>Wed, 25 Mar 2026 12:56:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/react/Chapter-34-React-and-AI/</guid><description>&lt;h1 id="chapter-34---react-与-ai"&gt;Chapter-34 - React 与 AI&lt;/h1&gt;
&lt;h2 id="341-ai-api-集成"&gt;34.1 AI API 集成&lt;/h2&gt;
&lt;h3 id="3411-openai-api-的基本调用"&gt;34.1.1 OpenAI API 的基本调用&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;React + AI 可以做什么？&lt;/strong&gt; 这是个开放问题，答案很多：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;AI 聊天机器人&lt;/strong&gt;：像 ChatGPT 一样的对话界面&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;内容生成&lt;/strong&gt;：输入标题 AI 生成文章、输入描述生成图片&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;智能客服&lt;/strong&gt;：理解用户问题，自动回复或转人工&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;代码助手&lt;/strong&gt;：解释代码、debug、生成代码&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;多模态&lt;/strong&gt;：输入图片+文字，AI 理解图片内容&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;本质上，AI API 让 React 应用有了&amp;quot;理解&amp;quot;和&amp;quot;生成&amp;quot;的能力——不只是展示静态内容，而是能对话、能思考、能创造。&lt;/p&gt;</description></item><item><title>第 34 章 正则表达式</title><link>https://before80.github.io/prgms/Js/basic/Chapter-34-Regular-Expressions/</link><pubDate>Tue, 24 Mar 2026 22:08:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/basic/Chapter-34-Regular-Expressions/</guid><description>&lt;h1 id="第-34-章-正则表达式"&gt;第 34 章 正则表达式&lt;/h1&gt;
&lt;p&gt;正则表达式是 JavaScript 里的&amp;quot;字符串匹配神器&amp;quot;。学会了它，你就能在字符串里&amp;quot;大海捞针&amp;quot;，甚至&amp;quot;以一敌百&amp;quot;。&lt;/p&gt;</description></item><item><title>第34章：防火墙基础</title><link>https://before80.github.io/prgms/linux/firewall_safe/Chapter-34-Firewall-Basics/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/firewall_safe/Chapter-34-Firewall-Basics/</guid><description>&lt;h1 id="第三十四章防火墙基础"&gt;第三十四章：防火墙基础&lt;/h1&gt;
&lt;p&gt;防火墙（Firewall）是网络安全的&amp;quot;守门员&amp;quot;——它站在你的服务器和网络之间，决定哪些数据包可以进来，哪些必须滚蛋。&lt;/p&gt;
&lt;p&gt;想象一下：你的服务器是一栋大楼，防火墙就是大楼门口的保安。他会问你三个问题：你是谁？你找谁？你有通行证吗？三个问题有一个答不上来，对不起，请回吧。&lt;/p&gt;</description></item><item><title>第34章 反射 Reflect</title><link>https://before80.github.io/prgms/go/basic/Chapter-34-Reflect/</link><pubDate>Fri, 20 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/basic/Chapter-34-Reflect/</guid><description>&lt;h1 id="第34章反射-reflect"&gt;第34章：反射 Reflect&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;反射（Reflection）是编程语言的&amp;rsquo;透视眼&amp;rsquo;，让你在运行时能够窥探和操作变量的类型信息。就像是去医院做X光检查，你能看见平时看不见的内部结构！&amp;rdquo;&lt;/p&gt;</description></item><item><title>第35章 Java 21～26 新特性全景</title><link>https://before80.github.io/prgms/Java/basic/Chapter-35-java-21-to-26/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-35-java-21-to-26/</guid><description>&lt;h1 id="第三十五章-java-2126-新特性全景"&gt;第三十五章 Java 21～26 新特性全景&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Java 21 是继 Java 8 之后最重要的 LTS（长期支持版）版本，没有之一。&amp;rdquo; —— 当你第一次用虚拟线程跑满一万并发的时候，你就会明白这句话的分量。&lt;/p&gt;</description></item><item><title>第 35 章：密码学基础——crypto 包全览</title><link>https://before80.github.io/prgms/go/std/Chapter-35-crypto/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-35-crypto/</guid><description>&lt;h1 id="第-35-章密码学基础crypto-包全览"&gt;第 35 章：密码学基础——crypto 包全览&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;密码学：让窃听者抓狂，让程序员秃头的神秘艺术。&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;想象一下，你在网上购物时输入信用卡密码，这个密码要安全地穿过复杂的网络到达服务器——这背后就是密码学在默默保护你。Go 语言的 &lt;code&gt;crypto&lt;/code&gt; 包就是这场数字保镖秀的主角，它提供了 HTTPS 加密、数据完整性验证、用户认证、数字签名等核心功能。没有密码学，你的隐私就像放在公共厕所的蛋糕——谁都能尝一口。&lt;/p&gt;</description></item><item><title>第35章 CSS架构</title><link>https://before80.github.io/prgms/CSS/basic/Chapter-35-CSS-Architecture/</link><pubDate>Fri, 27 Mar 2026 16:53:00 +0800</pubDate><guid>https://before80.github.io/prgms/CSS/basic/Chapter-35-CSS-Architecture/</guid><description>&lt;h1 id="第三十五章css-架构与预处理器"&gt;第三十五章：CSS 架构与预处理器&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;CSS架构让代码更易维护，预处理器让开发更高效。学会这些，你就是CSS架构师了！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="351-css-架构模式"&gt;35.1 CSS 架构模式&lt;/h2&gt;
&lt;h3 id="3511-bem命名规范"&gt;35.1.1 BEM命名规范&lt;/h3&gt;
&lt;p&gt;BEM（Block__Element&amp;ndash;Modifier）是一种三段式命名规范：Block（块）__Element（元素）&amp;ndash;Modifier（修饰符），组合起来才是完整的类名，让类名清晰易懂。&lt;/p&gt;</description></item><item><title>第35章 跨平台桌面开发</title><link>https://before80.github.io/prgms/Js/frameworks/react/Chapter-35-Cross-Platform-Desktop-Development/</link><pubDate>Wed, 25 Mar 2026 12:56:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/react/Chapter-35-Cross-Platform-Desktop-Development/</guid><description>&lt;h1 id="chapter-35---跨平台桌面开发"&gt;Chapter-35 - 跨平台桌面开发&lt;/h1&gt;
&lt;h2 id="351-electron"&gt;35.1 Electron&lt;/h2&gt;
&lt;h3 id="3511-electron-架构主进程--渲染进程"&gt;35.1.1 Electron 架构：主进程 + 渲染进程&lt;/h3&gt;
&lt;p&gt;Electron 使用 Chromium + Node.js，分为：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;主进程（Main Process）&lt;/strong&gt;：Node.js 环境，管理窗口、系统操作&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;渲染进程（Renderer Process）&lt;/strong&gt;：Chromium 环境，运行 React 应用&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="3512-react--electron-项目搭建"&gt;35.1.2 React + Electron 项目搭建&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# npm create electron-vite@latest：调用 npm 执行 electron-vite 脚手架工具&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# my-app：项目名称（会创建一个同名文件夹）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# electron-vite 集成了 Vite + Electron，比纯 Electron 配置少很多&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;npm create electron-vite@latest my-app
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="3513-ipc-通信主进程与渲染进程数据交换"&gt;35.1.3 IPC 通信：主进程与渲染进程数据交换&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// 主进程（main/index.ts）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;import&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;app&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;ipcMain&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;from&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;electron&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;ipcMain&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;handle&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;get-app-version&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;()&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;return&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;app&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;getVersion&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;ipcMain&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;handle&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;open-file-dialog&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;async&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;()&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;const&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;dialog&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;require&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;electron&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;const&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;result&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;await&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;dialog&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;showOpenDialog&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;({&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;properties&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;:&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;[&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;openFile&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;]&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;return&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;result&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;filePaths&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// 渲染进程（ preload.cjs，用于安全暴露 API）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;const&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;contextBridge&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;ipcRenderer&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;require&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;electron&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;contextBridge&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;exposeInMainWorld&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;electronAPI&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;getAppVersion&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;:&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;()&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;ipcRenderer&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;invoke&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;get-app-version&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;openFileDialog&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;:&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;()&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;ipcRenderer&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;invoke&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;open-file-dialog&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// React 组件中调用
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;const&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;version&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;await&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;window&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;electronAPI&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;getAppVersion&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="3514-electron-builder-打包发布"&gt;35.1.4 electron-builder 打包发布&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;npm install -D electron-builder
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;17
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;18
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;19
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;20
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;21
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;22
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// electron-builder.json
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 应用唯一标识符，格式通常为 com.公司名.产品名，用于系统安装和卸载
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;&amp;#34;appId&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#63c381"&gt;&amp;#34;com.myapp.desktop&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 打包后显示的应用名称（即开始菜单/程序列表中的名字）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;&amp;#34;productName&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#63c381"&gt;&amp;#34;MyApp&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 打包输出目录，&amp;#34;release&amp;#34; 文件夹下会生成各平台的安装包
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;&amp;#34;directories&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;&amp;#34;output&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#63c381"&gt;&amp;#34;release&amp;#34;&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 需要打包进应用的文件或目录（** 通配符表示递归匹配）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 此处将 Vite 构建产物 dist 目录下的所有文件打包
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;&amp;#34;files&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;[&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;dist/**/*&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// Windows 平台打包配置
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// target 指定打包格式：nsis = 安装向导格式（.exe），portable = 单文件便携版
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 可选值还有：portable、appx、msi 等
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;&amp;#34;win&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;&amp;#34;target&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;[&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;nsis&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;]&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// macOS 平台打包配置
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// target 可选：dmg（磁盘镜像）、pkg（安装包）、zip（压缩包）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;&amp;#34;mac&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;&amp;#34;target&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;[&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;dmg&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;]&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// Linux 平台打包配置
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// target 可选：AppImage（通用可执行格式）、deb（Debian/Ubuntu）、rpm（Fedora/RHEL）、tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;&amp;#34;linux&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;&amp;#34;target&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;[&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;AppImage&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;]&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="352-tauri"&gt;35.2 Tauri&lt;/h2&gt;
&lt;h3 id="3521-tauri-的优势体积小安全rust-后端"&gt;35.2.1 Tauri 的优势：体积小、安全、Rust 后端&lt;/h3&gt;
&lt;p&gt;Tauri 用 Rust 替代 Node.js 作为后端，产物极小（~3MB vs Electron 的 100MB+）。包体积小的代价是：Node.js 生态不可用，系统级 API 需要额外配置。&lt;/p&gt;</description></item><item><title>第 35 章 错误处理</title><link>https://before80.github.io/prgms/Js/basic/Chapter-35-Error-Handling/</link><pubDate>Tue, 24 Mar 2026 22:08:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/basic/Chapter-35-Error-Handling/</guid><description>&lt;h1 id="第-35-章-错误处理"&gt;第 35 章 错误处理&lt;/h1&gt;
&lt;p&gt;程序不可能永远正确运行。错误处理就是让程序在出问题时能够优雅地&amp;quot;认错&amp;quot;，而不是直接崩溃。&lt;/p&gt;
&lt;h2 id="351-错误处理基础"&gt;35.1 错误处理基础&lt;/h2&gt;
&lt;h3 id="trycatch--trycatchfinally"&gt;try&amp;hellip;catch / try&amp;hellip;catch&amp;hellip;finally&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;try&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 尝试执行这段代码
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;const&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;result&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;riskyOperation&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;log&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;操作成功：&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;result&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;catch&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;error&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 如果出错，执行这里
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;error&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;出错了：&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;error&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;message&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;finally&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 不管成功还是失败，都会执行
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;log&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;无论成功失败，我都会执行&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="error-对象message--name--stack"&gt;Error 对象：message / name / stack&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;try&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;throw&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;new&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;Error&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;出错了！&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;catch&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;error&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;log&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;错误信息：&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;error&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;message&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 错误信息
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;log&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;错误名称：&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;error&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;name&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// Error
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;log&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;错误堆栈：&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;error&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;stack&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 详细错误位置
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="内置错误类型referenceerror--typeerror--syntaxerror--rangeerror--urierror"&gt;内置错误类型：ReferenceError / TypeError / SyntaxError / RangeError / URIError&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;17
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;18
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;19
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;20
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;21
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;22
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;23
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;24
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;25
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;26
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;27
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;28
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;29
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;30
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;31
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;32
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;33
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;34
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// ReferenceError：引用错误
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;try&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;log&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;undefinedVariable&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 未定义的变量
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;catch&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;e&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;log&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;e&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;name&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 打印结果: ReferenceError
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// TypeError：类型错误
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;try&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e5c07b"&gt;null&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;method&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;();&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// null 没有方法
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;catch&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;e&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;log&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;e&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;name&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 打印结果: TypeError
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// SyntaxError：语法错误（只能在解析阶段捕获，不能在 try...catch 中捕获）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// try {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// eval(&amp;#39;const = 1&amp;#39;); // 语法错误无法捕获
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// } catch (e) {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// console.log(e.name);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// RangeError：范围错误
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;try&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;const&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;arr&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;new&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;Array&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;-&lt;/span&gt;&lt;span style="color:#d19a66"&gt;1&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 数组长度不能为负数
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;catch&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;e&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;log&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;e&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;name&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 打印结果: RangeError
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// URIError：URI 错误
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;try&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e5c07b"&gt;decodeURIComponent&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;%&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 无效的 URI 编码
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;catch&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;e&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;log&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;e&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;name&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 打印结果: URIError
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="throw手动抛出"&gt;throw：手动抛出&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// 抛出字符串
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;throw&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;出错了！&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// 抛出数字
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;throw&lt;/span&gt; &lt;span style="color:#d19a66"&gt;404&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// 抛出对象
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;throw&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;code&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;:&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;NOT_FOUND&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;message&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;:&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;资源未找到&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// 抛出 Error 对象
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;throw&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;new&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;Error&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;出错了！&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="errorcausees2022"&gt;Error.cause（ES2022+）&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;try&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;try&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;JSON&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;parse&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;invalid json&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;catch&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;e&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 在捕获错误时，附加 cause 信息
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;throw&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;new&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;Error&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;解析失败&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;cause&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;:&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;e&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;catch&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;e&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;log&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;e&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;message&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 打印结果: 解析失败
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;log&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;e&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;cause&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 打印结果: SyntaxError: Unexpected token &amp;#39;i&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="自定义错误类型"&gt;自定义错误类型&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;17
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;18
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;19
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;20
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;21
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;22
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;23
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;24
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;25
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;26
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;class&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;ValidationError&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;extends&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;Error&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;constructor&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;message&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;field&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;super&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;message&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;this&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;name&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;ValidationError&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;this&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;field&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;field&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;function&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;validateAge&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;age&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;if&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#76a9f9"&gt;typeof&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;age&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;!==&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;number&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;throw&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;new&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;ValidationError&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;年龄必须是数字&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;age&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;if&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;age&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color:#d19a66"&gt;0&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;||&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;age&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#d19a66"&gt;150&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;throw&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;new&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;ValidationError&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;年龄必须在 0-150 之间&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;age&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;try&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;validateAge&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;abc&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;catch&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;e&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;if&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;e&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;instanceof&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;ValidationError&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;log&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;验证错误：&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;e&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;message&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;字段：&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;e&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;field&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;else&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;log&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;其他错误：&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;e&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;message&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;下一节，我们来学习异步错误处理！&lt;/p&gt;</description></item><item><title>第35章：UFW 防火墙（Ubuntu）</title><link>https://before80.github.io/prgms/linux/firewall_safe/Chapter-35-UFW-Firewall/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/firewall_safe/Chapter-35-UFW-Firewall/</guid><description>&lt;h1 id="第三十五章ufw-防火墙ubuntu"&gt;第三十五章：UFW 防火墙（Ubuntu）&lt;/h1&gt;
&lt;p&gt;UFW（Uncomplicated Firewall）是Ubuntu默认的防火墙管理工具。它的设计目标就是一个：&lt;strong&gt;让复杂的iptables配置变得简单&lt;/strong&gt;。&lt;/p&gt;</description></item><item><title>第35章 不安全编程 Unsafe</title><link>https://before80.github.io/prgms/go/basic/Chapter-35-Unsafe/</link><pubDate>Fri, 20 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/basic/Chapter-35-Unsafe/</guid><description>&lt;h1 id="第35章-不安全编程-unsafe"&gt;第35章 不安全编程 Unsafe&lt;/h1&gt;
&lt;h2 id="351-unsafe-包"&gt;35.1 unsafe 包&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;🧪 &lt;strong&gt;unsafe&lt;/strong&gt;，翻译成中文就是&amp;quot;不安全&amp;quot;。在 Go 语言这个充满安全检查的温柔乡里，&lt;code&gt;unsafe&lt;/code&gt; 包就像是一个调皮的孩子，专门干一些&amp;quot;越界&amp;quot;的事情。但别误会，它可不是真的让你去搞破坏——它更像是给了你一把钥匙，让你能够打开那些被 Go 编译器小心翼翼藏起来的底层秘密。&lt;/p&gt;</description></item><item><title>第36章 Maven 与 Gradle——项目构建工具</title><link>https://before80.github.io/prgms/Java/basic/Chapter-36-build-tools/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-36-build-tools/</guid><description>&lt;h1 id="第三十六章-maven-与-gradle项目构建工具"&gt;第三十六章 Maven 与 Gradle——项目构建工具&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;写代码一时爽，依赖地狱火葬场。&amp;quot;——每个被 JAR 包折磨过的 Java 程序员&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;各位好，欢迎来到 Java 世界中两个最&amp;quot;卷&amp;quot;的工具——&lt;strong&gt;Maven&lt;/strong&gt; 和 &lt;strong&gt;Gradle&lt;/strong&gt; 的主场。&lt;/p&gt;</description></item><item><title>第36章：对称加密与哈希——crypto/aes、crypto/cipher、hash/*</title><link>https://before80.github.io/prgms/go/std/Chapter-36-symmetric-crypto/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-36-symmetric-crypto/</guid><description>&lt;h1 id="第36章对称加密与哈希cryptoaescryptocipherhash"&gt;第36章：对称加密与哈希——crypto/aes、crypto/cipher、hash/*&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本章目标：让你在保护数据隐私的战场上，像007一样优雅地加密和解密，同时搞懂那些哈希函数的来龙去脉。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;想象一下：你给朋友寄一封情书，但不想让邮递员偷看。怎么办呢？你和你的朋友各有一把相同的钥匙🔑，你用这把钥匙把信锁进一个盒子，朋友收到后用同一把钥匙打开。这就是&lt;strong&gt;对称加密&lt;/strong&gt;——发送方和接收方持有同一把密钥，加密和解密都用它。&lt;/p&gt;</description></item><item><title>第36章 测试与调试：让你的代码从'能用'到'靠谱'</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-36-Testing-and-Debugging/</link><pubDate>Sun, 29 Mar 2026 21:03:00 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-36-Testing-and-Debugging/</guid><description>&lt;h1 id="第36章-测试与调试让你的代码从能用到靠谱"&gt;第36章 测试与调试：让你的代码从&amp;quot;能用&amp;quot;到&amp;quot;靠谱&amp;quot;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;ldquo;调试（debugging）这个名字来源于一只真正的bug——1947年，一只飞蛾被卡在Harvard Mark II的继电器里，导致系统故障。程序员Grace Hopper和她团队把那只蛾子贴在了日志本上，还写道：&amp;ldquo;First actual case of bug being found.&amp;rdquo; 从此，&amp;ldquo;debug&amp;quot;这个词就诞生了。所以下次你对着屏幕debug到凌晨三点时，至少你可以告诉自己：你在追随Grace Hopper的足迹——只不过那只飞蛾是看不见的。&amp;rdquo;&lt;/em&gt;
—— 编程野史（Programming Folklore）&lt;/p&gt;</description></item><item><title>第36章 交互属性</title><link>https://before80.github.io/prgms/CSS/basic/Chapter-36-Interaction-Properties/</link><pubDate>Fri, 27 Mar 2026 16:53:00 +0800</pubDate><guid>https://before80.github.io/prgms/CSS/basic/Chapter-36-Interaction-Properties/</guid><description>&lt;h1 id="第三十六章交互与用户相关属性"&gt;第三十六章：交互与用户相关属性&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;网页不只是看的，更要&amp;quot;玩&amp;quot;的！学会CSS交互属性，让用户爱上你的网页！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="361-pointer-events"&gt;36.1 pointer-events&lt;/h2&gt;
&lt;h3 id="3611-pointer-events属性"&gt;36.1.1 pointer-events属性&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;pointer-events&lt;/code&gt; 控制元素是否响应鼠标事件。&lt;/p&gt;</description></item><item><title>第36章 React工程化与架构</title><link>https://before80.github.io/prgms/Js/frameworks/react/Chapter-36-React-Engineering-and-Architecture/</link><pubDate>Wed, 25 Mar 2026 12:56:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/react/Chapter-36-React-Engineering-and-Architecture/</guid><description>&lt;h1 id="chapter-36---react-工程化与架构"&gt;Chapter-36 - React 工程化与架构&lt;/h1&gt;
&lt;h2 id="361-项目目录结构设计"&gt;36.1 项目目录结构设计&lt;/h2&gt;
&lt;h3 id="3611-feature-based-结构"&gt;36.1.1 feature-based 结构&lt;/h3&gt;
&lt;p&gt;按功能/业务模块组织代码，适合中大型项目。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;src/
├── features/
│ ├── auth/
│ │ ├── components/
│ │ ├── hooks/
│ │ └── api/
│ └── products/
└── shared/
 ├── components/
 ├── hooks/
 └── utils/
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="3612-常用目录划分"&gt;36.1.2 常用目录划分&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;目录&lt;/th&gt;
 &lt;th&gt;职责&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;components/&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;公共 UI 组件&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;pages/&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;页面组件&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;hooks/&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;自定义 Hooks&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;utils/&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;工具函数&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;api/&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;API 请求&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;stores/&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;状态管理&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;types/&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;TypeScript 类型&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;constants/&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;常量配置&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="362-代码质量"&gt;36.2 代码质量&lt;/h2&gt;
&lt;h3 id="3621-eslint--prettier-配置"&gt;36.2.1 ESLint + Prettier 配置&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;npm install -D eslint prettier
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;npm install -D eslint-config-prettier eslint-plugin-prettier
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// .eslintrc.json
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;&amp;#34;extends&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#63c381"&gt;&amp;#34;eslint:recommended&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#63c381"&gt;&amp;#34;plugin:react/recommended&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#63c381"&gt;&amp;#34;plugin:@typescript-eslint/recommended&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#63c381"&gt;&amp;#34;eslint-config-prettier&amp;#34;&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// prettier 必须放在最后，用于关闭与 Prettier 冲突的 ESLint 规则
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;&amp;#34;plugins&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;[&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;prettier&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;&amp;#34;rules&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;&amp;#34;prettier/prettier&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#63c381"&gt;&amp;#34;error&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 将 Prettier 格式化问题报告为 ESLint 错误
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;&amp;#34;react/react-in-jsx-scope&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#63c381"&gt;&amp;#34;off&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;&amp;#34;@typescript-eslint/no-unused-vars&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;[&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;error&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;&amp;#34;argsIgnorePattern&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#63c381"&gt;&amp;#34;^_&amp;#34;&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;}]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;注意&lt;/strong&gt;：&lt;code&gt;eslint-config-prettier&lt;/code&gt; 必须放在 &lt;code&gt;extends&lt;/code&gt; 数组的&lt;strong&gt;最后一位&lt;/strong&gt;！否则它会覆盖其他规则，让你的 Prettier 配置失效。同理，&lt;code&gt;eslint-plugin-prettier&lt;/code&gt; 建议配合 &lt;code&gt;eslint-config-prettier&lt;/code&gt; 使用，否则可能重复检查。&lt;/p&gt;</description></item><item><title>第 36 章 调试</title><link>https://before80.github.io/prgms/Js/basic/Chapter-36-Debugging/</link><pubDate>Tue, 24 Mar 2026 22:08:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/basic/Chapter-36-Debugging/</guid><description>&lt;h1 id="第-36-章-调试"&gt;第 36 章 调试&lt;/h1&gt;
&lt;p&gt;代码写错了怎么办？调试就是帮你找到并修复 bug 的过程。JavaScript 提供了多种调试工具，让 bug 无所遁形。&lt;/p&gt;
&lt;h2 id="361-console"&gt;36.1 console&lt;/h2&gt;
&lt;h3 id="log--warn--error--info"&gt;log / warn / error / info&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// log：普通日志
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;log&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;这是一条普通日志&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// warn：警告
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;warn&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;这是一条警告&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// error：错误
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;error&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;这是一条错误&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// info：信息
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;info&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;这是一条信息&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="s--d--o-格式化--c-自定义样式"&gt;%s / %d / %o 格式化 / %c 自定义样式&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// %s：字符串
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;log&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;Hello, %s!&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;World&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 打印结果: Hello, World!
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// %d：数字
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;log&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;年龄：%d&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#d19a66"&gt;18&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 打印结果: 年龄：18
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// %o：对象
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;const&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;obj&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;name&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;:&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;小明&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;age&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;:&lt;/span&gt; &lt;span style="color:#d19a66"&gt;18&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;log&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;对象：%o&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;obj&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// %c：自定义样式
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;log&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;%c红色文字&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;color: red; font-size: 20px&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;log&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;%c蓝色%c红色&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;color: blue&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;color: red&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="assert--group--count--time--trace--table"&gt;assert / group / count / time / trace / table&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;17
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;18
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;19
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;20
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;21
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;22
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;23
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;24
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;25
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;26
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;27
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;28
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;29
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;30
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;31
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;32
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;33
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;34
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// assert：断言
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;assert&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#d19a66"&gt;1&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;===&lt;/span&gt; &lt;span style="color:#d19a66"&gt;1&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;这行不会打印&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;assert&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#d19a66"&gt;1&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;===&lt;/span&gt; &lt;span style="color:#d19a66"&gt;2&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;这行会打印，因为条件不满足&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// group：分组
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;group&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;用户信息&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;log&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;姓名：小明&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;log&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;年龄：18&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;groupEnd&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// count：计数
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;function&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;test&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;()&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;count&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;函数调用次数&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;test&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;();&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 打印结果: 函数调用次数: 1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;test&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;();&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 打印结果: 函数调用次数: 2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// time / timeEnd：计时
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;time&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;耗时操作&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;for&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#76a9f9"&gt;let&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;i&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#d19a66"&gt;0&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;i&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color:#d19a66"&gt;1000&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;i&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;++&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;timeEnd&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;耗时操作&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 打印结果: 耗时操作: 1.23ms
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// trace：堆栈跟踪
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;function&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;a&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;()&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;b&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;();&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;function&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;b&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;()&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;c&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;();&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;function&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;c&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;()&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;trace&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;调用栈&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;a&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// table：表格显示
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;const&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;users&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;name&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;:&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;小明&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;age&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;:&lt;/span&gt; &lt;span style="color:#d19a66"&gt;18&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;name&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;:&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;小红&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;age&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;:&lt;/span&gt; &lt;span style="color:#d19a66"&gt;20&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;console&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;table&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;users&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;下一节，我们来学习断点调试！&lt;/p&gt;</description></item><item><title>第36章：firewalld 防火墙（CentOS/RHEL）</title><link>https://before80.github.io/prgms/linux/firewall_safe/Chapter-36-firewalld/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/firewall_safe/Chapter-36-firewalld/</guid><description>&lt;h1 id="第三十六章firewalld-防火墙centosrhel"&gt;第三十六章：firewalld 防火墙（CentOS/RHEL）&lt;/h1&gt;
&lt;p&gt;CentOS/RHEL（以及 Fedora、OpenSUSE 等）默认使用 &lt;code&gt;firewalld&lt;/code&gt; 作为防火墙管理工具。和Ubuntu的UFW不同，firewalld是红帽系Linux的标配。&lt;/p&gt;</description></item><item><title>第36章 文档</title><link>https://before80.github.io/prgms/go/basic/Chapter-36-Documentation/</link><pubDate>Mon, 23 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/basic/Chapter-36-Documentation/</guid><description>&lt;h1 id="第36章-文档"&gt;第36章 文档&lt;/h1&gt;
&lt;h2 id="361-文档注释"&gt;36.1 文档注释&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;📝 &lt;strong&gt;文档&lt;/strong&gt;，听起来是个无聊透顶的话题对吧？写文档被认为是&amp;quot;程序员最讨厌的事情之一&amp;quot;，和&amp;quot;命名&amp;quot;并列第一。但是！你知道吗，优秀的文档可以让一个项目从&amp;quot;无人问津&amp;quot;变成&amp;quot;人手一份&amp;quot;；而糟糕的文档则可以让一个优秀的项目变成&amp;quot;无人能懂&amp;quot;的孤岛。这一章，我们就来聊聊 Go 语言的文档之道。&lt;/p&gt;</description></item><item><title>第37章 Spring Framework——企业级 Java 的基石</title><link>https://before80.github.io/prgms/Java/basic/Chapter-37-spring-framework/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-37-spring-framework/</guid><description>&lt;h1 id="第三十七章-spring-framework企业级-java-的基石"&gt;第三十七章 Spring Framework——企业级 Java 的基石&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;学 Java 的人，没有不知道 Spring 的。就像学开车的人，没有不知道方向盘的。&amp;rdquo; —— 某位不愿透露姓名的 Java 程序员&lt;/p&gt;</description></item><item><title>第 37 章 非对称加密与签名</title><link>https://before80.github.io/prgms/go/std/Chapter-37-asymmetric-crypto/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-37-asymmetric-crypto/</guid><description>&lt;h1 id="第-37-章-非对称加密与签名"&gt;第 37 章 非对称加密与签名&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;对称加密就像一把钥匙开一把锁，但如果你要把钥匙交给快递小哥，可就麻烦了。非对称加密的出现，终于让&amp;rsquo;信任&amp;rsquo;这个问题变得可以数学证明了。&amp;rdquo;&lt;/p&gt;</description></item><item><title>第37章 设计模式</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-37-Design-Patterns/</link><pubDate>Sun, 29 Mar 2026 21:03:00 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-37-Design-Patterns/</guid><description>&lt;h1 id="第37章-设计模式"&gt;第37章 设计模式&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Every programmer is an architect, even if they don&amp;rsquo;t know it yet.&amp;rdquo;
每一个程序员都是建筑师，只是他们自己还不知道罢了。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="370-引言为什么设计模式值得你花时间"&gt;37.0 引言：为什么设计模式值得你花时间&lt;/h2&gt;
&lt;p&gt;想象一下，你正在建造一座房子。你是那种&amp;quot;我不需要蓝图，边建边想&amp;quot;的勇士吗？如果是，祝你的墙壁别塌得太离谱。&lt;/p&gt;</description></item><item><title>第37章 固定搭配速查</title><link>https://before80.github.io/prgms/CSS/basic/Chapter-37-Fixed-Patterns/</link><pubDate>Fri, 27 Mar 2026 16:53:00 +0800</pubDate><guid>https://before80.github.io/prgms/CSS/basic/Chapter-37-Fixed-Patterns/</guid><description>&lt;h1 id="第三十七章固定搭配速查"&gt;第三十七章：固定搭配速查&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;这些固定搭配收藏起来，编码效率翻倍！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="371-文字类"&gt;37.1 文字类&lt;/h2&gt;
&lt;h3 id="3711-单行省略"&gt;37.1.1 单行省略&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#ca72ff"&gt;single-line&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;width&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#d19a66"&gt;100&lt;/span&gt;&lt;span style="color:#e5c07b"&gt;%&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;/* 必须有明确宽度，ellipsis 才生效 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;overflow&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;hidden&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;text-overflow&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;ellipsis&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;white-space&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;nowrap&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="3712-多行省略"&gt;37.1.2 多行省略&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#ca72ff"&gt;multi-line&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;display&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;-webkit-&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;box&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;-webkit-&lt;/span&gt;&lt;span style="color:#76a9f9"&gt;line-clamp&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#d19a66"&gt;3&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;-webkit-&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;box-orient&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;vertical&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;overflow&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;hidden&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="372-布局类"&gt;37.2 布局类&lt;/h2&gt;
&lt;h3 id="3721-flex居中"&gt;37.2.1 Flex居中&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#ca72ff"&gt;flex-center&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;display&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;flex&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;align-items&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;center&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;justify-content&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;center&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="3722-清除浮动"&gt;37.2.2 清除浮动&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;/* 方案1：::after 伪元素（最常用）*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#ca72ff"&gt;clearfix&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;::&lt;/span&gt;&lt;span style="color:#e5c07b"&gt;after&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;content&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#63c381"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;display&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;block&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;clear&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;both&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;/* 方案2：display: flow-root（现代简洁）*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#ca72ff"&gt;parent&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;display&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;flow&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;-&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;root&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;/* 方案3：overflow: hidden（需注意裁剪问题）*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#ca72ff"&gt;parent&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;overflow&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;hidden&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="373-动画类"&gt;37.3 动画类&lt;/h2&gt;
&lt;h3 id="3731-悬浮放大"&gt;37.3.1 悬浮放大&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#ca72ff"&gt;hover-scale&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;transition&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;transform&lt;/span&gt; &lt;span style="color:#d19a66"&gt;0.2&lt;/span&gt;&lt;span style="color:#e5c07b"&gt;s&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#ca72ff"&gt;hover-scale&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt;&lt;span style="color:#e5c07b"&gt;hover&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;transform&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;scale&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#d19a66"&gt;1.05&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="374-表单类"&gt;37.4 表单类&lt;/h2&gt;
&lt;h3 id="3741-accent-color"&gt;37.4.1 accent-color&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;input&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;[&lt;/span&gt;&lt;span style="color:#76a9f9"&gt;type&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;checkbox&amp;#34;&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;]&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;accent-color&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#d19a66"&gt;#3498db&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="本章小结"&gt;本章小结&lt;/h2&gt;
&lt;p&gt;收藏备用！&lt;/p&gt;</description></item><item><title>第37章 CI/CD与自动化</title><link>https://before80.github.io/prgms/Js/frameworks/react/Chapter-37-CI-CD-and-Automation/</link><pubDate>Wed, 25 Mar 2026 12:56:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/react/Chapter-37-CI-CD-and-Automation/</guid><description>&lt;h1 id="chapter-37---cicd-与自动化"&gt;Chapter-37 - CI/CD 与自动化&lt;/h1&gt;
&lt;h2 id="371-github-actions"&gt;37.1 GitHub Actions&lt;/h2&gt;
&lt;h3 id="3711-cicd-的概念"&gt;37.1.1 CI/CD 的概念&lt;/h3&gt;
&lt;p&gt;在没有 CI/CD 的年代，开发者手动打包、上传服务器、盯着日志——听起来像远古 rituals，实际上也没好到哪里去。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CI（Continuous Integration，持续集成）&lt;/strong&gt;：你的代码每次 push 到仓库，自动化流水线立即启动——安装依赖、运行测试、构建产物。任何一个人提交的代码有问题，都会第一时间暴露，而不是等到上线前夜才发现一团乱麻。&lt;/p&gt;</description></item><item><title>第 37 章 工具函数</title><link>https://before80.github.io/prgms/Js/basic/Chapter-37-Utility-Functions/</link><pubDate>Tue, 24 Mar 2026 22:08:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/basic/Chapter-37-Utility-Functions/</guid><description>&lt;h1 id="第-37-章-工具函数"&gt;第 37 章 工具函数&lt;/h1&gt;
&lt;p&gt;所谓&amp;quot;工具函数&amp;quot;，就是那些可以反复使用的、封装好的函数。它们就像程序员工具箱里的&amp;quot;瑞士军刀&amp;quot;，让你写代码更高效、更优雅。&lt;/p&gt;</description></item><item><title>第37章：iptables 底层配置</title><link>https://before80.github.io/prgms/linux/firewall_safe/Chapter-37-iptables/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/firewall_safe/Chapter-37-iptables/</guid><description>&lt;h1 id="第三十七章iptables-底层配置"&gt;第三十七章：iptables 底层配置&lt;/h1&gt;
&lt;p&gt;iptables是Linux内核netfilter模块的用户态配置工具，也是UFW和firewalld的&amp;quot;底层老板&amp;quot;。虽然UFW和firewalld已经足够好用，但理解iptables能让你真正掌握Linux防火墙的原理。&lt;/p&gt;</description></item><item><title>第37章 CGO</title><link>https://before80.github.io/prgms/go/basic/Chapter-37-CGO/</link><pubDate>Mon, 23 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/basic/Chapter-37-CGO/</guid><description>&lt;h1 id="第37章-cgo"&gt;第37章 CGO&lt;/h1&gt;
&lt;h2 id="371-cgo-基础"&gt;37.1 CGO 基础&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;🔗 &lt;strong&gt;CGO&lt;/strong&gt; 是 Go 语言调用 C 代码的桥梁。如果说 Go 是一门现代化的、安全的、并发友好的编程语言，那么 C 就是那个&amp;quot;老前辈&amp;quot;——几十年的积累，无数的经典库，遍布全球的代码遗产。CGO 让你能够直接调用这些 C 代码，把 Go 的安全性和 C 的灵活性结合起来。&lt;/p&gt;</description></item><item><title>第38章 持久化框架——Java 与数据库对话</title><link>https://before80.github.io/prgms/Java/basic/Chapter-38-persistence-frameworks/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-38-persistence-frameworks/</guid><description>&lt;h1 id="第三十八章-持久化框架java-与数据库对话"&gt;第三十八章 持久化框架——Java 与数据库对话&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;前置知识&lt;/strong&gt;：本章需要你懂一点 Java 基础（类、对象、接口），懂一点 SQL（SELECT、INSERT 之类的命令）。如果数据库对你来说只是个&amp;quot;存放数据的大仓库&amp;quot;，那本章正是帮你把这个仓库变成一条通畅的高速公路。&lt;/p&gt;</description></item><item><title>第38章：TLS 与证书——crypto/tls、crypto/x509</title><link>https://before80.github.io/prgms/go/std/Chapter-38-tls/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-38-tls/</guid><description>&lt;h1 id="第38章tls-与证书cryptotlscryptox509"&gt;第38章：TLS 与证书——crypto/tls、crypto/x509&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;ldquo;HTTP 是明信片，TLS 就是信封。没有 TLS，你的密码就像用透明胶带粘在明信片上的信用卡号——技术上能用，但迟早被人看光光。&amp;rdquo;&lt;/em&gt;&lt;/p&gt;</description></item><item><title>第38章 构建系统</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-38-Build-Systems/</link><pubDate>Sun, 29 Mar 2026 21:03:00 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-38-Build-Systems/</guid><description>&lt;h1 id="第38章-构建系统"&gt;第38章 构建系统&lt;/h1&gt;
&lt;p&gt;想象一下：你辛辛苦苦写了三千行C++代码，兴冲冲地点击&amp;quot;运行&amp;quot;，然后&amp;hellip;满屏红字。天哪，编译器在跟你玩&amp;quot;你猜我需要什么头文件&amp;quot;的游戏。这就是构建系统的意义所在——它就像一个尽职的管家，帮你把混乱的源代码变成闪闪发光的可执行文件，还顺便记住了编译器的所有怪癖。&lt;/p&gt;</description></item><item><title>第38章 常见问题</title><link>https://before80.github.io/prgms/CSS/basic/Chapter-38-Common-Problems/</link><pubDate>Fri, 27 Mar 2026 16:53:00 +0800</pubDate><guid>https://before80.github.io/prgms/CSS/basic/Chapter-38-Common-Problems/</guid><description>&lt;h1 id="第三十八章常见问题与坑"&gt;第三十八章：常见问题与坑&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;踩坑是成长的必经之路，这一章帮你提前知道这些坑在哪里！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="381-盒模型"&gt;38.1 盒模型&lt;/h2&gt;
&lt;h3 id="3811-父元素高度塌陷"&gt;38.1.1 父元素高度塌陷&lt;/h3&gt;
&lt;p&gt;浮动元素导致父容器高度塌陷。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;/* 解决方案 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#ca72ff"&gt;parent&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;display&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;flow&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;-&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;root&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="3812-margin上下重叠"&gt;38.1.2 margin上下重叠&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;/* 方案1：父元素 overflow: hidden（简单但可能有副作用）*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#ca72ff"&gt;parent&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;overflow&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;hidden&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;/* 方案2：父元素 padding 代替子元素 margin（推荐）*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#ca72ff"&gt;parent&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;padding&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#d19a66"&gt;20&lt;/span&gt;&lt;span style="color:#e5c07b"&gt;px&lt;/span&gt; &lt;span style="color:#d19a66"&gt;0&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;/* 方案3：子元素使用单方向 margin（推荐）*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#ca72ff"&gt;child&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;margin-top&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#d19a66"&gt;20&lt;/span&gt;&lt;span style="color:#e5c07b"&gt;px&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;/* 只用 top 或 bottom */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="382-布局"&gt;38.2 布局&lt;/h2&gt;
&lt;h3 id="3821-flex项目被压缩"&gt;38.2.1 Flex项目被压缩&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#ca72ff"&gt;item&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;flex-shrink&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#d19a66"&gt;0&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="3822-inline-block间隙"&gt;38.2.2 inline-block间隙&lt;/h3&gt;
&lt;p&gt;inline-block元素之间会产生空白间距，解决方案是把父元素设为flex或grid。&lt;/p&gt;</description></item><item><title>第38章 React未来展望</title><link>https://before80.github.io/prgms/Js/frameworks/react/Chapter-38-React-Future-Outlook/</link><pubDate>Wed, 25 Mar 2026 12:56:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/react/Chapter-38-React-Future-Outlook/</guid><description>&lt;h1 id="chapter-38---react-未来展望"&gt;Chapter-38 - React 未来展望&lt;/h1&gt;
&lt;h2 id="381-react-compiler实验性"&gt;38.1 React Compiler（实验性）&lt;/h2&gt;
&lt;h3 id="3811-自动记忆化的编译器原理"&gt;38.1.1 自动记忆化的编译器原理&lt;/h3&gt;
&lt;p&gt;React Compiler（最初代号 React Forget）是一个实验性编译器，能够在编译时自动识别可以安全 memoize 的代码片段，插入 &lt;code&gt;useMemo&lt;/code&gt; / &lt;code&gt;useCallback&lt;/code&gt;，让你从&amp;quot;手动优化地狱&amp;quot;中解放出来。&lt;/p&gt;</description></item><item><title>第 38 章 Web 安全</title><link>https://before80.github.io/prgms/Js/basic/Chapter-38-web-security/</link><pubDate>Tue, 24 Mar 2026 22:08:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/basic/Chapter-38-web-security/</guid><description>&lt;h1 id="第-38-章-web-安全"&gt;第 38 章 Web 安全&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;互联网是个丛林世界，到处都是想偷你数据、搞瘫你网站的黑客。作为前端工程师，不懂安全就像裸奔在黑客眼皮底下——后果不堪设想！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="381-xss-跨站脚本攻击"&gt;38.1 XSS 跨站脚本攻击&lt;/h2&gt;
&lt;h3 id="3811-xss-的原理攻击者在页面中注入恶意脚本"&gt;38.1.1 XSS 的原理：攻击者在页面中注入恶意脚本&lt;/h3&gt;
&lt;p&gt;XSS 的全称是 &lt;strong&gt;Cross-Site Scripting&lt;/strong&gt;（跨站脚本攻击），简称 XSS。为啥不叫 CSS？因为 CSS 已经被层叠样式表（Cascading Style Sheets）占用了，所以安全圈约定俗成用 XSS。&lt;/p&gt;</description></item><item><title>第38章：系统安全加固</title><link>https://before80.github.io/prgms/linux/firewall_safe/Chapter-38-System-Security-Hardening/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/firewall_safe/Chapter-38-System-Security-Hardening/</guid><description>&lt;h1 id="第三十八章系统安全加固"&gt;第三十八章：系统安全加固&lt;/h1&gt;
&lt;p&gt;服务器上线后，第一件事是什么？改密码？装软件？不，是安全加固。&lt;/p&gt;
&lt;p&gt;想象一下：你买了一套房子，结果门锁是出厂默认密码，窗户没关，地下室入口大开——你会直接住进去吗？服务器也是一个道理。&lt;/p&gt;</description></item><item><title>第38章 创建型模式</title><link>https://before80.github.io/prgms/go/basic/Chapter-38-Creational-Patterns/</link><pubDate>Mon, 23 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/basic/Chapter-38-Creational-Patterns/</guid><description>&lt;h1 id="第38章-创建型模式"&gt;第38章 创建型模式&lt;/h1&gt;
&lt;h2 id="381-单例模式"&gt;38.1 单例模式&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;👑 &lt;strong&gt;单例模式&lt;/strong&gt;大概是所有设计模式中最&amp;quot;简单粗暴&amp;quot;的一个——一个类只能有一个实例，并且要提供一个全局访问点。这听起来很简单，但实现一个&lt;strong&gt;线程安全&lt;/strong&gt;、&lt;strong&gt;延迟加载&lt;/strong&gt;、&lt;strong&gt;高性能&lt;/strong&gt;的单例，可没那么容易！&lt;/p&gt;</description></item><item><title>第39章 单元测试——代码质量的第一道防线</title><link>https://before80.github.io/prgms/Java/basic/Chapter-39-unit-testing/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-39-unit-testing/</guid><description>&lt;h1 id="第三十九章-单元测试代码质量的第一道防线"&gt;第三十九章 单元测试——代码质量的第一道防线&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;测试是活着代码的呼吸。没测试的代码，就像没系安全带的司机——技术再好也让人捏把汗。&amp;rdquo;&lt;/p&gt;</description></item><item><title>第39章：数据库访问——database/sql</title><link>https://before80.github.io/prgms/go/std/Chapter-39-database/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-39-database/</guid><description>&lt;h1 id="第39章数据库访问databasesql"&gt;第39章：数据库访问——database/sql&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;程序员的三大难题：缓存失效、命名、再加一个分布式事务——等等，我忘了我还在学怎么查数据库。&amp;rdquo; ——某位不愿透露姓名的Gopher&lt;/p&gt;</description></item><item><title>第39章 性能优化——让代码跑得比兔子还快</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-39-Performance-Optimization/</link><pubDate>Sun, 29 Mar 2026 21:03:00 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-39-Performance-Optimization/</guid><description>&lt;h1 id="第39章-性能优化让代码跑得比兔子还快"&gt;第39章 性能优化——让代码跑得比兔子还快&lt;/h1&gt;
&lt;h2 id="391-性能优化的核心哲学先测量后优化"&gt;39.1 性能优化的核心哲学：先测量，后优化&lt;/h2&gt;
&lt;h3 id="为什么要先测量"&gt;为什么要&amp;quot;先测量&amp;quot;？&lt;/h3&gt;
&lt;p&gt;江湖上流传着一个古老的传说：&lt;strong&gt;&amp;ldquo;过早优化是万恶之源。&amp;rdquo;&lt;/strong&gt; 这句话据说是计算机之父Donald Knuth说的，但就像很多名言一样，原文是什么已经不重要了，反正大家都拿它当挡箭牌。&lt;/p&gt;</description></item><item><title>第39章 UI组件实现</title><link>https://before80.github.io/prgms/CSS/basic/Chapter-39-UI-Components/</link><pubDate>Fri, 27 Mar 2026 16:53:00 +0800</pubDate><guid>https://before80.github.io/prgms/CSS/basic/Chapter-39-UI-Components/</guid><description>&lt;h1 id="第三十九章ui-组件实现"&gt;第三十九章：UI 组件实现&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;用纯CSS实现常见UI组件，不依赖任何库！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="391-按钮"&gt;39.1 按钮&lt;/h2&gt;
&lt;h3 id="3911-五状态"&gt;39.1.1 五状态&lt;/h3&gt;
&lt;p&gt;按钮是网页最基础的交互元素。一个正经的按钮得学会看人脸色——什么时候能点，什么时候装死，什么时候让人按不动。&lt;/p&gt;</description></item><item><title>第 39 章 性能优化</title><link>https://before80.github.io/prgms/Js/basic/Chapter-39-performance-optimization/</link><pubDate>Tue, 24 Mar 2026 22:08:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/basic/Chapter-39-performance-optimization/</guid><description>&lt;h1 id="第-39-章-性能优化"&gt;第 39 章 性能优化&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;网站加载慢？页面卡顿？用户等得不耐烦跑了？性能优化就是让网站&amp;quot;飞起来&amp;quot;的秘诀！让我们一起来拯救那些慢吞吞的网页吧！&lt;/p&gt;</description></item><item><title>第39章：Web 服务器基础</title><link>https://before80.github.io/prgms/linux/web_service/Chapter-39-Web-Server-Fundamentals/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/web_service/Chapter-39-Web-Server-Fundamentals/</guid><description>&lt;h1 id="第三十九章web-服务器基础"&gt;第三十九章：Web 服务器基础&lt;/h1&gt;
&lt;p&gt;你每天都在用Web，但你真的知道Web是怎么工作的吗？&lt;/p&gt;
&lt;p&gt;你在浏览器地址栏输入&lt;code&gt;www.baidu.com&lt;/code&gt;，回车，网页就出现了。这中间发生了什么？HTTP是什么？HTTPS和HTTP有什么区别？Web服务器又是怎么接收请求、返回页面的？&lt;/p&gt;</description></item><item><title>第39章 结构型模式</title><link>https://before80.github.io/prgms/go/basic/Chapter-39-Structural-Patterns/</link><pubDate>Mon, 23 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/basic/Chapter-39-Structural-Patterns/</guid><description>&lt;h1 id="第39章-结构型模式"&gt;第39章 结构型模式&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本章我们会看到代码世界里的&amp;quot;万能转换头&amp;quot;——适配器模式。就像你出国旅行时那个神奇的转换插头，不管你带的是什么电器，不管插座是什么形状，插上去都能用。这就是适配器的魅力：让本不兼容的接口，突然之间就能愉快地一起工作了。&lt;/p&gt;</description></item><item><title>第40章 Git 版本控制——代码的时光机</title><link>https://before80.github.io/prgms/Java/basic/Chapter-40-git/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-40-git/</guid><description>&lt;h1 id="第四十章-git-版本控制代码的时光机"&gt;第四十章 Git 版本控制——代码的时光机&lt;/h1&gt;
&lt;p&gt;
 &lt;img src="https://git-scm.com/images/branching-illustration@2x.png"
 alt="Git 工作流程图"
 
 /&gt;
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;代码写崩了怎么办？——还好我有 Git 这个后悔药。&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;你有没有过这样的经历：凌晨三点，写了八百行代码，一运行，满屏红字。你深吸一口气，Ctrl+Z 撤销了&amp;hellip;一步。然后电脑卡了，自动关机了，代码没了。那一刻，感觉整个世界都崩塌了。&lt;/p&gt;</description></item><item><title>第 40 章：运行时信息——runtime 包</title><link>https://before80.github.io/prgms/go/std/Chapter-40-runtime/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-40-runtime/</guid><description>&lt;h1 id="第-40-章运行时信息runtime-包"&gt;第 40 章：运行时信息——runtime 包&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Go 的 runtime 就像是那个默默在后台辛勤工作的行政助理——你很少注意到它，但没了它，整个办公室就得停摆。&amp;rdquo;&lt;/p&gt;</description></item><item><title>第40章 软件工程实践</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-40-Software-Engineering/</link><pubDate>Sun, 29 Mar 2026 21:03:00 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-40-Software-Engineering/</guid><description>&lt;h1 id="第40章-软件工程实践"&gt;第40章 软件工程实践&lt;/h1&gt;
&lt;p&gt;欢迎来到软件工程的江湖！如果说前面的章节教你的是&amp;quot;如何用C++说话&amp;quot;，那这一章就是教你&amp;quot;如何在团队中优雅地合作、如何让代码长期健康活下去&amp;quot;的艺术。&lt;/p&gt;</description></item><item><title>第40章：Nginx 深入详解</title><link>https://before80.github.io/prgms/linux/web_service/Chapter-40-Nginx-In-Depth/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/web_service/Chapter-40-Nginx-In-Depth/</guid><description>&lt;h1 id="第四十章nginx-深入详解"&gt;第四十章：Nginx 深入详解&lt;/h1&gt;
&lt;p&gt;Nginx（发音&amp;quot;Engine X&amp;quot;，不是&amp;quot;恩ginx&amp;quot;或&amp;quot;恩记克斯&amp;quot;）是世界上最流行的Web服务器之一。它以高性能、高并发、低资源消耗著称，全球约35%的网站使用Nginx。可以说，Nginx就是Web服务器界的特斯拉——速度快、性能强、身材苗条（内存占用极低）。&lt;/p&gt;</description></item><item><title>第40章 行为型模式</title><link>https://before80.github.io/prgms/go/basic/Chapter-40-Behavioral-Patterns/</link><pubDate>Mon, 23 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/basic/Chapter-40-Behavioral-Patterns/</guid><description>&lt;h1 id="第40章-行为型模式"&gt;第40章 行为型模式&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;如果说结构型模式是关于&amp;quot;对象的长相&amp;quot;，那么行为型模式就是关于&amp;quot;对象的举止&amp;quot;——它关注的是对象之间的通信、职责分配和算法封装。&lt;/p&gt;</description></item><item><title>第41章 并发模式</title><link>https://before80.github.io/prgms/go/basic/Chapter-41-Concurrency-Patterns/</link><pubDate>Mon, 23 Mar 2026 08:39:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/basic/Chapter-41-Concurrency-Patterns/</guid><description>&lt;h1 id="第41章-并发模式"&gt;第41章 并发模式&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;Go语言从诞生之初就以&amp;quot;并发&amp;quot;为核心理念 goroutine 和 channel 的组合让并发编程变得前所未有的简单和优雅。&lt;/p&gt;
&lt;p&gt;本章我们将探讨Go语言中常用的并发设计模式，这些模式能帮助你写出高效、可靠的并发程序。Go的并发哲学是：&lt;strong&gt;不要通过共享内存来通信，而是通过通信来共享内存&lt;/strong&gt;。&lt;/p&gt;</description></item><item><title>第41章 Java 初学者常见坑大全（按类别整理）</title><link>https://before80.github.io/prgms/Java/basic/Chapter-41-common-pitfalls/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-41-common-pitfalls/</guid><description>&lt;h1 id="第四十一章-java-初学者常见坑大全按类别整理"&gt;第四十一章 Java 初学者常见坑大全（按类别整理）&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Java 的坑，比你想的多；初学者的泪，比你想的咸。&amp;rdquo;&lt;/p&gt;
&lt;p&gt;本章汇集了 Java 初学者最容易踩的 100+ 个坑，按类别整理，配有完整可运行的代码示例。学完本章，你可以骄傲地说：&amp;ldquo;这些坑，我都踩过！&amp;rdquo;&lt;/p&gt;</description></item><item><title>第41章：日志系统——log 和 log/slog</title><link>https://before80.github.io/prgms/go/std/Chapter-41-logging/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-41-logging/</guid><description>&lt;h1 id="第41章日志系统log-和-logslog"&gt;第41章：日志系统——log 和 log/slog&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;章节导航&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;41.1-41.8：&lt;code&gt;log&lt;/code&gt; 包（古老但经典的日志选手）&lt;/li&gt;
&lt;li&gt;41.9-41.18：&lt;code&gt;log/slog&lt;/code&gt; 包（Go 1.21+ 结构化日志新贵）&lt;/li&gt;
&lt;li&gt;41.19-41.20：&lt;code&gt;expvar&lt;/code&gt; 包（默默奉献的指标暴露小能手）&lt;/li&gt;
&lt;li&gt;本章小结：知识点大复盘&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="411-log包解决什么问题"&gt;41.1 log包解决什么问题&lt;/h2&gt;
&lt;p&gt;想象一下这个场景：你写了一个 Web 服务，凌晨3点挂了。用户投诉电话打爆了你的手机，你却一脸懵逼——程序怎么挂的？最后一刻发生了什么？&lt;/p&gt;</description></item><item><title>第41章 C++游戏开发：从'Hello World'到'拯救公主'</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-41-Game-Development/</link><pubDate>Sun, 29 Mar 2026 21:03:00 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-41-Game-Development/</guid><description>&lt;h1 id="第41章-c游戏开发从hello-world到拯救公主"&gt;第41章 C++游戏开发：从&amp;quot;Hello World&amp;quot;到&amp;quot;拯救公主&amp;quot;&lt;/h1&gt;
&lt;h2 id="411-游戏开发概述为什么c是游戏开发者的真爱"&gt;41.1 游戏开发概述：为什么C++是游戏开发者的&amp;quot;真爱&amp;quot;&lt;/h2&gt;
&lt;p&gt;当你打开一款3A大作，看到屏幕上那个肌肉猛男正要跳下直升机时，你有没有想过：&lt;strong&gt;&amp;ldquo;这货是用什么语言写的？&amp;rdquo;&lt;/strong&gt; 答案大概率是——C++。&lt;/p&gt;</description></item><item><title>第41章：Apache</title><link>https://before80.github.io/prgms/linux/web_service/Chapter-41-Apache/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/web_service/Chapter-41-Apache/</guid><description>&lt;h1 id="第四十一章apache"&gt;第四十一章：Apache&lt;/h1&gt;
&lt;p&gt;Apache HTTP Server（俗称Apache）是世界上部署最广泛的Web服务器之一，资历比互联网还老——它1995年就诞生了，Nginx那时候还没出生。虽然近年来Nginx的份额在上升，但Apache凭借其丰富的功能和.htaccess的便利性（不用重载服务器就能改配置，WordPress用户爱死它了），仍然是很多场景的首选。&lt;/p&gt;</description></item><item><title>第42章 Java 编码规范与最佳实践</title><link>https://before80.github.io/prgms/Java/basic/Chapter-42-coding-standards/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-42-coding-standards/</guid><description>&lt;h1 id="第四十二章-java-编码规范与最佳实践"&gt;第四十二章 Java 编码规范与最佳实践&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;任何傻瓜都能写出计算机能理解的代码，而优秀的程序员写出的是人类能理解的代码。&amp;rdquo; —— Martin Fowler&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;想象一下：你打开一个开源项目，满屏都是 &lt;code&gt;a1&lt;/code&gt;、&lt;code&gt;b2&lt;/code&gt;、&lt;code&gt;getT()&lt;/code&gt; 这样的变量名——恭喜你，你中大奖了，这个项目的维护者可能是个外星人派来的卧底。编码规范听起来像是最无聊的话题，但相信我，没有规范的代码库就像没有交通规则的高速公路——迟早要出车祸。&lt;/p&gt;</description></item><item><title>第42章：Go 词法分析——go/token、go/scanner</title><link>https://before80.github.io/prgms/go/std/Chapter-42-go-toolchain/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-42-go-toolchain/</guid><description>&lt;h1 id="第42章go-词法分析gotokengoscanner"&gt;第42章：Go 词法分析——go/token、go/scanner&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;你有没有想过，Go 编译器是怎么&amp;quot;看懂&amp;quot;你写的代码的？它可不是盯着屏幕读小说的——它首先会把你的代码拆成一个个小小的&amp;quot;积木块&amp;quot;，然后告诉语法分析器：&amp;ldquo;嘿，这里有个标识符，那里有个加号，还有一对括号！&amp;ldquo;这个拆解的过程，就叫做&lt;strong&gt;词法分析&lt;/strong&gt;，而负责这项苦力活的两大功臣，就是 &lt;code&gt;go/token&lt;/code&gt; 和 &lt;code&gt;go/scanner&lt;/code&gt; 这对欢喜冤家。&lt;/p&gt;</description></item><item><title>第42章 网络编程——让程序'上网冲浪'</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-42-Network-Programming/</link><pubDate>Sun, 29 Mar 2026 21:03:00 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-42-Network-Programming/</guid><description>&lt;h1 id="第42章-网络编程让程序上网冲浪"&gt;第42章 网络编程——让程序&amp;quot;上网冲浪&amp;quot;&lt;/h1&gt;
&lt;p&gt;你知道吗？当你刷着微博、聊着微信、看着视频的时候，背后是一大堆程序员写的大量网络代码在疯狂运转。这些代码每天处理着数以亿计的数据包，把你的&amp;quot;想吃火锅&amp;quot;这条消息从你的手机传递到你朋友的手机上。而这一切的起点，可能就是今天我们要学的——&lt;strong&gt;网络编程&lt;/strong&gt;（Network Programming）。&lt;/p&gt;</description></item><item><title>第42章：LAMP/LEMP 环境搭建</title><link>https://before80.github.io/prgms/linux/web_service/Chapter-42-LAMP-LEMP-Environment/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/web_service/Chapter-42-LAMP-LEMP-Environment/</guid><description>&lt;h1 id="第四十二章lamplemp-环境搭建"&gt;第四十二章：LAMP/LEMP 环境搭建&lt;/h1&gt;
&lt;p&gt;LAMP和LEMP是搭建动态网站或Web应用的经典架构。L代表Linux操作系统，A/N是Apache/Nginx这两位&amp;quot;看门大爷&amp;quot;，M是MySQL/MariaDB数据库（数据仓库管理员），P是PHP/Python/Perl脚本语言（负责动态生成网页）。&lt;/p&gt;</description></item><item><title>第43章 Java 能做什么——各领域应用场景详解</title><link>https://before80.github.io/prgms/Java/basic/Chapter-43-use-cases/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-43-use-cases/</guid><description>&lt;h1 id="第四十三章-java-能做什么各领域应用场景详解"&gt;第四十三章 Java 能做什么——各领域应用场景详解&lt;/h1&gt;
&lt;p&gt;
 &lt;img src="https://via.placeholder.com/800x400?text=Java&amp;#43;Application&amp;#43;Scenarios"
 alt="Java应用场景"
 
 /&gt;
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;想象一下，Java就像IT界的&amp;quot;瑞士军刀&amp;quot;——不是最酷的，但不是万能的，而是&lt;strong&gt;什么都能干&lt;/strong&gt;的那种。本章我们就来扒一扒Java在各个领域是如何大显神通的。&lt;/p&gt;</description></item><item><title>第43章：Go 语法树——go/ast、go/parser</title><link>https://before80.github.io/prgms/go/std/Chapter-43-ast-parser/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-43-ast-parser/</guid><description>&lt;h1 id="第43章go-语法树goastgoparser"&gt;第43章：Go 语法树——go/ast、go/parser&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;ldquo;程序员最浪漫的事，不是写代码，而是让代码自己读懂自己。&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;当你写下一个 &lt;code&gt;fmt.Println(&amp;quot;Hello&amp;quot;)&lt;/code&gt;，Go 编译器默默把你的代码拆成一个个最小的语法单元，然后像搭积木一样把它们组装成一棵树。这棵树，就是抽象语法树（AST）。有了它，IDE 能给你自动补全，gofmt 能帮你格式化，静态分析工具能找出你代码里的 bug。这，就是 go/ast 和 go/parser 的魔法世界。&lt;/p&gt;</description></item><item><title>第43章 数据库编程——C++与数据的持久化爱恨情仇</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-43-Database-Programming/</link><pubDate>Sun, 29 Mar 2026 21:03:00 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-43-Database-Programming/</guid><description>&lt;h1 id="第43章-数据库编程c与数据的持久化爱恨情仇"&gt;第43章 数据库编程——C++与数据的持久化爱恨情仇&lt;/h1&gt;
&lt;h2 id="431-数据的终极归宿为什么要学数据库编程"&gt;43.1 数据的终极归宿——为什么要学数据库编程&lt;/h2&gt;
&lt;p&gt;想象一下这个场景：你写了一个C++程序，用户辛辛苦苦输入了10000条客户数据，结果程序一退出，数据全没了——就像你写了一篇万字长文，结果Word崩溃没保存，那种想把电脑从窗户扔出去的心情，懂的自然懂。&lt;/p&gt;</description></item><item><title>第43章：数据库基础</title><link>https://before80.github.io/prgms/linux/database/Chapter-43-Database-Basics/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/database/Chapter-43-Database-Basics/</guid><description>&lt;h1 id="第四十三章数据库基础"&gt;第四十三章：数据库基础&lt;/h1&gt;
&lt;h2 id="431-什么是数据库"&gt;43.1 什么是数据库？&lt;/h2&gt;
&lt;p&gt;想象一下，你有一个超级大的仓库，里面整整齐齐地摆放着无数个小盒子。每个盒子里都装着特定的东西——有的装衣服，有的装零食，有的装你的重要文件。然后，你有一个超级智能的机器人，它知道你把东西放在哪个盒子里，你一问它就能立刻帮你找到。&lt;/p&gt;</description></item><item><title>第43章：数据库基础</title><link>https://before80.github.io/prgms/linux/web_service/Chapter-43-Database-Basics/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/web_service/Chapter-43-Database-Basics/</guid><description>&lt;h1 id="第四十三章数据库基础"&gt;第四十三章：数据库基础&lt;/h1&gt;
&lt;h2 id="431-什么是数据库"&gt;43.1 什么是数据库？&lt;/h2&gt;
&lt;p&gt;想象一下，你有一个超级大的仓库，里面整整齐齐地摆放着无数个小盒子。每个盒子里都装着特定的东西——有的装衣服，有的装零食，有的装你的重要文件。然后，你有一个超级智能的机器人，它知道你把东西放在哪个盒子里，你一问它就能立刻帮你找到。&lt;/p&gt;</description></item><item><title>第44章 学习路径与成长建议</title><link>https://before80.github.io/prgms/Java/basic/Chapter-44-learning-path/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-44-learning-path/</guid><description>&lt;h1 id="第四十四章-学习路径与成长建议"&gt;第四十四章 学习路径与成长建议&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Talk is cheap. Show me the code.&amp;rdquo; — Linus Torvalds&lt;/p&gt;
&lt;p&gt;这句话程序员们天天挂嘴边，但问题是：&lt;strong&gt;代码谁都能show，关键是你得有货可show。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;恭喜你，拿起了Java这把&amp;quot;铁饭碗&amp;quot;级别的武器。不过，拿到武器和用好武器之间，隔着十万八千里的坑。今天咱们就来聊聊，从零开始学Java，到真正站稳脚跟，这条路该怎么走。&lt;/p&gt;</description></item><item><title>第44章：代码生成与检查——go/printer、go/format、go/doc、go/types、go/build</title><link>https://before80.github.io/prgms/go/std/Chapter-44-code-gen/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-44-code-gen/</guid><description>&lt;h1 id="第44章代码生成与检查goprintergoformatgodocgotypesgobuild"&gt;第44章：代码生成与检查——go/printer、go/format、go/doc、go/types、go/build&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;ldquo;写代码一时爽，代码审查火葬场？不存在的！Go语言的标准库自带了一整套&amp;rsquo;代码医生&amp;rsquo;工具，从语法树打印到类型检查，从文档提取到包信息查询，应有尽有。本章让我们一起揭开这些&amp;rsquo;代码手术刀&amp;rsquo;的神秘面纱。&amp;rdquo;&lt;/em&gt;&lt;/p&gt;</description></item><item><title>第44章 GUI编程：让C++穿上漂亮的外衣</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-44-GUI-Programming/</link><pubDate>Sun, 29 Mar 2026 21:03:00 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-44-GUI-Programming/</guid><description>&lt;h1 id="第44章-gui编程让c穿上漂亮的外衣"&gt;第44章 GUI编程：让C++穿上漂亮的外衣&lt;/h1&gt;
&lt;h2 id="441-gui编程前世今生从命令行到图形界面"&gt;44.1 GUI编程前世今生：从命令行到图形界面&lt;/h2&gt;
&lt;h3 id="那些年我们追过的命令行"&gt;那些年我们追过的命令行&lt;/h3&gt;
&lt;p&gt;想象一下1980年代的程序员：他们面对的是一个黑漆漆的屏幕，上面只有绿色的字符在闪烁。没有按钮可以点，没有窗口可以拖拽，一切都靠键盘敲命令。那个时候的程序员，大概做梦都在背命令参数吧。&lt;/p&gt;</description></item><item><title>第44章：MySQL/MariaDB</title><link>https://before80.github.io/prgms/linux/database/Chapter-44-MySQL-and-MariaDB/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/database/Chapter-44-MySQL-and-MariaDB/</guid><description>&lt;h1 id="第四十四章mysqlmariadb"&gt;第四十四章：MySQL/MariaDB&lt;/h1&gt;
&lt;h2 id="441-mysqlmariadb-简介"&gt;44.1 MySQL/MariaDB 简介&lt;/h2&gt;
&lt;h3 id="mysql开源数据库的扛把子"&gt;MySQL——开源数据库的&amp;quot;扛把子&amp;quot;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;MySQL&lt;/strong&gt;，江湖人称&amp;quot;闷声发大财&amp;quot;的典型代表。&lt;/p&gt;
&lt;p&gt;它有多厉害？&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;全球使用量排名第一的开源数据库&lt;/li&gt;
&lt;li&gt;Facebook、Twitter、YouTube、阿里巴巴、微信&amp;hellip;全在用&lt;/li&gt;
&lt;li&gt;&amp;ldquo;LAMP黄金搭档&amp;quot;的C位成员（Linux + Apache + MySQL + PHP）&lt;/li&gt;
&lt;li&gt;无数创业公司的第一选择&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;MySQL的故事，要从1995年说起&amp;hellip;&lt;/p&gt;</description></item><item><title>第45章 SQL 与数据库基础</title><link>https://before80.github.io/prgms/Java/basic/Chapter-45-sql-basics/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-45-sql-basics/</guid><description>&lt;h1 id="第四十五章-sql-与数据库基础"&gt;第四十五章 SQL 与数据库基础&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;在程序员的世界里，有两大终极拷问：&amp;ldquo;我的代码为什么跑不起来&amp;quot;和&amp;quot;我的数据去哪儿了&amp;rdquo;。前者靠debug，后者靠——你猜对了——数据库。而SQL，就是你和数据库之间的&amp;quot;翻译官&amp;quot;。&lt;/p&gt;</description></item><item><title>第45章：调试信息——debug/dwarf、debug/elf、debug/macho、debug/pe</title><link>https://before80.github.io/prgms/go/std/Chapter-45-debug/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-45-debug/</guid><description>&lt;h1 id="第45章调试信息debugdwarfdebugelfdebugmachodebugpe"&gt;第45章：调试信息——debug/dwarf、debug/elf、debug/macho、debug/pe&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;🎯 章节预告：编译好的 Go 程序像个神秘的&amp;quot;黑盒子&amp;quot;，运行起来出问题了怎么办？debug 包家族让你&amp;quot;透视&amp;quot;二进制文件，读取 DWARF 调试信息、解析 ELF/Mach-O/PE 格式、解读 Go 符号表。准备好了吗？让我们开启二进制世界的&amp;quot;X光&amp;quot;之旅！&lt;/p&gt;</description></item><item><title>第45章 嵌入式开发：C++的'螺丝刀与扳手'之旅</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-45-Embedded-Development/</link><pubDate>Sun, 29 Mar 2026 21:03:00 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-45-Embedded-Development/</guid><description>&lt;h1 id="第45章-嵌入式开发c的螺丝刀与扳手之旅"&gt;第45章 嵌入式开发：C++的&amp;quot;螺丝刀与扳手&amp;quot;之旅&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;🎯 章前语：你有没有想过，为什么你的微波炉不会&amp;quot;蓝屏死机&amp;quot;？为什么汽车的ECU能精确到毫秒级控制发动机？答案就藏在嵌入式系统里——而C++正是这场&amp;quot;微观世界冒险&amp;quot;中最靠谱的编程语言。&lt;/p&gt;</description></item><item><title>第45章：PostgreSQL</title><link>https://before80.github.io/prgms/linux/database/Chapter-45-PostgreSQL/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/database/Chapter-45-PostgreSQL/</guid><description>&lt;h1 id="第四十五章postgresql"&gt;第四十五章：PostgreSQL&lt;/h1&gt;
&lt;h2 id="451-postgresql-简介"&gt;45.1 PostgreSQL 简介&lt;/h2&gt;
&lt;h3 id="postgresql功能怪兽来袭"&gt;PostgreSQL——&amp;ldquo;功能怪兽&amp;quot;来袭！&lt;/h3&gt;
&lt;p&gt;如果说MySQL是个&lt;strong&gt;实用主义者&lt;/strong&gt;，那&lt;strong&gt;PostgreSQL&lt;/strong&gt;就是一个&lt;strong&gt;功能狂魔&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;它的口号是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&amp;ldquo;The world&amp;rsquo;s most advanced open source relational database&amp;rdquo;&lt;/strong&gt;
（世界上最先进的开源关系型数据库）&lt;/p&gt;</description></item><item><title>第46章 常用工具速查</title><link>https://before80.github.io/prgms/Java/basic/Chapter-46-toolkit/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-46-toolkit/</guid><description>&lt;h1 id="第四十六章-常用工具速查"&gt;第四十六章 常用工具速查&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;磨刀不误砍柴工，工欲善其事，必先利其器。作为一个 Java 开发者，手里头没几把趁手的兵器，都不好意思跟人说自己是写代码的。这一章咱们就来盘点一下 Java 开发中那些离不开的工具，从 IDE 到 JVM 调优，从压测到 API 调试，保证让你看完直呼&amp;quot;原来还能这么干&amp;quot;！&lt;/p&gt;</description></item><item><title>第 46 章：系统调用——syscall 包</title><link>https://before80.github.io/prgms/go/std/Chapter-46-syscall/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-46-syscall/</guid><description>&lt;h1 id="第-46-章系统调用syscall-包"&gt;第 46 章：系统调用——syscall 包&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;想象一下，你正在对操作系统说&amp;quot;嘿，能帮我打开这个文件吗？&amp;quot;——syscall 包就是翻译官，把你的 Go 代码翻译成操作系统能听懂的语言。&lt;/p&gt;</description></item><item><title>第46章 科学计算：C++的'数学家梦工厂'</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-46-Scientific-Computing/</link><pubDate>Sun, 29 Mar 2026 21:03:00 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-46-Scientific-Computing/</guid><description>&lt;h1 id="第46章-科学计算c的数学家梦工厂"&gt;第46章 科学计算：C++的&amp;quot;数学家梦工厂&amp;quot;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;🎯 章前语：你知道吗？天气预报、飞机设计、股票期权定价、核爆模拟——这些听起来高大上的东西，背后都是科学计算。而C++，就是那个在数学家和工程师之间&amp;quot;左右逢源&amp;quot;的硬核语言。它既有数学的优雅，又有机器的效率。难怪那些跑在超级计算机上的科学程序，十有八九都是C++写的。&lt;/p&gt;</description></item><item><title>第46章：Redis</title><link>https://before80.github.io/prgms/linux/database/Chapter-46-Redis/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/database/Chapter-46-Redis/</guid><description>&lt;h1 id="第四十六章redis"&gt;第四十六章：Redis&lt;/h1&gt;
&lt;h2 id="461-redis-简介"&gt;46.1 Redis 简介&lt;/h2&gt;
&lt;h3 id="redis内存数据库的速度之王"&gt;Redis——内存数据库的速度之王！&lt;/h3&gt;
&lt;p&gt;如果说MySQL是&lt;strong&gt;仓库&lt;/strong&gt;，那么Redis就是&lt;strong&gt;超级VIP保鲜柜&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;为什么这么说？&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;普通数据库（MySQL）：数据存在&lt;strong&gt;硬盘&lt;/strong&gt;上&lt;/li&gt;
&lt;li&gt;Redis：数据存在&lt;strong&gt;内存&lt;/strong&gt;里！&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这意味着什么？&lt;strong&gt;速度的碾压！&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>第47章 IDEA 进阶使用技巧</title><link>https://before80.github.io/prgms/Java/basic/Chapter-47-ide-usage/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-47-ide-usage/</guid><description>&lt;h1 id="第四十七章-idea-进阶使用技巧"&gt;第四十七章 IDEA 进阶使用技巧&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;你是否曾经对着屏幕发呆，心想：&amp;ldquo;这 IDEA 明明是个编辑器，为什么我用起来像个记事本？&amp;rdquo;
别慌，这一章我们一起把 IDEA 从&amp;quot;高级记事本&amp;quot;升级成&amp;quot;编码外骨骼&amp;quot;，让你的手指变成键盘上的舞者，让 bug 无处遁形。&lt;/p&gt;</description></item><item><title>第 47 章：插件与 CGO</title><link>https://before80.github.io/prgms/go/std/Chapter-47-plugin-cgo/</link><pubDate>Mon, 30 Mar 2026 13:43:00 +0800</pubDate><guid>https://before80.github.io/prgms/go/std/Chapter-47-plugin-cgo/</guid><description>&lt;h1 id="第-47-章插件与-cgo"&gt;第 47 章：插件与 CGO&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;程序写完就固定了？不，我们可以让它在运行时还能加载新代码——这就是插件的魔法。&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;什么？你想把配置文件直接塞进二进制里？embed 说：我全都要。&amp;rdquo;&lt;/p&gt;</description></item><item><title>第47章 C++的未来展望：一场永无止境的进化之旅</title><link>https://before80.github.io/prgms/Cpp/basic/Chapter-47-Future-Outlook/</link><pubDate>Sun, 29 Mar 2026 21:03:00 +0800</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-47-Future-Outlook/</guid><description>&lt;h1 id="第47章-c的未来展望一场永无止境的进化之旅"&gt;第47章 C++的未来展望：一场永无止境的进化之旅&lt;/h1&gt;
&lt;p&gt;想象一下，你是一个中世纪城堡里的铁匠，终日敲敲打打，打造各种神兵利器。某天，你听说隔壁王国发布了一把新剑——比上一把更锋利、更轻便、还能自动切割敌人。你心想：&amp;ldquo;我这把剑才打了三十年，还没过时吧？&amp;ldquo;于是你继续敲敲打打。&lt;/p&gt;</description></item><item><title>第47章：消息队列</title><link>https://before80.github.io/prgms/linux/database/Chapter-47-Message-Queue/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/database/Chapter-47-Message-Queue/</guid><description>&lt;h1 id="第四十七章消息队列"&gt;第四十七章：消息队列&lt;/h1&gt;
&lt;h2 id="471-消息队列简介"&gt;47.1 消息队列简介&lt;/h2&gt;
&lt;h3 id="消息队列是什么"&gt;消息队列是什么？&lt;/h3&gt;
&lt;p&gt;想象一下这个场景：&lt;/p&gt;
&lt;p&gt;你去快餐店点餐：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;没有消息队列&lt;/strong&gt;：你站在柜台前等，厨师做完你的汉堡，你才能走。后面的人都在排队等。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;有消息队列&lt;/strong&gt;：你点完餐，拿了号码牌，找个位置坐下玩手机。厨师做完你的汉堡，叫你的号，你来取。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;消息队列&lt;/strong&gt;就是这个&amp;quot;号码牌系统&amp;quot;！它让&lt;strong&gt;发送方&lt;/strong&gt;和&lt;strong&gt;接收方&lt;/strong&gt;不用一直互相等待，可以异步处理。&lt;/p&gt;</description></item><item><title>第48章 设计模式——程序员的套路</title><link>https://before80.github.io/prgms/Java/basic/Chapter-48-design-patterns/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-48-design-patterns/</guid><description>&lt;h1 id="第四十八章-设计模式程序员的套路"&gt;第四十八章 设计模式——程序员的套路&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;程序员的代码写得像迷宫？设计模式就是那张地图。&amp;rdquo; ——某不愿透露姓名的架构师&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;设计模式&lt;/strong&gt;（Design Pattern）是什么？简单来说，就是前辈程序员们踩过无数坑之后，总结出来的「最佳套路」。你可以把它们理解成烹饪里的菜谱——同样的食材，大厨用菜谱做出来的叫米其林，你直接下锅炒出来的叫黑暗料理。&lt;/p&gt;</description></item><item><title>第48章：容器基础概念</title><link>https://before80.github.io/prgms/linux/container/Chapter-48-Container-Basics/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/container/Chapter-48-Container-Basics/</guid><description>&lt;h1 id="第四十八章容器基础概念"&gt;第四十八章：容器基础概念&lt;/h1&gt;
&lt;h2 id="481-什么是容器"&gt;48.1 什么是容器？&lt;/h2&gt;
&lt;h3 id="容器就是个带锁的集装箱"&gt;容器？就是个&amp;quot;带锁的集装箱&amp;quot;！&lt;/h3&gt;
&lt;p&gt;想象一下这个场景：&lt;/p&gt;
&lt;p&gt;你是个搬家公司的员工，每天要帮客户搬各种东西：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;有的客户要搬冰箱（很重）&lt;/li&gt;
&lt;li&gt;有的客户要搬电脑（很娇气）&lt;/li&gt;
&lt;li&gt;有的客户要搬热带鱼（需要特定水温）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以前你会怎么做？每次搬东西都要重新打包、重新准备工具？&lt;/p&gt;</description></item><item><title>第49章 常见术语表</title><link>https://before80.github.io/prgms/Java/basic/Chapter-49-glossary/</link><pubDate>Mon, 30 Mar 2026 14:33:56 +0800</pubDate><guid>https://before80.github.io/prgms/Java/basic/Chapter-49-glossary/</guid><description>&lt;h1 id="第四十九章-常见术语表"&gt;第四十九章 常见术语表&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本章整理了 Java 学习与开发中最常用的专业术语，按类别分组，方便查阅。配套视频持续更新中，建议收藏！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="491-java-基础术语"&gt;49.1 Java 基础术语&lt;/h2&gt;
&lt;h3 id="jdkjava-development-kit"&gt;JDK（Java Development Kit）&lt;/h3&gt;
&lt;p&gt;Java 开发工具包，写代码的人离不开它。包含了编译器、调试器、JRE，还有一堆命令行工具。没有它，Java 代码就是一堆天书。形象地说，JDK 就是厨师的整套厨具，没有锅碗瓢盆怎么做饭？&lt;/p&gt;</description></item><item><title>第49章：Docker 入门</title><link>https://before80.github.io/prgms/linux/container/Chapter-49-Docker-Basics/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/container/Chapter-49-Docker-Basics/</guid><description>&lt;h1 id="第四十九章docker-入门"&gt;第四十九章：Docker 入门&lt;/h1&gt;
&lt;h2 id="491-docker-安装"&gt;49.1 Docker 安装&lt;/h2&gt;
&lt;h3 id="docker安装前的准备"&gt;Docker安装前的准备&lt;/h3&gt;
&lt;p&gt;在安装Docker之前，我们先了解一下Docker的版本：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Docker有两个版本：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Docker CE（Community Edition）&lt;/strong&gt;：社区版，免费开源&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Docker EE（Enterprise Edition）&lt;/strong&gt;：企业版，付费功能&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我们学习用社区版就够了！&lt;/p&gt;</description></item><item><title>第50章：Docker 进阶</title><link>https://before80.github.io/prgms/linux/container/Chapter-50-Docker-Advanced/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/container/Chapter-50-Docker-Advanced/</guid><description>&lt;h1 id="第五十章docker-进阶"&gt;第五十章：Docker 进阶&lt;/h1&gt;
&lt;h2 id="501-镜像优化"&gt;50.1 镜像优化&lt;/h2&gt;
&lt;h3 id="为什么要优化镜像"&gt;为什么要优化镜像？&lt;/h3&gt;
&lt;p&gt;镜像太大会有这些问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;拉取慢&lt;/strong&gt;：大镜像传输时间长&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;占用磁盘&lt;/strong&gt;：服务器磁盘空间有限&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;构建缓存效率低&lt;/strong&gt;：大镜像占用更多缓存&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;启动慢&lt;/strong&gt;：镜像大，加载时间长&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;优化原则：能省则省，但不能省核心功能！&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>第51章：Containerd 与 Podman</title><link>https://before80.github.io/prgms/linux/container/Chapter-51-Containerd-and-Podman/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/container/Chapter-51-Containerd-and-Podman/</guid><description>&lt;h1 id="第五十一章containerd-与-podman"&gt;第五十一章：Containerd 与 Podman&lt;/h1&gt;
&lt;h2 id="511-containerd-简介"&gt;51.1 Containerd 简介&lt;/h2&gt;
&lt;h3 id="containerd是什么"&gt;Containerd是什么？&lt;/h3&gt;
&lt;p&gt;如果说Docker是一个&amp;quot;全能管家&amp;quot;，那&lt;strong&gt;Containerd&lt;/strong&gt;就是管家的&amp;quot;专业部门&amp;quot;——专门负责容器生命周期的管理。&lt;/p&gt;</description></item><item><title>第52章：Kubernetes</title><link>https://before80.github.io/prgms/linux/container/Chapter-52-Kubernetes/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/container/Chapter-52-Kubernetes/</guid><description>&lt;h1 id="第五十二章kubernetes"&gt;第五十二章：Kubernetes&lt;/h1&gt;
&lt;h2 id="521-kubernetes-简介"&gt;52.1 Kubernetes 简介&lt;/h2&gt;
&lt;h3 id="kubernetes是什么"&gt;Kubernetes是什么？&lt;/h3&gt;
&lt;p&gt;如果说Docker是&lt;strong&gt;集装箱&lt;/strong&gt;，那Kubernetes就是&lt;strong&gt;超级港口管理系统&lt;/strong&gt;！&lt;/p&gt;
&lt;p&gt;一个集装箱好管理，但如果有一万个集装箱呢？&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;谁来处理这些集装箱？&lt;/li&gt;
&lt;li&gt;如果某个机器坏了，集装箱怎么办？&lt;/li&gt;
&lt;li&gt;怎么让集装箱均匀分布？&lt;/li&gt;
&lt;li&gt;怎么升级集装箱里的应用？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Kubernetes&lt;/strong&gt; 就是来解决这些问题的！&lt;/p&gt;</description></item><item><title>第53章：Bash 脚本基础</title><link>https://before80.github.io/prgms/linux/shell/Chapter-53-Bash-Scripting-Basics/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/shell/Chapter-53-Bash-Scripting-Basics/</guid><description>&lt;h1 id="第五十三章bash-脚本基础"&gt;第五十三章：Bash 脚本基础&lt;/h1&gt;
&lt;h2 id="531-什么是-shell-脚本"&gt;53.1 什么是 Shell 脚本？&lt;/h2&gt;
&lt;p&gt;想象一下：你每天上班都要做一堆重复的事情——打开电脑、登录微信、打开邮箱、泡杯咖啡（这不是重复，这是仪式感）、检查任务列表……&lt;/p&gt;</description></item><item><title>第54章：Bash 脚本进阶</title><link>https://before80.github.io/prgms/linux/shell/Chapter-54-Bash-Scripting-Advanced/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/shell/Chapter-54-Bash-Scripting-Advanced/</guid><description>&lt;h1 id="第五十四章bash-脚本进阶"&gt;第五十四章：Bash 脚本进阶&lt;/h1&gt;
&lt;h2 id="541-字符串处理"&gt;54.1 字符串处理&lt;/h2&gt;
&lt;p&gt;Shell 脚本中最常用的数据类型就是字符串，让我们来掌握各种处理技巧！&lt;/p&gt;
&lt;h3 id="字符串基础操作"&gt;字符串基础操作&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#dcaeea"&gt;str&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;Hello World&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 获取字符串长度&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e5c07b"&gt;echo&lt;/span&gt; &lt;span style="color:#98c379"&gt;${#&lt;/span&gt;&lt;span style="color:#dcaeea"&gt;str&lt;/span&gt;&lt;span style="color:#98c379"&gt;}&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;# 11&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 截取子串&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e5c07b"&gt;echo&lt;/span&gt; &lt;span style="color:#98c379"&gt;${&lt;/span&gt;&lt;span style="color:#dcaeea"&gt;str&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt;&lt;span style="color:#dcaeea"&gt;0&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt;&lt;span style="color:#dcaeea"&gt;5&lt;/span&gt;&lt;span style="color:#98c379"&gt;}&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;# Hello（从索引0开始，截取5个字符）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e5c07b"&gt;echo&lt;/span&gt; &lt;span style="color:#98c379"&gt;${&lt;/span&gt;&lt;span style="color:#dcaeea"&gt;str&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt;&lt;span style="color:#dcaeea"&gt;6&lt;/span&gt;&lt;span style="color:#98c379"&gt;}&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;# World（从索引6到末尾）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e5c07b"&gt;echo&lt;/span&gt; &lt;span style="color:#98c379"&gt;${&lt;/span&gt;&lt;span style="color:#dcaeea"&gt;str&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:(-5)&lt;/span&gt;&lt;span style="color:#98c379"&gt;}&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;# World（负数索引，用括号更清晰）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 或者: echo ${str: -5} # 注意冒号后有空格，容易混淆&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 字符串拼接&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#dcaeea"&gt;str1&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;Hello&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#dcaeea"&gt;str2&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;World&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#dcaeea"&gt;result&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#dcaeea"&gt;$str1&lt;/span&gt;&lt;span style="color:#63c381"&gt; &lt;/span&gt;&lt;span style="color:#dcaeea"&gt;$str2&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e5c07b"&gt;echo&lt;/span&gt; &lt;span style="color:#dcaeea"&gt;$result&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;# Hello World&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="字符串替换"&gt;字符串替换&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;17
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#dcaeea"&gt;str&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;Hello World&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 替换第一个匹配&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e5c07b"&gt;echo&lt;/span&gt; &lt;span style="color:#98c379"&gt;${&lt;/span&gt;&lt;span style="color:#dcaeea"&gt;str&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;/World/Linux&lt;/span&gt;&lt;span style="color:#98c379"&gt;}&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;# Hello Linux&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 替换所有匹配&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e5c07b"&gt;echo&lt;/span&gt; &lt;span style="color:#98c379"&gt;${&lt;/span&gt;&lt;span style="color:#dcaeea"&gt;str&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;//o/O&lt;/span&gt;&lt;span style="color:#98c379"&gt;}&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;# HellO WOrld&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 替换开头匹配&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e5c07b"&gt;echo&lt;/span&gt; &lt;span style="color:#98c379"&gt;${&lt;/span&gt;&lt;span style="color:#dcaeea"&gt;str&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;/#Hello/Hi&lt;/span&gt;&lt;span style="color:#98c379"&gt;}&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;# Hi World&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 替换结尾匹配&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e5c07b"&gt;echo&lt;/span&gt; &lt;span style="color:#98c379"&gt;${&lt;/span&gt;&lt;span style="color:#dcaeea"&gt;str&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;/%World/Universe&lt;/span&gt;&lt;span style="color:#98c379"&gt;}&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;# Hello Universe&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 删除子串&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e5c07b"&gt;echo&lt;/span&gt; &lt;span style="color:#98c379"&gt;${&lt;/span&gt;&lt;span style="color:#dcaeea"&gt;str&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;/World&lt;/span&gt;&lt;span style="color:#98c379"&gt;}&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;# Hello （删除第一个 World）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e5c07b"&gt;echo&lt;/span&gt; &lt;span style="color:#98c379"&gt;${&lt;/span&gt;&lt;span style="color:#dcaeea"&gt;str&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;//o&lt;/span&gt;&lt;span style="color:#98c379"&gt;}&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;# Hell Wrld（删除所有 o）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="字符串大小写"&gt;字符串大小写&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#dcaeea"&gt;str&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;Hello World&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 转为大写（bash 4.0+）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e5c07b"&gt;echo&lt;/span&gt; &lt;span style="color:#98c379"&gt;${&lt;/span&gt;&lt;span style="color:#dcaeea"&gt;str&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;^^&lt;/span&gt;&lt;span style="color:#98c379"&gt;}&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;# HELLO WORLD&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 转为小写&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e5c07b"&gt;echo&lt;/span&gt; &lt;span style="color:#98c379"&gt;${&lt;/span&gt;&lt;span style="color:#dcaeea"&gt;str&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,,&lt;/span&gt;&lt;span style="color:#98c379"&gt;}&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;# hello world&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 首字母大写&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e5c07b"&gt;echo&lt;/span&gt; &lt;span style="color:#98c379"&gt;${&lt;/span&gt;&lt;span style="color:#dcaeea"&gt;str&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;^&lt;/span&gt;&lt;span style="color:#98c379"&gt;}&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;# Hello world&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 模式转换&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e5c07b"&gt;echo&lt;/span&gt; &lt;span style="color:#98c379"&gt;${&lt;/span&gt;&lt;span style="color:#dcaeea"&gt;str&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;^^[aeiou]&lt;/span&gt;&lt;span style="color:#98c379"&gt;}&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;# HEllO WOrld（只转换元音）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="字符串分割"&gt;字符串分割&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 按分隔符分割&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#dcaeea"&gt;email&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;user@example.com&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#dcaeea"&gt;IFS&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;@&amp;#39;&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;read&lt;/span&gt; -r user domain &lt;span style="color:#54b1c7"&gt;&amp;lt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style="color:#63c381"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#dcaeea"&gt;$email&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e5c07b"&gt;echo&lt;/span&gt; &lt;span style="color:#63c381"&gt;&amp;#34;用户: &lt;/span&gt;&lt;span style="color:#dcaeea"&gt;$user&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;# user&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e5c07b"&gt;echo&lt;/span&gt; &lt;span style="color:#63c381"&gt;&amp;#34;域名: &lt;/span&gt;&lt;span style="color:#dcaeea"&gt;$domain&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;# example.com&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 分割路径&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#dcaeea"&gt;path&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;/home/user/documents/file.txt&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#dcaeea"&gt;IFS&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;/&amp;#39;&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;read&lt;/span&gt; -ra parts &lt;span style="color:#54b1c7"&gt;&amp;lt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style="color:#63c381"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#dcaeea"&gt;$path&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e5c07b"&gt;echo&lt;/span&gt; &lt;span style="color:#63c381"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#98c379"&gt;${&lt;/span&gt;&lt;span style="color:#dcaeea"&gt;parts&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;[-1]&lt;/span&gt;&lt;span style="color:#98c379"&gt;}&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;# file.txt（最后一部分）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e5c07b"&gt;echo&lt;/span&gt; &lt;span style="color:#63c381"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#98c379"&gt;${&lt;/span&gt;&lt;span style="color:#dcaeea"&gt;parts&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;[-2]&lt;/span&gt;&lt;span style="color:#98c379"&gt;}&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;# documents&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 读取每一行&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e5c07b"&gt;echo&lt;/span&gt; -e &lt;span style="color:#63c381"&gt;&amp;#34;line1\nline2\nline3&amp;#34;&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;|&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;while&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;read&lt;/span&gt; -r line&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e5c07b"&gt;echo&lt;/span&gt; &lt;span style="color:#63c381"&gt;&amp;#34;行: &lt;/span&gt;&lt;span style="color:#dcaeea"&gt;$line&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="字符串去空白"&gt;字符串去空白&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;17
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;18
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#dcaeea"&gt;str&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34; 前后有空格 &amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 去开头空格&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e5c07b"&gt;echo&lt;/span&gt; &lt;span style="color:#63c381"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#98c379"&gt;${&lt;/span&gt;&lt;span style="color:#dcaeea"&gt;str&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;#&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#98c379"&gt;${&lt;/span&gt;&lt;span style="color:#dcaeea"&gt;str&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;%%[![:&lt;/span&gt;&lt;span style="color:#dcaeea"&gt;space&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:]]*&lt;/span&gt;&lt;span style="color:#98c379"&gt;}&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#98c379"&gt;}&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;# &amp;#34;前后有空格 &amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 去结尾空格&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e5c07b"&gt;echo&lt;/span&gt; &lt;span style="color:#63c381"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#98c379"&gt;${&lt;/span&gt;&lt;span style="color:#dcaeea"&gt;str&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;%&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#98c379"&gt;${&lt;/span&gt;&lt;span style="color:#dcaeea"&gt;str&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;##*[![:&lt;/span&gt;&lt;span style="color:#dcaeea"&gt;space&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:]]&lt;/span&gt;&lt;span style="color:#98c379"&gt;}&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#98c379"&gt;}&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;# &amp;#34; 前后有空格&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 去两端空格（bash 内置）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e5c07b"&gt;echo&lt;/span&gt; &lt;span style="color:#63c381"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#dcaeea"&gt;$str&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;|&lt;/span&gt; xargs
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 使用 trim 函数&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;trim&lt;span style="color:#54b1c7"&gt;()&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e5c07b"&gt;local&lt;/span&gt; &lt;span style="color:#dcaeea"&gt;var&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#dcaeea"&gt;$*&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#dcaeea"&gt;var&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#98c379"&gt;${&lt;/span&gt;&lt;span style="color:#dcaeea"&gt;var&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;#&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#98c379"&gt;${&lt;/span&gt;&lt;span style="color:#dcaeea"&gt;var&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;%%[![:&lt;/span&gt;&lt;span style="color:#dcaeea"&gt;space&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:]]*&lt;/span&gt;&lt;span style="color:#98c379"&gt;}&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#98c379"&gt;}&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#dcaeea"&gt;var&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#98c379"&gt;${&lt;/span&gt;&lt;span style="color:#dcaeea"&gt;var&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;%&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#98c379"&gt;${&lt;/span&gt;&lt;span style="color:#dcaeea"&gt;var&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;##*[![:&lt;/span&gt;&lt;span style="color:#dcaeea"&gt;space&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:]]&lt;/span&gt;&lt;span style="color:#98c379"&gt;}&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#98c379"&gt;}&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e5c07b"&gt;echo&lt;/span&gt; -n &lt;span style="color:#63c381"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#dcaeea"&gt;$var&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#54b1c7"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="542-正则表达式"&gt;54.2 正则表达式&lt;/h2&gt;
&lt;p&gt;正则表达式是文本处理的&amp;quot;瑞士军刀&amp;quot;，在 Shell 中经常配合 grep、sed、awk 使用。&lt;/p&gt;</description></item><item><title>第55章：Git 基础</title><link>https://before80.github.io/prgms/linux/version_ctrl/Chapter-55-Git-Basics/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/version_ctrl/Chapter-55-Git-Basics/</guid><description>&lt;h1 id="第五十五章git-基础"&gt;第五十五章：Git 基础&lt;/h1&gt;
&lt;h2 id="551-git-简介"&gt;55.1 Git 简介&lt;/h2&gt;
&lt;h3 id="什么是-git"&gt;什么是 Git？&lt;/h3&gt;
&lt;p&gt;想象一下：你写了一篇论文，每天改一点，改了30天。终于有一天，电脑蓝屏了，论文没了，只剩下一个礼拜前的版本。&lt;/p&gt;
&lt;p&gt;或者这样：你和同事一起写代码，他把你写的代码覆盖了，还没法恢复。&lt;/p&gt;</description></item><item><title>第56章：Git 进阶与远程协作</title><link>https://before80.github.io/prgms/linux/version_ctrl/Chapter-56-Git-Advanced/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/version_ctrl/Chapter-56-Git-Advanced/</guid><description>&lt;h1 id="第五十六章git-进阶与远程协作"&gt;第五十六章：Git 进阶与远程协作&lt;/h1&gt;
&lt;h2 id="561-分支管理"&gt;56.1 分支管理&lt;/h2&gt;
&lt;p&gt;分支是 Git 最强大的功能之一，让你能够&amp;quot;平行宇宙&amp;quot;般地开发！&lt;/p&gt;
&lt;h3 id="什么是分支"&gt;什么是分支？&lt;/h3&gt;
&lt;p&gt;想象一下：你正在开发 v2.0 版本，但 v1.0 突然发现了一个 bug。如果没有分支，你只能&amp;quot;先修 bug 再继续开发&amp;quot;或者&amp;quot;先开发再说&amp;quot;。&lt;/p&gt;</description></item><item><title>第57章：系统监控</title><link>https://before80.github.io/prgms/linux/monitor_log/Chapter-57-System-Monitoring/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/monitor_log/Chapter-57-System-Monitoring/</guid><description>&lt;h1 id="第五十七章系统监控"&gt;第五十七章：系统监控&lt;/h1&gt;
&lt;h2 id="571-tophtop"&gt;57.1 top/htop&lt;/h2&gt;
&lt;h3 id="top-简介"&gt;top 简介&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;top&lt;/code&gt; 是 Linux 下最常用的实时系统监控工具，就像给你的服务器装了一个&amp;quot;实时仪表盘&amp;quot;。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 启动 top&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;top
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# top 界面解读&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;top - 10:30:15 up &lt;span style="color:#d19a66"&gt;15&lt;/span&gt; days, 2:33, &lt;span style="color:#d19a66"&gt;1&lt;/span&gt; user, load average: 0.52, 0.58, 0.59
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Tasks: &lt;span style="color:#d19a66"&gt;245&lt;/span&gt; total, &lt;span style="color:#d19a66"&gt;1&lt;/span&gt; running, &lt;span style="color:#d19a66"&gt;244&lt;/span&gt; sleeping, &lt;span style="color:#d19a66"&gt;0&lt;/span&gt; stopped, &lt;span style="color:#d19a66"&gt;0&lt;/span&gt; zombie
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;%Cpu&lt;span style="color:#54b1c7"&gt;(&lt;/span&gt;s&lt;span style="color:#54b1c7"&gt;)&lt;/span&gt;: 12.5 us, 3.2 sy, 0.0 ni, 82.1 id, 2.1 wa, 0.0 hi, 0.1 si, 0.0 st
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;MiB Mem : 16384.0 total, 4096.0 free, 8192.0 used, 4096.0 buff/cache
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 8192.0 avail Mem
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#d19a66"&gt;1&lt;/span&gt; root &lt;span style="color:#d19a66"&gt;20&lt;/span&gt; &lt;span style="color:#d19a66"&gt;0&lt;/span&gt; 168.0m 5.6m 4.2m S 0.0 0.0 0:05.23 systemd
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#d19a66"&gt;1234&lt;/span&gt; mysql &lt;span style="color:#d19a66"&gt;20&lt;/span&gt; &lt;span style="color:#d19a66"&gt;0&lt;/span&gt; 1234.5m 234.5m 0.0m S 5.2 1.4 2:34.56 mysqld
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#d19a66"&gt;5678&lt;/span&gt; nginx &lt;span style="color:#d19a66"&gt;20&lt;/span&gt; &lt;span style="color:#d19a66"&gt;0&lt;/span&gt; 89.2m 12.3m 8.1m S 0.5 0.1 1:23.45 nginx
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="常用交互命令"&gt;常用交互命令&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;按键&lt;/th&gt;
 &lt;th&gt;说明&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;q&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;退出 top&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;h&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;帮助&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;显示所有 CPU 核心详情&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;P&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;按 CPU 使用率排序&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;M&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;按内存使用排序&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;T&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;按累计时间排序&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;k&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;杀死进程&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;r&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;修改进程优先级&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;z&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;切换彩色/单色显示&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;c&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;显示完整命令&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;f&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;设置显示字段&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="top-常用选项"&gt;top 常用选项&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;17
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 指定更新间隔（秒）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;top -d &lt;span style="color:#d19a66"&gt;5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 指定刷新次数&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;top -n &lt;span style="color:#d19a66"&gt;10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 指定用户&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;top -u mysql
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 显示特定进程&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;top -p &lt;span style="color:#d19a66"&gt;1234&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 显示线程&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;top -H
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 显示进程树&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;top -c -p &lt;span style="color:#76a9f9"&gt;$(&lt;/span&gt;pgrep -d &lt;span style="color:#98c379"&gt;&amp;#39;,&amp;#39;&lt;/span&gt; process_name&lt;span style="color:#76a9f9"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="htop增强版"&gt;htop（增强版）&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;htop&lt;/code&gt; 是 top 的升级版，界面更友好，支持鼠标操作：&lt;/p&gt;</description></item><item><title>第58章：日志管理</title><link>https://before80.github.io/prgms/linux/monitor_log/Chapter-58-Log-Management/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/monitor_log/Chapter-58-Log-Management/</guid><description>&lt;h1 id="第五十八章日志管理"&gt;第五十八章：日志管理&lt;/h1&gt;
&lt;h2 id="581-系统日志"&gt;58.1 系统日志&lt;/h2&gt;
&lt;h3 id="linux-日志体系"&gt;Linux 日志体系&lt;/h3&gt;
&lt;p&gt;Linux 系统有一套完整的日志体系，记录着系统运行的一切&amp;quot;蛛丝马迹&amp;quot;。&lt;/p&gt;
&lt;pre class="mermaid"&gt;graph LR
 A[应用程序] --&amp;gt; B[系统日志接口]
 B --&amp;gt; C[rsyslog]
 C --&amp;gt; D[日志文件]
 
 E[内核] --&amp;gt; F[journald]
 F --&amp;gt; G[journal]
 
 H[用户操作] --&amp;gt; I[wtmp&amp;lt;br/&amp;gt;last]
 I --&amp;gt; D&lt;/pre&gt;
&lt;h3 id="主要日志文件"&gt;主要日志文件&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;文件路径&lt;/th&gt;
 &lt;th&gt;内容&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/var/log/messages&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;系统主日志&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/var/log/syslog&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;系统日志（Debian/Ubuntu）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/var/log/secure&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;安全日志（认证相关）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/var/log/boot.log&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;启动日志&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/var/log/dmesg&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;内核消息&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/var/log/kern.log&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;内核日志&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/var/log/cron&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;定时任务日志&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/var/log/maillog&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;邮件日志&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="varlog-目录结构"&gt;/var/log 目录结构&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ls -la /var/log/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 常见日志文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/var/log/syslog &lt;span style="color:#8a93a5;font-style:italic"&gt;# 系统主要日志&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/var/log/auth.log &lt;span style="color:#8a93a5;font-style:italic"&gt;# 认证日志&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/var/log/nginx/ &lt;span style="color:#8a93a5;font-style:italic"&gt;# Nginx 日志目录&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/var/log/apache2/ &lt;span style="color:#8a93a5;font-style:italic"&gt;# Apache 日志目录&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/var/log/mysql/ &lt;span style="color:#8a93a5;font-style:italic"&gt;# MySQL 日志&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/var/log/httpd/ &lt;span style="color:#8a93a5;font-style:italic"&gt;# Apache 日志&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="日志轮转机制"&gt;日志轮转机制&lt;/h3&gt;
&lt;p&gt;Linux 使用 &lt;code&gt;logrotate&lt;/code&gt; 自动管理日志文件大小：&lt;/p&gt;</description></item><item><title>第59章：数据备份</title><link>https://before80.github.io/prgms/linux/bak_recover/Chapter-59-Data-Backup/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/bak_recover/Chapter-59-Data-Backup/</guid><description>&lt;h1 id="第五十九章数据备份"&gt;第五十九章：数据备份&lt;/h1&gt;
&lt;h2 id="591-tarrsync-备份"&gt;59.1 tar/rsync 备份&lt;/h2&gt;
&lt;h3 id="备份的重要性"&gt;备份的重要性&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;数据丢失的那一天，你才会意识到备份有多重要。&amp;rdquo;
—— 每一个经历过数据丢失的人&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre class="mermaid"&gt;graph LR
 A[数据] --&amp;gt; B{有备份?}
 B --&amp;gt;|是| C[恢复数据]
 B --&amp;gt;|否| D[欲哭无泪]
 C --&amp;gt; E[继续工作]
 D --&amp;gt; F[重新开始?]&lt;/pre&gt;
&lt;h3 id="tar-打包"&gt;tar 打包&lt;/h3&gt;
&lt;p&gt;tar 是 Linux 下最常用的打包工具，&amp;ldquo;tar&amp;rdquo; = &amp;ldquo;tape archive&amp;rdquo;（磁带归档）。&lt;/p&gt;</description></item><item><title>第60章：数据恢复</title><link>https://before80.github.io/prgms/linux/bak_recover/Chapter-60-Data-Recovery/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/bak_recover/Chapter-60-Data-Recovery/</guid><description>&lt;h1 id="第六十章数据恢复"&gt;第六十章：数据恢复&lt;/h1&gt;
&lt;h2 id="601-文件恢复"&gt;60.1 文件恢复&lt;/h2&gt;
&lt;h3 id="误删文件的黄金时间"&gt;误删文件的&amp;quot;黄金时间&amp;quot;&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;世界上最痛苦的事，不是文件丢了，而是文件丢了却不知道能恢复。&amp;rdquo;
—— 过来人的忠告&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre class="mermaid"&gt;graph LR
 A[发现误删] --&amp;gt; B{是否还在删除中?}
 B --&amp;gt;|刚删除| C[立即停止写入]
 B --&amp;gt;|已有一段时间| D[恢复难度增大]
 C --&amp;gt; E[查找文件]
 D --&amp;gt; F[使用恢复工具]
 E --&amp;gt; G[恢复成功?]
 G --&amp;gt;|是| H[🎉庆祝]
 G --&amp;gt;|否| I[尝试其他方法]
 I --&amp;gt; J[...]&lt;/pre&gt;
&lt;h3 id="恢复的前提条件"&gt;恢复的前提条件&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;关键：误删文件后，千万别往磁盘写入新数据！&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>第61章：Ansible 入门</title><link>https://before80.github.io/prgms/linux/auto_maintenance/Chapter-61-Ansible-Basics/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/auto_maintenance/Chapter-61-Ansible-Basics/</guid><description>&lt;h1 id="第六十一章ansible-入门"&gt;第六十一章：Ansible 入门&lt;/h1&gt;
&lt;h2 id="611-ansible-简介"&gt;61.1 Ansible 简介&lt;/h2&gt;
&lt;h3 id="什么是-ansible"&gt;什么是 Ansible？&lt;/h3&gt;
&lt;p&gt;想象一下：你有 100 台服务器，需要在每一台上安装 Nginx、更新配置文件、重启服务。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;手动操作&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;SSH 连接到第一台服务器&lt;/li&gt;
&lt;li&gt;执行安装命令&lt;/li&gt;
&lt;li&gt;修改配置文件&lt;/li&gt;
&lt;li&gt;重启服务&lt;/li&gt;
&lt;li&gt;重复以上步骤 99 次&amp;hellip;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;使用 Ansible&lt;/strong&gt;：&lt;/p&gt;</description></item><item><title>第62章：其他自动化工具</title><link>https://before80.github.io/prgms/linux/auto_maintenance/Chapter-62-Automation-Tools/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/auto_maintenance/Chapter-62-Automation-Tools/</guid><description>&lt;h1 id="第六十二章其他自动化工具"&gt;第六十二章：其他自动化工具&lt;/h1&gt;
&lt;h2 id="621-saltstack"&gt;62.1 SaltStack&lt;/h2&gt;
&lt;h3 id="saltstack-简介"&gt;SaltStack 简介&lt;/h3&gt;
&lt;p&gt;SaltStack（简称 Salt）是另一个强大的自动化工具，与 Ansible 有很多相似之处，但也有一些独特优势。&lt;/p&gt;
&lt;pre class="mermaid"&gt;graph LR
 A[Salt Master] --&amp;gt;|ZeroMQ| B[Minion 1]
 A --&amp;gt;|ZeroMQ| C[Minion 2]
 A --&amp;gt;|ZeroMQ| D[Minion N]&lt;/pre&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;特性&lt;/th&gt;
 &lt;th&gt;Ansible&lt;/th&gt;
 &lt;th&gt;SaltStack&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;通信&lt;/td&gt;
 &lt;td&gt;SSH&lt;/td&gt;
 &lt;td&gt;ZeroMQ/SSH&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;速度&lt;/td&gt;
 &lt;td&gt;较快&lt;/td&gt;
 &lt;td&gt;非常快（毫秒级）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Agent&lt;/td&gt;
 &lt;td&gt;无（SSH）&lt;/td&gt;
 &lt;td&gt;需要 Minion&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;并行执行&lt;/td&gt;
 &lt;td&gt;支持&lt;/td&gt;
 &lt;td&gt;支持（更高效）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;状态管理&lt;/td&gt;
 &lt;td&gt;模板&lt;/td&gt;
 &lt;td&gt;SLS 文件&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="saltstack-安装"&gt;SaltStack 安装&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# Master 安装（控制节点）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# CentOS/RHEL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo yum install salt-master salt-minion
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo systemctl &lt;span style="color:#e5c07b"&gt;enable&lt;/span&gt; salt-master salt-minion
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo systemctl start salt-master
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# Ubuntu/Debian&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt install salt-master salt-minion
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo systemctl &lt;span style="color:#e5c07b"&gt;enable&lt;/span&gt; salt-master salt-minion
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo systemctl start salt-master
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="minion-配置"&gt;Minion 配置&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# /etc/salt/minion&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;master: 192.168.1.100 &lt;span style="color:#8a93a5;font-style:italic"&gt;# Master 地址&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;minion_id: web-server-1 &lt;span style="color:#8a93a5;font-style:italic"&gt;# Minion ID&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;master_port: &lt;span style="color:#d19a66"&gt;4506&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;minion_port: &lt;span style="color:#d19a66"&gt;4505&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 启动 Minion&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo systemctl start salt-minion
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="master-配置"&gt;Master 配置&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# /etc/salt/master&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;interface: 0.0.0.0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;publish_port: &lt;span style="color:#d19a66"&gt;4505&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ret_port: &lt;span style="color:#d19a66"&gt;4506&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;worker_threads: &lt;span style="color:#d19a66"&gt;10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;file_roots:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; base:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - /srv/salt
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pillar_roots:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; base:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - /srv/pillar
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="salt-命令"&gt;Salt 命令&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;17
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 接受 Minion 密钥&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo salt-key -A
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 查看已接受的密钥&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo salt-key -L
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 测试 Minion 连通性&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo salt &lt;span style="color:#98c379"&gt;&amp;#39;*&amp;#39;&lt;/span&gt; test.ping
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 执行命令&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo salt &lt;span style="color:#98c379"&gt;&amp;#39;web-*&amp;#39;&lt;/span&gt; cmd.run &lt;span style="color:#63c381"&gt;&amp;#34;uptime&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 安装包&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo salt &lt;span style="color:#98c379"&gt;&amp;#39;db-*&amp;#39;&lt;/span&gt; pkg.install nginx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 复制文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo salt &lt;span style="color:#98c379"&gt;&amp;#39;web-*&amp;#39;&lt;/span&gt; cp.get_file salt://nginx/nginx.conf /etc/nginx/nginx.conf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="salt-statesls"&gt;Salt State（SLS）&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;17
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;18
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;19
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;20
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;21
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;22
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;23
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# /srv/salt/nginx/init.sls&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;nginx_install&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;pkg.installed&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#76a9f9"&gt;name&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#98c379"&gt;nginx&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;nginx_service&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;service.running&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#76a9f9"&gt;name&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#98c379"&gt;nginx&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#76a9f9"&gt;enable&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;True&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#76a9f9"&gt;require&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#76a9f9"&gt;pkg&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#98c379"&gt;nginx_install&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;nginx_config&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;file.managed&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#76a9f9"&gt;name&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#98c379"&gt;/etc/nginx/nginx.conf&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#76a9f9"&gt;source&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#98c379"&gt;salt://nginx/nginx.conf&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#76a9f9"&gt;template&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#98c379"&gt;jinja&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#76a9f9"&gt;require&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#76a9f9"&gt;pkg&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#98c379"&gt;nginx_install&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;service.running&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#76a9f9"&gt;name&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#98c379"&gt;nginx&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#76a9f9"&gt;watch&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#76a9f9"&gt;file&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#98c379"&gt;nginx_config&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="执行-state"&gt;执行 State&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 应用 State&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo salt &lt;span style="color:#98c379"&gt;&amp;#39;*&amp;#39;&lt;/span&gt; state.apply nginx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 高状态文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo salt &lt;span style="color:#98c379"&gt;&amp;#39;*&amp;#39;&lt;/span&gt; state.highstate
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 语法测试&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo salt &lt;span style="color:#98c379"&gt;&amp;#39;*&amp;#39;&lt;/span&gt; state.sls nginx &lt;span style="color:#dcaeea"&gt;test&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;True
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 查看差异&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo salt &lt;span style="color:#98c379"&gt;&amp;#39;*&amp;#39;&lt;/span&gt; state.show_highstate
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="salt-pillar"&gt;Salt Pillar&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# /srv/pillar/init.sls&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# pillar 数据，类似变量&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;mysql_root_password&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#63c381"&gt;&amp;#34;{{ pillar.get(&amp;#39;mysql_root_password&amp;#39;, &amp;#39;default_pass&amp;#39;) }}&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;app_version&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#d19a66"&gt;1.0.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# /srv/pillar/top.sls&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;base&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;&amp;#39;*&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#98c379"&gt;init&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;&amp;#39;db-*&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#98c379"&gt;database&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="salt-masterless"&gt;Salt Masterless&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 不需要 Master，在 Minion 本地执行&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;salt-call --local state.apply nginx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;salt-call --local state.highstate
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="622-puppet"&gt;62.2 Puppet&lt;/h2&gt;
&lt;h3 id="puppet-简介"&gt;Puppet 简介&lt;/h3&gt;
&lt;p&gt;Puppet 是老牌的配置管理工具，采用声明式 DSL，有完善的企业版。&lt;/p&gt;</description></item><item><title>第63章：负载均衡</title><link>https://before80.github.io/prgms/linux/load_balance_high_availability/Chapter-63-Load-Balancing/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/load_balance_high_availability/Chapter-63-Load-Balancing/</guid><description>&lt;h1 id="第六十三章负载均衡"&gt;第六十三章：负载均衡&lt;/h1&gt;
&lt;h2 id="631-nginx-负载均衡"&gt;63.1 Nginx 负载均衡&lt;/h2&gt;
&lt;h3 id="为什么需要负载均衡"&gt;为什么需要负载均衡？&lt;/h3&gt;
&lt;p&gt;想象一下：一家餐厅只有1个厨师，生意火爆后，1个厨师做不过来，客人等太久。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;解决方案&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;增加厨师数量（水平扩展）&lt;/li&gt;
&lt;li&gt;有人专门负责分配客人到不同厨师（负载均衡器）&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class="mermaid"&gt;graph LR
 A[用户1] --&amp;gt; LB[负载均衡器]
 B[用户2] --&amp;gt; LB
 C[用户3] --&amp;gt; LB
 LB --&amp;gt; S1[服务器1]
 LB --&amp;gt; S2[服务器2]
 LB --&amp;gt; S3[服务器3]&lt;/pre&gt;
&lt;h3 id="nginx-负载均衡配置"&gt;Nginx 负载均衡配置&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 安装 Nginx&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt install nginx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 配置负载均衡&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo nano /etc/nginx/conf.d/upstream.conf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;17
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;18
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;19
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;20
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# upstream 定义后端服务器池
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;upstream&lt;/span&gt; &lt;span style="color:#98c379"&gt;backend&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;# 1. 轮询（默认）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;server&lt;/span&gt; &lt;span style="color:#98c379"&gt;backend1.example.com&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;server&lt;/span&gt; &lt;span style="color:#98c379"&gt;backend2.example.com&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;server&lt;/span&gt; &lt;span style="color:#98c379"&gt;backend3.example.com&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 使用 upstream
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;server&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;listen&lt;/span&gt; &lt;span style="color:#d19a66"&gt;80&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;server_name&lt;/span&gt; &lt;span style="color:#98c379"&gt;myapp.com&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;location&lt;/span&gt; &lt;span style="color:#98c379"&gt;/&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;proxy_pass&lt;/span&gt; &lt;span style="color:#98c379"&gt;http://backend&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;proxy_set_header&lt;/span&gt; &lt;span style="color:#98c379"&gt;Host&lt;/span&gt; &lt;span style="color:#dcaeea"&gt;$host&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;proxy_set_header&lt;/span&gt; &lt;span style="color:#98c379"&gt;X-Real-IP&lt;/span&gt; &lt;span style="color:#dcaeea"&gt;$remote_addr&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;proxy_set_header&lt;/span&gt; &lt;span style="color:#98c379"&gt;X-Forwarded-For&lt;/span&gt; &lt;span style="color:#dcaeea"&gt;$proxy_add_x_forwarded_for&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="负载均衡算法"&gt;负载均衡算法&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;17
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;18
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;19
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;20
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;21
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;22
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;23
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;24
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;25
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;26
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;27
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;28
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;29
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;30
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;31
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;32
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;33
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;34
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;35
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;36
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 1. 轮询（Round Robin）- 默认
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;upstream&lt;/span&gt; &lt;span style="color:#98c379"&gt;backend&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;server&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;192.168.1.101&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;server&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;192.168.1.102&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;server&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;192.168.1.103&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 2. 加权轮询（Weighted Round Robin）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;upstream&lt;/span&gt; &lt;span style="color:#98c379"&gt;backend&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;server&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;192.168.1.101&lt;/span&gt; &lt;span style="color:#98c379"&gt;weight=5&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;# 接收5倍流量
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;server&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;192.168.1.102&lt;/span&gt; &lt;span style="color:#98c379"&gt;weight=3&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;server&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;192.168.1.103&lt;/span&gt; &lt;span style="color:#98c379"&gt;weight=2&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 3. IP 哈希（IP Hash）- 同一 IP 访问同一服务器
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;upstream&lt;/span&gt; &lt;span style="color:#98c379"&gt;backend&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;ip_hash&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;server&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;192.168.1.101&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;server&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;192.168.1.102&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;server&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;192.168.1.103&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 4. 最少连接（Least Connections）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;upstream&lt;/span&gt; &lt;span style="color:#98c379"&gt;backend&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;least_conn&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;server&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;192.168.1.101&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;server&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;192.168.1.102&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;server&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;192.168.1.103&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 5. 通用哈希（Hash）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;upstream&lt;/span&gt; &lt;span style="color:#98c379"&gt;backend&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;hash&lt;/span&gt; &lt;span style="color:#dcaeea"&gt;$request_uri&lt;/span&gt; &lt;span style="color:#98c379"&gt;consistent&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;server&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;192.168.1.101&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;server&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;192.168.1.102&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="健康检查"&gt;健康检查&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;upstream&lt;/span&gt; &lt;span style="color:#98c379"&gt;backend&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;server&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;192.168.1.101&lt;/span&gt; &lt;span style="color:#98c379"&gt;max_fails=3&lt;/span&gt; &lt;span style="color:#98c379"&gt;fail_timeout=30s&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;server&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;192.168.1.102&lt;/span&gt; &lt;span style="color:#98c379"&gt;max_fails=3&lt;/span&gt; &lt;span style="color:#98c379"&gt;fail_timeout=30s&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;server&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;192.168.1.103&lt;/span&gt; &lt;span style="color:#98c379"&gt;max_fails=3&lt;/span&gt; &lt;span style="color:#98c379"&gt;fail_timeout=30s&lt;/span&gt; &lt;span style="color:#98c379"&gt;down&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="完整配置示例"&gt;完整配置示例&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;17
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;18
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;19
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;20
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;21
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;22
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;23
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;24
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;25
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;26
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;27
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;28
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;29
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;30
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;31
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;32
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;33
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;34
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;35
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;36
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;37
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;38
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;39
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;40
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;41
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# /etc/nginx/conf.d/backend.conf
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;upstream&lt;/span&gt; &lt;span style="color:#98c379"&gt;backend_servers&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;least_conn&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;# 最少连接算法
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;server&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;192.168.1.101&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt;&lt;span style="color:#d19a66"&gt;8080&lt;/span&gt; &lt;span style="color:#98c379"&gt;weight=5&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;server&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;192.168.1.102&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt;&lt;span style="color:#d19a66"&gt;8080&lt;/span&gt; &lt;span style="color:#98c379"&gt;weight=3&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;server&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;192.168.1.103&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt;&lt;span style="color:#d19a66"&gt;8080&lt;/span&gt; &lt;span style="color:#98c379"&gt;weight=2&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;# 保持连接
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;keepalive&lt;/span&gt; &lt;span style="color:#d19a66"&gt;32&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;server&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;listen&lt;/span&gt; &lt;span style="color:#d19a66"&gt;80&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;server_name&lt;/span&gt; &lt;span style="color:#98c379"&gt;myapp.com&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;# 开启 gzip
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;gzip&lt;/span&gt; &lt;span style="color:#aa89ea;font-weight:bold"&gt;on&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;gzip_types&lt;/span&gt; &lt;span style="color:#98c379"&gt;text/plain&lt;/span&gt; &lt;span style="color:#98c379"&gt;application/json&lt;/span&gt; &lt;span style="color:#98c379"&gt;application/javascript&lt;/span&gt; &lt;span style="color:#98c379"&gt;text/css&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;location&lt;/span&gt; &lt;span style="color:#98c379"&gt;/&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;proxy_pass&lt;/span&gt; &lt;span style="color:#98c379"&gt;http://backend_servers&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;# 设置请求头
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;proxy_set_header&lt;/span&gt; &lt;span style="color:#98c379"&gt;Host&lt;/span&gt; &lt;span style="color:#dcaeea"&gt;$host&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;proxy_set_header&lt;/span&gt; &lt;span style="color:#98c379"&gt;X-Real-IP&lt;/span&gt; &lt;span style="color:#dcaeea"&gt;$remote_addr&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;proxy_set_header&lt;/span&gt; &lt;span style="color:#98c379"&gt;X-Forwarded-For&lt;/span&gt; &lt;span style="color:#dcaeea"&gt;$proxy_add_x_forwarded_for&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;proxy_set_header&lt;/span&gt; &lt;span style="color:#98c379"&gt;X-Forwarded-Proto&lt;/span&gt; &lt;span style="color:#dcaeea"&gt;$scheme&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;# 超时设置
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;proxy_connect_timeout&lt;/span&gt; &lt;span style="color:#98c379"&gt;60s&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;proxy_send_timeout&lt;/span&gt; &lt;span style="color:#98c379"&gt;60s&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;proxy_read_timeout&lt;/span&gt; &lt;span style="color:#98c379"&gt;60s&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;# 缓冲
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;proxy_buffering&lt;/span&gt; &lt;span style="color:#aa89ea;font-weight:bold"&gt;on&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;proxy_buffer_size&lt;/span&gt; &lt;span style="color:#d19a66"&gt;4k&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;proxy_buffers&lt;/span&gt; &lt;span style="color:#d19a66"&gt;8&lt;/span&gt; &lt;span style="color:#d19a66"&gt;4k&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="https-配置"&gt;HTTPS 配置&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;17
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;18
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;19
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;20
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;21
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;22
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;23
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;24
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;25
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;26
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;server&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;listen&lt;/span&gt; &lt;span style="color:#d19a66"&gt;443&lt;/span&gt; &lt;span style="color:#98c379"&gt;ssl&lt;/span&gt; &lt;span style="color:#98c379"&gt;http2&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;server_name&lt;/span&gt; &lt;span style="color:#98c379"&gt;myapp.com&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;ssl_certificate&lt;/span&gt; &lt;span style="color:#98c379"&gt;/etc/ssl/certs/myapp.crt&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;ssl_certificate_key&lt;/span&gt; &lt;span style="color:#98c379"&gt;/etc/ssl/private/myapp.key&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;ssl_protocols&lt;/span&gt; &lt;span style="color:#98c379"&gt;TLSv1.2&lt;/span&gt; &lt;span style="color:#98c379"&gt;TLSv1.3&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;ssl_ciphers&lt;/span&gt; &lt;span style="color:#98c379"&gt;HIGH:!aNULL:!MD5&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;ssl_prefer_server_ciphers&lt;/span&gt; &lt;span style="color:#aa89ea;font-weight:bold"&gt;on&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;location&lt;/span&gt; &lt;span style="color:#98c379"&gt;/&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;proxy_pass&lt;/span&gt; &lt;span style="color:#98c379"&gt;http://backend_servers&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;proxy_set_header&lt;/span&gt; &lt;span style="color:#98c379"&gt;Host&lt;/span&gt; &lt;span style="color:#dcaeea"&gt;$host&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;proxy_set_header&lt;/span&gt; &lt;span style="color:#98c379"&gt;X-Real-IP&lt;/span&gt; &lt;span style="color:#dcaeea"&gt;$remote_addr&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;proxy_set_header&lt;/span&gt; &lt;span style="color:#98c379"&gt;X-Forwarded-For&lt;/span&gt; &lt;span style="color:#dcaeea"&gt;$proxy_add_x_forwarded_for&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;proxy_set_header&lt;/span&gt; &lt;span style="color:#98c379"&gt;X-Forwarded-Proto&lt;/span&gt; &lt;span style="color:#dcaeea"&gt;$scheme&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# HTTP 重定向到 HTTPS
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;server&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;listen&lt;/span&gt; &lt;span style="color:#d19a66"&gt;80&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;server_name&lt;/span&gt; &lt;span style="color:#98c379"&gt;myapp.com&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;return&lt;/span&gt; &lt;span style="color:#d19a66"&gt;301&lt;/span&gt; &lt;span style="color:#98c379"&gt;https://&lt;/span&gt;&lt;span style="color:#dcaeea"&gt;$server_name$request_uri&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="632-haproxy"&gt;63.2 HAProxy&lt;/h2&gt;
&lt;p&gt;HAProxy 是专业的负载均衡器，性能极高，常用于大流量场景。&lt;/p&gt;</description></item><item><title>第64章：高可用</title><link>https://before80.github.io/prgms/linux/load_balance_high_availability/Chapter-64-High-Availability/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/load_balance_high_availability/Chapter-64-High-Availability/</guid><description>&lt;h1 id="第六十四章高可用"&gt;第六十四章：高可用&lt;/h1&gt;
&lt;h2 id="641-keepalived"&gt;64.1 Keepalived&lt;/h2&gt;
&lt;h3 id="什么是高可用"&gt;什么是高可用？&lt;/h3&gt;
&lt;p&gt;想象一下：你家的备用电源。当主电源停电时，备用电源自动接管，冰箱继续工作，空调继续运转，你甚至感觉不到停电了。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;高可用（High Availability，HA）&lt;/strong&gt; 就是给服务器配备&amp;quot;备用电源&amp;quot;！&lt;/p&gt;</description></item><item><title>第65章：阿里云</title><link>https://before80.github.io/prgms/linux/cloud_cal/Chapter-65-ALIYUN/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/cloud_cal/Chapter-65-ALIYUN/</guid><description>&lt;h1 id="第六十五章阿里云"&gt;第六十五章：阿里云&lt;/h1&gt;
&lt;h2 id="651-ecs-实例"&gt;65.1 ECS 实例&lt;/h2&gt;
&lt;h3 id="什么是-ecs"&gt;什么是 ECS？&lt;/h3&gt;
&lt;p&gt;ECS（Elastic Compute Service）是阿里云的弹性计算服务，说白了就是&amp;quot;云服务器&amp;quot;——你不用买服务器，直接在云上租一台来用。&lt;/p&gt;</description></item><item><title>第66章：AWS</title><link>https://before80.github.io/prgms/linux/cloud_cal/Chapter-66-AWS/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/cloud_cal/Chapter-66-AWS/</guid><description>&lt;h1 id="第六十六章aws"&gt;第六十六章：AWS&lt;/h1&gt;
&lt;h2 id="661-ec2"&gt;66.1 EC2&lt;/h2&gt;
&lt;h3 id="什么是-aws-ec2"&gt;什么是 AWS EC2？&lt;/h3&gt;
&lt;p&gt;EC2（Elastic Compute Cloud）是 AWS 的弹性计算服务，亚马逊云的&amp;quot;扛把子&amp;quot;。2006年 AWS 刚推出时，EC2 就是第一个正式商用的公有云服务，开创了整个云计算时代。&lt;/p&gt;</description></item><item><title>第67章：腾讯云</title><link>https://before80.github.io/prgms/linux/cloud_cal/Chapter-67-TencentCloud/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/cloud_cal/Chapter-67-TencentCloud/</guid><description>&lt;h1 id="第六十七章腾讯云"&gt;第六十七章：腾讯云&lt;/h1&gt;
&lt;h2 id="671-cvm"&gt;67.1 CVM&lt;/h2&gt;
&lt;h3 id="什么是腾讯云-cvm"&gt;什么是腾讯云 CVM？&lt;/h3&gt;
&lt;p&gt;CVM（Cloud Virtual Machine）是腾讯云的云服务器，和阿里云 ECS、AWS EC2 本质上是一样的——都是云端租服务器。&lt;/p&gt;
&lt;pre class="mermaid"&gt;graph LR
 A[用户] --&amp;gt; B[控制台]
 B --&amp;gt; C[CVM 实例]
 C --&amp;gt; D[操作系统]
 C --&amp;gt; E[数据盘]
 C --&amp;gt; F[网络]
 
 G[物理服务器] --&amp;gt; H[虚拟化层]
 H --&amp;gt; C
 H --&amp;gt; I[另一个CVM]&lt;/pre&gt;
&lt;h3 id="腾讯云-vs-阿里云-vs-aws"&gt;腾讯云 vs 阿里云 vs AWS&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;对比项&lt;/th&gt;
 &lt;th&gt;腾讯云&lt;/th&gt;
 &lt;th&gt;阿里云&lt;/th&gt;
 &lt;th&gt;AWS&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;云服务器&lt;/td&gt;
 &lt;td&gt;CVM&lt;/td&gt;
 &lt;td&gt;ECS&lt;/td&gt;
 &lt;td&gt;EC2&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;对象存储&lt;/td&gt;
 &lt;td&gt;COS&lt;/td&gt;
 &lt;td&gt;OSS&lt;/td&gt;
 &lt;td&gt;S3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;VPC&lt;/td&gt;
 &lt;td&gt;VPC&lt;/td&gt;
 &lt;td&gt;VPC&lt;/td&gt;
 &lt;td&gt;VPC&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;容器服务&lt;/td&gt;
 &lt;td&gt;TKE&lt;/td&gt;
 &lt;td&gt;ACK&lt;/td&gt;
 &lt;td&gt;EKS&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;计费模式&lt;/td&gt;
 &lt;td&gt;按量/包年包月&lt;/td&gt;
 &lt;td&gt;同&lt;/td&gt;
 &lt;td&gt;同&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;地域&lt;/td&gt;
 &lt;td&gt;国内+海外&lt;/td&gt;
 &lt;td&gt;国内+海外&lt;/td&gt;
 &lt;td&gt;全球&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="创建-cvm-实例"&gt;创建 CVM 实例&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;17
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;18
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;19
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;20
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;21
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;22
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;23
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;24
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;25
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;26
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;27
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;28
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;29
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;30
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;31
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;32
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;33
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;34
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;35
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;36
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;37
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;38
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;39
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;40
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;41
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;42
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;43
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;44
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;45
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;46
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;47
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 1. 安装腾讯云 CLI&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pip install tccli
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 2. 配置&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tccli configure
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 3. 创建 VPC（如果没有）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tccli vpc CreateVpc &lt;span style="color:#d26464;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --VpcName my-vpc &lt;span style="color:#d26464;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --CidrBlock 10.0.0.0/16
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 4. 创建子网&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tccli vpc CreateSubnet &lt;span style="color:#d26464;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --VpcId vpc-xxxx &lt;span style="color:#d26464;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --SubnetName my-subnet &lt;span style="color:#d26464;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --CidrBlock 10.0.1.0/24 &lt;span style="color:#d26464;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --Zone ap-guangzhou-3
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 5. 创建安全组&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tccli cvm CreateSecurityGroup &lt;span style="color:#d26464;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --SecurityGroupName my-sg &lt;span style="color:#d26464;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --ProjectId &lt;span style="color:#d19a66"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 6. 添加安全组规则&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tccli cvm AuthorizeSecurityGroupPolicy &lt;span style="color:#d26464;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --SecurityGroupId sg-xxxx &lt;span style="color:#d26464;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --Direction ingress &lt;span style="color:#d26464;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --Policy index:0,Protocol:tcp,Port:22,CidrBlock:0.0.0.0/0,Action:accept
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 7. 创建密钥对&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tccli cvm CreateKeyPair &lt;span style="color:#d26464;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --KeyName my-key
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 下载私钥到本地&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 保存到 ~/.ssh/tc_key.pem&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;chmod &lt;span style="color:#d19a66"&gt;400&lt;/span&gt; ~/.ssh/tc_key.pem
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 8. 创建 CVM 实例&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tccli cvm RunInstances &lt;span style="color:#d26464;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --InstanceChargeType POSTPAID_BY_HOUR &lt;span style="color:#d26464;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --InstanceType S5.MEDIUM2 &lt;span style="color:#d26464;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --ImageId img-xxxxxxxx &lt;span style="color:#d26464;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --InstanceCount &lt;span style="color:#d19a66"&gt;1&lt;/span&gt; &lt;span style="color:#d26464;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --SubnetId subnet-xxxx &lt;span style="color:#d26464;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --SecurityGroupIds &lt;span style="color:#98c379"&gt;&amp;#39;[&amp;#34;sg-xxxx&amp;#34;]&amp;#39;&lt;/span&gt; &lt;span style="color:#d26464;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --KeyIds &lt;span style="color:#98c379"&gt;&amp;#39;[&amp;#34;key-xxxx&amp;#34;]&amp;#39;&lt;/span&gt; &lt;span style="color:#d26464;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --InstanceName my-cvm
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="连接-cvm"&gt;连接 CVM&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# Linux 实例&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ssh -i ~/.ssh/tc_key.pem ubuntu@你的公网IP
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 如果是 Linux 轻量应用服务器&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ssh -i ~/.ssh/tc_key.pem lighthouse@你的公网IP
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# Windows 实例使用 MSTSC 远程桌面&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 或者使用 Python 脚本远程执行&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="cvm-日常管理"&gt;CVM 日常管理&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;17
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;18
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;19
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;20
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;21
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;22
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;23
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;24
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;25
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 查看实例&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tccli cvm DescribeInstances
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 启动实例&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tccli cvm StartInstances &lt;span style="color:#d26464;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --InstanceIds &lt;span style="color:#98c379"&gt;&amp;#39;[&amp;#34;ins-xxxx&amp;#34;]&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 停止实例&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tccli cvm StopInstances &lt;span style="color:#d26464;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --InstanceIds &lt;span style="color:#98c379"&gt;&amp;#39;[&amp;#34;ins-xxxx&amp;#34;]&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 重启实例&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tccli cvm RebootInstances &lt;span style="color:#d26464;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --InstanceIds &lt;span style="color:#98c379"&gt;&amp;#39;[&amp;#34;ins-xxxx&amp;#34;]&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 重装系统&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tccli cvm ResetInstance &lt;span style="color:#d26464;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --InstanceId ins-xxxx &lt;span style="color:#d26464;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --ImageId img-yyyyy &lt;span style="color:#d26464;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --LoginSettings Password:你的密码
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 调整配置&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tccli cvm ResizeInstance &lt;span style="color:#d26464;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --InstanceId ins-xxxx &lt;span style="color:#d26464;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --InstanceType S5.LARGE8
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="腾讯云特色服务"&gt;腾讯云特色服务&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 轻量应用服务器（入门首选，便宜！）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tccli lighthouse CreateInstances &lt;span style="color:#d26464;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --BundleId lb-xxxxxxxx &lt;span style="color:#d26464;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --InstanceName my-lighthouse &lt;span style="color:#d26464;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --LoginSettings Password:密码
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 黑石物理服务器（裸金属，物理机性能）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tccli bmc CreatePhysicalBindings &lt;span style="color:#d26464;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --InstanceType PM4.Large
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="672-cos"&gt;67.2 COS&lt;/h2&gt;
&lt;h3 id="什么是-cos"&gt;什么是 COS？&lt;/h3&gt;
&lt;p&gt;COS（Cloud Object Storage）是腾讯云的对象存储，和阿里云 OSS、AWS S3 是同类产品。&lt;/p&gt;</description></item><item><title>第68章：IaC（基础设施即代码）</title><link>https://before80.github.io/prgms/linux/cloud_cal/Chapter-68-IaC/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/cloud_cal/Chapter-68-IaC/</guid><description>&lt;h1 id="第六十八章iac基础设施即代码"&gt;第六十八章：IaC（基础设施即代码）&lt;/h1&gt;
&lt;h2 id="681-terraform-基础"&gt;68.1 Terraform 基础&lt;/h2&gt;
&lt;h3 id="什么是-iac"&gt;什么是 IaC？&lt;/h3&gt;
&lt;p&gt;IaC（Infrastructure as Code）就是&amp;quot;用代码管理基础设施&amp;quot;。以前我们管理服务器，要手动点击控制台或者敲命令；现在把基础设施写成代码，版本化管理，一键部署！&lt;/p&gt;</description></item><item><title>第69章：KVM/QEMU 虚拟化</title><link>https://before80.github.io/prgms/linux/cloud_cal/Chapter-69-KVM-QEMU/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/cloud_cal/Chapter-69-KVM-QEMU/</guid><description>&lt;h1 id="第六十九章kvmqemu-虚拟化"&gt;第六十九章：KVM/QEMU 虚拟化&lt;/h1&gt;
&lt;h2 id="691-kvm-简介"&gt;69.1 KVM 简介&lt;/h2&gt;
&lt;h3 id="什么是-kvm"&gt;什么是 KVM？&lt;/h3&gt;
&lt;p&gt;KVM（Kernel-based Virtual Machine）是 Linux 内核原生虚拟化技术，让你的 Linux 变成&amp;quot;虚拟机管理员&amp;quot;。&lt;/p&gt;</description></item><item><title>第69章：KVM/QEMU 虚拟化</title><link>https://before80.github.io/prgms/linux/virtualization/Chapter-69-KVM-QEMU/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/virtualization/Chapter-69-KVM-QEMU/</guid><description>&lt;h1 id="第六十九章kvmqemu-虚拟化"&gt;第六十九章：KVM/QEMU 虚拟化&lt;/h1&gt;
&lt;h2 id="691-kvm-简介"&gt;69.1 KVM 简介&lt;/h2&gt;
&lt;h3 id="什么是-kvm"&gt;什么是 KVM？&lt;/h3&gt;
&lt;p&gt;KVM（Kernel-based Virtual Machine）是 Linux 内核原生虚拟化技术，让你的 Linux 变成&amp;quot;虚拟机管理员&amp;quot;。&lt;/p&gt;</description></item><item><title>第70章：其他虚拟化技术</title><link>https://before80.github.io/prgms/linux/virtualization/Chapter-70-Other-Virtualization/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/virtualization/Chapter-70-Other-Virtualization/</guid><description>&lt;h1 id="第七十章其他虚拟化技术"&gt;第七十章：其他虚拟化技术&lt;/h1&gt;
&lt;h2 id="701-proxmox-ve"&gt;70.1 Proxmox VE&lt;/h2&gt;
&lt;h3 id="什么是-proxmox-ve"&gt;什么是 Proxmox VE？&lt;/h3&gt;
&lt;p&gt;Proxmox VE（Virtual Environment）是基于 Debian 的开源虚拟化平台，集合了 KVM 虚拟机和 LXC 容器，功能强大，界面友好。&lt;/p&gt;
&lt;pre class="mermaid"&gt;graph LR
 A[Proxmox VE] --&amp;gt; B[KVM 虚拟机]
 A --&amp;gt; C[LXC 容器]
 A --&amp;gt; D[软件定义存储&amp;lt;br/&amp;gt;Ceph]
 A --&amp;gt; E[软件定义网络&amp;lt;br/&amp;gt;OVS]
 
 style A fill:#f9f&lt;/pre&gt;
&lt;h3 id="proxmox-vs-其他方案"&gt;Proxmox vs 其他方案&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;对比&lt;/th&gt;
 &lt;th&gt;Proxmox VE&lt;/th&gt;
 &lt;th&gt;VMware vSphere&lt;/th&gt;
 &lt;th&gt;Hyper-V&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;费用&lt;/td&gt;
 &lt;td&gt;免费开源&lt;/td&gt;
 &lt;td&gt;商业版昂贵&lt;/td&gt;
 &lt;td&gt;Windows 许可&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;界面&lt;/td&gt;
 &lt;td&gt;Web 界面&lt;/td&gt;
 &lt;td&gt;vSphere Client&lt;/td&gt;
 &lt;td&gt;Hyper-V Manager&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;容器支持&lt;/td&gt;
 &lt;td&gt;LXC 原生&lt;/td&gt;
 &lt;td&gt;需要 vSphere Integrated Containers&lt;/td&gt;
 &lt;td&gt;Windows Container&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;存储&lt;/td&gt;
 &lt;td&gt;Ceph 内置&lt;/td&gt;
 &lt;td&gt;需要 vSAN&lt;/td&gt;
 &lt;td&gt;SMB/ISCSI&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;学习曲线&lt;/td&gt;
 &lt;td&gt;中等&lt;/td&gt;
 &lt;td&gt;陡峭&lt;/td&gt;
 &lt;td&gt;中等&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="proxmox-安装"&gt;Proxmox 安装&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;17
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 1. 下载 ISO&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# https://www.proxmox.com/en/downloads&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 2. 创建启动盘&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# Linux&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dd &lt;span style="color:#76a9f9"&gt;if&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;proxmox-ve_*.iso &lt;span style="color:#dcaeea"&gt;of&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;/dev/sdX &lt;span style="color:#dcaeea"&gt;bs&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;4M &lt;span style="color:#dcaeea"&gt;status&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;progress
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# Windows: 使用 Rufus 或 Balena Etcher&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 3. 安装（图形界面引导）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# - 选择磁盘&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# - 设置网络&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# - 设置 root 密码&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# - 等待安装完成&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 4. 访问 Web 界面&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# https://你的IP:8006&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="proxmox-web-界面"&gt;Proxmox Web 界面&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 默认登录信息：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 用户名：root&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 密码：安装时设置&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 端口：8006&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 主要功能：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# - 创建/管理虚拟机&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# - 创建/管理容器&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# - 存储管理&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# - 网络管理&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# - 用户权限管理&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# - 集群管理&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# - 备份/恢复&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="创建虚拟机"&gt;创建虚拟机&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 方式一：Web 界面操作&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 1. 点击&amp;#34;创建 VM&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 2. 选择操作系统类型&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 3. 选择 ISO 或网络安装&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 4. 配置 CPU、内存、磁盘&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 5. 配置网络&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 6. 完成&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 方式二：命令行创建&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;qm create &lt;span style="color:#d19a66"&gt;100&lt;/span&gt; --name &lt;span style="color:#63c381"&gt;&amp;#34;web-server&amp;#34;&lt;/span&gt; &lt;span style="color:#d26464;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --memory &lt;span style="color:#d19a66"&gt;2048&lt;/span&gt; --net0 virtio,bridge&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;vmbr0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;qm &lt;span style="color:#e5c07b"&gt;set&lt;/span&gt; &lt;span style="color:#d19a66"&gt;100&lt;/span&gt; --cores &lt;span style="color:#d19a66"&gt;2&lt;/span&gt; --cpu host
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;qm &lt;span style="color:#e5c07b"&gt;set&lt;/span&gt; &lt;span style="color:#d19a66"&gt;100&lt;/span&gt; --ide2 local:iso/ubuntu-22.04.iso,media&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;cdrom
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;qm &lt;span style="color:#e5c07b"&gt;set&lt;/span&gt; &lt;span style="color:#d19a66"&gt;100&lt;/span&gt; --scsi0 local-lvm:vm-100-disk-0,size&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;20G
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;qm start &lt;span style="color:#d19a66"&gt;100&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="lxc-容器"&gt;LXC 容器&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;17
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;18
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;19
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 创建 LXC 容器（比 VM 更轻量）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pct create &lt;span style="color:#d19a66"&gt;100&lt;/span&gt; local:vztmpl/ubuntu-22.04.tar.xz &lt;span style="color:#d26464;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --hostname web-container &lt;span style="color:#d26464;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --memory &lt;span style="color:#d19a66"&gt;1024&lt;/span&gt; &lt;span style="color:#d26464;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --cores &lt;span style="color:#d19a66"&gt;2&lt;/span&gt; &lt;span style="color:#d26464;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --rootfs local-lvm:8 &lt;span style="color:#d26464;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --net0 &lt;span style="color:#dcaeea"&gt;name&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;eth0,bridge&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;vmbr0,ip&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;dhcp
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 启动容器&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pct start &lt;span style="color:#d19a66"&gt;100&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 进入容器&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pct enter &lt;span style="color:#d19a66"&gt;100&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 容器操作&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pct stop &lt;span style="color:#d19a66"&gt;100&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;# 停止&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pct reboot &lt;span style="color:#d19a66"&gt;100&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;# 重启&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pct destroy &lt;span style="color:#d19a66"&gt;100&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;# 删除&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pct list &lt;span style="color:#8a93a5;font-style:italic"&gt;# 列出容器&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="存储管理"&gt;存储管理&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;17
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 查看存储&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pvesm list
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 添加 NFS 存储&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pvesm add nfs backup &lt;span style="color:#d26464;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --server 192.168.1.100 &lt;span style="color:#d26464;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --export /data &lt;span style="color:#d26464;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --content backup,iso,vztmpl
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 添加 Ceph 存储&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pvesm add cephfs cephfs-storage &lt;span style="color:#d26464;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --monhost &lt;span style="color:#63c381"&gt;&amp;#34;192.168.1.101,192.168.1.102,192.168.1.103&amp;#34;&lt;/span&gt; &lt;span style="color:#d26464;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --username admin &lt;span style="color:#d26464;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --secret /etc/pve/priv/ceph/cephfs.secret
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 查看存储使用&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pvesm status
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="集群管理"&gt;集群管理&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 创建集群&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pvecm create my-cluster
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 加入节点（在其他服务器上执行）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pvecm add 192.168.1.100
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 查看集群状态&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pvecm status
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 迁移虚拟机&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;qm migrate &lt;span style="color:#d19a66"&gt;100&lt;/span&gt; node2 --online
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="702-podman"&gt;70.2 Podman&lt;/h2&gt;
&lt;h3 id="什么是-podman"&gt;什么是 Podman？&lt;/h3&gt;
&lt;p&gt;Podman 是&amp;quot;无守护进程容器&amp;quot;引擎，和 Docker 兼容但不需要 Docker 守护进程，更安全。&lt;/p&gt;</description></item><item><title>第71章：信息收集</title><link>https://before80.github.io/prgms/linux/safe_test/Chapter-71-Information-Gathering/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/safe_test/Chapter-71-Information-Gathering/</guid><description>&lt;h1 id="第七十一章信息收集"&gt;第七十一章：信息收集&lt;/h1&gt;
&lt;h2 id="711-nmap-端口扫描"&gt;71.1 Nmap 端口扫描&lt;/h2&gt;
&lt;h3 id="什么是-nmap"&gt;什么是 Nmap？&lt;/h3&gt;
&lt;p&gt;Nmap（Network Mapper）是网络扫描的&amp;quot;瑞士军刀&amp;quot;，渗透测试的第一步就是用它来摸清目标的网络情况。&lt;/p&gt;</description></item><item><title>第72章：漏洞扫描</title><link>https://before80.github.io/prgms/linux/safe_test/Chapter-72-Vulnerability-Scanning/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/safe_test/Chapter-72-Vulnerability-Scanning/</guid><description>&lt;h1 id="第七十二章漏洞扫描"&gt;第七十二章：漏洞扫描&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;使用提示&lt;/strong&gt;：
漏洞扫描工具应用于&lt;strong&gt;授权的安全测试&lt;/strong&gt;和&lt;strong&gt;系统加固&lt;/strong&gt;。
对未授权系统进行扫描可能被视为攻击行为，请遵守相关法律法规！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="721-openvas-漏洞扫描"&gt;72.1 OpenVAS 漏洞扫描&lt;/h2&gt;
&lt;h3 id="什么是-openvas"&gt;什么是 OpenVAS？&lt;/h3&gt;
&lt;p&gt;OpenVAS（Open Vulnerability Assessment System）是开源的漏洞扫描系统，Greenbone Vulnerability Management 的核心组件。&lt;/p&gt;</description></item><item><title>第73章：渗透测试</title><link>https://before80.github.io/prgms/linux/safe_test/Chapter-73-Penetration-Testing/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/safe_test/Chapter-73-Penetration-Testing/</guid><description>&lt;h1 id="第七十三章渗透测试"&gt;第七十三章：渗透测试&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;重要法律警告&lt;/strong&gt;：
本章节内容仅供&lt;strong&gt;学习和授权测试&lt;/strong&gt;使用！&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;未经授权&lt;/strong&gt;对他人系统进行渗透测试属于&lt;strong&gt;违法行为&lt;/strong&gt;！&lt;/li&gt;
&lt;li&gt;可能违反《网络安全法》、《刑法》等相关法律法规！&lt;/li&gt;
&lt;li&gt;请确保在&lt;strong&gt;合法授权&lt;/strong&gt;的环境下进行练习！&lt;/li&gt;
&lt;li&gt;建议仅在&lt;strong&gt;自己的系统&lt;/strong&gt;或&lt;strong&gt;专门搭建的测试环境&lt;/strong&gt;中实践！&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;记住&lt;/strong&gt;：技术无罪，但滥用技术可能犯罪！&lt;/p&gt;</description></item><item><title>第74章：网络安全工具</title><link>https://before80.github.io/prgms/linux/safe_test/Chapter-74-Network-Security-Tools/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/safe_test/Chapter-74-Network-Security-Tools/</guid><description>&lt;h1 id="第七十四章网络安全工具"&gt;第七十四章：网络安全工具&lt;/h1&gt;
&lt;h2 id="741-wireshark-抓包分析"&gt;74.1 Wireshark 抓包分析&lt;/h2&gt;
&lt;h3 id="什么是-wireshark"&gt;什么是 Wireshark？&lt;/h3&gt;
&lt;p&gt;Wireshark 是最流行的网络协议分析器，让你能够&amp;quot;看见&amp;quot;网络上的数据传输。&lt;/p&gt;
&lt;pre class="mermaid"&gt;graph LR
 A[网络流量] --&amp;gt; W[Wireshark]
 W --&amp;gt; B[解码]
 B --&amp;gt; C[协议分析]
 C --&amp;gt; D[问题排查]&lt;/pre&gt;
&lt;h3 id="安装-wireshark"&gt;安装 Wireshark&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# Ubuntu/Debian&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt install wireshark
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# CentOS/RHEL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo yum install wireshark
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 启动&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;wireshark
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 非 root 用户运行&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo usermod -aG wireshark &lt;span style="color:#dcaeea"&gt;$USER&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 重新登录&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="过滤器语法"&gt;过滤器语法&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# Wireshark 使用 Berkeley Packet Filter (BPF) 语法&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 过滤器类型&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 捕获过滤器：在抓包前过滤&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 显示过滤器：在抓包后过滤&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;过滤器&lt;/th&gt;
 &lt;th&gt;说明&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;tcp&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;只显示 TCP 包&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;udp&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;只显示 UDP 包&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ip.addr == 192.168.1.1&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;显示指定 IP&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;tcp.port == 80&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;显示 80 端口&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;http.request.method == &amp;quot;GET&amp;quot;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;HTTP GET 请求&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="常用显示过滤器"&gt;常用显示过滤器&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;17
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# HTTP 相关&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;http.request.method &lt;span style="color:#54b1c7"&gt;==&lt;/span&gt; &lt;span style="color:#63c381"&gt;&amp;#34;GET&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;http.request.method &lt;span style="color:#54b1c7"&gt;==&lt;/span&gt; &lt;span style="color:#63c381"&gt;&amp;#34;POST&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;http.response.code &lt;span style="color:#54b1c7"&gt;==&lt;/span&gt; &lt;span style="color:#d19a66"&gt;200&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;http.host &lt;span style="color:#54b1c7"&gt;==&lt;/span&gt; &lt;span style="color:#63c381"&gt;&amp;#34;example.com&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# TCP 相关&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tcp.flags.syn &lt;span style="color:#54b1c7"&gt;==&lt;/span&gt; &lt;span style="color:#d19a66"&gt;1&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;# SYN 包&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tcp.flags.ack &lt;span style="color:#54b1c7"&gt;==&lt;/span&gt; &lt;span style="color:#d19a66"&gt;1&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;# ACK 包&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tcp.stream eq &lt;span style="color:#d19a66"&gt;5&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;# 第 5 个 TCP 流&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# DNS 相关&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dns.qry.name &lt;span style="color:#54b1c7"&gt;==&lt;/span&gt; &lt;span style="color:#63c381"&gt;&amp;#34;example.com&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dns.flags.response &lt;span style="color:#54b1c7"&gt;==&lt;/span&gt; &lt;span style="color:#d19a66"&gt;0&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;# DNS 查询&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 显示 HTTP 和 HTTPS（TLS）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;http or tls
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="协议分析"&gt;协议分析&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;17
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;18
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;19
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;20
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;21
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;22
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;23
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 常见协议分析点&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# HTTP&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# - 请求方法：GET, POST, PUT, DELETE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# - 请求头：User-Agent, Cookie, Host&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# - 请求体：POST 数据&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# DNS&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# - 查询类型：A, AAAA, MX, CNAME&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# - 响应码：NOERROR, NXDOMAIN&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# TLS/SSL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# - 加密握手过程&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# - 证书信息&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# - 加密算法&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# SMB&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# - 文件共享协议&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# - Windows 常用&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# FTP&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# - 21 端口控制&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# - 随机端口数据传输&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="流追踪"&gt;流追踪&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 在 Wireshark 中&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 1. 右键点击数据包&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 2. 选择 &amp;#34;Follow&amp;#34; → &amp;#34;TCP Stream&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 3. 查看完整会话&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 或使用 tshark（命令行版）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tshark -r capture.pcap -Y &lt;span style="color:#63c381"&gt;&amp;#34;http&amp;#34;&lt;/span&gt; -T fields -e http.request.uri
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="742-tcpdump-命令行抓包"&gt;74.2 Tcpdump 命令行抓包&lt;/h2&gt;
&lt;h3 id="基本用法"&gt;基本用法&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;17
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 安装&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 通常预装&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 基本抓包&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo tcpdump -i eth0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 指定网卡&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo tcpdump -i any
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 保存到文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo tcpdump -i eth0 -w capture.pcap
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 读取文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tcpdump -r capture.pcap
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 显示内容&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo tcpdump -i eth0 -n
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="bpf-过滤器"&gt;BPF 过滤器&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;17
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;18
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 主机过滤&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tcpdump host 192.168.1.1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tcpdump src 192.168.1.1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tcpdump dst 192.168.1.1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 端口过滤&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tcpdump port &lt;span style="color:#d19a66"&gt;80&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tcpdump src port &lt;span style="color:#d19a66"&gt;443&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 协议过滤&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tcpdump tcp
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tcpdump udp
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tcpdump icmp
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 组合过滤&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tcpdump tcp and port &lt;span style="color:#d19a66"&gt;80&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tcpdump &lt;span style="color:#63c381"&gt;&amp;#34;tcp[13] &amp;amp; 2 != 0&amp;#34;&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;# SYN 包&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tcpdump &lt;span style="color:#63c381"&gt;&amp;#34;tcp[13] &amp;amp; 16 != 0&amp;#34;&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;# ACK 包&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="高级选项"&gt;高级选项&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;17
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 显示更多细节&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo tcpdump -i eth0 -vv
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 不解析域名（快）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo tcpdump -i eth0 -n
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 显示十六进制内容&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo tcpdump -i eth0 -X
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 显示 ASCII 内容&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo tcpdump -i eth0 -A
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 限制抓包数量&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo tcpdump -i eth0 -c &lt;span style="color:#d19a66"&gt;100&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 抓包后立即停止&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo tcpdump -i eth0 -G &lt;span style="color:#d19a66"&gt;5&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;# 5 秒后停止&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="常用抓包场景"&gt;常用抓包场景&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 1. 抓 HTTP 请求&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo tcpdump -i eth0 -A &lt;span style="color:#98c379"&gt;&amp;#39;tcp port 80&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 2. 抓 DNS 查询&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo tcpdump -i eth0 -n &lt;span style="color:#98c379"&gt;&amp;#39;udp port 53&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 3. 抓 SSH 连接&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo tcpdump -i eth0 &lt;span style="color:#98c379"&gt;&amp;#39;tcp port 22&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 4. 抓指定 IP&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo tcpdump -i eth0 host 192.168.1.1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 5. 抓 HTTP POST 数据&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo tcpdump -i eth0 -A &lt;span style="color:#98c379"&gt;&amp;#39;tcp[((tcp[12:1] &amp;amp; 0xf0) &amp;gt;&amp;gt; 2):4] = 0x504f5354&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="743-netcat-网络瑞士军刀"&gt;74.3 Netcat 网络瑞士军刀&lt;/h2&gt;
&lt;p&gt;Netcat 被称为&amp;quot;网络瑞士军刀&amp;quot;，能做几乎任何网络操作。&lt;/p&gt;</description></item><item><title>第75章：CPU 优化</title><link>https://before80.github.io/prgms/linux/performance_optimization/Chapter-75-CPU-Optimization/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/performance_optimization/Chapter-75-CPU-Optimization/</guid><description>&lt;h1 id="第七十五章cpu-优化"&gt;第七十五章：CPU 优化&lt;/h1&gt;
&lt;h2 id="751-cpu-性能分析"&gt;75.1 CPU 性能分析&lt;/h2&gt;
&lt;h3 id="查看-cpu-信息"&gt;查看 CPU 信息&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;17
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;18
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;19
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;20
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;21
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 查看 CPU 详细信息&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cat /proc/cpuinfo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 关键信息&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# processor: CPU 核心编号&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# model name: CPU 型号&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# cpu MHz: 当前频率&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# cache size: 缓存大小&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# flags: 支持的特性&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 简洁输出&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;lscpu
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 预期输出：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# Architecture: x86_64&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# CPU(s): 8&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# Thread(s) per core: 2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# Core(s) per socket: 4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# Model name: Intel(R) Core(TM) i7-10700 @ 2.90GHz&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# CPU MHz: 2900.000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# Cache size: 16384 KB&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="tophtop-分析"&gt;top/htop 分析&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# top 基本使用&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;top
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 快捷键&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# P: 按 CPU 排序&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# M: 按内存排序&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# N: 按 PID 排序&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 1: 显示每个 CPU 核心&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# k: 杀死进程&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# r: 调整优先级&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# htop（更友好）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;htop
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="mpstat-多核统计"&gt;mpstat 多核统计&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 安装&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt install sysstat
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 查看所有 CPU&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mpstat -P ALL
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 每秒更新&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mpstat &lt;span style="color:#d19a66"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 查看 CPU 详细统计&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mpstat -I
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 预期输出：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 02:45:00 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 02:45:01 PM 0 10.00 0.00 5.00 0.00 0.00 0.00 0.00 0.00 0.00 85.00&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="perf-性能分析"&gt;perf 性能分析&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 安装&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt install linux-tools-common linux-tools-generic
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# perf stat 基本统计&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;perf stat -a sleep &lt;span style="color:#d19a66"&gt;5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# perf top 实时热点分析&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo perf top
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# perf record 记录数据&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo perf record -a -g -- sleep &lt;span style="color:#d19a66"&gt;30&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# perf report 查看报告&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo perf report
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="cpu-使用率分析"&gt;CPU 使用率分析&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 查看 CPU 使用情况&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mpstat &lt;span style="color:#d19a66"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 分析&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# %usr: 用户空间使用&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# %sys: 内核空间使用&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# %iowait: IO 等待&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# %idle: 空闲&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 如果 %iowait 高，说明 IO 是瓶颈&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 如果 %sys 高，说明系统调用多&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 如果 %usr 高，说明应用计算多&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="752-cpu-调优参数"&gt;75.2 CPU 调优参数&lt;/h2&gt;
&lt;h3 id="proccpuinfo"&gt;/proc/cpuinfo&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 查看 CPU 频率信息&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cat /proc/cpuinfo &lt;span style="color:#abb2bf"&gt;|&lt;/span&gt; grep MHz
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 查看 CPU governor（调频策略）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 查看可用 governor&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="cpu-频率调节"&gt;CPU 频率调节&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;17
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 查看当前频率&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cpufreq-info
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 设置 performance 模式（性能优先）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;for&lt;/span&gt; cpu in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e5c07b"&gt;echo&lt;/span&gt; performance &amp;gt; &lt;span style="color:#dcaeea"&gt;$cpu&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 设置 powersave 模式（节能）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;for&lt;/span&gt; cpu in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e5c07b"&gt;echo&lt;/span&gt; powersave &amp;gt; &lt;span style="color:#dcaeea"&gt;$cpu&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 设置 ondemand 模式（动态调节）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;for&lt;/span&gt; cpu in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e5c07b"&gt;echo&lt;/span&gt; ondemand &amp;gt; &lt;span style="color:#dcaeea"&gt;$cpu&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="sysctl-调度参数"&gt;sysctl 调度参数&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 查看调度参数&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sysctl -a &lt;span style="color:#abb2bf"&gt;|&lt;/span&gt; grep kernel.sched
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# scheduler latency（调度延迟）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sysctl -w kernel.sched_latency_ns&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;&lt;span style="color:#d19a66"&gt;10000000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# minimum granularity（最小粒度）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sysctl -w kernel.sched_min_granularity_ns&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;&lt;span style="color:#d19a66"&gt;1000000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# wakeup granularity&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sysctl -w kernel.sched_wakeup_granularity_ns&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;&lt;span style="color:#d19a66"&gt;1000000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# CPU 核心隔离（需要内核参数 isolcpus）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 在 grub 添加：isolcpus=1,2,3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="永久生效配置"&gt;永久生效配置&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# /etc/sysctl.conf&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo nano /etc/sysctl.conf
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 添加：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kernel.sched_latency_ns &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#d19a66"&gt;10000000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kernel.sched_min_granularity_ns &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#d19a66"&gt;1000000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kernel.sched_wakeup_granularity_ns &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#d19a66"&gt;1000000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="753-进程优化"&gt;75.3 进程优化&lt;/h2&gt;
&lt;h3 id="nicerenice-优先级"&gt;nice/renice 优先级&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;17
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# nice 值范围：-20 到 19&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 越低优先级越高&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 启动时设置优先级&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;nice -n -10 ./my_program
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 查看进程 nice 值&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ps -eo pid,ni,comm
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 修改运行中进程优先级&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;renice -n &lt;span style="color:#d19a66"&gt;10&lt;/span&gt; -p PID
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 批量修改&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;renice -n &lt;span style="color:#d19a66"&gt;10&lt;/span&gt; -p &lt;span style="color:#76a9f9"&gt;$(&lt;/span&gt;pgrep -f process_name&lt;span style="color:#76a9f9"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 最高优先级&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo renice -n -20 -p PID
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="taskset-cpu-亲和性"&gt;taskset CPU 亲和性&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 查看进程 CPU 亲和性&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;taskset -cp PID
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 设置 CPU 亲和性&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;taskset -c 0,1 ./my_program &lt;span style="color:#8a93a5;font-style:italic"&gt;# 只使用 CPU 0 和 1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;taskset -c 0-3 ./my_program &lt;span style="color:#8a93a5;font-style:italic"&gt;# 使用 CPU 0-3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;taskset -c &lt;span style="color:#d19a66"&gt;4&lt;/span&gt; ./my_program &lt;span style="color:#8a93a5;font-style:italic"&gt;# 只使用 CPU 4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 修改运行中进程&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;taskset -cp 0-3 PID
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 查看 CPU 核心&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;nproc
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="cpu-隔离示例"&gt;CPU 隔离示例&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 1. 在 /etc/default/grub 中添加&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#dcaeea"&gt;GRUB_CMDLINE_LINUX&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;isolcpus=1,2,3&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 2. 更新 grub&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo update-grub
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 3. 重启后验证&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cat /proc/cmdline
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 4. 将进程绑定到隔离的核心&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;taskset -c &lt;span style="color:#d19a66"&gt;0&lt;/span&gt; ./my_program
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="高性能场景配置"&gt;高性能场景配置&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;17
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;18
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;#!/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# enable-performance-mode.sh&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 1. 设置 performance governor&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;for&lt;/span&gt; cpu in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e5c07b"&gt;echo&lt;/span&gt; performance &amp;gt; &lt;span style="color:#dcaeea"&gt;$cpu&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 2. 关闭透明大页&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e5c07b"&gt;echo&lt;/span&gt; never &amp;gt; /sys/kernel/mm/transparent_hugepage/enabled
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e5c07b"&gt;echo&lt;/span&gt; never &amp;gt; /sys/kernel/mm/transparent_hugepage/defrag
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 3. 调整调度参数&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sysctl -w kernel.sched_latency_ns&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;&lt;span style="color:#d19a66"&gt;10000000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sysctl -w kernel.sched_min_granularity_ns&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;&lt;span style="color:#d19a66"&gt;1000000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 4. 设置 CPU 亲和性（根据需要）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;taskset -c 0-3 ./my_high_performance_app
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="本章小结"&gt;本章小结&lt;/h2&gt;
&lt;p&gt;本章我们学习了 CPU 优化的核心知识：&lt;/p&gt;</description></item><item><title>第76章：内存优化</title><link>https://before80.github.io/prgms/linux/performance_optimization/Chapter-76-Memory-Optimization/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/performance_optimization/Chapter-76-Memory-Optimization/</guid><description>&lt;h1 id="第七十六章内存优化"&gt;第七十六章：内存优化&lt;/h1&gt;
&lt;h2 id="761-内存分析"&gt;76.1 内存分析&lt;/h2&gt;
&lt;h3 id="查看内存使用"&gt;查看内存使用&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 基本信息&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;free -h
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 详细统计&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;free -m &lt;span style="color:#8a93a5;font-style:italic"&gt;# MB 为单位&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;free -g &lt;span style="color:#8a93a5;font-style:italic"&gt;# GB 为单位&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;free -s &lt;span style="color:#d19a66"&gt;1&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;# 每秒刷新&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 预期输出：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# total used free shared buff/cache available&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# Mem: 31Gi 8.5Gi 4.2Gi 1.0Gi 18Gi 22Gi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# Swap: 2.0Gi 0B 2.0Gi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="procmeminfo"&gt;/proc/meminfo&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 详细内存信息&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cat /proc/meminfo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 关键指标：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# MemTotal: 总内存&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# MemFree: 空闲内存&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# MemAvailable: 可用内存（考虑缓存）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# Buffers: 缓冲区&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# Cached: 缓存&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# SwapCached: 交换出去的缓存&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# AnonPages: 匿名页（程序内存）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# Mapped: 映射的文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# Shmem: 共享内存&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="进程内存分析"&gt;进程内存分析&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 查看进程内存使用&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ps aux --sort&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;-%mem &lt;span style="color:#abb2bf"&gt;|&lt;/span&gt; head
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 或使用 top&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;top
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# M: 按内存排序&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 查看特定进程&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pmap -x PID
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 查看内存映射&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cat /proc/PID/maps
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 查看进程的内存使用详情&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cat /proc/PID/status &lt;span style="color:#abb2bf"&gt;|&lt;/span&gt; grep -E &lt;span style="color:#63c381"&gt;&amp;#34;Vm|Rss&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="内存泄漏检测"&gt;内存泄漏检测&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 方法一：监控内存增长&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;while&lt;/span&gt; true&lt;span style="color:#abb2bf"&gt;;&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ps -o pid,vsz,rss,comm -p PID
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; sleep &lt;span style="color:#d19a66"&gt;5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 方法二：使用 valgrind&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt install valgrind
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;valgrind --leak-check&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;full ./my_program
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 方法三：使用 smem&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt install smem
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;smem -r -k
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="762-swap-优化"&gt;76.2 Swap 优化&lt;/h2&gt;
&lt;h3 id="swappiness-参数"&gt;swappiness 参数&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 查看当前 swappiness&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cat /proc/sys/vm/swappiness
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 临时修改（重启失效）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo sysctl vm.swappiness&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;&lt;span style="color:#d19a66"&gt;10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 永久修改&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo nano /etc/sysctl.conf
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 添加：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;vm.swappiness&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;&lt;span style="color:#d19a66"&gt;10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="swappiness-调优建议"&gt;swappiness 调优建议&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;场景&lt;/th&gt;
 &lt;th&gt;swappiness&lt;/th&gt;
 &lt;th&gt;说明&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;数据库服务器&lt;/td&gt;
 &lt;td&gt;10-30&lt;/td&gt;
 &lt;td&gt;减少 swap，数据库需要内存&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;桌面系统&lt;/td&gt;
 &lt;td&gt;60-80&lt;/td&gt;
 &lt;td&gt;更多使用 swap，让内存给程序&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;大内存服务器&lt;/td&gt;
 &lt;td&gt;10 或更低&lt;/td&gt;
 &lt;td&gt;内存足够，swap 主要是防止 OOM&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;内存不足&lt;/td&gt;
 &lt;td&gt;60+&lt;/td&gt;
 &lt;td&gt;不得已才 swap&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="swap-分区-vs-文件"&gt;Swap 分区 vs 文件&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 创建 Swap 文件（更灵活）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo fallocate -l 2G /swapfile
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo chmod &lt;span style="color:#d19a66"&gt;600&lt;/span&gt; /swapfile
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo mkswap /swapfile
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo swapon /swapfile
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 查看 swap&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;swapon -s
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 关闭 swap&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo swapoff /swapfile
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 永久启用（在 /etc/fstab 添加）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/swapfile none swap sw &lt;span style="color:#d19a66"&gt;0&lt;/span&gt; &lt;span style="color:#d19a66"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="调整-vm-参数"&gt;调整 VM 参数&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# vm.overcommit_memory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 0: 内核执行启发式 overcommit&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 1: 始终 overcommit&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 2: 禁止 overcommit，超过会 OOM&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 查看&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cat /proc/sys/vm/overcommit_memory
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 修改&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo sysctl -w vm.overcommit_memory&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;&lt;span style="color:#d19a66"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 永久修改&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e5c07b"&gt;echo&lt;/span&gt; &lt;span style="color:#63c381"&gt;&amp;#34;vm.overcommit_memory = 1&amp;#34;&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;|&lt;/span&gt; sudo tee -a /etc/sysctl.conf
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# vm.overcommit_ratio（overcommit 时允许的比例）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo sysctl -w vm.overcommit_ratio&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;&lt;span style="color:#d19a66"&gt;50&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="内存优化脚本"&gt;内存优化脚本&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;17
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;18
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;19
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;20
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;21
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;22
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;23
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;24
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;25
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;26
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;27
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;28
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;29
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;#!/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# optimize-memory.sh&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e5c07b"&gt;echo&lt;/span&gt; &lt;span style="color:#63c381"&gt;&amp;#34;=== 内存优化开始 ===&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 1. 设置 swappiness&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e5c07b"&gt;echo&lt;/span&gt; &lt;span style="color:#63c381"&gt;&amp;#34;设置 swappiness = 10&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo sysctl -w vm.swappiness&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;&lt;span style="color:#d19a66"&gt;10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 2. 清理缓存&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e5c07b"&gt;echo&lt;/span&gt; &lt;span style="color:#63c381"&gt;&amp;#34;清理缓存...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sync
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo sysctl -w vm.drop_caches&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;&lt;span style="color:#d19a66"&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 3. 调整 overcommit&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e5c07b"&gt;echo&lt;/span&gt; &lt;span style="color:#63c381"&gt;&amp;#34;设置 overcommit_memory = 1&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo sysctl -w vm.overcommit_memory&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;&lt;span style="color:#d19a66"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 4. 调整 vm.min_free_kbytes（为紧急情况保留内存）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e5c07b"&gt;echo&lt;/span&gt; &lt;span style="color:#63c381"&gt;&amp;#34;设置 min_free_kbytes = 65536&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo sysctl -w vm.min_free_kbytes&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;&lt;span style="color:#d19a66"&gt;65536&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 5. 查看当前状态&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e5c07b"&gt;echo&lt;/span&gt; &lt;span style="color:#63c381"&gt;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e5c07b"&gt;echo&lt;/span&gt; &lt;span style="color:#63c381"&gt;&amp;#34;=== 当前内存状态 ===&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;free -h
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e5c07b"&gt;echo&lt;/span&gt; &lt;span style="color:#63c381"&gt;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e5c07b"&gt;echo&lt;/span&gt; &lt;span style="color:#63c381"&gt;&amp;#34;=== 优化完成 ===&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="本章小结"&gt;本章小结&lt;/h2&gt;
&lt;p&gt;本章我们学习了内存优化的核心知识：&lt;/p&gt;</description></item><item><title>第77章：磁盘 IO 优化</title><link>https://before80.github.io/prgms/linux/performance_optimization/Chapter-77-Disk-IO-Optimization/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/performance_optimization/Chapter-77-Disk-IO-Optimization/</guid><description>&lt;h1 id="第七十七章磁盘-io-优化"&gt;第七十七章：磁盘 IO 优化&lt;/h1&gt;
&lt;h2 id="771-io-分析"&gt;77.1 IO 分析&lt;/h2&gt;
&lt;h3 id="iostat-使用"&gt;iostat 使用&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 安装&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt install sysstat
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 基本使用&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;iostat -x &lt;span style="color:#d19a66"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 输出解读：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# %util: IO 占用率，100% = 饱和&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# await: 平均 IO 等待时间（毫秒）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# avgqu-sz: 平均队列长度&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# r/s, w/s: 每秒读写次数&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# rkB/s, wkB/s: 每秒读写 KB&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="iotop-进程监控"&gt;iotop 进程监控&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 安装&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt install iotop
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 实时监控&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo iotop
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 只显示有 IO 的进程&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo iotop -o
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 查看累计 IO&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo iotop -a
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 快捷键&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 左右箭头: 排序&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# r: 反向排序&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# q: 退出&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="io-瓶颈分析"&gt;IO 瓶颈分析&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 1. 检查 CPU 等待 IO&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 如果 %iowait 高，说明 CPU 在等待 IO&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;vmstat &lt;span style="color:#d19a66"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 2. 检查磁盘使用率&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;iostat -x &lt;span style="color:#d19a66"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# %util 接近 100% 说明磁盘饱和&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 3. 检查 IO 队列&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;iostat -x
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# avgqu-sz &amp;gt; 1 说明有队列积压&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 4. 检查 IO 延迟&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;iostat -x &lt;span style="color:#d19a66"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# await &amp;gt; 100ms 说明 IO 慢&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="772-文件系统优化"&gt;77.2 文件系统优化&lt;/h2&gt;
&lt;h3 id="选择合适的文件系统"&gt;选择合适的文件系统&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;文件系统&lt;/th&gt;
 &lt;th&gt;特点&lt;/th&gt;
 &lt;th&gt;适用场景&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;ext4&lt;/td&gt;
 &lt;td&gt;通用、稳定&lt;/td&gt;
 &lt;td&gt;默认选择&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;XFS&lt;/td&gt;
 &lt;td&gt;大文件、高并发&lt;/td&gt;
 &lt;td&gt;数据库、日志&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Btrfs&lt;/td&gt;
 &lt;td&gt;快照、校验&lt;/td&gt;
 &lt;td&gt;需要数据保护&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;ZFS&lt;/td&gt;
 &lt;td&gt;高级功能&lt;/td&gt;
 &lt;td&gt;存储服务器&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="挂载选项优化"&gt;挂载选项优化&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# noatime: 不记录访问时间（提升性能）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# nodiratime: 不记录目录访问时间&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# nobarrier: 关闭写入屏障（提升性能，但可能丢数据）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# data=writeback: 日志模式（比 ordered 快）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 挂载示例&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo mount -o noatime,nodiratime,noexec /dev/sda1 /mnt
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 查看当前挂载选项&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mount &lt;span style="color:#abb2bf"&gt;|&lt;/span&gt; grep sda1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 永久生效（/etc/fstab）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#dcaeea"&gt;UUID&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;xxx / ext4 defaults,noatime,nodiratime &lt;span style="color:#d19a66"&gt;0&lt;/span&gt; &lt;span style="color:#d19a66"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="ext4-优化"&gt;ext4 优化&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 创建时指定特性&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mkfs.ext4 -O extent,uninit_bg /dev/sda1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 调整日志大小&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tune2fs -J &lt;span style="color:#dcaeea"&gt;size&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;&lt;span style="color:#d19a66"&gt;4096&lt;/span&gt; /dev/sda1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 关闭访问时间&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tune2fs -o noatime /dev/sda1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 检查和修复&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo fsck.ext4 -p /dev/sda1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="xfs-优化"&gt;XFS 优化&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# XFS 特性&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# - 大文件支持（8EB）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# - 高并发&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# - 日志优化&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 创建时优化&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mkfs.xfs -f -l &lt;span style="color:#dcaeea"&gt;size&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;128m,lazy-count&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;&lt;span style="color:#d19a66"&gt;1&lt;/span&gt; /dev/sda1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# XFS 调优参数&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# noatime 已在 XFS 默认启用&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="磁盘-io-调度算法"&gt;磁盘 IO 调度算法&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;17
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;18
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 查看当前调度器&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cat /sys/block/sda/queue/scheduler
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 可用调度器：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# - mq-deadline: 适合 SSD&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# - none: 适合 NVMe/SSD&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# - bfq: 适合桌面/多媒体&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# - kyber: 适合服务器&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 临时修改&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e5c07b"&gt;echo&lt;/span&gt; mq-deadline &amp;gt; /sys/block/sda/queue/scheduler
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 永久修改（udev）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo nano /etc/udev/rules.d/60-scheduler.rules
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 添加：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#dcaeea"&gt;ACTION&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;==&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;add|change&amp;#34;&lt;/span&gt;, &lt;span style="color:#dcaeea"&gt;KERNEL&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;==&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;sd[a-z]&amp;#34;&lt;/span&gt;, ATTR&lt;span style="color:#54b1c7"&gt;{&lt;/span&gt;queue/scheduler&lt;span style="color:#54b1c7"&gt;}=&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;mq-deadline&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#dcaeea"&gt;ACTION&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;==&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;add|change&amp;#34;&lt;/span&gt;, &lt;span style="color:#dcaeea"&gt;KERNEL&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;==&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;nvme[0-9]*&amp;#34;&lt;/span&gt;, ATTR&lt;span style="color:#54b1c7"&gt;{&lt;/span&gt;queue/scheduler&lt;span style="color:#54b1c7"&gt;}=&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;none&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="本章小结"&gt;本章小结&lt;/h2&gt;
&lt;p&gt;本章我们学习了磁盘 IO 优化的核心知识：&lt;/p&gt;</description></item><item><title>第78章：网络优化</title><link>https://before80.github.io/prgms/linux/performance_optimization/Chapter-78-Network-Optimization/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/performance_optimization/Chapter-78-Network-Optimization/</guid><description>&lt;h1 id="第七十八章网络优化"&gt;第七十八章：网络优化&lt;/h1&gt;
&lt;h2 id="781-网络分析"&gt;78.1 网络分析&lt;/h2&gt;
&lt;h3 id="netstatss"&gt;netstat/ss&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# netstat 基本用法&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;netstat -tuln &lt;span style="color:#8a93a5;font-style:italic"&gt;# TCP 监听端口&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;netstat -an &lt;span style="color:#8a93a5;font-style:italic"&gt;# 所有连接&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;netstat -r &lt;span style="color:#8a93a5;font-style:italic"&gt;# 路由表&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;netstat -s &lt;span style="color:#8a93a5;font-style:italic"&gt;# 网络统计&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# ss（更现代，性能更好）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ss -tuln &lt;span style="color:#8a93a5;font-style:italic"&gt;# TCP 监听&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ss -s &lt;span style="color:#8a93a5;font-style:italic"&gt;# 汇总统计&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ss -tp &lt;span style="color:#8a93a5;font-style:italic"&gt;# 显示进程&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ss -ti &lt;span style="color:#8a93a5;font-style:italic"&gt;# 显示 TCP info&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 查看连接状态&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ss -o state established &lt;span style="color:#8a93a5;font-style:italic"&gt;# 已建立连接&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ss -o state time-wait &lt;span style="color:#8a93a5;font-style:italic"&gt;# TIME_WAIT 状态&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="网络连接分析"&gt;网络连接分析&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 查看并发连接数&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ss -s
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 查看最大文件描述符&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cat /proc/sys/fs/file-nr
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 查看网络接口&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ip link show
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ip addr show
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ip -s link show eth0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 查看网络统计&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;netstat -i
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cat /proc/net/dev
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="782-tcp-优化"&gt;78.2 TCP 优化&lt;/h2&gt;
&lt;h3 id="tcp-参数"&gt;TCP 参数&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 查看所有 TCP 参数&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sysctl -a &lt;span style="color:#abb2bf"&gt;|&lt;/span&gt; grep tcp.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 常用参数：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# net.ipv4.tcp_tw_reuse: 复用 TIME_WAIT&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# net.ipv4.tcp_fin_timeout: FIN 超时&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# net.ipv4.tcp_keepalive_time: Keepalive 时间&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# net.ipv4.tcp_keepalive_probes: Keepalive 探测次数&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# net.ipv4.tcp_keepalive_intvl: Keepalive 间隔&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# net.ipv4.tcp_max_syn_backlog: SYN 队列长度&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# net.ipv4.tcp_max_tw_buckets: TIME_WAIT 最大数量&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="tcp-调优"&gt;TCP 调优&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 1. TIME_WAIT 优化&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo sysctl -w net.ipv4.tcp_tw_reuse&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;&lt;span style="color:#d19a66"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo sysctl -w net.ipv4.tcp_fin_timeout&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;&lt;span style="color:#d19a66"&gt;30&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 2. 连接队列优化&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo sysctl -w net.ipv4.tcp_max_syn_backlog&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;&lt;span style="color:#d19a66"&gt;8192&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo sysctl -w net.core.somaxconn&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;&lt;span style="color:#d19a66"&gt;8192&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 3. 文件描述符优化&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo sysctl -w net.core.rmem_max&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;&lt;span style="color:#d19a66"&gt;16777216&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo sysctl -w net.core.wmem_max&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;&lt;span style="color:#d19a66"&gt;16777216&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo sysctl -w fs.file-max&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;&lt;span style="color:#d19a66"&gt;6553600&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 4. 内存优化&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo sysctl -w net.ipv4.tcp_rmem&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;4096 87380 16777216&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo sysctl -w net.ipv4.tcp_wmem&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;&lt;span style="color:#63c381"&gt;&amp;#34;4096 65536 16777216&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="永久生效"&gt;永久生效&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# /etc/sysctl.conf&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo nano /etc/sysctl.conf
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 添加：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;net.ipv4.tcp_tw_reuse &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#d19a66"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;net.ipv4.tcp_fin_timeout &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#d19a66"&gt;30&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;net.ipv4.tcp_max_syn_backlog &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#d19a66"&gt;8192&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;net.core.somaxconn &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#d19a66"&gt;8192&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fs.file-max &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#d19a66"&gt;6553600&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;net.ipv4.tcp_rmem &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#d19a66"&gt;4096&lt;/span&gt; &lt;span style="color:#d19a66"&gt;87380&lt;/span&gt; &lt;span style="color:#d19a66"&gt;16777216&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;net.ipv4.tcp_wmem &lt;span style="color:#54b1c7"&gt;=&lt;/span&gt; &lt;span style="color:#d19a66"&gt;4096&lt;/span&gt; &lt;span style="color:#d19a66"&gt;65536&lt;/span&gt; &lt;span style="color:#d19a66"&gt;16777216&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 应用配置&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo sysctl -p
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="拥塞控制算法"&gt;拥塞控制算法&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;17
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;18
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 查看可用算法&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sysctl net.ipv4.tcp_available_congestion_control
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 查看当前算法&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sysctl net.ipv4.tcp_congestion_control
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 常用算法：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# - cubic: 默认&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# - bbr: Google 开发，高带宽延迟产品&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# - reno: 传统算法&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 启用 BBR&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo sysctl -w net.core.default_qdisc&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;fq
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo sysctl -w net.ipv4.tcp_congestion_control&lt;span style="color:#54b1c7"&gt;=&lt;/span&gt;bbr
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;# 永久生效&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e5c07b"&gt;echo&lt;/span&gt; &lt;span style="color:#63c381"&gt;&amp;#34;net.core.default_qdisc=fq&amp;#34;&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;|&lt;/span&gt; sudo tee -a /etc/sysctl.conf
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e5c07b"&gt;echo&lt;/span&gt; &lt;span style="color:#63c381"&gt;&amp;#34;net.ipv4.tcp_congestion_control=bbr&amp;#34;&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;|&lt;/span&gt; sudo tee -a /etc/sysctl.conf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="本章小结"&gt;本章小结&lt;/h2&gt;
&lt;p&gt;本章我们学习了网络优化的核心知识：&lt;/p&gt;</description></item><item><title>第79章：故障排查方法论</title><link>https://before80.github.io/prgms/linux/troubleshooting/Chapter-79-Troubleshooting/</link><pubDate>Tue, 24 Mar 2026 13:18:28 +0800</pubDate><guid>https://before80.github.io/prgms/linux/troubleshooting/Chapter-79-Troubleshooting/</guid><description>&lt;h1 id="第七十九章故障排查方法论"&gt;第七十九章：故障排查方法论&lt;/h1&gt;
&lt;h2 id="791-排查流程"&gt;79.1 排查流程&lt;/h2&gt;
&lt;h3 id="系统化排查方法"&gt;系统化排查方法&lt;/h3&gt;
&lt;p&gt;故障排查就像医生看病，需要&amp;quot;望闻问切&amp;quot;：&lt;/p&gt;
&lt;pre class="mermaid"&gt;graph LR
 A[收集信息] --&amp;gt; B[分析问题]
 B --&amp;gt; C[定位原因]
 C --&amp;gt; D[解决问题]
 D --&amp;gt; E[验证修复]
 E --&amp;gt; F[总结记录]&lt;/pre&gt;
&lt;h3 id="排查口诀"&gt;排查口诀&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;一看二问三动手，四查五记六复查&amp;rdquo;&lt;/p&gt;</description></item><item><title>附录 A VS Code 插件推荐</title><link>https://before80.github.io/prgms/Js/frameworks/vue3/Appendix-A-VSCode-Plugins/</link><pubDate>Wed, 25 Mar 2026 12:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/vue3/Appendix-A-VSCode-Plugins/</guid><description>&lt;h1 id="附录-a-vs-code-插件推荐"&gt;附录 A VS Code 插件推荐&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;VS Code 是 Vue 3 开发的首选编辑器，而插件是 VS Code 的灵魂。这一章我们整理了 Vue 3 开发中必备的、实用的、锦上添花的各类插件，让你的开发效率更上一层楼。&lt;/p&gt;</description></item><item><title>附录 B Chrome DevTools 调试技巧</title><link>https://before80.github.io/prgms/Js/frameworks/vue3/Appendix-B-DevTools/</link><pubDate>Wed, 25 Mar 2026 12:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/vue3/Appendix-B-DevTools/</guid><description>&lt;h1 id="附录-b-chrome-devtools-调试技巧"&gt;附录 B Chrome DevTools 调试技巧&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;Chrome DevTools 是前端开发者的&amp;quot;瑞士军刀&amp;quot;。对于 Vue 开发者来说，它不仅仅是普通的浏览器调试工具——配合 Vue DevTools 插件，DevTools 能成为 Vue 应用的&amp;quot;X光机&amp;quot;。这一章我们系统介绍 Chrome DevTools 的核心面板和调试技巧，让你在调试 Vue 应用时事半功倍。&lt;/p&gt;</description></item><item><title>附录 C 常用命令速查</title><link>https://before80.github.io/prgms/Js/frameworks/vue3/Appendix-C-Commands/</link><pubDate>Wed, 25 Mar 2026 12:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/vue3/Appendix-C-Commands/</guid><description>&lt;h1 id="附录-c-常用命令速查"&gt;附录 C 常用命令速查&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;磨刀不误砍柴工。Vue 3 开发涉及很多工具——Vite、npm/pnpm、Git、Vue Router、Pinia 等。每个工具都有一套自己的命令，靠脑子记肯定记不住。这一章把最常用的命令整理成速查表，方便随时查阅。&lt;/p&gt;</description></item><item><title>附录 D 术语表</title><link>https://before80.github.io/prgms/Js/frameworks/vue3/Appendix-D-Glossary/</link><pubDate>Wed, 25 Mar 2026 12:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/vue3/Appendix-D-Glossary/</guid><description>&lt;h1 id="附录-d-术语表"&gt;附录 D 术语表&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;Vue 3 的文档、教程和社区讨论里充满了各种专业术语。对于新手来说，这些术语就像一座座小山，爬过一座还有一座。这一章把 Vue 3 相关的核心术语整理成中英对照表，配上简洁的解释，让你从此不再迷茫。&lt;/p&gt;</description></item><item><title>附录 E 学习资源推荐</title><link>https://before80.github.io/prgms/Js/frameworks/vue3/Appendix-E-Resources/</link><pubDate>Wed, 25 Mar 2026 12:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/frameworks/vue3/Appendix-E-Resources/</guid><description>&lt;h1 id="附录-e-学习资源推荐"&gt;附录 E 学习资源推荐&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;学无止境。Vue 3 的世界很大，这本书只是入门。本章整理了 Vue 官方文档、优质书籍、开源项目、社区博客、视频课程等学习资源，助你在 Vue 之路上走得更远。&lt;/p&gt;</description></item><item><title/><link>https://before80.github.io/prgms/Cpp/basic/Chapter-35-Coding-Standards/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://before80.github.io/prgms/Cpp/basic/Chapter-35-Coding-Standards/</guid><description>&lt;p&gt;title = &amp;ldquo;第35章 编码规范——程序员的&amp;rsquo;交通规则&amp;rsquo;&amp;rdquo;
weight = 350
date = &amp;ldquo;2026-03-29T21:03:00+08:00&amp;rdquo;
type = &amp;ldquo;docs&amp;rdquo;
description = &amp;quot;&amp;quot;
isCJKLanguage = true
draft = false&lt;/p&gt;
&lt;p&gt;+++&lt;/p&gt;
&lt;h1 id="第35章-编码规范程序员的交通规则"&gt;第35章 编码规范——程序员的&amp;quot;交通规则&amp;quot;&lt;/h1&gt;
&lt;p&gt;想象一下，如果你开车上路，所有的车都不靠右行驶、不打转向灯、红灯直接闯过去——那将是一场灾难。代码世界也是如此。如果没有一套大家共同遵守的编码规范，团队协作就像一群人在没有红绿灯的十字路口&amp;quot;自由发挥&amp;quot;，结局往往是代码&amp;quot;车祸现场&amp;quot;。&lt;/p&gt;</description></item></channel></rss>