<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Mermaid on Liangweidong's blog</title><link>https://liangweidonggood.github.io/tags/mermaid/</link><description>Recent content in Mermaid on Liangweidong's blog</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Fri, 15 May 2015 00:00:00 +0800</lastBuildDate><atom:link href="https://liangweidonggood.github.io/tags/mermaid/index.xml" rel="self" type="application/rss+xml"/><item><title>Mermaid 与 PlantUML 类图：从 Markdown 画 UML</title><link>https://liangweidonggood.github.io/p/mermaid-plantuml-lei-tu-2015/</link><pubDate>Fri, 15 May 2015 00:00:00 +0800</pubDate><guid>https://liangweidonggood.github.io/p/mermaid-plantuml-lei-tu-2015/</guid><description>&lt;img src="https://liangweidonggood.github.io/p/mermaid-plantuml-lei-tu-2015/image/cover.jpg" alt="Featured image of post Mermaid 与 PlantUML 类图：从 Markdown 画 UML" /&gt;&lt;h2 id="为什么用-markdown-画-uml"&gt;为什么用 Markdown 画 UML
&lt;/h2&gt;&lt;p&gt;UML 工具（Enterprise Architect、StarUML、Visio）的痛点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;商业授权贵&lt;/li&gt;
&lt;li&gt;团队协作要共享文件&lt;/li&gt;
&lt;li&gt;改一处要打开 GUI 拖拽&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;文本描述 UML&lt;/strong&gt; 的方案：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Mermaid&lt;/strong&gt;：2014 年起，GitHub 原生支持，类图/时序图/流程图 10+ 种&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PlantUML&lt;/strong&gt;：2009 年起，Java 实现，UML 2.5 全覆盖，扩展性最强&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="mermaid"&gt;Mermaid
&lt;/h2&gt;&lt;h3 id="类图基础"&gt;类图基础
&lt;/h3&gt;&lt;pre class="mermaid" style="visibility:hidden"&gt;classDiagram
 Animal &lt;|-- Person
 Person &lt;|.. Man&lt;/pre&gt;&lt;h3 id="类图语法"&gt;类图语法
&lt;/h3&gt;&lt;pre class="mermaid" style="visibility:hidden"&gt;classDiagram
 class Animal {
 +String name
 +int age
 +eat() void
 -breathe() void
 }
 class Person {
 +String id
 +think() void
 }
 class Man {
 +work() void
 }
 Animal &lt;|-- Person // 继承（实心空心三角箭头）
 Person &lt;|.. Man // 实现（虚线空心三角箭头）&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;&amp;lt;|--&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;继承（extends）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;&amp;lt;|\..&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;实现（implements）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;*--&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;组合（Composition）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;o--&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;聚合（Aggregation）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;--&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;关联（Association）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;..&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;依赖（Dependency）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&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;..&lt;/code&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;pre class="mermaid" style="visibility:hidden"&gt;sequenceDiagram
 participant U as User
 participant A as App
 participant S as Server
 U-&gt;&gt;A: 点击登录
 A-&gt;&gt;S: POST /login {user, pass}
 S--&gt;&gt;A: 200 {token}
 A--&gt;&gt;U: 跳转到首页&lt;/pre&gt;&lt;h3 id="流程图"&gt;流程图
&lt;/h3&gt;&lt;pre class="mermaid" style="visibility:hidden"&gt;flowchart TD
 A[开始] --&gt; B{是否登录}
 B -- 是 --&gt; C[首页]
 B -- 否 --&gt; D[登录页]
 D --&gt; E[提交登录]
 E --&gt; F{验证成功}
 F -- 是 --&gt; C
 F -- 否 --&gt; G[错误提示]
 G --&gt; D&lt;/pre&gt;&lt;h3 id="状态图"&gt;状态图
&lt;/h3&gt;&lt;pre class="mermaid" style="visibility:hidden"&gt;stateDiagram-v2
 [*] --&gt; 待支付
 待支付 --&gt; 已支付: 付款
 已支付 --&gt; 已发货: 发货
 已发货 --&gt; 已签收: 签收
 已签收 --&gt; [*]
 待支付 --&gt; 已取消: 取消
 已取消 --&gt; [*]&lt;/pre&gt;&lt;h3 id="er-图"&gt;ER 图
&lt;/h3&gt;&lt;pre class="mermaid" style="visibility:hidden"&gt;erDiagram
 USER ||--o{ ORDER : places
 USER {
 int id PK
 string name
 string email
 }
 ORDER {
 int id PK
 int user_id FK
 date created_at
 }&lt;/pre&gt;&lt;h3 id="github-原生支持"&gt;GitHub 原生支持
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gh"&gt;# README.md
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;\`\`\`mermaid
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;classDiagram
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Animal &amp;lt;|-- Person
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&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;GitHub 会自动渲染成 SVG。&lt;/p&gt;
&lt;h3 id="idea-集成"&gt;IDEA 集成
&lt;/h3&gt;&lt;p&gt;IDEA Ultimate 内置 Mermaid 预览：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;.md&lt;/code&gt; 文件里的 &lt;code&gt;mermaid&lt;/code&gt; 代码块&lt;/li&gt;
&lt;li&gt;或装 &lt;strong&gt;Mermaid 插件&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="vscode-集成"&gt;VSCode 集成
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;装 &lt;strong&gt;Markdown Preview Mermaid Support&lt;/strong&gt; 插件&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Ctrl + Shift + V&lt;/code&gt; 预览&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="plantuml"&gt;PlantUML
&lt;/h2&gt;&lt;p&gt;PlantUML 比 Mermaid 功能强，覆盖 UML 2.5 全套，扩展性更好。&lt;/p&gt;
&lt;h3 id="安装"&gt;安装
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Java JRE 8+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;java -jar plantuml.jar file.puml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# VSCode 插件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# PlantUML (by jebbs)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# IDEA 插件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# PlantUML integration&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 class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@startuml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;class Animal {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; +name: String
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; +age: int
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; +eat(): void
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -breathe(): void
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;class Person {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; +id: String
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; +think(): void
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;class Man {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; +work(): void
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Animal &amp;lt;|-- Person
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Person &amp;lt;|.. Man
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@enduml
&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 class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@startuml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;A &amp;lt;|-- B &amp;#39; 继承
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;C &amp;lt;|.. D &amp;#39; 实现
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;E *-- F &amp;#39; 组合
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;G o-- H &amp;#39; 聚合
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;I --&amp;gt; J &amp;#39; 关联
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;K ..&amp;gt; L &amp;#39; 依赖
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@enduml
&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="时序图-1"&gt;时序图
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@startuml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;actor User
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;participant &amp;#34;App&amp;#34; as A
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;participant &amp;#34;Server&amp;#34; as S
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;User -&amp;gt; A: 点击登录
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;A -&amp;gt; S: POST /login
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;S --&amp;gt; A: 200 {token}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;A --&amp;gt; User: 跳转到首页
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@enduml
&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 class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@startuml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;(*) --&amp;gt; &amp;#34;开始&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;if &amp;#34;已登录&amp;#34; then
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --&amp;gt;[是] &amp;#34;首页&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --&amp;gt; (*)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;else
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --&amp;gt;[否] &amp;#34;登录页&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --&amp;gt; &amp;#34;提交登录&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if &amp;#34;验证成功&amp;#34; then
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --&amp;gt;[是] &amp;#34;首页&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; else
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --&amp;gt;[否] &amp;#34;错误提示&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; endif
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;endif
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@enduml
&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="状态图-1"&gt;状态图
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@startuml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[*] --&amp;gt; 待支付
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;待支付 --&amp;gt; 已支付: 付款
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;已支付 --&amp;gt; 已发货: 发货
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;已发货 --&amp;gt; 已签收: 签收
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;已签收 --&amp;gt; [*]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;待支付 --&amp;gt; 已取消: 取消
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@enduml
&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 class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;startuml&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Frontend&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Web&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;App&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Mobile&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;App&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Backend&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;API&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Gateway&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Auth&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Service&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Order&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Service&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Web&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;App&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;API&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Gateway&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Mobile&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;App&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;API&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Gateway&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;API&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Gateway&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Auth&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Service&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;API&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Gateway&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Order&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Service&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;enduml&lt;/span&gt;&lt;span class="w"&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 class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@startuml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;node &amp;#34;Web Server&amp;#34; {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; [Nginx]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; [App]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;node &amp;#34;Database&amp;#34; {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; [MySQL]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; [Redis]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[Nginx] --&amp;gt; [App]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[App] --&amp;gt; [MySQL]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[App] --&amp;gt; [Redis]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@enduml
&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 class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@startuml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;!theme plain
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;skinparam classAttributeIconSize 0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;skinparam classFontSize 14
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;skinparam classBackgroundColor #F0F0F0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;class Foo {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; +method()
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@enduml
&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="plantuml-server"&gt;PlantUML Server
&lt;/h3&gt;&lt;p&gt;如果不想装 Java，可以用自己的 PlantUML Server：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 官方&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker run -d -p 8080:8080 plantuml/plantuml-server
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 用法&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl &lt;span class="s2"&gt;&amp;#34;http://localhost:8080/svg/~1uml@somefile&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;p&gt;或者用公共 PlantUML 服务：&lt;a class="link" href="https://www.plantuml.com/plantuml/uml/" target="_blank" rel="noopener"
 &gt;https://www.plantuml.com/plantuml/uml/&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="mermaid-vs-plantuml-对比"&gt;Mermaid vs PlantUML 对比
&lt;/h2&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;维度&lt;/th&gt;
					&lt;th&gt;Mermaid&lt;/th&gt;
					&lt;th&gt;PlantUML&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;渲染&lt;/td&gt;
					&lt;td&gt;JS（前端）&lt;/td&gt;
					&lt;td&gt;Java&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;GitHub 原生&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;10+&lt;/td&gt;
					&lt;td&gt;UML 2.5 全&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;多&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;性能&lt;/td&gt;
					&lt;td&gt;较慢（前端渲染）&lt;/td&gt;
					&lt;td&gt;快（Java 服务端）&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;SVG&lt;/td&gt;
					&lt;td&gt;SVG/PNG/PDF&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;选 Mermaid 的场景&lt;/strong&gt;：团队用 GitHub Wiki / README、简单图为主、JS 渲染方便
&lt;strong&gt;选 PlantUML 的场景&lt;/strong&gt;：需要严格 UML、复杂时序图、企业级文档&lt;/p&gt;
&lt;h2 id="工程化"&gt;工程化
&lt;/h2&gt;&lt;h3 id="文档生成器"&gt;文档生成器
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;docsify&lt;/strong&gt; + Mermaid 插件&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GitBook&lt;/strong&gt; + Mermaid 插件&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VuePress&lt;/strong&gt; + Mermaid 插件&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Docusaurus&lt;/strong&gt; + Mermaid 插件（v3 内置）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="cicd-集成"&gt;CI/CD 集成
&lt;/h3&gt;&lt;p&gt;GitHub Action 自动校验 Mermaid 语法：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# .github/workflows/mermaid-check.yml&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Mermaid Check&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="l"&gt;pull_request]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;jobs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;check&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;runs-on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ubuntu-latest&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;uses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;actions/checkout@v3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;uses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;neenjaw/extract-mermaid-blocks-action@v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;with&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;output-folder&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;mermaid-blocks&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;uses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nicolegordon/mermaid-validate-action@v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;with&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;mermaid-blocks&amp;#39;&lt;/span&gt;&lt;span class="w"&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="ide-实时预览"&gt;IDE 实时预览
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;VSCode + Markdown Preview Enhanced&lt;/strong&gt;：实时预览 Mermaid&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IDEA + PlantUML Integration&lt;/strong&gt;：右键 PlantUML 文件 → Show Preview&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Obsidian&lt;/strong&gt;：原生支持 Mermaid&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="下一步"&gt;下一步
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;想把类图转成代码，看 JetBrains MPS、UML Designer&lt;/li&gt;
&lt;li&gt;想要画系统架构图，看 2017-08-15《iOS 应用开发与证书管理》中架构图部分&lt;/li&gt;
&lt;li&gt;想要画 UI 原型，看 2014-05-15《Axure 产品原型设计》&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="参考资料"&gt;参考资料
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Mermaid 官方：https://mermaid.js.org/&lt;/li&gt;
&lt;li&gt;Mermaid Live Editor：https://mermaid.live/&lt;/li&gt;
&lt;li&gt;PlantUML 官方：https://plantuml.com/&lt;/li&gt;
&lt;li&gt;PlantUML 中文文档：https://plantuml.com/zh/&lt;/li&gt;
&lt;li&gt;PlantUML Server：https://github.com/plantuml/plantuml-server&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="2024-视角从-mermaidplantuml-到-ai-画图--架构即代码"&gt;2024+ 视角（从 Mermaid/PlantUML 到 AI 画图 + 架构即代码）
&lt;/h2&gt;&lt;p&gt;2015 年写 Mermaid/PlantUML 时，文本画图还是&amp;quot;新事物&amp;quot;；到 2024-2026 年，这两套已经全面成为行业标准，并出现明显分层：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;GitHub 原生支持的扩散&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;Mermaid 仍是 GitHub/GitLab 默认渲染引擎&lt;/li&gt;
&lt;li&gt;GitLab 15+ 也支持 PlantUML 渲染&lt;/li&gt;
&lt;li&gt;Notion、飞书、语雀等均原生支持 Mermaid&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mermaid v10/v11 增强&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;新增 &lt;strong&gt;C4 插件&lt;/strong&gt;（Context/Container/Component）—— 配合 Structurizr 简化架构图&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Git graph&lt;/strong&gt; 已成为最常被复制的图类型&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Architecture diagram&lt;/strong&gt;（v10.6+）支持服务、数据库、队列等图标&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PlantUML 的 C4-PlantUML 扩展&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;第三方 C4-PlantUML 让 PlantUML 也能画 C4&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mermaid 渲染 C4 性能 vs PlantUML 渲染 C4 性能&lt;/strong&gt;：复杂 C4 图 Mermaid 仍偏慢&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI 画图崛起&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Mermaid Chart + AI&lt;/strong&gt;（自动从文字生成图）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Eraser.io / Whimsical AI&lt;/strong&gt;（手绘草图转 UML）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GitHub Copilot Workspace&lt;/strong&gt; 支持从 issue 描述自动生成架构图&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Structurizr DSL&lt;/strong&gt; 全面胜出&amp;quot;画架构图&amp;quot;场景：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;C4 模型 + Structurizr DSL&lt;/strong&gt;（Java 生态）+ &lt;strong&gt;Structurizr Lite&lt;/strong&gt;（本地预览）已是画系统架构的&lt;strong&gt;事实标准&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;替代品：&lt;strong&gt;Mermaid + C4 插件&lt;/strong&gt;（轻量）、&lt;strong&gt;draw.io / diagrams.net&lt;/strong&gt;（GUI 派）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;文档工具集成&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Docusaurus&lt;/strong&gt;（v3+）内置 Mermaid&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hugo&lt;/strong&gt; + &lt;strong&gt;Mermaid 短代码&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VitePress / Astro&lt;/strong&gt; 都默认支持 Mermaid&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;新工具涌现&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Excalidraw&lt;/strong&gt;（手绘风格，团队协作）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;tldraw&lt;/strong&gt;（白板式画架构图）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IcePanel&lt;/strong&gt;（C4 互动式）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ilograph&lt;/strong&gt;（多视角架构图）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PlantUML 的&amp;quot;危机&amp;quot;&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;公共 PlantUML Server 经常因负载限速&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;私有 PlantUML Server&lt;/strong&gt; + &lt;strong&gt;Asciidoctor Diagram&lt;/strong&gt; 仍是企业内部方案&lt;/li&gt;
&lt;li&gt;一些企业转向 &lt;strong&gt;D2&lt;/strong&gt;（Terrastruct 出品，文本画图新秀，go 生态）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;选型更新（2024 视角）&lt;/strong&gt;：&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;README/Wiki 简单图&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;Mermaid&lt;/strong&gt;（GitHub 原生）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;严格 UML（时序/状态/类）&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;PlantUML&lt;/strong&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;系统架构 C4&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;Structurizr DSL&lt;/strong&gt;（首选） / Mermaid C4 插件&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;手绘风格团队讨论&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;Excalidraw&lt;/strong&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;互动式架构&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;IcePanel / Ilograph&lt;/strong&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;AI 辅助&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;Mermaid Chart AI / Eraser AI&lt;/strong&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;复杂企业文档&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;PlantUML Server + Asciidoctor&lt;/strong&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;2015 年这篇的&amp;quot;Mermaid/PlantUML 对比&amp;quot;框架&lt;strong&gt;至今成立&lt;/strong&gt;——GitHub 原生选 Mermaid，企业级严格 UML 选 PlantUML。&lt;strong&gt;变化的是 C4 模型成为架构图事实标准、AI 辅助画图崛起、私有 PlantUML Server 成为企业首选&lt;/strong&gt;。&lt;/p&gt;</description></item><item><title>Windows 终端与 Navicat 工具链：cmd / Git Bash / Markdown / Navicat</title><link>https://liangweidonggood.github.io/p/windows-zhong-duan-navicat-gong-ju-lian/</link><pubDate>Sun, 15 Sep 2013 00:00:00 +0800</pubDate><guid>https://liangweidonggood.github.io/p/windows-zhong-duan-navicat-gong-ju-lian/</guid><description>&lt;img src="https://liangweidonggood.github.io/p/windows-zhong-duan-navicat-gong-ju-lian/image/cover.jpg" alt="Featured image of post Windows 终端与 Navicat 工具链：cmd / Git Bash / Markdown / Navicat" /&gt;&lt;h2 id="一为什么-windows-仍需要终端三件套"&gt;一、为什么 Windows 仍需要&amp;quot;终端三件套&amp;quot;
&lt;/h2&gt;&lt;p&gt;2013 年的 Windows 8 时代，PowerShell 3.0 已经成熟，但&lt;strong&gt;日常开发还是 cmd + Git Bash + PowerShell 三选一&lt;/strong&gt;。本文整理 cmd / Git Bash / PowerShell 的常用配置，外加 &lt;strong&gt;Markdown 编辑&lt;/strong&gt;、&lt;strong&gt;Mermaid 图表&lt;/strong&gt;、&lt;strong&gt;Navicat 数据库工具&lt;/strong&gt;这三条&amp;quot;终端之外的工具链&amp;quot;。&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;阅读建议&lt;/strong&gt;：本文不重复 &amp;ldquo;PowerShell 基础命令&amp;rdquo; 类的入门内容，重点在&lt;strong&gt;配置 + 排错&lt;/strong&gt;。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="二cmd被低估的老古董"&gt;二、cmd：被低估的&amp;quot;老古董&amp;quot;
&lt;/h2&gt;&lt;h3 id="21-时间显示到秒"&gt;2.1 时间显示到秒
&lt;/h3&gt;&lt;p&gt;cmd 默认 &lt;code&gt;time /t&lt;/code&gt; 只显示 &lt;code&gt;HH:MM&lt;/code&gt;，要看到秒：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bat" data-lang="bat"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;: 系统变量法&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;%time%&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;: 强制格式 HH:MM:SS&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="k"&gt;/f&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;tokens=2 delims=.&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;%%&lt;/span&gt;a &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;echo &lt;/span&gt;&lt;span class="nv"&gt;%time%&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nv"&gt;ms&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="se"&gt;%%&lt;/span&gt;a
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;%time:~0,8%&lt;/span&gt;.&lt;span class="nv"&gt;%ms%&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;code&gt;prompt&lt;/code&gt;&lt;/strong&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bat" data-lang="bat"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;prompt&lt;/span&gt; $T $P$G
&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;12:34:56.78 C:\&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;h3 id="22-常用快捷键"&gt;2.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;F7&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;显示命令历史&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;F8&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;搜索历史&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;Tab&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;路径自动补全（Win 7+）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;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;Ctrl+Insert&lt;/code&gt; / &lt;code&gt;Shift+Insert&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;复制 / 粘贴（Win 10+）&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="23-中文编码"&gt;2.3 中文编码
&lt;/h3&gt;&lt;p&gt;cmd 默认 GBK。&lt;code&gt;chcp 65001&lt;/code&gt; 切到 UTF-8，但&lt;strong&gt;部分老 exe 还会乱码&lt;/strong&gt;——这是 cmd 一直存在的老问题。2013 时代&lt;strong&gt;推荐用 cmder / ConEmu 替代 cmd&lt;/strong&gt;（Unicode + 多 Tab）。&lt;/p&gt;
&lt;h3 id="24-提升到管理员"&gt;2.4 提升到管理员
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;span class="lnt"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bat" data-lang="bat"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;: 单次管理员&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;runas /user:administrator cmd
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;: 写脚本时&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;net session &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;nul &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;amp;&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;||&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;echo&lt;/span&gt; 需要管理员权限！
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; powershell start-process cmd -ArgumentList &lt;span class="s2"&gt;&amp;#34;/c &lt;/span&gt;&lt;span class="nv"&gt;%~f0&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; -Verb runas
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;exit&lt;/span&gt; /b
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="三git-bashwindows-上最像-linux-的终端"&gt;三、Git Bash：Windows 上最像 Linux 的终端
&lt;/h2&gt;&lt;h3 id="31-安装"&gt;3.1 安装
&lt;/h3&gt;&lt;p&gt;安装 &lt;code&gt;Git for Windows&lt;/code&gt;（&lt;code&gt;https://git-scm.com/download/win&lt;/code&gt;）时默认带 Git Bash。&lt;strong&gt;关键选项&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Use Git from the Windows Command Prompt&lt;/code&gt;：勾选（让 cmd 也能用 git）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Checkout Windows-style, commit Unix-style line endings&lt;/code&gt;：&lt;strong&gt;推荐&lt;/strong&gt;（文件保留 CRLF，提交时自动转 LF）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Use Windows' default console window&lt;/code&gt;：默认即可，&lt;strong&gt;追求美化用 Windows Terminal / cmder&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="32-中文乱码"&gt;3.2 中文乱码
&lt;/h3&gt;&lt;p&gt;Git Bash 早期（&amp;lt;= 2.10）&lt;strong&gt;ls 中文文件名乱码&lt;/strong&gt;。两种解决：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;span class="lnt"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 方案 1：让 Git 输出 UTF-8&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git config --global core.quotepath &lt;span class="nb"&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git config --global gui.encoding utf-8
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git config --global i18n.commit.encoding utf-8
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git config --global i18n.logoutputencoding utf-8
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 方案 2：终端本身设 UTF-8&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;LANG&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;en_US.UTF-8
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;LC_ALL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;en_US.UTF-8
&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;git config --global core.quotepath false&lt;/code&gt; 这一条&lt;strong&gt;最关键&lt;/strong&gt;——&lt;code&gt;ls&lt;/code&gt; 看到的中文文件名会正常显示。&lt;/p&gt;
&lt;h3 id="33-常用别名bashrc"&gt;3.3 常用别名（&lt;code&gt;~/.bashrc&lt;/code&gt;）
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;alias&lt;/span&gt; &lt;span class="nv"&gt;ll&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;ls -la&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;alias&lt;/span&gt; &lt;span class="nv"&gt;gst&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;git status&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;alias&lt;/span&gt; &lt;span class="nv"&gt;gco&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;git checkout&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;alias&lt;/span&gt; &lt;span class="nv"&gt;gbr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;git branch&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;alias&lt;/span&gt; &lt;span class="nv"&gt;glog&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;git log --oneline --graph --decorate --all -20&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;alias&lt;/span&gt; &lt;span class="nv"&gt;gp&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;git push&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;alias&lt;/span&gt; &lt;span class="nv"&gt;gpl&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;git pull&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;alias&lt;/span&gt; &lt;span class="nv"&gt;vim&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;winpty mvim&amp;#39;&lt;/span&gt; &lt;span class="c1"&gt;# Windows 下 vim 经常需要 winpty&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="34-winpty-与交互式程序"&gt;3.4 winpty 与交互式程序
&lt;/h3&gt;&lt;p&gt;Git Bash 调用 Windows 原生 &lt;code&gt;python.exe&lt;/code&gt;、&lt;code&gt;mysql.exe&lt;/code&gt; 等&lt;strong&gt;交互式程序会丢失方向键/历史&lt;/strong&gt;。解决：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;winpty python &lt;span class="c1"&gt;# 包装一层&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 或写别名&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;alias&lt;/span&gt; &lt;span class="nv"&gt;python&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;winpty python&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;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;2025 时代&lt;/strong&gt;：微软推出 &lt;strong&gt;Windows Terminal + WSL&lt;/strong&gt; 才是真&amp;quot;现代终端&amp;quot;——但 2013 时代 Git Bash 已经是最佳选择。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="四markdown-工具链"&gt;四、Markdown 工具链
&lt;/h2&gt;&lt;h3 id="41-markdown-语法速查"&gt;4.1 Markdown 语法速查
&lt;/h3&gt;&lt;p&gt;Markdown 在 2013 年已经开始从极客玩具走向主流。&lt;strong&gt;三个层次的语法&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;基础&lt;/strong&gt;（CommonMark）：标题、列表、引用、链接、图片、代码块&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GFM&lt;/strong&gt;（GitHub Flavored）：表格、删除线、任务列表、&lt;code&gt;```&lt;/code&gt; 代码围栏&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;扩展&lt;/strong&gt;：数学公式（&lt;code&gt;$...$&lt;/code&gt;）、Mermaid 图表、PlantUML、目录（TOC）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="42-数学公式"&gt;4.2 数学公式
&lt;/h3&gt;&lt;p&gt;VSCode / Typora / Obsidian 都支持 KaTeX 风格的数学公式：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;行内公式：爱因斯坦 $E=mc^2$
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;行间公式：
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;\int_0^{\infty} e^{-x^2} dx = \frac{\sqrt{\pi}}{2}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&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;
&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;$\sum$&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;$\sum$&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;求和&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;$\prod$&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;$\prod$&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;N 元乘积&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;$\int$&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;$\int$&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;积分&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;$\partial$&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;$\partial$&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;偏导&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;$\nabla$&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;$\nabla$&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;梯度&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;$\alpha$&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;$\alpha$&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;希腊字母 alpha&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;$\leq$ / $\geq$&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;$\leq$&lt;/code&gt; / &lt;code&gt;$\geq$&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;小于等于 / 大于等于&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;$\in$&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;$\in$&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;属于&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;$\emptyset$&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;$\emptyset$&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;空集&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;$\forall$&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;$\forall$&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;任意&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;$\exists$&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;$\exists$&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;存在&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="43-mermaid-图表"&gt;4.3 Mermaid 图表
&lt;/h3&gt;&lt;p&gt;Mermaid 2014 年由 Knut Sveidqvist 开源，&lt;strong&gt;用纯文本写流程图、时序图、类图、状态图、ER 图&lt;/strong&gt;。在 GitHub README / VSCode / Typora 里都原生支持。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;流程图&lt;/strong&gt;：&lt;/p&gt;
&lt;pre class="mermaid" style="visibility:hidden"&gt;graph TD
 A[用户] --&gt; B{已登录?}
 B -- 是 --&gt; C[展示首页]
 B -- 否 --&gt; D[跳转登录]
 D --&gt; E[输入密码]
 E --&gt; F{验证通过?}
 F -- 是 --&gt; C
 F -- 否 --&gt; G[提示错误]&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;饼图&lt;/strong&gt;：&lt;/p&gt;
&lt;pre class="mermaid" style="visibility:hidden"&gt;pie
 title 浏览器份额
 "Chrome": 65
 "Safari": 19
 "Firefox": 7
 "Edge": 5
 "其他": 4&lt;/pre&gt;&lt;h3 id="44-类图uml"&gt;4.4 类图（UML）
&lt;/h3&gt;&lt;pre class="mermaid" style="visibility:hidden"&gt;classDiagram
 class Animal {
 +int age
 +String gender
 +isMammal()
 +mate()
 }
 class Duck {
 +String beakColor
 +swim()
 +quack()
 }
 class Fish {
 -int sizeInFeet
 -canEat()
 }
 Animal &lt;|-- Duck
 Animal &lt;|-- Fish&lt;/pre&gt;&lt;p&gt;6 种关系：&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;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;&lt;code&gt;&amp;lt;|--&lt;/code&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;code&gt;&amp;lt;|..&lt;/code&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;code&gt;*--&lt;/code&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;code&gt;o--&lt;/code&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;code&gt;--&amp;gt;&lt;/code&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;code&gt;..&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;使用关系&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="45-plantuml"&gt;4.5 PlantUML
&lt;/h3&gt;&lt;p&gt;PlantUML 2009 年开源，&lt;strong&gt;写 UML 还能保留 .puml 文本文件&lt;/strong&gt;——比 Visio 强在&amp;quot;可版本控制&amp;quot;。需要 &lt;code&gt;Graphviz&lt;/code&gt; 支持：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;plantuml 源文件目录：建议 D:\soft\Graphviz
&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;VSCode 装 &lt;code&gt;PlantUML&lt;/code&gt; 插件 + &lt;code&gt;jebbs/plantuml&lt;/code&gt; 即可一键预览。&lt;/p&gt;
&lt;h2 id="五navicat多数据库管理瑞士军刀"&gt;五、Navicat：多数据库管理瑞士军刀
&lt;/h2&gt;&lt;h3 id="51-定位"&gt;5.1 定位
&lt;/h3&gt;&lt;p&gt;Navicat Premium 是 PremiumSoft 公司开发的多数据库 GUI 工具，&lt;strong&gt;一个客户端同时支持&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MySQL、MariaDB&lt;/li&gt;
&lt;li&gt;PostgreSQL、SQL Server、Oracle&lt;/li&gt;
&lt;li&gt;SQLite、MongoDB&lt;/li&gt;
&lt;li&gt;Redis（早期版本，2020+ 才完善）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="52-连接配置"&gt;5.2 连接配置
&lt;/h3&gt;&lt;p&gt;新建连接，&lt;strong&gt;关键选项&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Host&lt;/code&gt;：MySQL 默认 3306，PostgreSQL 默认 5432&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SSH&lt;/code&gt; 通道：先 SSH 到堡垒机再连数据库（生产环境必备）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SSL&lt;/code&gt;：MySQL 5.7+ 强制要求&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Advanced → Connection timeout&lt;/code&gt;：默认 30s，建议 60s&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Advanced → Keepalive interval&lt;/code&gt;：120s（防止隧道中断）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="53-常用功能"&gt;5.3 常用功能
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;数据传输&lt;/strong&gt;：跨库同步（MySQL → PostgreSQL 异构）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;数据同步&lt;/strong&gt;：表级双向同步&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;结构同步&lt;/strong&gt;：表结构差异对比 → 自动生成 ALTER&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;查询构建器&lt;/strong&gt;：可视化 SELECT，自动生成 SQL&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;数据建模&lt;/strong&gt;：&lt;strong&gt;画 ER 图&lt;/strong&gt;（替代 PowerDesigner 的核心功能）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;计划任务&lt;/strong&gt;：定时备份、转储&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="54-备份与还原"&gt;5.4 备份与还原
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;自动运行 → 新建批处理作业&lt;/code&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;数据库右键 → &lt;code&gt;转储 SQL 文件&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;调度 → &lt;code&gt;每日 02:00&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Windows 任务计划程序配合调用&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="55-与-powerdesigner-协作"&gt;5.5 与 PowerDesigner 协作
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;PowerDesigner&lt;/strong&gt; 做&lt;strong&gt;概念模型 (CDM) → 物理模型 (PDM) → 建库 SQL&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Navicat&lt;/strong&gt; 做&lt;strong&gt;日常管理 + 数据同步 + 报表&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

 &lt;blockquote&gt;
 &lt;p&gt;详见 &lt;strong&gt;[2014-10-15 设计建模工具：Axure / PowerDesigner / VSCode]&lt;/strong&gt;&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="六powerdesigner-16x-速查"&gt;六、PowerDesigner 16.x 速查
&lt;/h2&gt;&lt;h3 id="61-安装"&gt;6.1 安装
&lt;/h3&gt;&lt;p&gt;PowerDesigner 16.5/16.6 是 SAP 时代的最后一版。安装路径默认 &lt;code&gt;C:\Program Files\Sybase\PowerDesigner 16&lt;/code&gt;。&lt;strong&gt;注意&lt;/strong&gt;：16.7 是民间称呼，实际是 16.6 升级包。&lt;/p&gt;
&lt;h3 id="62-名称转注释"&gt;6.2 名称转注释
&lt;/h3&gt;&lt;p&gt;PD 默认表名/字段名是**逻辑名（Name）+ 物理名（Code）**双轨。批量把 Name 复制到 Comment：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Tools → Execute Commands → Edit/Run Scripts
&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 class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;#39; 把所有实体的 Name 复制到 Comment
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;For Each obj In ActiveModel.Entities
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; obj.Comment = obj.Name
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; For Each col In obj.Columns
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; col.Comment = col.Name
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Next
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Next
&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="63-全局通用字段"&gt;6.3 全局通用字段
&lt;/h3&gt;&lt;p&gt;每个表都加 &lt;code&gt;create_by / create_time / update_by / update_time / sys_org_code&lt;/code&gt; 字段。&lt;strong&gt;用 PD 的 Global Field 模板&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Tools → Model Options → Naming Convention → Default Field&lt;/code&gt;，新增：&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;th&gt;注释&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;create_by&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;varchar(50)&lt;/td&gt;
					&lt;td&gt;创建人&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;create_time&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;datetime&lt;/td&gt;
					&lt;td&gt;创建时间&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;update_by&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;varchar(50)&lt;/td&gt;
					&lt;td&gt;更新人&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;update_time&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;datetime&lt;/td&gt;
					&lt;td&gt;更新时间&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;sys_org_code&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;varchar(64)&lt;/td&gt;
					&lt;td&gt;机构代码&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="64-mysql-80-关键字"&gt;6.4 MySQL 8.0 关键字
&lt;/h3&gt;&lt;p&gt;MySQL 8.0 大量新关键字（&lt;strong&gt;EMPTY、OFF、ZONE、PATH、OFFSET&lt;/strong&gt; 等）——&lt;strong&gt;字段名撞关键字会报错&lt;/strong&gt;。常用对策：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;字段加反引号 &lt;code&gt;`field`&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;改字段名（推荐）&lt;/li&gt;
&lt;li&gt;PD 导出时勾选 &lt;code&gt;Quote identifiers&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;完整关键字表见 MySQL 8.0 官方文档 &lt;code&gt;https://dev.mysql.com/doc/refman/8.0/en/keywords.html&lt;/code&gt;。&lt;/p&gt;
&lt;h2 id="七常见问题"&gt;七、常见问题
&lt;/h2&gt;&lt;h3 id="71-git-bash-启动慢"&gt;7.1 Git Bash 启动慢
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;~/.bashrc&lt;/code&gt; 加载太多东西会卡。&lt;strong&gt;用 &lt;code&gt;time bash -c &amp;quot;echo hello&amp;quot;&lt;/code&gt; 测试&lt;/strong&gt;，把慢的命令移到 &lt;code&gt;if [ -n &amp;quot;$PS1&amp;quot; ]&lt;/code&gt; 之后。&lt;/p&gt;
&lt;h3 id="72-cmd-中-utf-8-编码显示错乱"&gt;7.2 cmd 中 UTF-8 编码显示错乱
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;chcp 65001&lt;/code&gt; 后&lt;strong&gt;部分 exe 仍乱码&lt;/strong&gt;——是字体问题。cmd 标题右键 → 属性 → 字体 → &lt;code&gt;Consolas&lt;/code&gt; 或 &lt;code&gt;Lucida Console&lt;/code&gt;。&lt;/p&gt;
&lt;h3 id="73-navicat-连不上-mysql-80"&gt;7.3 Navicat 连不上 MySQL 8.0
&lt;/h3&gt;&lt;p&gt;MySQL 8.0 默认 &lt;code&gt;caching_sha2_password&lt;/code&gt; 鉴权插件，&lt;strong&gt;Navicat 11 之前不支持&lt;/strong&gt;。两种解决：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;-- 改成 mysql_native_password
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ALTER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;USER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;root&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;%&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IDENTIFIED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;WITH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mysql_native_password&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;BY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;password&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;或升级 Navicat 12+。&lt;/p&gt;
&lt;h3 id="74-mermaid-中文乱码"&gt;7.4 Mermaid 中文乱码
&lt;/h3&gt;&lt;p&gt;某些 Mermaid 版本&lt;strong&gt;类名有中文&lt;/strong&gt;会报错，用引号包起来：&lt;/p&gt;
&lt;pre class="mermaid" style="visibility:hidden"&gt;classDiagram
 class "用户" {
 +String 姓名
 +登录()
 }&lt;/pre&gt;&lt;h2 id="八下一步"&gt;八、下一步
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;想看 IDE 编码主战场：&lt;strong&gt;[2014-04-15 IntelliJ IDEA 全攻略]&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;想看数据库建模：&lt;strong&gt;[2014-10-15 设计建模工具：Axure / PowerDesigner / VSCode]&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;想看 Git 工作流：&lt;strong&gt;[2014-11-15 Git 与版本控制]&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;本文写于 2013 年，回看当时&lt;/strong&gt;：cmd 至今没被 Windows Terminal 完全替代，&lt;strong&gt;大量运维老脚本还在用 bat 写&lt;/strong&gt;；Navicat 至今仍是国产 DBA 的&amp;quot;事实第一选择&amp;quot;——&lt;strong&gt;这套工具的生命力超乎想象&lt;/strong&gt;。&lt;/p&gt;

 &lt;/blockquote&gt;</description></item></channel></rss>